Exemplo n.º 1
0
        internal void ElementListAddFirst(PortElement <T> Item)
        {
            if (Elements == null)
            {
                Elements       = Item;
                Item._next     = Item;
                Item._previous = Item;
                ElementCount++;
                return;
            }
            if (Elements._next == Elements)
            {
                PortElement <T> elements = Elements;
                Elements           = Item;
                Elements._next     = elements;
                Elements._previous = elements;
                elements._next     = Elements;
                elements._previous = Elements;
                ElementCount++;
                return;
            }
            PortElement <T> elements2 = Elements;

            Elements                  = Item;
            Item._next                = elements2;
            Item._previous            = elements2._previous;
            elements2._previous._next = Item;
            elements2._previous       = Item;
            ElementCount++;
        }
        public void inverterTest()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            PortElement a = factory.createPortElement(PortDirection.Input, "a");
            PortElement b = factory.createPortElement(PortDirection.Output, "b");

            ILogicalElement inverter = factory.createLogicalElement(LibraryElementKind.Enum.Inverter, 1);

            Utils.Evaluator evaluator = new Utils.Evaluator(inverter, new PortList {
                b
            });

            inverter.makeConnection(a, 0, 0);

            b.makeConnection(inverter, 0, 0);

            a.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b.Value, LogicValue.Enum.High);

            a.Value = LogicValue.Enum.Unknown;
            evaluator.evaluate();
            Assert.AreEqual(b.Value, LogicValue.Enum.Unknown);

            a.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b.Value, LogicValue.Enum.DontCare);
        }
Exemplo n.º 3
0
 public void TwoArgsCtor()
 {
     var port = new Port<int> ();
     var pe = new PortElement<int> (10, port);
     Assert.AreEqual (10, pe.TypedItem, "#1");
     Assert.AreEqual (10, pe.Item, "#2");
     Assert.AreEqual (port, pe.Owner, "#3");
 }
Exemplo n.º 4
0
 internal bool TestInternal(out PortElement <T> node)
 {
     node = null;
     lock (Store)
     {
         node = Store.ElementListRemoveFirst();
     }
     return(node != null);
 }
Exemplo n.º 5
0
        protected virtual void RegisterReceiver(ReceiverTask receiver)
        {
            lock (Store)
            {
                if (!Store.IsElementListEmpty)
                {
                    PortElement <T> portElement = Store.ElementListFirst;
                    int             num         = Store.ElementCount;
                    while (true)
                    {
                        PortElement <T> next  = portElement._next;
                        ITask           task  = null;
                        bool            flag2 = receiver.Evaluate(portElement, ref task);
                        if (task != null)
                        {
                            receiver.TaskQueue.Enqueue(task);
                        }
                        if (flag2)
                        {
                            Store.ElementListRemove(portElement);
                        }
                        if (receiver.State != ReceiverTaskState.Persistent)
                        {
                            if (flag2)
                            {
                                break;
                            }
                            if (task != null)
                            {
                                goto IL_88;
                            }
                        }
                        portElement = next;
                        num--;
                        if (num <= 0)
                        {
                            goto IL_88;
                        }
                    }
                    return;
                }
IL_88:
                if (_mode == PortMode.OptimizedSingleReissueReceiver && Store.ReceiverCount == 1)
                {
                    throw new InvalidOperationException("PortMode.OptimizedSingleReissueReceiver allows only a single receiver");
                }
                Store.AddReceiver(receiver);
            }
        }
Exemplo n.º 6
0
        public void simpleOutputPortElement()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            PortElement portElement = factory.createPortElement(PortDirection.Output, "out");

            Assert.AreEqual(portElement.Name, "out");
            Assert.AreEqual(portElement.ID, 1);

            Assert.AreEqual(portElement.PortKind, PortDirection.Output);

            Assert.AreEqual(portElement.Value, LogicValue.Enum.Unknown);

            Assert.AreEqual(portElement.Inputs.Size, 1);
        }
Exemplo n.º 7
0
 internal void ElementListRemove(PortElement <T> Item)
 {
     ElementCount--;
     if (Item == Elements)
     {
         if (ElementCount == 0)
         {
             Elements = null;
             return;
         }
         Elements = Item._next;
     }
     Item._previous._next = Item._next;
     Item._next._previous = Item._previous;
 }
