コード例 #1
0
        public void PopVector()
        {
            InterpreterStack stack = new InterpreterStack();
            float            value;

            stack.Init(10);
            try {
                value = stack.PopVector();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            stack.Push(1 * 0x4000);
            try {
                value = stack.PopVector();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            Assert.AreEqual(1, stack.Depth);
            stack.Push(1 * 0x4000);
            value = stack.PopVector();
            Assert.AreEqual(0, stack.Depth);
            Assert.AreEqual((float)(Math.PI / 4), value);
            stack.Push(1 * 0x4000);
            stack.Push(-1 * 0x4000);
            value = stack.PopVector();
            Assert.AreEqual((float)(-Math.PI / 4), value);
        }
コード例 #2
0
        public void Sub()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            try {
                stack.Sub();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            stack.Push(1);
            try {
                stack.Sub();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            stack.Push(12);
            stack.Push(123);
            stack.Push(1234);
            Assert.AreEqual(4, stack.Depth);
            stack.Sub();
            Assert.AreEqual(3, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(123 - 1234, value);
            value = stack.Pop();
            Assert.AreEqual(12, value);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            Assert.AreEqual(0, stack.Depth);
        }
コード例 #3
0
        public void Even()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            try {
                stack.Even(RoundState.Off);
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            Assert.AreEqual(0, stack.Depth);
            stack.Push(1 * 64);
            stack.Even(RoundState.Off);
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.Push(2 * 64);
            stack.Even(RoundState.Off);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            stack.Push(1 * 32);
            stack.Even(RoundState.Off);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            // TODO: add another roundState test
        }
コード例 #4
0
        public void Push()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(1);
            stack.Push((byte)10);
            value = stack.Pop();
            Assert.AreEqual(10, value);
            stack.Push((ushort)15);
            value = stack.Pop();
            Assert.AreEqual(15, value);
            stack.Push(20);
            value = stack.Pop();
            Assert.AreEqual(20, value);
            stack.Push(true);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            stack.Push(false);
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.Push((ushort)0xFFFF);
            value = stack.Pop();
            Assert.AreEqual(-1, value);
            stack.Push(1);
            try {
                stack.Push(1);
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
        }
コード例 #5
0
        public void Floor()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            try {
                stack.Floor();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            Assert.AreEqual(0, stack.Depth);
            stack.Push(1);
            stack.Floor();
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.Push(0);
            stack.Floor();
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.Push(3 << 5);
            stack.Floor();
            value = stack.Pop();
            Assert.AreEqual(1 << 6, value);
            stack.Push(0x7F);
            stack.Floor();
            value = stack.Pop();
            Assert.AreEqual(1 << 6, value);
            stack.Push(0xFF);
            stack.Floor();
            value = stack.Pop();
            Assert.AreEqual(3 << 6, value);
        }
コード例 #6
0
        public void Neg()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            try {
                stack.Neg();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            stack.Push(1);
            Assert.AreEqual(1, stack.Depth);
            stack.Neg();
            Assert.AreEqual(1, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(-1, value);
            stack.Push(-1);
            stack.Neg();
            value = stack.Pop();
            Assert.AreEqual(1, value);
            stack.Push(0);
            stack.Neg();
            value = stack.Pop();
            Assert.AreEqual(0, value);
        }
コード例 #7
0
        public void Reset()
        {
            InterpreterStack stack = new InterpreterStack();

            stack.Init(10);
            Assert.AreEqual(0, stack.Depth);
            stack.Push(1);
            Assert.AreEqual(1, stack.Depth);
            stack.Reset();
            Assert.AreEqual(0, stack.Depth);
            Assert.AreEqual(10, stack.Length);
            try {
                stack.Pop();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
        }
コード例 #8
0
        public void PushDepth()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            stack.PushDepth();
            Assert.AreEqual(1, stack.Depth);
            stack.Push(12);
            stack.PushDepth();
            Assert.AreEqual(3, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(2, value);
            value = stack.Pop();
            Assert.AreEqual(12, value);
            value = stack.Pop();
            Assert.AreEqual(0, value);
        }
コード例 #9
0
        public void PushBytes()
        {
            InterpreterStack  stack  = new InterpreterStack();
            InterpreterStream stream = new InterpreterStream();

            stream.Push(new byte[] { 1, 2, 3, 4, 5 });
            int value;

            stack.Init(10);
            stack.PushBytes(stream, 3);
            Assert.AreEqual(3, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(3, value);
            value = stack.Pop();
            Assert.AreEqual(2, value);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            Assert.AreEqual(0, stack.Depth);
        }
コード例 #10
0
        public void Swap()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            stack.Push(12);
            stack.Push(123);
            stack.Push(1234);
            Assert.AreEqual(3, stack.Depth);
            stack.Swap();
            Assert.AreEqual(3, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(123, value);
            value = stack.Pop();
            Assert.AreEqual(1234, value);
            value = stack.Pop();
            Assert.AreEqual(12, value);
        }
コード例 #11
0
        public void PopF26Dot6()
        {
            InterpreterStack stack = new InterpreterStack();
            float            value;

            stack.Init(10);
            try {
                value = stack.PopF26Dot6();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            Assert.AreEqual(0, stack.Depth);
            stack.Push(0x40);
            value = stack.PopF26Dot6();
            Assert.AreEqual(1, value);
            Assert.AreEqual(0, stack.Depth);
            stack.Push(0x70);
            value = stack.PopF26Dot6();
            Assert.AreEqual(1.75f, value);
            stack.Push(0xF0);
            value = stack.PopF26Dot6();
            Assert.AreEqual(3.75f, value);
            stack.Push(0xF8);
            value = stack.PopF26Dot6();
            Assert.AreEqual(3.875f, value);
            stack.Push(0xFC);
            value = stack.PopF26Dot6();
            Assert.AreEqual(3.9375f, value);
            stack.Push(0xFE);
            value = stack.PopF26Dot6();
            Assert.AreEqual(3.96875f, value);
            stack.Push(0xFF);
            value = stack.PopF26Dot6();
            Assert.AreEqual(3.984375f, value);
            try {
                value = stack.PopF26Dot6();
                Assert.Fail();
            } catch (IndexOutOfRangeException) {
            }
            Assert.AreEqual(0, stack.Depth);
        }
コード例 #12
0
        public void PushWords()
        {
            InterpreterStack  stack  = new InterpreterStack();
            InterpreterStream stream = new InterpreterStream();

            stream.Push(new byte[] { 0, 1, 0, 2, 3, 0, 0xFF, 0xFF });
            int value;

            stack.Init(10);
            stack.PushWords(stream, 4);
            Assert.AreEqual(4, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(-1, value);
            value = stack.Pop();
            Assert.AreEqual(0x300, value);
            value = stack.Pop();
            Assert.AreEqual(2, value);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            Assert.AreEqual(0, stack.Depth);
        }
コード例 #13
0
        public void PushVector()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            stack.PushVector(0);
            Assert.AreEqual(2, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(0, value);
            value = stack.Pop();
            Assert.AreEqual(0x4000, value);
            Assert.AreEqual(0, stack.Depth);
            stack.PushVector((float)(Math.PI / 2));
            value = stack.Pop();
            Assert.AreEqual(0x4000, value);
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.PushVector((float)(Math.PI));
            value = stack.Pop();
            Assert.AreEqual(0, value);
            value = stack.Pop();
            Assert.AreEqual(-0x4000, value);
            stack.PushVector((float)(Math.PI * 1.5));
            value = stack.Pop();
            Assert.AreEqual(-0x4000, value);
            value = stack.Pop();
            Assert.AreEqual(0, value);
            stack.PushVector((float)(Math.PI * 2));
            value = stack.Pop();
            Assert.AreEqual(0, value);
            value = stack.Pop();
            Assert.AreEqual(0x4000, value);
            stack.PushVector((float)(Math.PI / 4));
            value = stack.Pop();
            Assert.AreEqual(0x2D41, value);
            value = stack.Pop();
            Assert.AreEqual(0x2D41, value);
        }
コード例 #14
0
        public void MoveToTop()
        {
            InterpreterStack stack = new InterpreterStack();
            int value;

            stack.Init(10);
            stack.Push(1);
            stack.Push(12);
            stack.Push(123);
            stack.Push(1234);
            Assert.AreEqual(4, stack.Depth);
            stack.MoveToTop(3);
            Assert.AreEqual(4, stack.Depth);
            value = stack.Pop();
            Assert.AreEqual(12, value);
            value = stack.Pop();
            Assert.AreEqual(1234, value);
            value = stack.Pop();
            Assert.AreEqual(123, value);
            value = stack.Pop();
            Assert.AreEqual(1, value);
            Assert.AreEqual(0, stack.Depth);
        }
コード例 #15
0
 public void Constructor()
 {
     InterpreterStack stack = new InterpreterStack();
 }