nilang 0.4.1

A scripting language interpreter for Advent of Code
Documentation
def generate_test_file(path, testing_function)
  golden_filenames = read_golden_files(path + '/golden')

  File.open(path + '/golden_tests.rs', 'w') do |file| 
    file.write(test_file_header())

    golden_filenames.each do |filename|
      test = create_test(path, filename, testing_function)

      file.write(test)
    end
  end
end

def read_golden_files(path)
  golden_filenames = []

  Dir.entries(path).each do |filename|
    next if filename == '.' || filename == '..' || !filename.end_with?('.golden')

    golden_filenames << filename.chomp('.golden')
  end

  golden_filenames
end

def test_file_header
"/*
  WARNING: DO NOT EDIT THIS FILE
  This file is generated programatically by golden_test_generator.rb
*/"
end

def create_test(path, filename, testing_function)
"
#[test]
fn #{filename}() {
  #{testing_function}(\"#{path}/golden/#{filename}.golden\")
}
"
end

generation_targets = [
  {
    path: './src/ir/tests',
    testing_function: 'super::test_golden_ir'
  },
  {
    path: './src/codegen/tests',
    testing_function: 'super::test_golden_bytecode'
  },
  {
    path: './src/runtime/tests',
    testing_function: 'super::test_golden_output'
  },
]

generation_targets.each do |target|
  generate_test_file(target[:path], target[:testing_function])
end