Exemplo n.º 8
0
 internal void ElementListAddLast(PortElement <T> Item)
 {
     if (Elements == null)
     {
         Elements       = Item;
         Item._next     = Item;
         Item._previous = Item;
     }
     else
     {
         Elements._previous._next = Item;
         Item._previous           = Elements._previous;
         Item._next         = Elements;
         Elements._previous = Item;
     }
     ElementCount++;
 }
Exemplo n.º 9
0
        public void simple_2_1_Mux()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            ILogicalElement mux = factory.createLogicalElement(LibraryElementKind.Enum.MUX, 1);

            PortElement a_port  = factory.createPortElement(PortDirection.Input, "a");
            PortElement b_port  = factory.createPortElement(PortDirection.Input, "b");
            PortElement address = factory.createPortElement(PortDirection.Input, "adr");

            PortElement c_port = factory.createPortElement(PortDirection.Output, "c");

            Utils.Evaluator evaluator = new Utils.Evaluator(mux, new PortList {
                c_port
            });

            mux.makeConnection(a_port, 0, 0);
            mux.makeConnection(b_port, 1, 0);
            mux.makeConnection(address, 2, 0);

            c_port.makeConnection(mux, 1, 0);

            address.Value = LogicValue.Enum.Low;
            a_port.Value  = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Unknown);

            a_port.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Unknown);

            address.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Unknown);

            b_port.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);

            b_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(c_port.Value, LogicValue.Enum.High);
        }
Exemplo n.º 10
0
        public void CtorSideEffect()
        {
            IteratorHandler handler = () => null;
            var task = new IterativeTask (handler);

            Assert.IsNull (task.ArbiterCleanupHandler, "#1");
            try {
                var x = task [0];
                Assert.Fail ("#2");
            } catch (NotSupportedException) {}
            try {
                task [0] = new PortElement<int> (10);
                Assert.Fail ("#2");
            } catch (NotSupportedException) {}

            Assert.AreEqual (handler, task.Handler, "#3");
            Assert.IsNull (task.LinkedIterator, "#4");
            Assert.IsNull (task.LinkedIterator, "#5");
            Assert.IsNull (task.TaskQueue, "#6");
        }
Exemplo n.º 11
0
        public void Execute()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (2, (a) => cnt += a.Length);

            try {
                task.Execute ();
                Assert.Fail ("#1");
            } catch (NullReferenceException) {}

            task [0] = new PortElement<int> (10);
            try {
                task.Execute ();
                Assert.Fail ("#2");
            } catch (NullReferenceException) {}

            task [1] = new PortElement<int> (20);
            Assert.IsNull (task.Execute (), "#3");
            Assert.AreEqual (3, cnt, "#4");
        }
Exemplo n.º 12
0
        internal PortElement <T> ElementListRemoveFirst()
        {
            if (Elements == null)
            {
                return(null);
            }
            if (Elements._next == Elements)
            {
                PortElement <T> elements = Elements;
                Elements = null;
                ElementCount--;
                return(elements);
            }
            PortElement <T> elements2 = Elements;

            Elements                 = Elements._next;
            Elements._previous       = elements2._previous;
            Elements._previous._next = Elements;
            ElementCount--;
            return(elements2);
        }
Exemplo n.º 13
0
        public void simpleInputPortElement()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            PortElement portElement = factory.createPortElement(PortDirection.Input, "port");

            Assert.AreEqual(portElement.Name, "port");
            Assert.AreEqual(portElement.ID, 0);

            Assert.AreEqual(portElement.PortKind, PortDirection.Input);

            portElement.Value = LogicValue.Enum.High;

            Assert.AreEqual(portElement.Outputs[0].Value, LogicValue.Enum.High);

            portElement.Value = LogicValue.Enum.Low;

            Assert.AreEqual(portElement.Outputs[0].Value, LogicValue.Enum.Low);
        }
        public void simple2AND()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            PortElement a = factory.createPortElement(PortDirection.Input, "a");
            PortElement b = factory.createPortElement(PortDirection.Input, "b");

            PortElement c = factory.createPortElement(PortDirection.Output, "c");

            ILogicalElement and2 = factory.createLogicalElement(LibraryElementKind.Enum.AND, 2);

            Utils.Evaluator evaluator = new Utils.Evaluator(and2, new PortList {
                c
            });

            and2.makeConnection(a, 0, 0);
            and2.makeConnection(b, 1, 0);

            c.makeConnection(and2, 0, 0);

            a.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(c.Value, LogicValue.Enum.Unknown);

            b.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(c.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(c.Value, LogicValue.Enum.High);

            a.Value = LogicValue.Enum.Unknown;
            evaluator.evaluate();
            Assert.AreEqual(c.Value, LogicValue.Enum.Unknown);
        }
