using System; using System.Collections.Generic; using System.Text; using UnitTestSharp; using Sunweaver.Commands.Abstracts; namespace Sunweaver.UnitTests.Commands.Abstracts { public class BinaryOperationTests : TestFixture { class BinaryOperationTester : BinaryOperation { public long A=0, B=0; public override void Operation(long a, long b) { A = a; B = b; } public override void CompileOperation( System.Reflection.Emit.ILGenerator il, DataPrototypes.Locals locals) { // Pass } } public override void TestSetup() { VM = new Sunweaver.DataPrototypes.VirtualMachine(); } BinaryOperationTester bp = new BinaryOperationTester(); Sunweaver.DataPrototypes.VirtualMachine VM; public void DecreasesStackDepthBy2() { VM.Stack.Push(10); VM.Stack.Push(20); bp.Implementation(VM); CheckEqual(0, VM.Stack.Count()); } public void FizzlesWhenEmpty() { bp.A = 100; bp.B = 200; bp.Implementation(VM); CheckEqual(0, VM.Stack.Count()); CheckEqual((long)100, bp.A); CheckEqual((long)200, bp.B); } public void FizzlesWhenAlmostEmpty() { VM.Stack.Push(45); bp.A = 100; bp.B = 200; bp.Implementation(VM); CheckEqual(1, VM.Stack.Count()); CheckEqual(45, VM.Stack.Pop()); CheckEqual((long)100, bp.A); CheckEqual((long)200, bp.B); } public void PullsStackValuesInRightOrderAndCorrectly() { VM.Stack.Push(1); VM.Stack.Push(2); bp.Implementation(VM); CheckEqual((long)1, bp.A); CheckEqual((long)2, bp.B); } } }