From 741c55cba3a2654d3cd8785153c34698d1b543c5 Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Wed, 21 May 2014 21:13:12 +0300 Subject: [PATCH] start testing the previous runners more rigourusly --- test/fragments/helper.rb | 43 ++++++++++++++++++++++++++++++++++++ test/fragments/test_hello.rb | 16 ++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/fragments/helper.rb create mode 100644 test/fragments/test_hello.rb diff --git a/test/fragments/helper.rb b/test/fragments/helper.rb new file mode 100644 index 00000000..9dd531c1 --- /dev/null +++ b/test/fragments/helper.rb @@ -0,0 +1,43 @@ +require_relative '../helper' + +#test the generation of code fragments. +# ie parse assumes @string_input +# compile +# assemble/write assume a @should array with the bytes in it + +module Fragments + # need a code generator, for arm + def setup + @program = Vm::Program.new "Arm" + end + + def parse + parser = Parser::Crystal.new + syntax = parser.parse_with_debug(@string_input) + parts = Parser::Transform.new.apply(syntax) + # file is a list of expressions, all but the last must be a function + # and the last is wrapped as a main + parts.each_with_index do |part,index| + if index == (parts.length - 1) + expr = part.compile( @program.context , @program.main ) + else + expr = part.compile( @program.context , nil ) + raise "should be function definition for now" unless expr.is_a? Vm::Function + end + end + end + + # helper to write the file + def write name + writer = Elf::ObjectWriter.new(@program , Elf::Constants::TARGET_ARM) + assembly = writer.text + # use this for getting the bytes to compare to : + #puts assembly + writer.save("#{name}_test.o") + assembly.text.bytes.each_with_index do |byte , index| + is = @should[index] + assert_equal Fixnum , is.class , "@#{index.to_s(16)} = #{is}" + assert_equal byte , is , "@#{index.to_s(16)} #{byte.to_s(16)} != #{is.to_s(16)}" + end + end +end diff --git a/test/fragments/test_hello.rb b/test/fragments/test_hello.rb new file mode 100644 index 00000000..d2b3a4e6 --- /dev/null +++ b/test/fragments/test_hello.rb @@ -0,0 +1,16 @@ +require_relative 'helper' +require 'parslet/convenience' + +class TestHello < MiniTest::Test + include Fragments + + def test_hello + @string_input = <