Exemplo n.º 15
0
        internal void PostInternal(bool insertAtHead, PortElement <T> node)
        {
            bool            flag            = false;
            ITask           task            = null;
            DispatcherQueue dispatcherQueue = null;

            lock (Store)
            {
                if (insertAtHead)
                {
                    Store.ElementListAddFirst(node);
                }
                else
                {
                    Store.ElementListAddLast(node);
                }
                if (Store.ReceiverCount == 0)
                {
                    return;
                }
                int num = 1;
                if (Store.ActiveReceiver == null)
                {
                    num = Store.ReceiverCount;
                }
                ReceiverTask receiverTask = Store.ActiveReceiver;
                int          i            = 0;
                while (i < num)
                {
                    if (num != 1)
                    {
                        receiverTask = Store.GetReceiverAtIndex(i);
                    }
                    task            = null;
                    flag            = receiverTask.Evaluate(node, ref task);
                    dispatcherQueue = receiverTask.TaskQueue;
                    if (flag)
                    {
                        Store.ElementListRemove(node);
                        if (receiverTask.State != ReceiverTaskState.Persistent)
                        {
                            Store.RemoveReceiver(receiverTask);
                            if (i > 1)
                            {
                                i--;
                            }
                            else
                            {
                                receiverTask = Store.ActiveReceiver;
                            }
                            num = Store.ReceiverCount;
                            break;
                        }
                        break;
                    }
                    else
                    {
                        if (task != null)
                        {
                            dispatcherQueue.Enqueue(task);
                        }
                        i++;
                    }
                }
            }
            if (flag && task != null)
            {
                dispatcherQueue.Enqueue(task);
            }
        }
Exemplo n.º 16
0
        public void PostElementThenTestForElement()
        {
            int tmp;
            var p = new Port<int> ();
            ;			var elem = new PortElement<int> (99);
            p.PostElement (elem);

            Assert.AreEqual (1, p.ItemCount, "#1");
            var res = p.TestForElement ();
            Assert.AreEqual (elem, res, "#2");
            Assert.AreEqual (0, p.ItemCount, "#3");
            Assert.AreEqual (null, res.Owner, "#4");
        }
Exemplo n.º 17
0
 public void PostElementBad()
 {
     var p = new Port<int> ();
     ;			var elem = new PortElement<double> (99);
     try {
         p.PostElement (elem);
         Assert.Fail ("#1");
     } catch (InvalidCastException) {} /*LAMEIMPL, stupid exception to throw*/
     try {
         p.PostElement (null);
         Assert.Fail ("#2");
     } catch (NullReferenceException) {} /*LAMEIMPL, stupid exception to throw*/
 }
Exemplo n.º 18
0
        public void simple_2_4_DC()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            ILogicalElement dc = factory.createLogicalElement(LibraryElementKind.Enum.DC, 2);

            PortElement addressLow  = factory.createPortElement(PortDirection.Input, "a0");
            PortElement addressHigh = factory.createPortElement(PortDirection.Input, "a1");

            PortElement enable = factory.createPortElement(PortDirection.Input, "en");

            PortElement b_port = factory.createPortElement(PortDirection.Output, "b");
            PortElement c_port = factory.createPortElement(PortDirection.Output, "c");
            PortElement d_port = factory.createPortElement(PortDirection.Output, "d");
            PortElement e_port = factory.createPortElement(PortDirection.Output, "e");

            dc.makeConnection(addressLow, 0, 0);
            dc.makeConnection(addressHigh, 1, 0);

            dc.makeConnection(enable, 2, 0);

            b_port.makeConnection(dc, 0, 0);
            c_port.makeConnection(dc, 0, 1);
            d_port.makeConnection(dc, 0, 2);
            e_port.makeConnection(dc, 0, 3);

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Unknown);

            // enable = X

            enable.Value      = LogicValue.Enum.DontCare;
            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.Low;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.High;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // enable low

            enable.Value = LogicValue.Enum.Low;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.DontCare;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //enable high
            // 00

            enable.Value = LogicValue.Enum.High;

            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.Low;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.High;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 10

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.Low;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 11

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.High;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            // X1

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.High;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // XX

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.DontCare;

            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);
        }
