public function set(int $row, int $column, Tile $tile)
    {
        $this->assertEmptyTileSlot($row, $column, $tile);
        switch ($tile->getValue()) {
            case Tile::SMALL:
                $this->cells[$row][$column] = Cell::SMALL();
                $this->small += 1;
                break;
            case Tile::TALL:
                $this->cells[$row][$column] = Cell::TALL_TOP();
                $this->cells[$row + 1][$column] = Cell::TALL_BOTTOM();
                $this->tall += 1;
                break;
            case Tile::WIDE:
                $this->cells[$row][$column] = Cell::WIDE_LEFT();
                $this->cells[$row][$column + 1] = Cell::WIDE_RIGHT();
                $this->wide += 1;
                break;
        }
    }