
/*
func TestIntegerArithmetic(t *testing.T) {
	tests := []vmTestCase {
		{"1 + 2", 3},
	}

	runVmTests(t, tests)
}
*/

/*
func TestIntegerArithmetic(t *testing.T) {
	tests := []vmTestCase {
		{"1", 1},
		{"2", 2},
		{"1 + 2", 3},
		{"1 - 2", -1},
		{"1 * 2", 2},
		{"4 / 2", 2},
		{"50 / 2 * 2 + 10 - 5", 55},
		{"5 * (2 + 10)", 60},
		{"5 + 5 + 5 + 5 - 10", 10},
		{"2 * 2 * 2 * 2 * 2", 32},
		{"5 * 2 + 10", 20},
		{"5 + 2 * 10", 25},
		{"5 * (2 + 10)", 60},
		{"2 ^ 2", 4},
		{"-5", -5},
		{"-10", -10},
		{"-50 + 100 + -50", 0},
		{"(5 + 10 * 2 + 15 / 3) * 2 + -10", 50},
	}

	runVmTests(t, tests)
}


func TestBooleanExpressions(t *testing.T) {
	tests := []vmTestCase {
		{"true", true},
		{"false", false},
		{"1 < 2", true},
		{"1 > 2", false},
		{"1 < 1", false},
		{"1 > 1", false},
		{"1 == 1", true},
		{"1 <> 1", false},
		{"1 == 2", false},
		{"1 <> 2", true},
		{"true == true", true},
		{"false == false", true},
		{"true == false", false},
		{"true <> false", true},
		{"false <> true", true},
		{"(1 < 2) == true", true},
		{"(1 < 2) == false", false},
		{"(1 > 2) == true", false},
		{"(1 > 2) == false", true},
		{"not true", false},
		{"not false", true},
		{"not 5", false},
		{"not not true", true},
		{"not not false", false},
		{"not not 5", true},
		{"not (if false do 5; end)", true},
		{"is (if false do 5; end)", false},
	}

	runVmTests(t, tests)
}


func TestStringExpressions(t *testing.T) {
	tests := []vmTestCase{
		{`"monkey"`, "monkey"},
		{`"mon" + "key"`, "monkey"},
		{`"mon" + "key" + " banana"`, "monkey banana"},
	}

	runVmTests(t, tests)
}


func TestConditionals(t *testing.T) {
	tests := []vmTestCase	{
		{"if (true) do 10 end", 10},
		{"if (true) do 10 end else do 20 end", 10},
		{"if (false) do 10 end else do 20 end ", 20},
		{"if (1) do 10 end", 10},
		{"if (1 < 2) do 10 end", 10},
		{"if (1 < 2) do 10 end else do 20 end", 10},
		{"if (1 > 2) do 10 end elseif (1 > 3) do 20 end else do 30 end", 30},
		{"if (1 > 2) do 10 end", Null},
		{"if (false) do 10 end", Null},
		{"if ((if (false) do 10 end)) do 10 end else do 20 end", 20},
	}

	runVmTests(t, tests)
}


func TestGlobalVarStatements(t *testing.T) {
	tests := []vmTestCase {
		{ "var one: 1; one", 1 },
		{ "var one, two: 1; one + two", 2 },
		{ "var one: 1; var two: 2; one + two", 3 },
		{ "var one: 1; var two: one + one; one + two", 3 },
	}

	runVmTests(t, tests)
}
*/


/*
func TestCallingFunctionsWithBindings(t *testing.T) {
	tests := []vmTestCase {
		{
			input: `
			function one(): 0 do
				var one: 1;
				return one;
			end;
			one();
			`,
			expected: 1,
		},
		
		{
			input: `
			function oneAndTwo(): 0 do
				var one: 1;
				var two: 2;
				return one + two;
			end;
			oneAndTwo();
			`,
			expected: 3,
		},
		
		{
			input: `
			function oneAndTwo(): 0 do
				var one: 1;
				var two: 2;
				return one + two;
			end;
			
			function threeAndFour(): 0 do
				var three: 3;
				var four: 4;
				return three + four;
			end;
			oneAndTwo() + threeAndFour();
			`,
			expected: 10,
		},
		
		{
			input: `
			function firstFoobar(): 0 do
				var foobar: 50;
				return foobar;
			end;
			
			function secondFoobar() do
				var foobar: 100;
				return foobar;
			end;
			firstFoobar() + secondFoobar();
			`,
			expected: 150,
		},
		
		{
			input: `
			var globalSeed: 50;
			
			function minusOne(): 0 do
				var num: 1;
				return globalSeed - num;
			end;
			
			function minusTwo(): 0 do
				var num: 2;
				return globalSeed - num;
			end;
			
			minusOne() + minusTwo();
			`,
			expected: 97,
		},
	}

	runVmTests(t, tests)
}
*/