Exemplo n.º 19
0
        public void simple_4_1_Mux()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            ILogicalElement mux = factory.createLogicalElement(LibraryElementKind.Enum.MUX, 2);

            PortElement a_port = factory.createPortElement(PortDirection.Input, "a");
            PortElement b_port = factory.createPortElement(PortDirection.Input, "b");
            PortElement c_port = factory.createPortElement(PortDirection.Input, "c");
            PortElement d_port = factory.createPortElement(PortDirection.Input, "d");

            PortElement addressLow  = factory.createPortElement(PortDirection.Input, "adr_l");
            PortElement addressHigh = factory.createPortElement(PortDirection.Input, "adr_h");

            PortElement e_port = factory.createPortElement(PortDirection.Output, "e");

            Utils.Evaluator evaluator = new Utils.Evaluator(mux, new PortList {
                e_port
            });

            mux.makeConnection(a_port, 0, 0);
            mux.makeConnection(b_port, 1, 0);
            mux.makeConnection(c_port, 2, 0);
            mux.makeConnection(d_port, 3, 0);

            mux.makeConnection(addressLow, 4, 0);
            mux.makeConnection(addressHigh, 5, 0);

            e_port.makeConnection(mux, 1, 0);

            Assert.AreEqual(e_port.Value, LogicValue.Enum.Unknown);

            // 000U
            // 00
            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.Low;
            a_port.Value      = LogicValue.Enum.Unknown;
            b_port.Value      = LogicValue.Enum.Low;
            c_port.Value      = LogicValue.Enum.Low;
            d_port.Value      = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Unknown);

            //dcba
            //0000
            //1X

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.DontCare;
            a_port.Value      = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 01
            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.High;
            b_port.Value      = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //1000
            //1X

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.DontCare;
            d_port.Value      = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            //1100
            // 1X
            c_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //11X0
            // 1X

            b_port.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //11XX
            // 1X

            a_port.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //11XX
            //X0

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            //11X0
            //X0

            a_port.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // 11X1
            // X0

            a_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            // 11X1
            // XX

            addressLow.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // 1101
            // XX

            b_port.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // 1111
            // XX

            b_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            // 0000
            // XX

            a_port.Value = LogicValue.Enum.Low;
            b_port.Value = LogicValue.Enum.Low;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 0000
            // 00

            addressLow.Value  = LogicValue.Enum.Low;
            addressHigh.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //0001
            //00

            a_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //0001
            //01

            addressLow.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //0011
            //01

            b_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //0011
            //11

            addressHigh.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //1011
            //11

            d_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            //1011
            //10

            addressLow.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //1111
            //10

            c_port.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);
        }
Exemplo n.º 20
0
        public void ExecuteWithBoundFirstArg()
        {
            double cntA = 1;
            int cntB = 1;
            var task = new VariableArgumentTask<double, int> (1, (a, b) => { cntA += a; cntB += b.Length; });

            task [0] = new PortElement <double> (4);
            task [1] = new PortElement <int> (2);
            Assert.IsNull (task.Execute (), "#1");
            Assert.AreEqual (5, cntA, "#2");
            Assert.AreEqual (2, cntB, "#3");
        }
Exemplo n.º 21
0
        public void PortElementCountAndItemProperties()
        {
            int cnt = 0;
            Task tk = new Task (() => ++cnt);

            Assert.AreEqual (0, tk.PortElementCount, "#1");
            try {
                tk [0] = new PortElement<int> (10);
                Assert.Fail ("#2");
            } catch (NotSupportedException) {}

            try {
                object f = tk [0];
                Assert.Fail ("#3");
            } catch (NotSupportedException) {}
        }
