public void ConditionBytecode() { CompareBool compbool1 = new CompareBool(true, true, ConditionOperator.EQUAL); bytes.push(LiteralFactory.CreateConditionLiteral(compbool1)); Condition boolCondition1 = bytes.ReadConditionLiteral(dummyCallback); Assert.IsTrue(boolCondition1.Evaluate()); CompareBool compbool2 = new CompareBool(true, true, ConditionOperator.NOT_EQUAL); bytes.push(LiteralFactory.CreateConditionLiteral(compbool2)); Condition boolCondition2 = bytes.ReadConditionLiteral(dummyCallback); Assert.IsFalse(boolCondition2.Evaluate()); CompareNum compnum1 = new CompareNum(2, 4, ConditionOperator.LESS_THAN); bytes.push(LiteralFactory.CreateConditionLiteral(compnum1)); Condition numCondition1 = bytes.ReadConditionLiteral(dummyCallback); Assert.IsTrue(numCondition1.Evaluate()); CompareNum compnum2 = new CompareNum(2, -2, ConditionOperator.LESS_THAN); bytes.push(LiteralFactory.CreateConditionLiteral(compnum2)); Condition numCondition2 = bytes.ReadConditionLiteral(dummyCallback); Assert.IsFalse(numCondition2.Evaluate()); }
public void NestedIfStatement() { CompareNum isFalse = new CompareNum(1, 2, ConditionOperator.EQUAL); List <byte> inner_if_false = InstructionFactory.Make_If( new List <byte> { (byte)Instruction.ERROR }, LiteralFactory.CreateConditionLiteral(isFalse) ); List <byte> innerCode = new List <byte>(inner_if_false); innerCode.Insert(0, (byte)Instruction.EFFECT_DELIMITER); CompareNum isTrue = new CompareNum(1, 2, ConditionOperator.NOT_EQUAL); List <byte> outer_if_true = InstructionFactory.Make_If( innerCode, LiteralFactory.CreateConditionLiteral(isTrue) ); bytes.push(outer_if_true); game.ExecuteNext(); Assert.IsTrue(bytes.HasBytes()); game.ExecuteNext(); Assert.IsTrue(bytes.HasBytes()); bytes.pop(); Assert.IsFalse(bytes.HasBytes()); }
public void IfStatement() { CompareNum compare = new CompareNum(1, 2, ConditionOperator.EQUAL); List <byte> if_false = InstructionFactory.Make_If( new List <byte> { (byte)Instruction.EFFECT_DELIMITER }, LiteralFactory.CreateConditionLiteral(compare) ); bytes.push(if_false); game.ExecuteNext(); Assert.IsFalse(bytes.HasBytes()); compare = new CompareNum(1, 2, ConditionOperator.NOT_EQUAL); List <byte> if_true = InstructionFactory.Make_If( new List <byte> { (byte)Instruction.EFFECT_DELIMITER }, LiteralFactory.CreateConditionLiteral(compare) ); bytes.push(if_true); game.ExecuteNext(); Assert.IsTrue(bytes.HasBytes()); Assert.AreEqual((byte)Instruction.EFFECT_DELIMITER, bytes.pop()); Assert.IsFalse(bytes.HasBytes()); }
public static List <byte> CreateConditionLiteral(CompareNum condition) { List <byte> operandA = CreateIntLiteral(condition.OperandA); List <byte> operandB = CreateIntLiteral(condition.OperandB); List <byte> bytes = new List <byte>(); bytes.AddRange(new List <byte>(operandB)); bytes.AddRange(new List <byte>(CreateEnumLiteral((byte)condition.Operator, Instruction.ENUM_CONDITION_OPERATOR))); bytes.AddRange(new List <byte>(operandA)); bytes.AddRange(new List <byte>(CreateEnumLiteral((byte)ConditionType.NUM, Instruction.ENUM_CONDITION_TYPE))); bytes.Add((byte)Instruction.CONDITION); return(bytes); }
public void UnlessStatement() { CompareNum compare = new CompareNum(1, 2, ConditionOperator.EQUAL); List <byte> unless_false = InstructionFactory.Make_Unless( new List <byte> { (byte)Instruction.EFFECT_DELIMITER }, LiteralFactory.CreateConditionLiteral(compare) ); bytes.push(unless_false); game.ExecuteNext(); Assert.IsTrue(bytes.HasBytes()); }
private static int[] BubbleSort(int[] array, CompareNum comp) { bool swap; do { swap = false; for (int i = 1; i < array.Length; i++) { if (comp(array[i - 1], array[i]) > 0) { swap = true; int temp = array[i - 1]; array[i - 1] = array[i]; array[i] = temp; } } } while (swap); return(array); }