public void CircuitStateEndDefinitionTest()
        {
            ProjectTester.InitResources();
            CircuitProject project      = CircuitProject.Create(null);
            CircuitButton  button       = null;
            CircuitSymbol  buttonSymbol = null;
            Gate           led          = null;
            CircuitSymbol  ledSymbol    = null;

            project.InTransaction(() => {
                button       = project.CircuitButtonSet.Create("b", false, PinSide.Right);
                buttonSymbol = project.CircuitSymbolSet.Create(button, project.ProjectSet.Project.LogicalCircuit, 1, 1);
                led          = project.GateSet.Gate(GateType.Led, 1, false);
                ledSymbol    = project.CircuitSymbolSet.Create(led, project.ProjectSet.Project.LogicalCircuit, 5, 1);
            });

            CircuitState   target         = new CircuitState(3);
            int            buttonResult   = target.ReserveState();
            FunctionButton functionButton = new FunctionButton(target, new CircuitSymbol[] { buttonSymbol }, buttonResult);
            FunctionLed    functionLed    = new FunctionLed(target, new CircuitSymbol[] { ledSymbol }, buttonResult);

            target.EndDefinition();

            Assert.IsTrue(functionButton.Dependent != null && functionButton.Dependent.Length == 1 && functionButton.Dependent[0] == functionLed);
            Assert.IsTrue(functionLed.Dependent == null);
        }
        public void CircuitProjectSaveLoadTest()
        {
            string dir  = Path.Combine(this.TestContext.TestRunDirectory, this.TestContext.TestName + DateTime.UtcNow.Ticks, "Some Test Sub Directory");
            string file = Path.Combine(dir, "My Test File.CircuitProject");

            // save in inexistent folder
            CircuitProject project1 = CircuitProject.Create(null);

            project1.InTransaction(() => {
                LogicalCircuit main        = project1.ProjectSet.Project.LogicalCircuit;
                CircuitButton button       = project1.CircuitButtonSet.Create("b", false, PinSide.Right);
                CircuitSymbol buttonSymbol = project1.CircuitSymbolSet.Create(button, main, 1, 2);
                Gate led = project1.GateSet.Gate(GateType.Led, 1, false);
                project1.CircuitSymbolSet.Create(led, main, 6, 2);
                Wire wire = project1.WireSet.Create(main, new GridPoint(3, 3), new GridPoint(6, 3));
            });
            Assert.IsTrue(!Directory.Exists(dir));
            project1.Save(file);
            Assert.IsTrue(File.Exists(file));
            CircuitProject project2 = CircuitProject.Create(file);

            Assert.IsTrue(ProjectTester.Equal(project1, project2));

            // save in existing folder and existing file.
            CircuitProject project3 = ProjectTester.Load(this.TestContext, Properties.Resources.Digital_Clock, null);

            Assert.IsTrue(File.Exists(file));
            project3.Save(file);
            CircuitProject project4 = CircuitProject.Create(file);

            File.Delete(file);
            Assert.IsTrue(ProjectTester.Equal(project3, project4));
        }
        public void ConductorMapThreeWiresJoinTest()
        {
            CircuitProject project = CircuitProject.Create(null);
            LogicalCircuit circuit = project.ProjectSet.Project.LogicalCircuit;
            Wire           wire1   = null;
            Wire           wire2   = null;
            Wire           wire3   = null;

            project.InTransaction(() => wire1 = project.WireSet.Create(circuit, new GridPoint(1, 2), new GridPoint(3, 4)));
            project.InTransaction(() => wire2 = project.WireSet.Create(circuit, new GridPoint(5, 6), new GridPoint(7, 8)));

            ConductorMap target0 = new ConductorMap(circuit);

            Assert.AreEqual(2, target0.Conductors.Count());

            project.InTransaction(() => wire3 = project.WireSet.Create(circuit, new GridPoint(5, 6), new GridPoint(1, 2)));

            ConductorMap target = new ConductorMap(circuit);

            Assert.AreEqual(1, target.Conductors.Count());
            Conductor conductor;

            Assert.IsTrue(target.TryGetValue(new GridPoint(7, 8), out conductor));
            Assert.AreEqual(3, conductor.Wires.Count());
            Assert.AreEqual(4, conductor.Points.Count());
        }
        public void ConductorMapTwoWiresTwoConductorTest()
        {
            CircuitProject project = CircuitProject.Create(null);
            LogicalCircuit circuit = project.ProjectSet.Project.LogicalCircuit;
            Wire           wire1   = null;
            Wire           wire2   = null;

            project.InTransaction(() => wire1 = project.WireSet.Create(circuit, new GridPoint(1, 2), new GridPoint(3, 4)));
            project.InTransaction(() => wire2 = project.WireSet.Create(circuit, new GridPoint(5, 6), new GridPoint(7, 8)));
            Assert.IsNotNull(wire1);
            Assert.IsNotNull(wire2);

            ConductorMap target = new ConductorMap(circuit);

            Assert.AreEqual(2, target.Conductors.Count());

            Conductor conductor1;

            Assert.IsTrue(target.TryGetValue(new GridPoint(3, 4), out conductor1));
            Assert.AreEqual(1, conductor1.Wires.Count());
            Assert.AreEqual(2, conductor1.Points.Count());

            Conductor conductor2;

            Assert.IsTrue(target.TryGetValue(new GridPoint(3, 4), out conductor2));
            Assert.AreEqual(1, conductor2.Wires.Count());
            Assert.AreEqual(2, conductor2.Points.Count());
        }
        public void GraphicsArrayAddressBitWidthTest()
        {
            CircuitProject project = CircuitProject.Create(null);
            GraphicsArray  target  = null;

            project.InTransaction(() => {
                target = project.GraphicsArraySet.Create(1, 1, 1, 1);
                project.CircuitSymbolSet.Create(target, project.ProjectSet.Project.LogicalCircuit, 10, 10);
            });
            Assert.IsNotNull(target);
            Assert.AreEqual(1, target.AddressBitWidth);

            Func <int, int, int, int, int> abw = (int dataBitWidth, int bpp, int w, int h) => {
                project.InTransaction(() => {
                    target.DataBitWidth = dataBitWidth;
                    target.BitsPerPixel = bpp;
                    target.Width        = w;
                    target.Height       = h;
                });
                return(target.AddressBitWidth);
            };

            Assert.AreEqual(5, abw(8, 1, 10, 10));
            Assert.AreEqual(7, abw(1, 1, 10, 10));
            Assert.AreEqual(10, abw(1, 8, 10, 10));
            Assert.AreEqual(13, abw(8, 1, 320, 200));
            Assert.AreEqual(15, abw(8, 4, 320, 200));
            Assert.AreEqual(16, abw(8, 8, 320, 200));
            Assert.AreEqual(19, abw(8, GraphicsArray.MaxBitsPerPixel, GraphicsArray.MaxWidth, GraphicsArray.MaxHeight));
            Assert.AreEqual(22, abw(1, GraphicsArray.MaxBitsPerPixel, GraphicsArray.MaxWidth, GraphicsArray.MaxHeight));
        }
        public void ConductorMapEmptyTest()
        {
            CircuitProject project = CircuitProject.Create(null);
            LogicalCircuit circuit = project.ProjectSet.Project.LogicalCircuit;
            ConductorMap   target  = new ConductorMap(circuit);

            Assert.AreEqual(0, target.Conductors.Count());
        }
        public static CircuitProject Load(TestContext testContext, string projectText, string initialCircuit)
        {
            // First save project text to test directory
            string path = Path.Combine(testContext.TestRunDirectory, string.Format("{0}.{1}.{2}.xml", testContext.FullyQualifiedTestClassName, testContext.TestName, DateTime.UtcNow.Ticks));

            File.WriteAllText(path, projectText, Encoding.UTF8);
            // Load it from test directory
            CircuitProject circuitProject = CircuitProject.Create(path);

            File.Delete(path);
            ProjectTester.InitResources();
            if (initialCircuit != null)
            {
                ProjectTester.SwitchTo(circuitProject, initialCircuit);
            }
            ProjectTester.GuaranteeGlyph(circuitProject);
            return(circuitProject);
        }
        public void ConductorMapOneWireTest()
        {
            CircuitProject project = CircuitProject.Create(null);
            LogicalCircuit circuit = project.ProjectSet.Project.LogicalCircuit;
            Wire           wire    = null;

            project.InTransaction(() => wire = project.WireSet.Create(circuit, new GridPoint(1, 2), new GridPoint(3, 4)));
            Assert.IsNotNull(wire);
            ConductorMap target = new ConductorMap(circuit);

            Assert.AreEqual(1, target.Conductors.Count());
            Conductor conductor;
            bool      success = target.TryGetValue(new GridPoint(3, 4), out conductor);

            Assert.IsTrue(success);
            Assert.AreEqual(1, conductor.Wires.Count());
            Assert.AreSame(wire, conductor.Wires.First());
        }