Exemplo n.º 22
0
        public void Task1ExecuteWithBoundObject()
        {
            int cnt = 0;
            var tk = new Task<int> (5, (a) => cnt += a);
            tk.Execute ();
            Assert.AreEqual (5, cnt, "#1");
            tk.Execute ();
            Assert.AreEqual (10, cnt, "#2");

            Assert.IsNotNull (tk [0], "#3");
            tk [0] = new PortElement<int> (2);
            tk.Execute ();
            Assert.AreEqual (12, cnt, "#4");
        }
Exemplo n.º 23
0
        public void Task1PartialCloneDoesntCloneArgument()
        {
            int cnt = 0;
            Handler<int> h = (a) => cnt += a;
            PortElement<int> pe = new PortElement<int> (10);
            var tk = new Task<int> (h);
            tk [0] = pe;

            ITask it = tk.PartialClone ();
            Assert.IsTrue (it is Task<int>, "#1");

            var tk2 = (Task<int>)it;
            Assert.IsNull (tk2 [0], "#2");

            tk = new Task<int> (99, h);
            it = tk.PartialClone ();
            Assert.IsNull (it [0], "#3");
        }
Exemplo n.º 24
0
        public void simple_1_4_DMX()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            ILogicalElement dmx = factory.createLogicalElement(LibraryElementKind.Enum.DMX, 2);

            PortElement addressLow  = factory.createPortElement(PortDirection.Input, "a0");
            PortElement addressHigh = factory.createPortElement(PortDirection.Input, "a1");

            PortElement data = factory.createPortElement(PortDirection.Input, "data");

            PortElement enable = factory.createPortElement(PortDirection.Input, "en");

            PortElement b_port = factory.createPortElement(PortDirection.Output, "b");
            PortElement c_port = factory.createPortElement(PortDirection.Output, "c");
            PortElement d_port = factory.createPortElement(PortDirection.Output, "d");
            PortElement e_port = factory.createPortElement(PortDirection.Output, "e");

            Utils.Evaluator evaluator = new Utils.Evaluator(dmx, new PortList {
                b_port, c_port, d_port, e_port
            });

            dmx.makeConnection(addressLow, 0, 0);
            dmx.makeConnection(addressHigh, 1, 0);

            dmx.makeConnection(data, 2, 0);

            dmx.makeConnection(enable, 3, 0);

            b_port.makeConnection(dmx, 0, 0);
            c_port.makeConnection(dmx, 0, 1);
            d_port.makeConnection(dmx, 0, 2);
            e_port.makeConnection(dmx, 0, 3);

            Assert.AreEqual(b_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Unknown);

            // enable = X

            enable.Value      = LogicValue.Enum.DontCare;
            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.Low;
            data.Value        = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // enable low

            enable.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            //enable high
            // 00

            enable.Value = LogicValue.Enum.High;

            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.Low;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);


            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 01

            addressHigh.Value = LogicValue.Enum.Low;
            addressLow.Value  = LogicValue.Enum.High;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 10

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.Low;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            // 11

            addressHigh.Value = LogicValue.Enum.High;
            addressLow.Value  = LogicValue.Enum.High;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // X1

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.High;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            // XX

            addressHigh.Value = LogicValue.Enum.DontCare;
            addressLow.Value  = LogicValue.Enum.DontCare;

            data.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);

            data.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            data.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            Assert.AreEqual(b_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(c_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(d_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);

            /***************************************************************************/
        }
Exemplo n.º 25
0
        public void Task1Execute()
        {
            int cnt = 0;
            var tk = new Task<int> ((a) => cnt += a);

            try {
                tk.Execute ();
                Assert.Fail ("#1"); //no value at port 1
            } catch (NullReferenceException) {}

            var pe = new PortElement<int> (10);
            tk [0] = pe;
            tk.Execute ();
            Assert.AreEqual (10, cnt, "#2");
            Assert.AreEqual (pe, tk [0], "#3");

            tk [0] = new PortElement<int> (2);
            tk.Execute ();
            Assert.AreEqual (12, cnt, "#3");
        }
        public void simple3AND()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            PortElement a = factory.createPortElement(PortDirection.Input, "a");
            PortElement b = factory.createPortElement(PortDirection.Input, "b");
            PortElement c = factory.createPortElement(PortDirection.Input, "c");

            PortElement d = factory.createPortElement(PortDirection.Output, "d");

            ILogicalElement and3 = factory.createLogicalElement(LibraryElementKind.Enum.AND, 3);

            Utils.Evaluator evaluator = new Utils.Evaluator(and3, new PortList {
                d
            });

            and3.makeConnection(a, 0, 0);
            and3.makeConnection(b, 1, 0);
            and3.makeConnection(c, 2, 0);

            d.makeConnection(and3, 0, 0);

            a.Value = LogicValue.Enum.Unknown;
            b.Value = LogicValue.Enum.Low;
            c.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            // U00
            Assert.AreEqual(d.Value, LogicValue.Enum.Unknown);

            a.Value = LogicValue.Enum.Low;
            b.Value = LogicValue.Enum.Unknown;
            c.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            // 0U1
            Assert.AreEqual(d.Value, LogicValue.Enum.Unknown);

            a.Value = LogicValue.Enum.DontCare;
            b.Value = LogicValue.Enum.High;
            c.Value = LogicValue.Enum.Unknown;
            evaluator.evaluate();
            // X1U
            Assert.AreEqual(d.Value, LogicValue.Enum.Unknown);

            a.Value = LogicValue.Enum.DontCare;
            b.Value = LogicValue.Enum.High;
            c.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            // X00
            Assert.AreEqual(d.Value, LogicValue.Enum.DontCare);

            a.Value = LogicValue.Enum.DontCare;
            b.Value = LogicValue.Enum.High;
            c.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            // X0X
            Assert.AreEqual(d.Value, LogicValue.Enum.DontCare);

            a.Value = LogicValue.Enum.Low;
            b.Value = LogicValue.Enum.DontCare;
            c.Value = LogicValue.Enum.DontCare;
            evaluator.evaluate();
            // 0XX
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.DontCare;
            b.Value = LogicValue.Enum.Low;
            c.Value = LogicValue.Enum.DontCare;
            // X0X
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.DontCare;
            b.Value = LogicValue.Enum.DontCare;
            c.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            // XX0
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.High;
            b.Value = LogicValue.Enum.High;
            c.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            // 111
            Assert.AreEqual(d.Value, LogicValue.Enum.High);

            a.Value = LogicValue.Enum.Low;
            b.Value = LogicValue.Enum.Low;
            c.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            // 001
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.High;
            b.Value = LogicValue.Enum.High;
            c.Value = LogicValue.Enum.Low;
            evaluator.evaluate();
            // 110
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);

            a.Value = LogicValue.Enum.High;
            b.Value = LogicValue.Enum.Low;
            c.Value = LogicValue.Enum.High;
            evaluator.evaluate();
            // 101
            Assert.AreEqual(d.Value, LogicValue.Enum.Low);
        }
