public void Union_GivenTwoPositions_CanUnionElements()
        {
            // arrange
            var expectedParent = 0;
            var map            = new int[4][]
            {
                new int[5] {
                    1, 1, 1, 1, 0
                },
                new int[5] {
                    1, 1, 0, 1, 0
                },
                new int[5] {
                    1, 1, 0, 0, 0
                },
                new int[5] {
                    0, 0, 0, 0, 0
                },
            };
            var uf = new UnionFind.App.UnionFind(map);

            // act
            uf.Union(0, 1);
            var parent0 = uf.Find(0);
            var parent1 = uf.Find(1);

            // assert
            Assert.Equal(expectedParent, parent0);
            Assert.Equal(expectedParent, parent1);
        }
        public void Ctor_GivenMap_ReturnsCorrectElementsCount()
        {
            // arrange
            var expectedCnt = 9;
            var map         = new int[4][]
            {
                new int[5] {
                    1, 1, 1, 1, 0
                },
                new int[5] {
                    1, 1, 0, 1, 0
                },
                new int[5] {
                    1, 1, 0, 0, 0
                },
                new int[5] {
                    0, 0, 0, 0, 0
                },
            };

            // act
            var uf = new UnionFind.App.UnionFind(map);

            // assert
            Assert.Equal(expectedCnt, uf.GetCount());
        }
        public void Find_GivenPosition_ReturnsParent()
        {
            // arrange
            var expectedParent1 = 1;
            var expectedParent4 = 0;
            var map             = new int[4][]
            {
                new int[5] {
                    1, 1, 1, 1, 0
                },
                new int[5] {
                    1, 1, 0, 1, 0
                },
                new int[5] {
                    1, 1, 0, 0, 0
                },
                new int[5] {
                    0, 0, 0, 0, 0
                },
            };
            var uf = new UnionFind.App.UnionFind(map);

            // act
            var parent1 = uf.Find(1);
            var parent4 = uf.Find(4);

            // assert
            Assert.Equal(expectedParent1, parent1);
            Assert.Equal(expectedParent4, parent4);
        }
        public void GetNumberOfIslands_GivenSquareMapWith1Islan_Returns1()
        {
            //Given
            var map = new int[2][]
            {
                new int[2] {
                    1, 0
                },
                new int[2] {
                    0, 1
                },
            };
            var uf = new UnionFind.App.UnionFind(map);

            //When
            var nOfI = uf.GetNumberOfIslands(map);

            //Then
            Assert.Equal(2, nOfI);
        }