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