require_relative 'helper'

module Register
  class TestWhile < MiniTest::Test
    include Statements


    def test_while_mini
      @string_input    = <<HERE
class Object
  int main()
    while_plus(1)
      return 3
    end
  end
end
HERE
      @expect = [Label, Branch, Label, LoadConstant, SetSlot, Label, LoadConstant ,
               IsPlus, Label, FunctionReturn]
      check
    end

    def test_while_assign
      @string_input    = <<HERE
class Object
  int main()
    int n = 5
    while_plus(n)
      n = n - 1
    end
    return n
  end
end
HERE
      @expect = [Label, LoadConstant, GetSlot, SetSlot, Branch, Label, GetSlot ,
               GetSlot, LoadConstant, OperatorInstruction, GetSlot, SetSlot, Label, GetSlot ,
               GetSlot, IsPlus, GetSlot, GetSlot, SetSlot, Label, FunctionReturn]
      check
    end


    def test_while_return
      @string_input    = <<HERE
class Object
  int main()
    int n = 10
    while_plus( n - 5)
      n = n + 1
      return n
    end
  end
end
HERE
      @expect = [Label, LoadConstant, GetSlot, SetSlot, Branch, Label, GetSlot ,
               GetSlot, LoadConstant, OperatorInstruction, GetSlot, SetSlot, GetSlot, GetSlot ,
               SetSlot, Label, GetSlot, GetSlot, LoadConstant, OperatorInstruction, IsPlus ,
               Label, FunctionReturn]
      check
    end
  end
end