public void TestLetStatements() { var data = new EvalIntegerStruct[2]; data[0] = new EvalIntegerStruct("let a = 5;", 5); data[1] = new EvalIntegerStruct("let a = 2; let b = 5; let c = a + b;", 7); for (var i = 0; i < data.Length; i++) { var evaluated = TestEval(data[i].Input); Assert.True(TestIntegerObjects(evaluated, data[i].Expected)); } }
public void TestFunctionApp() { var data = new EvalIntegerStruct[2]; data[0] = new EvalIntegerStruct("let identity = fn(x) { x; }; identity(5);", 5); data[1] = new EvalIntegerStruct("let add = fn(x, y) { x + y; }; add(5 + 5, add(5, 5));", 20); for (var i = 0; i < data.Length; i++) { var evaluated = TestEval(data[i].Input); Assert.True(TestIntegerObjects(evaluated, data[i].Expected)); } }
public void TestIfElseExpression() { var data = new EvalIntegerStruct[6]; data[0] = new EvalIntegerStruct("if (true) {10};", 10); data[1] = new EvalIntegerStruct("if (false) {5};", null); data[2] = new EvalIntegerStruct("if (1 > 2) {10} else {5};", 5); data[3] = new EvalIntegerStruct("if (1 < 2) {10};", 10); data[4] = new EvalIntegerStruct("if (1) {1};", 1); data[5] = new EvalIntegerStruct("if(false) {10};", null); for (var i = 0; i < data.Length; i++) { var evaluated = TestEval(data[i].Input); Assert.True(data[i].Expected == null ? TestNullObjects(evaluated) : TestIntegerObjects(evaluated, data[i].Expected)); } }
public void TestReturnStatements() { var data = new EvalIntegerStruct[5]; data[0] = new EvalIntegerStruct("return 10;", 10); data[1] = new EvalIntegerStruct("return 10; 9;", 10); data[2] = new EvalIntegerStruct("return 5 * 5; 77;", 25); data[3] = new EvalIntegerStruct("77; return 2 * 2; 88;", 4); // TODO: Fix this. data[4] = new EvalIntegerStruct(@" if (25 > 5) { if (10 > 2) { return 77; } } ", 77); for (var i = 0; i < data.Length; i++) { var evaluated = TestEval(data[i].Input); Assert.True(TestIntegerObjects(evaluated, data[i].Expected)); } }
public void TestIntegerExpression() { var data = new EvalIntegerStruct[12]; data[0] = new EvalIntegerStruct("5;", 5); data[1] = new EvalIntegerStruct("7;", 7); data[2] = new EvalIntegerStruct("-5;", -5); data[3] = new EvalIntegerStruct("-7;", -7); data[4] = new EvalIntegerStruct("1 + 1;", 2); data[5] = new EvalIntegerStruct("23 + 7;", 30); data[6] = new EvalIntegerStruct("1 - 1;", 0); data[7] = new EvalIntegerStruct("25 - 5;", 20); data[8] = new EvalIntegerStruct("1 * 1;", 1); data[9] = new EvalIntegerStruct("6 * 6;", 36); data[10] = new EvalIntegerStruct("49 / 7;", 7); data[11] = new EvalIntegerStruct("100 / 10;", 10); for (var i = 0; i < data.Length; i++) { var evaluated = TestEval(data[i].Input); Assert.True(TestIntegerObjects(evaluated, data[i].Expected)); } }