public void TestLessThenTpValue()
        {
            //Test for A1 < 0
            _test.Reset();

            var signal = new Signal()
            {
                Name = "A1"
            };
            var statement = new LogialAnalyzerTrigger.Statement.LessThen(signal, 0);
            var triggerStateForkedStatement = new TriggerStateForkedState(statement);

            triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger);

            var triggerstate = new TriggerState();

            triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement);

            var trigger = new Trigger();

            trigger.AddTriggerState(triggerstate);

            var engine = new TriggerEngine();

            engine.AddTrigger(trigger);
            engine.TriggeredUnitTest += engine_Triggered;

            engine.LogValueChange(signal, -1, DateTime.Now.Ticks);

            Assert.IsTrue(_test.WaitOne(10));

            engine.LogValueChange(signal, 2, DateTime.Now.Ticks);

            Assert.IsFalse(_test.WaitOne(10));
        }
        public void TestStatemetnCollectionWithOneStatementComparingSignals()
        {
            //If: A1 == A2 && A2 < 5 Then: Trigger
            _test.Reset();

            var signal = new Signal()
            {
                Name = "A1"
            };
            var signal2 = new Signal()
            {
                Name = "A2"
            };

            var statement           = new LogialAnalyzerTrigger.Statement.Equals(signal, signal2);
            var statemetn2          = new LogialAnalyzerTrigger.Statement.LessThen(signal2, 5);
            var statemetnCollection = new LogialAnalyzerTrigger.Statement.StatementCollection();

            statemetnCollection.AddStatement(statement, LogialAnalyzerTrigger.Statement.LogicalOperators.First);
            statemetnCollection.AddStatement(statemetn2, LogialAnalyzerTrigger.Statement.LogicalOperators.And);

            var triggerStateForkedStatement = new TriggerStateForkedState(statemetnCollection);

            triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger);

            var triggerstate = new TriggerState();

            triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement);


            var trigger = new Trigger();

            trigger.AddTriggerState(triggerstate);



            var engine = new TriggerEngine();

            engine.AddTrigger(trigger);
            engine.TriggeredUnitTest += engine_Triggered;

            engine.LogValueChange(signal, 2, DateTime.Now.Ticks);
            engine.LogValueChange(signal2, 2, DateTime.Now.Ticks);

            Assert.IsTrue(_test.WaitOne(10));
        }
        public void TestSimpleTwoState()
        {
            //State 1: IF: A1 == A2 && A2 < 5 Then Goto Next
            //State 2: IF: A1 == 0 Then Trigger
            _test.Reset();

            var signal = new Signal()
            {
                Name = "A1"
            };
            var signal2 = new Signal()
            {
                Name = "A2"
            };

            //TriggerState 1
            var statement           = new LogialAnalyzerTrigger.Statement.Equals(signal, signal2);
            var statemetn2          = new LogialAnalyzerTrigger.Statement.LessThen(signal2, 5);
            var statemetnCollection = new LogialAnalyzerTrigger.Statement.StatementCollection();

            statemetnCollection.AddStatement(statement, LogialAnalyzerTrigger.Statement.LogicalOperators.First);
            statemetnCollection.AddStatement(statemetn2, LogialAnalyzerTrigger.Statement.LogicalOperators.And);

            var triggerStateForkedStatement = new TriggerStateForkedState(statemetnCollection);

            triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.GotoNextState);

            var triggerstate = new TriggerState();

            triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement);

            //TriggerState 2
            var statement3 = new LogialAnalyzerTrigger.Statement.Equals(signal, 0);

            var triggerStateForkedStatement2 = new TriggerStateForkedState(statement3);

            triggerStateForkedStatement2.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger);

            var triggerstate2 = new TriggerState();

            triggerstate2.AddTriggerStateForkedStatement(triggerStateForkedStatement2);



            var trigger = new Trigger();

            trigger.AddTriggerState(triggerstate);
            trigger.AddTriggerState(triggerstate2);


            var engine = new TriggerEngine();

            engine.AddTrigger(trigger);
            engine.TriggeredUnitTest += engine_Triggered;

            engine.LogValueChange(signal, 2, DateTime.Now.Ticks);
            engine.LogValueChange(signal2, 2, DateTime.Now.Ticks);
            // Will now jump to state 2
            Assert.IsFalse(_test.WaitOne(10));

            engine.LogValueChange(signal, 0, DateTime.Now.Ticks);

            Assert.IsTrue(_test.WaitOne(10));
        }