/// <summary>
        /// Fills grid with tiles.
        /// </summary>
        /// <param name="grid">The empty grid.</param>
        public void InitilizeGrid(IGrid grid)
        {
            var emptyTile = new Tile(string.Empty, GlobalConstants.TotalTilesCount - 1, TileType.Empty);

            for (int i = 0; i < GlobalConstants.TotalTilesCount - 1; i++)
            {
                Tile tile = emptyTile.CloneMemberwise();
                tile.Label = (i + 1).ToString();
                tile.Position = i;
                tile.Type = TileType.Number;
                grid.AddTile(tile);
            }

            grid.AddTile(emptyTile);
        }
        public void TestCheckIfSortedWhenGridIsNotSorted()
        {
            var grid = new Grid();
            var emptyTile = new Tile(string.Empty, 0, TileType.Empty);
            grid.AddTile(emptyTile);

            for (int i = GlobalConstants.TotalTilesCount - 1; i > 0; i--)
            {
                Tile tile = emptyTile.CloneMemberwise();
                tile.Label = (i + 1).ToString();
                tile.Position = i;
                tile.Type = TileType.Number;
                grid.AddTile(tile);
            }

            bool actual = grid.IsSorted;
            var expected = false;
            Assert.AreEqual(expected, actual);
        }
        public void TestGetEnumerator()
        {
            var grid = new Grid();

            var emptyTile = new Tile(string.Empty, 0, TileType.Empty);
            grid.AddTile(emptyTile);

            Tile tile = emptyTile.CloneMemberwise();
            tile.Label = "1";
            tile.Position = 1;
            tile.Type = TileType.Number;
            grid.AddTile(tile);

            foreach (Tile item in grid)
            {
                item.Label = "test";
            }

            var actual = emptyTile.Label;
            var expected = "test";

            Assert.AreEqual(expected, actual);
        }
        public void TestSwapTiles()
        {
            var grid = new Grid();

            var emptyTile = new Tile(string.Empty, 0, TileType.Empty);
            grid.AddTile(emptyTile);

            Tile tile = emptyTile.CloneMemberwise();
            tile.Label = "1";
            tile.Position = 1;
            tile.Type = TileType.Number;
            grid.AddTile(tile);

            grid.SwapTiles(tile);

            var actual = tile.Position;
            var expected = 0;

            Assert.AreEqual(expected, actual);
        }
        /// <summary>
        /// Helper method for tile comparison when two tiles are identical.
        /// </summary>
        /// <param name="tile">Tile to be cloned.</param>
        /// <param name="newLabel">String Value of the Label property for the new Tile.</param>
        /// <param name="newPosition">String Value of the Position property for the new Tile.</param>
        /// <param name="newType">Enumeration TileType specifies the type of the new cloned Tile.Default is TileType.Number.</param>
        /// <returns>New Tile with the specified input values.</returns>
        private Tile CloneTile(Tile tile, string newLabel, int newPosition, TileType newType = TileType.Number)
        {
            var newTile = tile.CloneMemberwise();
            newTile.Label = newLabel;
            newTile.Position = newPosition;
            newTile.Type = newType;

            return newTile;
        }