public void CompileAndExecuteTwoSimpleCommand() { ModelParser parser = new ModelParser("a := 1. b := 2"); this.compiler.CompileExpressions(parser.ParseExpressions()); Machine machine = new Machine(); this.block.Execute(machine, null); Assert.AreEqual(1, machine.GetGlobalObject("a")); Assert.AreEqual(2, machine.GetGlobalObject("b")); }
public void CompileTwoSimpleCommand() { ModelParser parser = new ModelParser("a := 1. b := 2"); this.compiler.CompileExpressions(parser.ParseExpressions()); Assert.IsNotNull(this.block); Assert.AreEqual(2, this.block.NoConstants); Assert.AreEqual(0, this.block.NoLocals); Assert.AreEqual(2, this.block.NoGlobalNames); Assert.IsNotNull(this.block.ByteCodes); Assert.AreEqual(8, this.block.ByteCodes.Length); Assert.AreEqual(0, this.block.Arity); BlockDecompiler decompiler = new BlockDecompiler(this.block); var program = decompiler.Decompile(); Assert.IsNotNull(program); Assert.AreEqual(4, program.Count); Assert.AreEqual("GetConstant 1", program[0]); Assert.AreEqual("SetGlobalVariable a", program[1]); Assert.AreEqual("GetConstant 2", program[2]); Assert.AreEqual("SetGlobalVariable b", program[3]); }
public void CompileTwoCommandsUsingSemicolon() { ModelParser parser = new ModelParser("nil invokeWith: 10; invokeWith: 20"); this.compiler.CompileExpressions(parser.ParseExpressions()); Assert.IsNotNull(this.block); Assert.AreEqual(3, this.block.NoConstants); Assert.AreEqual(0, this.block.NoLocals); Assert.IsNotNull(this.block.ByteCodes); Assert.AreEqual(12, this.block.ByteCodes.Length); Assert.AreEqual(0, this.block.Arity); }
public void CompileTwoCommands() { ModelParser parser = new ModelParser("nil invokeWith: 10. Global := 20"); this.compiler.CompileExpressions(parser.ParseExpressions()); Assert.IsNotNull(this.block); Assert.AreEqual(3, this.block.NoConstants); Assert.AreEqual(1, this.block.NoGlobalNames); Assert.AreEqual(0, this.block.NoLocals); Assert.IsNotNull(this.block.ByteCodes); Assert.AreEqual(10, this.block.ByteCodes.Length); Assert.AreEqual(0, this.block.Arity); }
public void ParseTwoExpressions() { ModelParser parser = new ModelParser("x do. y do"); IEnumerable<IExpression> expressions = parser.ParseExpressions(); Assert.IsNotNull(expressions); Assert.AreEqual(2, expressions.Count()); Assert.AreEqual("x do", expressions.First().AsString()); Assert.AreEqual("y do", expressions.Skip(1).First().AsString()); }
public void ParsePrimitiveWithExpression() { ModelParser parser = new ModelParser("<primitive: 60> a := 1"); IEnumerable<IExpression> expressions = parser.ParseExpressions(); Assert.IsNotNull(expressions); Assert.AreEqual(2, expressions.Count()); Assert.IsInstanceOfType(expressions.First(), typeof(PrimitiveExpression)); Assert.AreEqual("<primitive: 60>", expressions.First().AsString()); Assert.AreEqual("a := 1", expressions.Skip(1).First().AsString()); }