require_relative "../helper"

module Risc
  class TestCompilerBuilder < MiniTest::Test

    def setup
      Parfait.boot!
      Risc.boot!
      @init = Parfait.object_space.get_init
      @compiler = Risc::MethodCompiler.new( @init )
      @builder  = @compiler.compiler_builder(@init)
    end
    def test_inserts_built
      r1 = RegisterValue.new(:r1 , :Space)
      @builder.build{ space << r1 }
      assert_equal Transfer , @compiler.risc_instructions.next.class
      assert_equal RegisterValue ,  @builder.space.class
    end
    def test_loads
      @builder.build{ space << Parfait.object_space }
      assert_equal LoadConstant , @compiler.risc_instructions.next.class
      assert_equal RegisterValue ,  @builder.space.class
    end
    def test_two
      @builder.build{ space << Parfait.object_space ; integer << 1}
      assert_equal LoadConstant , @compiler.risc_instructions.next.class
      assert_equal LoadData , @compiler.risc_instructions.next(2).class
    end
    def test_swap
      test_two
      @builder.swap_names( :space , :integer)
      assert_equal :Integer ,  @builder.space.type.class_name
      assert_equal :Space ,  @builder.integer.type.class_name
    end
  end
end