rubyx/test/mains/test_arm.rb
Torsten Rüger 1ee01622c3 Builtin is no more, final conversions done
All preloading where it needs to be
(some)tests for the preload
split compiler test
remembered binary tests (usually just run on travis)
2019-09-13 20:34:41 +03:00

73 lines
1.8 KiB
Ruby

require_relative 'helper'
module Mains
class TestArm < MiniTest::Test
@Qemu = "qemu-arm"
@Linker = "arm-linux-gnueabi-ld"
def self.Linker
@Linker
end
def self.Qemu
@Qemu
end
DEBUG = false
# runnable_methods is called by minitest to determine which tests to run
def self.runnable_methods
all = Dir["test/mains/source/*_*.rb"]
tests =[]
return tests unless has_qemu
all.each do |file_name|
fullname = file_name.split("/").last.split(".").first
name , stdout , exit_code = fullname.split("_")
method_name = "test_#{name}"
input = File.read(file_name)
tests << method_name
self.send(:define_method, method_name ) do
out , code = run_code(input , name)
assert_equal stdout , out , "Wrong stdout #{name}"
assert_equal exit_code , code.to_s , "Wrong exit code #{name}"
end
end
tests
end
def self.has_qemu
if `uname -a`.include?("torsten")
@Linker = "arm-linux-gnu-ld"
return false unless DEBUG
end
begin
`#{@Qemu} -version`
`#{@Linker} -v`
rescue => e
puts e
return false
end
true
end
def run_code(input , name )
puts "Compiling #{name}.o" if DEBUG
code = Vool::Builtin.builtin_code + input
linker = ::RubyX::RubyXCompiler.new({}).ruby_to_binary( code , :arm )
writer = Elf::ObjectWriter.new(linker)
writer.save "mains.o"
puts "Linking #{name}" if DEBUG
`#{TestArm.Linker} -N mains.o`
assert_equal 0 , $?.exitstatus , "Linking #{name} failed #{$?}"
puts "Running #{name}" if DEBUG
stdout = `#{TestArm.Qemu} ./a.out`
exit_code = $?.exitstatus
puts "Result #{stdout} #{exit_code}" if DEBUG
return stdout , exit_code
end
end
end