Exemplo n.º 27
0
        public void simple_4_2_CD()
        {
            ElementsFactory factory = ElementsFactory.getInstance();

            factory.reset();

            ILogicalElement cd = factory.createLogicalElement(LibraryElementKind.Enum.ENC, 2);

            PortElement a_port = factory.createPortElement(PortDirection.Input, "a");
            PortElement b_port = factory.createPortElement(PortDirection.Input, "b");
            PortElement c_port = factory.createPortElement(PortDirection.Input, "c");
            PortElement d_port = factory.createPortElement(PortDirection.Input, "d");

            PortElement enable = factory.createPortElement(PortDirection.Input, "en");

            PortElement e_port = factory.createPortElement(PortDirection.Output, "e");
            PortElement f_port = factory.createPortElement(PortDirection.Output, "f");

            Utils.Evaluator evaluator = new Utils.Evaluator(cd, new PortList {
                e_port, f_port
            });

            cd.makeConnection(a_port, 0, 0);
            cd.makeConnection(b_port, 1, 0);
            cd.makeConnection(c_port, 2, 0);
            cd.makeConnection(d_port, 3, 0);

            cd.makeConnection(enable, 4, 0);

            e_port.makeConnection(cd, 0, 0);
            f_port.makeConnection(cd, 0, 1);

            Assert.AreEqual(e_port.Value, LogicValue.Enum.Unknown);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Unknown);

            // enable = X

            enable.Value = LogicValue.Enum.DontCare;
            a_port.Value = LogicValue.Enum.Low;
            b_port.Value = LogicValue.Enum.Low;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.DontCare);

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.High;
            d_port.Value = LogicValue.Enum.High;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.DontCare);

            // enable low

            enable.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Low);

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.High;
            d_port.Value = LogicValue.Enum.High;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Low);

            //enable high
            // 1XXX

            enable.Value = LogicValue.Enum.High;

            a_port.Value = LogicValue.Enum.DontCare;
            b_port.Value = LogicValue.Enum.DontCare;
            c_port.Value = LogicValue.Enum.DontCare;
            d_port.Value = LogicValue.Enum.High;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.High);

            // 1010

            a_port.Value = LogicValue.Enum.Low;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.High);

            // 01XX

            a_port.Value = LogicValue.Enum.DontCare;
            b_port.Value = LogicValue.Enum.DontCare;
            c_port.Value = LogicValue.Enum.High;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.High);

            // 0111

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.High;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.High);

            // 001X

            a_port.Value = LogicValue.Enum.DontCare;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Low);

            // 0011

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.High;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.High);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Low);

            // 0001

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.Low;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.Low);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.Low);

            // 0X01

            a_port.Value = LogicValue.Enum.High;
            b_port.Value = LogicValue.Enum.Low;
            c_port.Value = LogicValue.Enum.DontCare;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.DontCare);

            // 0000

            a_port.Value = LogicValue.Enum.Low;
            b_port.Value = LogicValue.Enum.Low;
            c_port.Value = LogicValue.Enum.Low;
            d_port.Value = LogicValue.Enum.Low;

            evaluator.evaluate();
            Assert.AreEqual(e_port.Value, LogicValue.Enum.DontCare);
            Assert.AreEqual(f_port.Value, LogicValue.Enum.DontCare);

            /***************************************************************************/
        }
