using System;
using System.Collections.Generic;
using System.Text;
using UnitTestSharp;
using Sunweaver.Commands.Abstracts;

namespace Sunweaver.UnitTests.Commands.Abstracts
{
    
    public class UnaryOperationTests : TestFixture
    {
        class UnaryOperationTester : UnaryOperation
        {
            public long A = 0;
            public override void Operation(long a)
            {
                A = a;
            }
        }

        
        public override void TestSetup()
        {
            VM = new Sunweaver.DataPrototypes.VirtualMachine();
        }

        UnaryOperationTester bp = new UnaryOperationTester();
        Sunweaver.DataPrototypes.VirtualMachine VM;

        
        public void DecreasesStackDepthBy1()
        {
            
            VM.Stack.Push(20);

            bp.Implementation(VM);

            CheckEqual(0, VM.Stack.Count());
        }
  
        public void FizzlesWhenEmpty()
        {
            
            bp.A = 100;
            
            bp.Implementation(VM);

            CheckEqual(0, VM.Stack.Count());
            CheckEqual((long)100, bp.A);
        }

        public void PullsStackValuesCorrectly()
        {
            
            VM.Stack.Push(1);

            bp.Implementation(VM);

            CheckEqual((long)1, bp.A);
        }
    }
}