コード例 #1
0
ファイル: LogicTest.cs プロジェクト: sunsided/Graph
        public void TestNegation()
        {
            AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            bool result = false;

            // Create elements
            var source = new LogicEmitter();
            var filter = new NotGate();
            var sink = new LogicActionInvoker(value =>
                                                             	{
                                                             		result = value;
                                                             		autoResetEvent.Set(); // wait for processing to finish
                                                                });

            // Build the graph
            source.AttachOutput(filter);
            filter.AttachOutput(sink);

            // Start processing
            source.StartProcessing();

            // Test initial state
            Assert.IsFalse(result);

            // Emit and test
            source.EmitTrue(); autoResetEvent.WaitOne();
            Assert.IsFalse(result);

            // Emit and test
            source.EmitTrue(); autoResetEvent.WaitOne();
            Assert.IsFalse(result);

            // Emit and test
            source.EmitFalse(); autoResetEvent.WaitOne();
            Assert.IsTrue(result);

            // Emit and test
            source.EmitFalse(); autoResetEvent.WaitOne();
            Assert.IsTrue(result);

            // Emit and test
            source.EmitTrue(); autoResetEvent.WaitOne();
            Assert.IsFalse(result);

            // Emit and test
            source.EmitFalse(); autoResetEvent.WaitOne();
            Assert.IsTrue(result);

            // Emit and test
            source.EmitFalse(); autoResetEvent.WaitOne();
            Assert.IsTrue(result);

            // Emit and test
            source.EmitTrue(); autoResetEvent.WaitOne();
            Assert.IsFalse(result);
        }