test return in interpreter
passes but does not return. dodgy
This commit is contained in:
parent
f46c4d148e
commit
c51e593335
@ -5,6 +5,7 @@ module Risc
|
|||||||
module Ticker
|
module Ticker
|
||||||
include AST::Sexp
|
include AST::Sexp
|
||||||
include InterpreterHelpers
|
include InterpreterHelpers
|
||||||
|
include CompilerHelper
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
Risc.machine.boot
|
Risc.machine.boot
|
||||||
|
@ -1,17 +1,11 @@
|
|||||||
require_relative "helper"
|
require_relative "helper"
|
||||||
|
|
||||||
module Risc
|
module Risc
|
||||||
class AddTest < MiniTest::Test
|
class InterpreterAdd < MiniTest::Test
|
||||||
include Ticker
|
include Ticker
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@string_input = <<HERE
|
@string_input = as_main "return 5.mod4"
|
||||||
class Space
|
|
||||||
def main(arg)
|
|
||||||
return 5.mod4
|
|
||||||
end
|
|
||||||
end
|
|
||||||
HERE
|
|
||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
56
test/risc/interpreter/test_return.rb
Normal file
56
test/risc/interpreter/test_return.rb
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
require_relative "helper"
|
||||||
|
|
||||||
|
module Risc
|
||||||
|
class InterpreterAdd < MiniTest::Test
|
||||||
|
include Ticker
|
||||||
|
|
||||||
|
def setup
|
||||||
|
@string_input = as_main("return 5")
|
||||||
|
super
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_chain
|
||||||
|
#show_ticks # get output of what is
|
||||||
|
check_chain [Branch, Label, LoadConstant, SlotToReg, RegToSlot,
|
||||||
|
LoadConstant, RegToSlot, FunctionCall, Label, LoadConstant,
|
||||||
|
RegToSlot, SlotToReg, SlotToReg, RegToSlot, SlotToReg,
|
||||||
|
Transfer]
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_call_main
|
||||||
|
call_ins = ticks(8)
|
||||||
|
assert_equal FunctionCall , call_ins.class
|
||||||
|
assert :main , call_ins.method.name
|
||||||
|
end
|
||||||
|
def test_load_5
|
||||||
|
load_ins = ticks 10
|
||||||
|
assert_equal LoadConstant , load_ins.class
|
||||||
|
assert_equal 5 , @interpreter.get_register(load_ins.register).value
|
||||||
|
end
|
||||||
|
|
||||||
|
def pest_call
|
||||||
|
ret = ticks(18)
|
||||||
|
assert_equal FunctionReturn , ret.class
|
||||||
|
|
||||||
|
object = @interpreter.get_register( ret.register )
|
||||||
|
link = object.get_internal_word( ret.index )
|
||||||
|
|
||||||
|
assert_equal Label , link.class
|
||||||
|
end
|
||||||
|
def pest_adding
|
||||||
|
done_op = ticks(12)
|
||||||
|
assert_equal OperatorInstruction , done_op.class
|
||||||
|
left = @interpreter.get_register(done_op.left)
|
||||||
|
rr = done_op.right
|
||||||
|
right = @interpreter.get_register(rr)
|
||||||
|
assert_equal Fixnum , left.class
|
||||||
|
assert_equal Fixnum , right.class
|
||||||
|
assert_equal 7 , right
|
||||||
|
assert_equal 12 , left
|
||||||
|
done_tr = ticks(1)
|
||||||
|
assert_equal RegToSlot , done_tr.class
|
||||||
|
result = @interpreter.get_register(done_op.left)
|
||||||
|
assert_equal result , 12
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user