Exemplo n.º 28
0
        public void ItemPropertyBounds()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (5, (a) => cnt += a.Length);

            try {
                task [-1] = new PortElement<int> (10);
                Assert.Fail ("#1");
            } catch (IndexOutOfRangeException) {}

            try {
                task [5] = new PortElement<int> (10);
                Assert.Fail ("#2");
            } catch (IndexOutOfRangeException) {}

            try {
                var obj = task [-1];
                Assert.Fail ("#3");
            } catch (IndexOutOfRangeException) {}

            try {
                var obj = task [5];
                Assert.Fail ("#4");
            } catch (IndexOutOfRangeException) {}
        }
Exemplo n.º 29
0
 internal void Clear()
 {
     ElementCount = 0;
     Elements     = null;
 }
Exemplo n.º 30
0
        public void Task1SetInvalidItem()
        {
            int cnt = 0;
            var tk = new Task<int> ((a) => cnt += a);

            try {
                tk [1] = new PortElement<int> (2);
                Assert.Fail ("#1");
            } catch (ArgumentException) {}

            try {
                var obj = tk [1];
                Assert.Fail ("#2");
            } catch (ArgumentException) {}

            try {
                tk [0] = new PortElement<double> (2);
                Assert.Fail ("#3");
            } catch (InvalidCastException) {} //LAMEIMPL it should report a better error and take any IPortElement<T>
        }
Exemplo n.º 31
0
        public void ItemProperty()
        {
            var pa = new Port<int> ();
            var pb = new Port<string> ();

            var ra = Arbiter.Receive (false, pa, (i) => {});
            var rb = Arbiter.Receive (false, pb, (s) => {});

            var c = new Choice (ra, rb);

            try {
                c [0] = new PortElement<int> (10);
                Assert.Fail ("#1");
            } catch (NotSupportedException) {}

            try {
                var x = c [1];
                Assert.Fail ("#2");
            } catch (NotSupportedException) {}
        }
Exemplo n.º 32
0
        public void PartialCloneEmptyElements()
        {
            int cnt = 1;
            var task = new VariableArgumentTask<int> (2, (a) => cnt += a.Length);
            task [0] = new PortElement<int> (10);
            task [1] = new PortElement<int> (20);

            var tk = task.PartialClone ();
            Assert.IsNull (tk [0], "#1");
            Assert.IsNull (tk [0], "#2");
        }