rubyx/test/arm/helper.rb

43 lines
1.3 KiB
Ruby
Raw Normal View History

2016-12-30 10:59:38 +01:00
require_relative "../helper"
2016-12-14 12:43:13 +01:00
# try to test that the generation of basic instructions works
# one instruction at a time, reverse testing from objdump --demangle -Sfghxp
# tests are named as per assembler code, ie test_mov testing mov instruction
2017-01-03 21:37:55 +01:00
module Arm
class FakeBin
def byte_length
4
end
2018-05-24 20:20:56 +02:00
def is_a?(_)
true
end
end
2017-01-03 21:37:55 +01:00
module ArmHelper
def setup
2019-02-08 22:03:23 +01:00
Parfait.boot!(Parfait.default_test_options)
2017-01-03 21:37:55 +01:00
@machine = Arm::ArmMachine
@binary = FakeBin.new
2018-05-24 20:20:56 +02:00
Risc::Position.clear_positions
Risc::Position.create(@binary).set(0)
2017-01-03 21:37:55 +01:00
end
2016-12-14 12:43:13 +01:00
2017-01-03 21:37:55 +01:00
# code is what the generator spits out, at least one instruction worth (.first)
# the op code is wat was witten as assembler in the first place and the binary result
def assert_code( code , op , should )
2017-01-03 21:37:55 +01:00
assert_equal op , code.opcode
io = StringIO.new
code.assemble(io)
binary = io.string
assert_equal should.length , binary.length , "code length wrong for #{code.inspect}"
index = 0
binary.each_byte do |byte |
msg = "byte #{index} 0x#{should[index].to_s(16)} != 0x#{byte.to_s(16)} | "
msg += "#{should[index].to_s(2)} != #{byte.to_s(2)}"
assert_equal should[index] , byte , msg
2017-01-03 21:37:55 +01:00
index += 1
end
2016-12-14 12:43:13 +01:00
end
end
end