require_relative "helper"

module Vool
  class TestBasicValues < MiniTest::Test

    def test_self
      lst = RubyCompiler.compile( "self")
      assert_equal SelfExpression , lst.class
    end
    def test_nil
      lst = RubyCompiler.compile( "nil")
      assert_equal NilConstant , lst.class
    end
    def test_false
      lst = RubyCompiler.compile( "false")
      assert_equal FalseConstant , lst.class
    end
    def test_true
      lst = RubyCompiler.compile( "true")
      assert_equal TrueConstant , lst.class
    end
    def test_integer
      lst = RubyCompiler.compile( "123")
      assert_equal IntegerConstant , lst.class
    end
    def test_string
      lst = RubyCompiler.compile( "'string'")
      assert_equal StringConstant , lst.class , lst.inspect
    end
    def test_sym
      lst = RubyCompiler.compile( ":symbol")
      assert_equal SymbolConstant , lst.class , lst.inspect
    end
    def test_dstr
      assert_raises RuntimeError do
        RubyCompiler.compile( '"dstr#{self}"')
      end
    end

    def test_scope
      lst = RubyCompiler.compile( "begin ; 1 ; end")
      assert_equal ScopeStatement , lst.class , lst.inspect
    end
    def test_scope_contents
      lst = RubyCompiler.compile( "begin ; 1 ; end")
      assert_equal 1 , lst.statements.first.value
    end
  end
  class TestBasicTypes < MiniTest::Test
    def setup
      Risc.machine.boot
    end
    def compile( input )
      lst = RubyCompiler.compile( input )
      lst.ct_type
    end
    def test_integer
      assert_equal "Integer_Type" , compile( "123").name
    end
    def test_string
      assert_equal "Word_Type" , compile( "'string'").name
    end
    def test_sym
      assert_equal "Word_Type" , compile( ":symbol").name
    end
    # classes fot these are not implemented in parfait yet
    def pest_nil
      assert_equal "Nil_Type" , compile( "nil").name
    end
    def pest_false
      assert_equal "False_Type" , compile( "false").name
    end
    def pest_true
      assert_equal "True_Type" , compile( "true").name
    end
  end
end