Beispiel #1
0
    private void Awake()
    {
        if (s != null)
        {
            Debug.LogError(string.Format("More than one singleton copy of {0} is detected! this shouldn't happen.", this.ToString()));
        }

        s = this;
    }
    public void TestConnectorOneInOneOutBelttoBuilding()
    {
        // Arrange
        int numberOfCases = 2;
        var connectors    = new Connector[numberOfCases];

        connectors[0] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBuilding(), new Position(1, 0), 1)
            },
        };
        connectors[1] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBuilding(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(1, 0), 1)
            },
        };

        // Act, do 4 ticks to complete movement
        for (int ticks = 0; ticks < 4; ticks++)
        {
            for (int i = 0; i < numberOfCases; i++)
            {
                FactorySimulator.UpdateConnector(connectors[i]);
            }
        }


        // Assert
        Assert.AreEqual(true, CheckBeltEmptyness(connectors[0].inputs[0]));
        Assert.AreEqual(1, GetBuildingInputCount(connectors[0].outputs[0]));
        Assert.AreEqual(0, GetBuildingOutputCount(connectors[0].outputs[0]));


        Assert.AreEqual(1, GetBuildingInputCount(connectors[1].inputs[0]));
        Assert.AreEqual(0, GetBuildingOutputCount(connectors[1].inputs[0]));
        Assert.AreEqual(false, CheckBeltEmptyness(connectors[1].outputs[0]));
    }
    public void TestConnectorOneInOneOutBeltToBelt()
    {
        // Arrange
        int numberOfCases = 4;
        var connectors    = new Connector[numberOfCases];

        connectors[0] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(1, 0), 1)
            },
        };
        connectors[1] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(1, 0), 1)
            },
        };
        connectors[2] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(1, 0), 1)
            },
        };
        connectors[3] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(1, 0), 1)
            },
        };

        // Act
        for (int i = 0; i < numberOfCases; i++)
        {
            FactorySimulator.UpdateConnector(connectors[i]);
        }


        // Assert
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].outputs[0]));

        Assert.IsFalse(CheckBeltEmptyness(connectors[1].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[1].outputs[0]));

        Assert.IsTrue(CheckBeltEmptyness(connectors[3].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[3].outputs[0]));


        // only case where we see transportation
        Assert.IsTrue(CheckBeltEmptyness(connectors[2].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[2].outputs[0]));


        // Connectors take a few updates to transport items
        FactorySimulator.UpdateConnector(connectors[2]);

        Assert.IsTrue(CheckBeltEmptyness(connectors[2].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[2].outputs[0]));


        FactorySimulator.UpdateConnector(connectors[2]);

        Assert.IsTrue(CheckBeltEmptyness(connectors[2].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[2].outputs[0]));


        FactorySimulator.UpdateConnector(connectors[2]);

        Assert.IsTrue(CheckBeltEmptyness(connectors[2].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[2].outputs[0]));
    }
    // long connectors should take length + 2 ticks to transfer
    public void TestLongConnectors()
    {
        // Arrange
        int numberOfCases = 2;
        var connectors    = new Connector[numberOfCases];

        // Should take 1 + 2 ticks
        connectors[0] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(4, 0), 1)
            },
        };

        // Should take 10 + 2 ticks
        connectors[1] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBelt(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBelt(), new Position(9, 0), 1)
            },
        };

        // Act, do 5 tick to take item
        for (int i = 0; i < numberOfCases; i++)
        {
            FactorySimulator.UpdateConnector(connectors[i]);
        }



        // Assert
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].outputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[1].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[1].outputs[0]));

        // Act, do 6 ticks to complete movement for first one
        for (int ticks = 0; ticks < 6; ticks++)
        {
            for (int i = 0; i < numberOfCases; i++)
            {
                FactorySimulator.UpdateConnector(connectors[i]);
            }
        }


        // Assert
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[0].outputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[1].inputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[1].outputs[0]));


        // Act, do 5 more ticks to complete movement for the second one as well
        for (int ticks = 0; ticks < 6; ticks++)
        {
            for (int i = 0; i < numberOfCases; i++)
            {
                FactorySimulator.UpdateConnector(connectors[i]);
            }
        }


        // Assert
        Assert.IsTrue(CheckBeltEmptyness(connectors[0].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[0].outputs[0]));
        Assert.IsTrue(CheckBeltEmptyness(connectors[1].inputs[0]));
        Assert.IsFalse(CheckBeltEmptyness(connectors[1].outputs[0]));
    }
    public void TestConnectorOneInOneOutBuildingToBuilding()
    {
        // Arrange
        int numberOfCases = 4;
        var connectors    = new Connector[numberOfCases];

        connectors[0] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBuilding(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBuilding(), new Position(1, 0), 1)
            },
        };
        connectors[1] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBuilding(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBuilding(), new Position(1, 0), 1)
            },
        };
        connectors[2] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBuilding(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBuilding(), new Position(1, 0), 1)
            },
        };
        connectors[3] = new Connector(new Position(), new Position())
        {
            inputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetEmptyBuilding(), new Position(0, 0), 1)
            },
            outputs = new List <Connector.Connection>()
            {
                new Connector.Connection(GetFullBuilding(), new Position(1, 0), 1)
            },
        };

        // Act
        for (int i = 0; i < numberOfCases; i++)
        {
            FactorySimulator.UpdateConnector(connectors[i]);
        }


        // Assert
        Assert.AreEqual(GetBuildingInputCount(connectors[0].inputs[0]), 0);
        Assert.AreEqual(GetBuildingOutputCount(connectors[0].inputs[0]), 0);
        Assert.AreEqual(GetBuildingInputCount(connectors[0].outputs[0]), 0);
        Assert.AreEqual(GetBuildingOutputCount(connectors[0].outputs[0]), 0);

        Assert.AreEqual(GetBuildingInputCount(connectors[1].inputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[1].inputs[0]), 1);
        Assert.AreEqual(GetBuildingInputCount(connectors[1].outputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[1].outputs[0]), 1);

        Assert.AreEqual(GetBuildingInputCount(connectors[3].inputs[0]), 0);
        Assert.AreEqual(GetBuildingOutputCount(connectors[3].inputs[0]), 0);
        Assert.AreEqual(GetBuildingInputCount(connectors[3].outputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[3].outputs[0]), 1);



        // Only case where we expect some movement
        Assert.AreEqual(GetBuildingInputCount(connectors[2].inputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].inputs[0]), 0);
        Assert.AreEqual(GetBuildingInputCount(connectors[2].outputs[0]), 0);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].outputs[0]), 0);



        // Movement takes 3 more ticks
        FactorySimulator.UpdateConnector(connectors[2]);


        Assert.AreEqual(GetBuildingInputCount(connectors[2].inputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].inputs[0]), 0);
        Assert.AreEqual(GetBuildingInputCount(connectors[2].outputs[0]), 0);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].outputs[0]), 0);


        FactorySimulator.UpdateConnector(connectors[2]);
        FactorySimulator.UpdateConnector(connectors[2]);

        Assert.AreEqual(GetBuildingInputCount(connectors[2].inputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].inputs[0]), 0);
        Assert.AreEqual(GetBuildingInputCount(connectors[2].outputs[0]), 1);
        Assert.AreEqual(GetBuildingOutputCount(connectors[2].outputs[0]), 0);
    }
