require_relative "helper"

module Risc
  class TestOps < MiniTest::Test
    include ExpressionHelper
    include AST::Sexp

    def setup
      Risc.machine.boot
      @root = :operator_value
      @output = Risc::RiscValue
    end

    def operators
      [:+ , :- , :* , :/ , :== ]
    end
    def test_ints
      operators.each do |op|
        @input = s(:operator_value, op , s(:int, 2), s(:int, 3))
        check
      end
    end
    def test_local_int
      Parfait.object_space.get_main.add_local(:bar , :Integer)
      @input    = s(:operator_value, :+, s(:local, :bar), s(:int, 3))
      check
    end
    def test_int_local
      Parfait.object_space.get_main.add_local(:bar , :Integer)
      @input    = s(:operator_value, :+, s(:int, 3), s(:local, :bar))
      check
    end

    def test_field_int
      add_space_field(:bro,:Integer)
      @input = s(:operator_value, :+, s(:field_access,s(:receiver, s(:known, :self)), s(:field, s(:ivar, :bro))), s(:int, 3))
      check
    end

    def test_int_field
      add_space_field(:bro,:Integer)
      @input = s(:operator_value, :+, s(:int, 3), s(:field_access, s(:receiver, s(:known, :self)), s(:field,s(:ivar, :bro))))
      check
    end
  end
end