using System;
using System.Collections.Generic;
using System.Text;
using UnitTestSharp;
using DNAModule.Sunweaver.Commands;
using DNAModule.Sunweaver.Commands.BinaryMath;
using DNAModule.Sunweaver.Commands.Abstracts;
using DNAModule.Sunweaver.DataPrototypes;

namespace DNAModule.Sunweaver.UnitTests
{
    public class CoduleTests : TestFixture
    {
        Codule codule;

        
        public override void TestSetup()
        {
            List<BasePair> dna = new List<BasePair>();
            dna.Add(new Constant(10));
            dna.Add(new Constant(20));
            dna.Add(new add());

            codule = new Codule(dna);
        }

        
        public void ExecutesRight()
        {
            
            VirtualMachine VM = new VirtualMachine();
            codule.Execute(VM);

            CheckEqual(1, VM.Stack.Count());
            CheckEqual(30, VM.Stack.Pop());
        }

        
        public void stop()
        {
            
            codule.BasePairs.Add(new stop());
            codule.BasePairs.Add(new Constant(10));
            codule.BasePairs.Add(new Constant(20));
            codule.BasePairs.Add(new add());
            codule.BasePairs.Add(new add());
            
            VirtualMachine VM = new VirtualMachine();
            codule.Execute(VM);

            CheckEqual(30, VM.Stack.Pop());
        }

        
        public void start()
        {
            
            codule.BasePairs.Add(new stop());
            codule.BasePairs.Add(new start());
            codule.BasePairs.Add(new Constant(10));
            
            VirtualMachine VM = new VirtualMachine();
            codule.Execute(VM);

            CheckEqual(10, VM.Stack.Pop());
        }
    }
}