Beispiel #6
0
    public void TestBeltUpdateMidSpaceRemovalAndMerge()
    {
        // Arrange
        int numberOfCases = 3;
        var belts         = new Belt[numberOfCases];

        belts[0] = new Belt(new Position(0, 0), new Position(2, 0))
        {
            items = new List <Belt.BeltSegment>()
            {
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = Item.GetEmpty()
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
            }
        };
        belts[1] = new Belt(new Position(0, 0), new Position(5, 0))
        {
            items = new List <Belt.BeltSegment>()
            {
                new Belt.BeltSegment()
                {
                    count = 1, item = Item.GetEmpty()
                },
                new Belt.BeltSegment()
                {
                    count = 2, item = new Item().MakeDummyItem(2)
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = Item.GetEmpty()
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(2)
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
            }
        };
        belts[2] = new Belt(new Position(0, 0), new Position(4, 0))
        {
            items = new List <Belt.BeltSegment>()
            {
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = Item.GetEmpty()
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = Item.GetEmpty()
                },
                new Belt.BeltSegment()
                {
                    count = 1, item = new Item().MakeDummyItem(1)
                },
            }
        };

        // Act
        for (int i = 0; i < numberOfCases; i++)
        {
            FactorySimulator.UpdateBelt(belts[i]);
        }


        // Assert
        var corrects = new List <Belt.BeltSegment> [numberOfCases];

        corrects[0] = new List <Belt.BeltSegment>()
        {
            new Belt.BeltSegment()
            {
                count = 1, item = Item.GetEmpty()
            },
            new Belt.BeltSegment()
            {
                count = 2, item = new Item().MakeDummyItem(1)
            },
        };
        corrects[1] = new List <Belt.BeltSegment>()
        {
            new Belt.BeltSegment()
            {
                count = 2, item = Item.GetEmpty()
            },
            new Belt.BeltSegment()
            {
                count = 3, item = new Item().MakeDummyItem(2)
            },
            new Belt.BeltSegment()
            {
                count = 1, item = new Item().MakeDummyItem(1)
            },
        };
        corrects[2] = new List <Belt.BeltSegment>()
        {
            new Belt.BeltSegment()
            {
                count = 1, item = Item.GetEmpty()
            },
            new Belt.BeltSegment()
            {
                count = 1, item = new Item().MakeDummyItem(1)
            },
            new Belt.BeltSegment()
            {
                count = 1, item = Item.GetEmpty()
            },
            new Belt.BeltSegment()
            {
                count = 2, item = new Item().MakeDummyItem(1)
            },
        };


        for (int i = 0; i < numberOfCases; i++)
        {
            Assert.IsTrue(BeltSegmentEqualityChecker(belts[i].items, corrects[i]));
        }
    }