#!/usr/bin/env ruby
# frozen_string_literal: true

# This will generate a test suite.
# Based on python-sha3's test suite.

FILES = [
  ['test/data/ShortMsgKAT_224.txt', 224],
  ['test/data/ShortMsgKAT_256.txt', 256],
  ['test/data/ShortMsgKAT_384.txt', 384],
  ['test/data/ShortMsgKAT_512.txt', 512],
  ['test/data/LongMsgKAT_224.txt', 224],
]

def generate
  puts %Q{
    # encoding: binary
    # This file generated by generate_tests.rb

    require 'test/unit'

    class KeccakTests < Test::Unit::TestCase
  }

  FILES.each do |path, hashlen|
    contents = File.read(path).split('Len = ')
    contents.each do |test|
      lines = test.split("\n")
      if !lines.empty? && lines[0] !~ /^#/
        length = lines[0].to_i
        if length % 8 == 0 && length != 0
          msg_raw = [lines[1].split(' = ').last].pack("H*")
          md = lines[2].split(' = ').last.downcase
          name = File.basename(path).split('.')[0]
          puts %Q{
            def test_#{name}_#{length}
              inst = Digest::Keccak.new(#{hashlen})
              inst.update(#{msg_raw.inspect})
              assert_equal #{md.inspect}, inst.hexdigest
            end
          }
        end
      end
    end
  end

  puts "end"
end

generate
