public void TestStepIncrement()
        {
            Engine.Ability action = new Engine.BasicSynthesis();
            State          state  = Utility.CreateDefaultState();

            Assert.AreEqual <uint>(1, state.Step);

            State success = action.Activate(state, true);
            State failure = action.Activate(state, false);

            Assert.AreEqual <uint>(2, success.Step);
            Assert.AreEqual <uint>(2, failure.Step);
        }
        public void TestObserve()
        {
            Engine.Ability observe = new Engine.Observe();
            Engine.Ability basic   = new Engine.BasicSynthesis();

            State state = Utility.CreateDefaultState();

            // Test that Observe can't be used first.
            Assert.IsFalse(observe.CanUse(state));

            // Use Basic Synthesis so that observe becomes useable.
            state = basic.Activate(state, true);

            // Test the condition requirement for Observe
            state.Condition = Condition.Poor;
            Assert.IsTrue(observe.CanUse(state));
            state.Condition = Condition.Normal;
            Assert.IsFalse(observe.CanUse(state));
            state.Condition = Condition.Good;
            Assert.IsFalse(observe.CanUse(state));
            state.Condition = Condition.Excellent;
            Assert.IsFalse(observe.CanUse(state));

            // Test that observe can't be run twice in a row.
            state.Condition = Condition.Poor;
            Assert.IsTrue(observe.CanUse(state));
            State newState = observe.Activate(state, true);

            // Make sure Observe uses the right amount of CP.
            Assert.AreEqual <uint>(state.CP - observe.RequiredCP, newState.CP);
        }