public void TestCriticalWrap()
        {
            bool[,] map = new bool[5, 5];
            ExplorationMap.Configuration config = defaultConfig;
            config.visibilityCheck = v => map[v.x, v.y];
            ExplorationMap dut = new ExplorationMap(config);

            dut.SetCriticalZone(new Vector2i(2, 0), 1);

            Assert.IsTrue(dut.map[2, 4].isCritical);
            Assert.IsTrue(dut.map[2, 0].isCritical);
        }
        public void TestCritical()
        {
            bool[,] map = new bool[5, 5];
            ExplorationMap.Configuration config = defaultConfig;
            config.visibilityCheck = v => map[v.y, v.x];
            ExplorationMap dut = new ExplorationMap(config);

            dut.SetCriticalZone(new Vector2i(3, 2), 1);

            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsTrue(dut.map[3, 2].needsVisit);
            Assert.IsTrue(dut.map[3, 1].needsVisit);
            Assert.IsTrue(dut.map[1, 1].needsVisit);


            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, v, _, v, _ },
                { _, _, _, v, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsFalse(dut.map[3, 2].needsVisit);
            Assert.IsFalse(dut.map[3, 1].needsVisit);
            Assert.IsFalse(dut.map[1, 1].needsVisit);

            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, v, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsFalse(dut.map[3, 2].needsVisit);
            Assert.IsFalse(dut.map[3, 1].needsVisit);
            Assert.IsFalse(dut.map[1, 1].needsVisit);


            for (int i = 0; i < 2; i++)
            {
                dut.Update();
            }

            //
            //      CRITICAL ZONE ACTIVATES HERE
            //

            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsTrue(dut.map[3, 2].needsVisit);
            Assert.IsTrue(dut.map[3, 1].needsVisit);
            Assert.IsFalse(dut.map[1, 1].needsVisit);


            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, v, _, v, _ },
                { _, _, _, v, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsFalse(dut.map[3, 2].needsVisit);
            Assert.IsFalse(dut.map[3, 1].needsVisit);
            Assert.IsFalse(dut.map[1, 1].needsVisit);

            Copy(new bool[5, 5]
            {
                { _, _, _, _, _ },
                { _, v, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
                { _, _, _, _, _ },
            }, map, 5, 5);

            dut.Update();
            Assert.IsTrue(dut.map[3, 2].needsVisit);
            Assert.IsTrue(dut.map[3, 1].needsVisit);
            Assert.IsFalse(dut.map[1, 1].needsVisit);


            for (int i = 0; i < 2; i++)
            {
                dut.Update();
            }
        }