Ejemplo n.º 1
0
        static void TestRing(bool oscillation)
        {
            Circuit c = new Circuit();

            Gates.BasicGates.Not mnot1 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot2 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot3 = new Gates.BasicGates.Not();

            c.Add(mnot1);
            c.Add(mnot2);
            c.Add(mnot3);

            mnot3.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(mnot3_PropertyChanged);

            mnot1[0] = false;

            c[new Terminal(0, mnot2)] = new Terminal(0, mnot1);
            c[new Terminal(0, mnot3)] = new Terminal(0, mnot2);
            if (oscillation)
            {
                c[new Terminal(0, mnot1)] = new Terminal(0, mnot3);
            }


            Thread.Sleep(1000);
            c.Disconnect(new Terminal(0, mnot1));
        }
Ejemplo n.º 2
0
        public void ThruCircuit2()
        {
            Gates.Circuit c = new Gates.Circuit();
            c.Start();

            Gates.BasicGates.Not mnot1 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot2 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot3 = new Gates.BasicGates.Not();

            c.Add(mnot1);
            c.Add(mnot2);
            c.Add(mnot3);

            mnot1[0] = true;

            c[new Gates.Terminal(0, mnot2)] = new Gates.Terminal(0, mnot1);
            c[new Gates.Terminal(0, mnot3)] = new Gates.Terminal(0, mnot2);



            Gates.PropagationThread.Instance.WaitOnPropagation();
            Assert.AreEqual(false, mnot3.Output[0]);

            mnot1[0] = false;
            Gates.PropagationThread.Instance.WaitOnPropagation();
            Assert.AreEqual(true, mnot3.Output[0]);

            c.Disconnect(new Gates.Terminal(0, mnot2));
            Gates.PropagationThread.Instance.WaitOnPropagation();
            Assert.AreEqual(false, mnot3.Output[0]);
        }
Ejemplo n.º 3
0
        static IC Nor()
        {
            Circuit nor = new Circuit();

            Gates.BasicGates.And mand  = new Gates.BasicGates.And();
            Gates.BasicGates.Not mnot1 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot2 = new Gates.BasicGates.Not();

            Gates.IOGates.UserInput  in1  = new Gates.IOGates.UserInput();
            Gates.IOGates.UserInput  in2  = new Gates.IOGates.UserInput();
            Gates.IOGates.UserOutput out1 = new Gates.IOGates.UserOutput();

            nor.Add(mand);
            nor.Add(mnot1);
            nor.Add(mnot2);
            nor.Add(in1);
            nor.Add(in2);
            nor.Add(out1);

            nor[new Terminal(0, mnot1)] = new Terminal(0, in1);
            nor[new Terminal(0, mnot2)] = new Terminal(0, in2);
            nor[new Terminal(0, mand)]  = new Terminal(0, mnot1);
            nor[new Terminal(1, mand)]  = new Terminal(0, mnot2);
            nor[new Terminal(0, out1)]  = new Terminal(0, mand);

            return(new IC(nor, new Gates.IOGates.UserInput[] { in1, in2 },
                          new Gates.IOGates.UserOutput[] { out1 }, "Nor"));
        }
Ejemplo n.º 4
0
        public void ThruCircuit1()
        {
            Gates.Circuit c = new Gates.Circuit();
            c.Start();

            Gates.BasicGates.And mand  = new Gates.BasicGates.And();
            Gates.BasicGates.And mand2 = new Gates.BasicGates.And();
            Gates.BasicGates.Not mnot  = new Gates.BasicGates.Not();

            c.Add(mand);
            c.Add(mand2);
            c.Add(mnot);
            mand2[0] = true;

            c[new Gates.Terminal(1, mand2)] = new Gates.Terminal(0, mand);
            c[new Gates.Terminal(0, mnot)]  = new Gates.Terminal(0, mand2);


            Assert.AreEqual(true, mnot.Output[0]);

            mand[1] = true;
            Gates.PropagationThread.Instance.WaitOnPropagation();
            Assert.AreEqual(true, mnot.Output[0]);

            mand[0] = true;
            Gates.PropagationThread.Instance.WaitOnPropagation();
            Assert.AreEqual(false, mnot.Output[0]);
        }
Ejemplo n.º 5
0
        public void OscillationCircuit2()
        {
            Gates.Circuit c = new Gates.Circuit();
            c.Start();

            Gates.BasicGates.Not mnot1 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot2 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot3 = new Gates.BasicGates.Not();

            c.Add(mnot1);
            c.Add(mnot2);
            c.Add(mnot3);

            mnot1[0] = true;

            c[new Gates.Terminal(0, mnot2)] = new Gates.Terminal(0, mnot1);
            c[new Gates.Terminal(0, mnot3)] = new Gates.Terminal(0, mnot2);
            c[new Gates.Terminal(0, mnot1)] = new Gates.Terminal(0, mnot3);


            int      cnt    = 0;
            bool     oldval = true;
            DateTime start  = DateTime.Now;

            while (DateTime.Now - start < new TimeSpan(0, 0, 5))
            {
                if (mnot1.Output[0] != oldval)
                {
                    oldval = mnot1.Output[0];
                    cnt++;
                }
            }

            // after 5 seconds expect at least 5 oscillations
            if (cnt < 5)
            {
                Assert.Fail("Unacceptable count = " + cnt.ToString());
            }


            c.Disconnect(new Gates.Terminal(0, mnot2));
            cnt    = 0;
            oldval = false;
            start  = DateTime.Now;
            while (DateTime.Now - start < new TimeSpan(0, 0, 5))
            {
                if (mnot1.Output[0] != oldval)
                {
                    oldval = mnot1.Output[0];
                    cnt++;
                }
            }
            // wire is disconnected; no changes should occur
            // 1 change allowable for final sync
            if (cnt > 1)
            {
                Assert.Fail("Disconnect didn't: " + cnt.ToString());
            }
        }
