Example #1
0
 public EngineDifferException(string message, Check check)
     : base(message)
 {
     Check = check;
 }
Example #2
0
        private void CompareEngines(Check check)
        {
            engineSbOne = engineOne as IStepBackEngine;
            engineSbTwo = engineTwo as IStepBackEngine;
            engineOne.BeginMatch(project);
            engineTwo.BeginMatch(project);

            try
            {
                CheckWarriors(project.Rules, engineOne.Warriors, engineTwo.Warriors);
                ExpensiveCheck(false);
                while (Step(check))
                {
                }
                ExpensiveCheck(false);
            }
            finally
            {
                matchOne = engineOne.EndMatch(null);
                matchTwo = engineTwo.EndMatch(null);
            }

            if (matchOne != matchTwo)
            {
                throw new EngineDifferException("Score", Check.Optimistic);
            }
        }
Example #3
0
        private bool Step(Check check)
        {
            bool stop = (check.Step == 1) && (engineOne.Round == check.Round) && (check.ToCycle <= engineOne.Cycle + 1);
            if (stop)
            {
                // set debuger breakpoint here, this will stop before error ocurs
                ExpensiveCheck(true);
            }
            StepResult resOne = engineOne.NextStep();
            StepResult resTwo = engineTwo.NextStep();
            bool range = (engineOne.Cycle >= check.FromCycle && engineOne.Cycle <= check.ToCycle &&
                          engineOne.Round == check.Round);
            bool step = (check.Step != 1) && (engineOne.Cycle % check.Step == 0) && (engineOne.Round >= check.Round);

            CheapCheck(resOne, resTwo, check, range);
            if (stop || step || range || resOne == StepResult.NextRound)
            {
                ExpensiveCheck(range);
                if (engineSbOne != null)
                {
                    if (engineSbOne.CanStepBack)
                    {
                        engineSbOne.PrevStep();
                        engineOne.NextStep();
                        CheapCheck(resOne, resTwo, check, range);
                    }
                }
                if (engineSbTwo != null)
                {
                    if (engineSbTwo.CanStepBack)
                    {
                        engineSbTwo.PrevStep();
                        engineTwo.NextStep();
                        CheapCheck(resOne, resTwo, check, range);
                    }
                }
                ExpensiveCheck(range);
            }

            if (resOne == StepResult.Finished)
            {
                return false;
            }
            return true;
        }
Example #4
0
 private void CheapCheck(StepResult resOne, StepResult resTwo, Check origCheck, bool precise)
 {
     if (resOne != resTwo)
     {
         throw new EngineDifferException("StepRes",
                                         new Check(0, origCheck.FromCycle, origCheck.ToCycle, origCheck.Step / 2));
     }
     if (engineOne.Cycle != engineTwo.Cycle)
     {
         throw new EngineDifferException("Cycle", new Check(engineOne.Round, engineOne.Cycle, precise));
     }
     if (engineOne.Round != engineTwo.Round)
     {
         throw new EngineDifferException("Round", new Check(engineOne.Round, engineOne.Cycle, precise));
     }
     if (engineOne.LiveWarriorsCount != engineTwo.LiveWarriorsCount)
     {
         throw new EngineDifferException("Died", new Check(engineOne.Round, engineOne.Cycle, precise));
     }
     if (engineOne.CyclesLeft != engineTwo.CyclesLeft)
     {
         throw new EngineDifferException("CyclesLeft", new Check(engineOne.Round, engineOne.Cycle, precise));
     }
     if (engineOne.NextWarriorIndex != engineTwo.NextWarriorIndex)
     {
         throw new EngineDifferException("Cheating", new Check(engineOne.Round, engineOne.Cycle, precise));
     }
 }