Ejemplo n.º 6
0
        public void OscillationCircuit1()
        {
            Gates.Circuit c = new Gates.Circuit();
            c.Start();

            Gates.BasicGates.And mand  = new Gates.BasicGates.And();
            Gates.BasicGates.And mand2 = new Gates.BasicGates.And();
            Gates.BasicGates.Not mnot  = new Gates.BasicGates.Not();

            c.Add(mand);
            c.Add(mand2);
            c.Add(mnot);
            mand2[0] = true;
            mand[1]  = false;

            c[new Gates.Terminal(1, mand2)] = new Gates.Terminal(0, mand);
            c[new Gates.Terminal(0, mnot)]  = new Gates.Terminal(0, mand2);
            c[new Gates.Terminal(0, mand)]  = new Gates.Terminal(0, mnot);


            int      cnt    = 0;
            bool     oldval = true;
            DateTime start  = DateTime.Now;

            while (DateTime.Now - start < new TimeSpan(0, 0, 5))
            {
                if (mnot.Output[0] != oldval)
                {
                    oldval = mnot.Output[0];
                    cnt++;
                }
            }
            // 5 seconds but circuit should be "off" due to first and
            Assert.AreEqual(0, cnt);

            // turn circuit on and try again
            mand[1] = true;
            cnt     = 0;
            oldval  = false;
            start   = DateTime.Now;
            while (DateTime.Now - start < new TimeSpan(0, 0, 5))
            {
                if (mnot.Output[0] != oldval)
                {
                    oldval = mnot.Output[0];
                    cnt++;
                }
            }

            // 5 seconds at arbitrarily high propagation rate
            // we'll assume AT LEAST 1 prop a second
            if (cnt < 5)
            {
                Assert.Fail("Unacceptable count = " + cnt.ToString());
            }

            c.Stop();
        }
Ejemplo n.º 7
0
        public void Not()
        {
            Gates.BasicGates.Not not = new Gates.BasicGates.Not();
            not[0] = false;

            Assert.AreEqual(not.Output[0], true);

            not[0] = true;
            Assert.AreEqual(not.Output[0], false);
        }
Ejemplo n.º 8
0
        static void TestUserIO()
        {
            Circuit c = new Circuit();

            Gates.BasicGates.Not mnot1 = new Gates.BasicGates.Not();
            Gates.BasicGates.And mand  = new Gates.BasicGates.And();
            Gates.BasicGates.Not mnot3 = new Gates.BasicGates.Not();
            Gates.BasicGates.Not mnot2 = new Gates.BasicGates.Not();

            Gates.IOGates.UserInput  ui = new Gates.IOGates.UserInput();
            Gates.IOGates.UserOutput uo = new Gates.IOGates.UserOutput();

            c.Add(mnot1);
            c.Add(mnot2);
            c.Add(mand);
            c.Add(mnot3);

            c.Add(ui);
            c.Add(uo);


            uo.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(uo_PropertyChanged);

            c[new Terminal(0, mand)]  = new Terminal(0, mnot2);
            c[new Terminal(0, mnot3)] = new Terminal(0, mand);
            c[new Terminal(0, mnot1)] = new Terminal(0, mnot3);
            c[new Terminal(0, mnot2)] = new Terminal(0, mnot1);

            c[new Terminal(1, mand)] = new Terminal(0, ui);
            c[new Terminal(0, uo)]   = new Terminal(0, mnot3);



            do
            {
                Console.Out.WriteLine("Ready for X");
                Console.In.ReadLine();
                ui.Value = !ui.Value;
            } while (true);
        }
Ejemplo n.º 9
0
        static void TestAndNotLoop(bool oscillation)
        {
            Circuit c = new Circuit();

            Gates.BasicGates.And mand  = new Gates.BasicGates.And();
            Gates.BasicGates.And mand2 = new Gates.BasicGates.And();
            Gates.BasicGates.Not mnot  = new Gates.BasicGates.Not();
            mand2.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(mand2_PropertyChanged);
            mnot.PropertyChanged  += new System.ComponentModel.PropertyChangedEventHandler(mnot3_PropertyChanged);
            c.Add(mand);
            c.Add(mand2);
            c.Add(mnot);
            mand2[0] = true;


            c[new Terminal(1, mand2)] = new Terminal(0, mand);
            c[new Terminal(0, mnot)]  = new Terminal(0, mand2);
            if (oscillation)
            {
                c[new Terminal(0, mand)] = new Terminal(0, mnot);
            }

            Console.Out.WriteLine(mand2.Output[0].ToString());

            mand[1] = true;
            Console.Out.WriteLine(mand2.Output[0].ToString());

            mand[0] = true;
            Console.Out.WriteLine(mand2.Output[0].ToString());

            Console.Out.Write(mnot.Output[0].ToString());
            Gates.PropagationThread.Instance.WaitOnPropagation();
            Console.Out.Write(mnot.Output[0].ToString());

            Console.Out.Write(mnot[0].ToString());

            Console.Out.Write("X");
        }
Ejemplo n.º 10
0
 static void mnot3_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
 {
     Gates.BasicGates.Not mnot = (Gates.BasicGates.Not)sender;
     Console.Out.WriteLine("MNOT3 NOTIFY: " + mnot.Output[0].ToString());
 }