[INFO] cloning repository https://github.com/CodingMentalModels/knucklebones-solver
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/CodingMentalModels/knucklebones-solver" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCodingMentalModels%2Fknucklebones-solver", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCodingMentalModels%2Fknucklebones-solver'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 847f2eec5c31346d345220dbc09309732a599482
[INFO] testing CodingMentalModels/knucklebones-solver against master#2fd6efc32704647e64d3d646d21c4c68eae100e4 for pr-149852-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FCodingMentalModels%2Fknucklebones-solver" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/CodingMentalModels/knucklebones-solver
[INFO] finished tweaking git repo https://github.com/CodingMentalModels/knucklebones-solver
[INFO] tweaked toml for git repo https://github.com/CodingMentalModels/knucklebones-solver written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/CodingMentalModels/knucklebones-solver on toolchain 2fd6efc32704647e64d3d646d21c4c68eae100e4
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/CodingMentalModels/knucklebones-solver already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded textwrap v0.15.1
[INFO] [stderr]   Downloaded syn v1.0.100
[INFO] [stderr]   Downloaded clap v3.2.22
[INFO] [stderr]   Downloaded libc v0.2.133
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] aa8ab11319301c75195d809ab2214916308ca8a864dc916ab68bb25483626493
[INFO] running `Command { std: "docker" "start" "-a" "aa8ab11319301c75195d809ab2214916308ca8a864dc916ab68bb25483626493", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "aa8ab11319301c75195d809ab2214916308ca8a864dc916ab68bb25483626493", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "aa8ab11319301c75195d809ab2214916308ca8a864dc916ab68bb25483626493", kill_on_drop: false }`
[INFO] [stdout] aa8ab11319301c75195d809ab2214916308ca8a864dc916ab68bb25483626493
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e3fc4328bdfa194686aed13a8ac86e577fd01ea5d681eafc60b65fbf24bceb4d
[INFO] running `Command { std: "docker" "start" "-a" "e3fc4328bdfa194686aed13a8ac86e577fd01ea5d681eafc60b65fbf24bceb4d", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.133
[INFO] [stderr]    Compiling proc-macro2 v1.0.43
[INFO] [stderr]    Compiling unicode-ident v1.0.4
[INFO] [stderr]    Compiling syn v1.0.100
[INFO] [stderr]    Compiling ppv-lite86 v0.2.16
[INFO] [stderr]    Compiling os_str_bytes v6.3.0
[INFO] [stderr]    Compiling textwrap v0.15.1
[INFO] [stderr]    Compiling once_cell v1.14.0
[INFO] [stderr]    Compiling indexmap v1.9.1
[INFO] [stderr]    Compiling clap_lex v0.2.4
[INFO] [stderr]    Compiling quote v1.0.21
[INFO] [stderr]    Compiling getrandom v0.2.7
[INFO] [stderr]    Compiling atty v0.2.14
[INFO] [stderr]    Compiling proc-macro-error-attr v1.0.4
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling proc-macro-error v1.0.4
[INFO] [stderr]    Compiling clap_derive v3.2.18
[INFO] [stderr]    Compiling clap v3.2.22
[INFO] [stderr]    Compiling knucklebones-solver v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `ansi_term::Colour`
[INFO] [stdout]  --> src/board/board.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ansi_term::Colour;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Board`
[INFO] [stdout]  --> src/solver/solver.rs:1:27
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::board::board::{Board, Move, Outcome, Player};
[INFO] [stdout]   |                           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/solver/solver.rs:103:32
[INFO] [stdout]     |
[INFO] [stdout] 103 |             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stdout]     |                                ^                                                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 103 -             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stdout] 103 +             Player::Player1 => player_2_empty_squares - player_1_empty_squares + finishing_first_bonus ,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Evaluation` and `HeuristicDepthAndObjective`
[INFO] [stdout]   --> src/main.rs:11:49
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::solver::solver::{Solver, SolverMode, Evaluation, HeuristicDepthAndObjective};
[INFO] [stdout]    |                                                 ^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `column_index` is assigned to, but never used
[INFO] [stdout]    --> src/board/board.rs:148:13
[INFO] [stdout]     |
[INFO] [stdout] 148 |         let mut column_index = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_column_index` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `column_index` is never read
[INFO] [stdout]    --> src/board/board.rs:152:13
[INFO] [stdout]     |
[INFO] [stdout] 152 |             column_index += 1;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `row`
[INFO] [stdout]    --> src/board/board.rs:171:53
[INFO] [stdout]     |
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |                                                     ^^^ help: if this is intentional, prefix it with an underscore: `_row`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `col`
[INFO] [stdout]    --> src/board/board.rs:171:65
[INFO] [stdout]     |
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_col`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x_bitboard`
[INFO] [stdout]    --> src/board/board.rs:175:16
[INFO] [stdout]     |
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_x_bitboard`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `o_bitboard`
[INFO] [stdout]    --> src/board/board.rs:175:38
[INFO] [stdout]     |
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_o_bitboard`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/board/board.rs:408:13
[INFO] [stdout]     |
[INFO] [stdout] 408 |         let mut index = 0;
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/board/board.rs:408:13
[INFO] [stdout]     |
[INFO] [stdout] 408 |         let mut index = 0;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:123:28
[INFO] [stdout]     |
[INFO] [stdout] 123 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 123 -             NodeType::Roll(player) => {
[INFO] [stdout] 123 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 123 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:132:28
[INFO] [stdout]     |
[INFO] [stdout] 132 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 132 -             NodeType::Move(player, die) => {
[INFO] [stdout] 132 +             NodeType::Move(board::board::Player::Player1, die) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 132 |             NodeType::Move(_player, die) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:152:28
[INFO] [stdout]     |
[INFO] [stdout] 152 |             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 152 -             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout] 152 +             NodeType::Move(board::board::Player::Player1, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 152 |             NodeType::Move(_player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:158:28
[INFO] [stdout]     |
[INFO] [stdout] 158 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 158 -             NodeType::Roll(player) => {
[INFO] [stdout] 158 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 158 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:161:36
[INFO] [stdout]     |
[INFO] [stdout] 161 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:181:28
[INFO] [stdout]     |
[INFO] [stdout] 181 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 181 -             NodeType::Roll(player) => {
[INFO] [stdout] 181 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 181 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:184:36
[INFO] [stdout]     |
[INFO] [stdout] 184 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:347:30
[INFO] [stdout]     |
[INFO] [stdout] 347 |     pub fn with_rolls(&self, die: Die) -> Result<Node, String> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:349:28
[INFO] [stdout]     |
[INFO] [stdout] 349 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 349 -             NodeType::Roll(player) => {
[INFO] [stdout] 349 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 349 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:354:28
[INFO] [stdout]     |
[INFO] [stdout] 354 |             NodeType::Move(player, _) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 354 -             NodeType::Move(player, _) => {
[INFO] [stdout] 354 +             NodeType::Move(board::board::Player::Player1, _) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 354 |             NodeType::Move(_player, _) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/solver/solver.rs:88:13
[INFO] [stdout]    |
[INFO] [stdout] 88 |         let mut player_1_empty_squares = node.get_player_1_board().get_n_empty_squares() as f32;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/solver/solver.rs:89:13
[INFO] [stdout]    |
[INFO] [stdout] 89 |         let mut player_2_empty_squares = node.get_player_2_board().get_n_empty_squares() as f32;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut game = Node::new(player_board, opponent_board, NodeType::Move(Player::Player1, die));
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `all` is never used
[INFO] [stdout]   --> src/board/board.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Move {
[INFO] [stdout]    | --------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn all() -> Vec<Move> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_string_with_square_highlighted` and `new` are never used
[INFO] [stdout]    --> src/board/board.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout]  82 | impl Board {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Bitboard` is never constructed
[INFO] [stdout]    --> src/board/board.rs:375:12
[INFO] [stdout]     |
[INFO] [stdout] 375 | pub struct Bitboard(u16);
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/board/board.rs:379:12
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl Bitboard {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 378 |
[INFO] [stdout] 379 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 387 |     pub fn full() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 391 |     pub fn is_victory(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 403 |     pub fn from_binary(binary: &str) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn union(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn intersection(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn difference(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn contains(&self, other: Self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn set(&mut self, row: usize, col: usize) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn n_set(&self) -> usize {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn is_set(&self, row: usize, col: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_string` is never used
[INFO] [stdout]    --> src/board/board.rs:467:12
[INFO] [stdout]     |
[INFO] [stdout] 465 | impl Outcome {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] 466 |
[INFO] [stdout] 467 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_string` is never used
[INFO] [stdout]    --> src/board/board.rs:484:12
[INFO] [stdout]     |
[INFO] [stdout] 482 | impl Player {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] 483 |
[INFO] [stdout] 484 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_boards`, `get_die`, `get_n_empty_squares`, `get_scores`, `get_max_depth`, and `get_children` are never used
[INFO] [stdout]    --> src/tree/tree.rs:55:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl Node {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn get_boards(&self) -> (Board, Board) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  78 |     pub fn get_die(&self) -> Option<Die> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn get_n_empty_squares(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 360 |     pub fn get_scores(&self) -> (u16, u16) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 442 |     pub fn get_max_depth(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 450 |     pub fn get_children(&self) -> &Vec<Node> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_root` and `get_evaluation` are never used
[INFO] [stdout]   --> src/solver/solver.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl Solver {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn get_root(&self) -> &Node {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn get_evaluation(&mut self, solver_mode: SolverMode) -> Result<Evaluation, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `BruteForce` and `Heuristic` are never constructed
[INFO] [stdout]    --> src/solver/solver.rs:148:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub enum SolverMode {
[INFO] [stdout]     |          ---------- variants in this enum
[INFO] [stdout] 148 |     BruteForce,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 149 |     Heuristic(HeuristicDepthAndObjective),
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `SolverMode` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/tree/tree.rs:351:17
[INFO] [stdout]     |
[INFO] [stdout] 351 |                 to_return.add_rolls();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 351 |                 let _ = to_return.add_rolls();
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 14.21s
[INFO] running `Command { std: "docker" "inspect" "e3fc4328bdfa194686aed13a8ac86e577fd01ea5d681eafc60b65fbf24bceb4d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e3fc4328bdfa194686aed13a8ac86e577fd01ea5d681eafc60b65fbf24bceb4d", kill_on_drop: false }`
[INFO] [stdout] e3fc4328bdfa194686aed13a8ac86e577fd01ea5d681eafc60b65fbf24bceb4d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] d74215c8cbeb265b11500aa42563eae390d8aa07ada26f8ab4b77728164a182d
[INFO] running `Command { std: "docker" "start" "-a" "d74215c8cbeb265b11500aa42563eae390d8aa07ada26f8ab4b77728164a182d", kill_on_drop: false }`
[INFO] [stderr]    Compiling knucklebones-solver v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `ansi_term::Colour`
[INFO] [stdout]  --> src/board/board.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use ansi_term::Colour;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around match arm expression
[INFO] [stdout]    --> src/solver/solver.rs:103:32
[INFO] [stdout]     |
[INFO] [stdout] 103 |             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stdout]     |                                ^                                                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 103 -             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stdout] 103 +             Player::Player1 => player_2_empty_squares - player_1_empty_squares + finishing_first_bonus ,
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Evaluation` and `HeuristicDepthAndObjective`
[INFO] [stdout]   --> src/main.rs:11:49
[INFO] [stdout]    |
[INFO] [stdout] 11 | use crate::solver::solver::{Solver, SolverMode, Evaluation, HeuristicDepthAndObjective};
[INFO] [stdout]    |                                                 ^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/main.rs:270:9
[INFO] [stdout]     |
[INFO] [stdout] 270 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `column_index` is assigned to, but never used
[INFO] [stdout]    --> src/board/board.rs:148:13
[INFO] [stdout]     |
[INFO] [stdout] 148 |         let mut column_index = 0;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_column_index` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `column_index` is never read
[INFO] [stdout]    --> src/board/board.rs:152:13
[INFO] [stdout]     |
[INFO] [stdout] 152 |             column_index += 1;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `row`
[INFO] [stdout]    --> src/board/board.rs:171:53
[INFO] [stdout]     |
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |                                                     ^^^ help: if this is intentional, prefix it with an underscore: `_row`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `col`
[INFO] [stdout]    --> src/board/board.rs:171:65
[INFO] [stdout]     |
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_col`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `x_bitboard`
[INFO] [stdout]    --> src/board/board.rs:175:16
[INFO] [stdout]     |
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_x_bitboard`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `o_bitboard`
[INFO] [stdout]    --> src/board/board.rs:175:38
[INFO] [stdout]     |
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_o_bitboard`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/board/board.rs:408:13
[INFO] [stdout]     |
[INFO] [stdout] 408 |         let mut index = 0;
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `index`
[INFO] [stdout]    --> src/board/board.rs:408:13
[INFO] [stdout]     |
[INFO] [stdout] 408 |         let mut index = 0;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:123:28
[INFO] [stdout]     |
[INFO] [stdout] 123 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 123 -             NodeType::Roll(player) => {
[INFO] [stdout] 123 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 123 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:132:28
[INFO] [stdout]     |
[INFO] [stdout] 132 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 132 -             NodeType::Move(player, die) => {
[INFO] [stdout] 132 +             NodeType::Move(board::board::Player::Player1, die) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 132 |             NodeType::Move(_player, die) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:152:28
[INFO] [stdout]     |
[INFO] [stdout] 152 |             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 152 -             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout] 152 +             NodeType::Move(board::board::Player::Player1, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 152 |             NodeType::Move(_player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:158:28
[INFO] [stdout]     |
[INFO] [stdout] 158 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 158 -             NodeType::Roll(player) => {
[INFO] [stdout] 158 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 158 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:161:36
[INFO] [stdout]     |
[INFO] [stdout] 161 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:181:28
[INFO] [stdout]     |
[INFO] [stdout] 181 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 181 -             NodeType::Roll(player) => {
[INFO] [stdout] 181 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 181 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:184:36
[INFO] [stdout]     |
[INFO] [stdout] 184 |             NodeType::Move(player, die) => {
[INFO] [stdout]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `die`
[INFO] [stdout]    --> src/tree/tree.rs:347:30
[INFO] [stdout]     |
[INFO] [stdout] 347 |     pub fn with_rolls(&self, die: Die) -> Result<Node, String> {
[INFO] [stdout]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:349:28
[INFO] [stdout]     |
[INFO] [stdout] 349 |             NodeType::Roll(player) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 349 -             NodeType::Roll(player) => {
[INFO] [stdout] 349 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 349 |             NodeType::Roll(_player) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `player`
[INFO] [stdout]    --> src/tree/tree.rs:354:28
[INFO] [stdout]     |
[INFO] [stdout] 354 |             NodeType::Move(player, _) => {
[INFO] [stdout]     |                            ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stdout]     |
[INFO] [stdout] 354 -             NodeType::Move(player, _) => {
[INFO] [stdout] 354 +             NodeType::Move(board::board::Player::Player1, _) => {
[INFO] [stdout]     |
[INFO] [stdout] help: if this is intentional, prefix it with an underscore
[INFO] [stdout]     |
[INFO] [stdout] 354 |             NodeType::Move(_player, _) => {
[INFO] [stdout]     |                            +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree/tree.rs:565:13
[INFO] [stdout]     |
[INFO] [stdout] 565 |         let mut result = root.add_move(m).is_ok();
[INFO] [stdout]     |             ----^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree/tree.rs:617:13
[INFO] [stdout]     |
[INFO] [stdout] 617 |         let mut new_node = root.get_children()[0].clone();
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/tree/tree.rs:671:13
[INFO] [stdout]     |
[INFO] [stdout] 671 |         let mut new_node = root.with_move_made(m).unwrap();
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/solver/solver.rs:88:13
[INFO] [stdout]    |
[INFO] [stdout] 88 |         let mut player_1_empty_squares = node.get_player_1_board().get_n_empty_squares() as f32;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/solver/solver.rs:89:13
[INFO] [stdout]    |
[INFO] [stdout] 89 |         let mut player_2_empty_squares = node.get_player_2_board().get_n_empty_squares() as f32;
[INFO] [stdout]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `evaluation`
[INFO] [stdout]    --> src/solver/solver.rs:269:31
[INFO] [stdout]     |
[INFO] [stdout] 269 | ...   let (evaluation_tree, evaluation) = solver.get_evaluation_tree(SolverMode::Hybrid(1, (2, |x| Solver::difference_heuristic(x, ...
[INFO] [stdout]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_evaluation`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `best_moves`
[INFO] [stdout]    --> src/solver/solver.rs:278:14
[INFO] [stdout]     |
[INFO] [stdout] 278 | ...   let (best_moves, evaluation) = solver.get_best_moves_and_evaluation(SolverMode::Hybrid(5, (4, |x| Solver::difference_heuristi...
[INFO] [stdout]     |            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_moves`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/main.rs:99:13
[INFO] [stdout]    |
[INFO] [stdout] 99 |         let mut game = Node::new(player_board, opponent_board, NodeType::Move(Player::Player1, die));
[INFO] [stdout]    |             ----^^^^
[INFO] [stdout]    |             |
[INFO] [stdout]    |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `all` is never used
[INFO] [stdout]   --> src/board/board.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl Move {
[INFO] [stdout]    | --------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub fn all() -> Vec<Move> {
[INFO] [stdout]    |            ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `to_string_with_square_highlighted` and `new` are never used
[INFO] [stdout]    --> src/board/board.rs:171:12
[INFO] [stdout]     |
[INFO] [stdout]  82 | impl Board {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Bitboard` is never constructed
[INFO] [stdout]    --> src/board/board.rs:375:12
[INFO] [stdout]     |
[INFO] [stdout] 375 | pub struct Bitboard(u16);
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/board/board.rs:379:12
[INFO] [stdout]     |
[INFO] [stdout] 377 | impl Bitboard {
[INFO] [stdout]     | ------------- associated items in this implementation
[INFO] [stdout] 378 |
[INFO] [stdout] 379 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 383 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 387 |     pub fn full() -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 391 |     pub fn is_victory(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 403 |     pub fn from_binary(binary: &str) -> Result<Self, String> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 427 |     pub fn union(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 431 |     pub fn intersection(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 435 |     pub fn difference(&self, other: &Self) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 439 |     pub fn contains(&self, other: Self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 443 |     pub fn set(&mut self, row: usize, col: usize) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 447 |     pub fn n_set(&self) -> usize {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 451 |     pub fn is_set(&self, row: usize, col: usize) -> bool {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_string` is never used
[INFO] [stdout]    --> src/board/board.rs:467:12
[INFO] [stdout]     |
[INFO] [stdout] 465 | impl Outcome {
[INFO] [stdout]     | ------------ method in this implementation
[INFO] [stdout] 466 |
[INFO] [stdout] 467 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_string` is never used
[INFO] [stdout]    --> src/board/board.rs:484:12
[INFO] [stdout]     |
[INFO] [stdout] 482 | impl Player {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] 483 |
[INFO] [stdout] 484 |     pub fn to_string(&self) -> String {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_boards` and `get_n_empty_squares` are never used
[INFO] [stdout]    --> src/tree/tree.rs:55:12
[INFO] [stdout]     |
[INFO] [stdout]  19 | impl Node {
[INFO] [stdout]     | --------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn get_boards(&self) -> (Board, Board) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn get_n_empty_squares(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_root` and `get_evaluation` are never used
[INFO] [stdout]   --> src/solver/solver.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl Solver {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn get_root(&self) -> &Node {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn get_evaluation(&mut self, solver_mode: SolverMode) -> Result<Evaluation, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/tree/tree.rs:351:17
[INFO] [stdout]     |
[INFO] [stdout] 351 |                 to_return.add_rolls();
[INFO] [stdout]     |                 ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 351 |                 let _ = to_return.add_rolls();
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/tree/tree.rs:793:9
[INFO] [stdout]     |
[INFO] [stdout] 793 |         expected_root.add_rolls();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 793 |         let _ = expected_root.add_rolls();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/tree/tree.rs:797:21
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     child.add_move(m);
[INFO] [stdout]     |                     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 797 |                     let _ = child.add_move(m);
[INFO] [stdout]     |                     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/solver/solver.rs:293:9
[INFO] [stdout]     |
[INFO] [stdout] 293 |         root.add_move(Move::new(2, 2));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 293 |         let _ = root.add_move(Move::new(2, 2));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/solver/solver.rs:305:9
[INFO] [stdout]     |
[INFO] [stdout] 305 |         root.add_move(Move::new(2, 2));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 305 |         let _ = root.add_move(Move::new(2, 2));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/solver/solver.rs:317:9
[INFO] [stdout]     |
[INFO] [stdout] 317 |         root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 317 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/solver/solver.rs:328:9
[INFO] [stdout]     |
[INFO] [stdout] 328 |         root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 328 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `Result` that must be used
[INFO] [stdout]    --> src/solver/solver.rs:339:9
[INFO] [stdout]     |
[INFO] [stdout] 339 |         root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 339 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1.13s
[INFO] running `Command { std: "docker" "inspect" "d74215c8cbeb265b11500aa42563eae390d8aa07ada26f8ab4b77728164a182d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d74215c8cbeb265b11500aa42563eae390d8aa07ada26f8ab4b77728164a182d", kill_on_drop: false }`
[INFO] [stdout] d74215c8cbeb265b11500aa42563eae390d8aa07ada26f8ab4b77728164a182d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+2fd6efc32704647e64d3d646d21c4c68eae100e4" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 01350e2da9c87d93dda986a79e98a14f9626ab942bd0a3b3dfa14f06e842ef89
[INFO] running `Command { std: "docker" "start" "-a" "01350e2da9c87d93dda986a79e98a14f9626ab942bd0a3b3dfa14f06e842ef89", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `ansi_term::Colour`
[INFO] [stderr]  --> src/board/board.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use ansi_term::Colour;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around match arm expression
[INFO] [stderr]    --> src/solver/solver.rs:103:32
[INFO] [stderr]     |
[INFO] [stderr] 103 |             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stderr]     |                                ^                                                                       ^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 103 -             Player::Player1 => (player_2_empty_squares - player_1_empty_squares + finishing_first_bonus),
[INFO] [stderr] 103 +             Player::Player1 => player_2_empty_squares - player_1_empty_squares + finishing_first_bonus ,
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Evaluation` and `HeuristicDepthAndObjective`
[INFO] [stderr]   --> src/main.rs:11:49
[INFO] [stderr]    |
[INFO] [stderr] 11 | use crate::solver::solver::{Solver, SolverMode, Evaluation, HeuristicDepthAndObjective};
[INFO] [stderr]    |                                                 ^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `super::*`
[INFO] [stderr]    --> src/main.rs:270:9
[INFO] [stderr]     |
[INFO] [stderr] 270 |     use super::*;
[INFO] [stderr]     |         ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable `column_index` is assigned to, but never used
[INFO] [stderr]    --> src/board/board.rs:148:13
[INFO] [stderr]     |
[INFO] [stderr] 148 |         let mut column_index = 0;
[INFO] [stderr]     |             ^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: consider using `_column_index` instead
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: value assigned to `column_index` is never read
[INFO] [stderr]    --> src/board/board.rs:152:13
[INFO] [stderr]     |
[INFO] [stderr] 152 |             column_index += 1;
[INFO] [stderr]     |             ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = help: maybe it is overwritten before being read?
[INFO] [stderr]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `row`
[INFO] [stderr]    --> src/board/board.rs:171:53
[INFO] [stderr]     |
[INFO] [stderr] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stderr]     |                                                     ^^^ help: if this is intentional, prefix it with an underscore: `_row`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `col`
[INFO] [stderr]    --> src/board/board.rs:171:65
[INFO] [stderr]     |
[INFO] [stderr] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stdout] 
[INFO] [stderr]     |                                                                 ^^^ help: if this is intentional, prefix it with an underscore: `_col`
[INFO] [stdout] running 26 tests
[INFO] [stderr] 
[INFO] [stdout] test board::board::test_board_tests::test_board_eliminates ... ok
[INFO] [stderr] warning: unused variable: `x_bitboard`
[INFO] [stdout] test board::board::test_board_tests::test_board_instantiates ... ok
[INFO] [stderr]    --> src/board/board.rs:175:16
[INFO] [stdout] test board::board::test_board_tests::test_board_sums ... ok
[INFO] [stderr]     |
[INFO] [stdout] test board::board::test_board_tests::test_board_debug_format ... ok
[INFO] [stderr] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout] test board::board::test_board_tests::test_move_instantiates ... ok
[INFO] [stderr]     |                ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_x_bitboard`
[INFO] [stdout] test tree::tree::test_tree::test_evaluates_outcome ... ok
[INFO] [stderr] 
[INFO] [stdout] test board::board::test_board_tests::test_dice_add ... ok
[INFO] [stderr] warning: unused variable: `o_bitboard`
[INFO] [stdout] test tree::tree::test_tree::test_node_gets_child ... ok
[INFO] [stderr]    --> src/board/board.rs:175:38
[INFO] [stdout] test board::board::test_board_tests::test_board_is_full ... ok
[INFO] [stderr]     |
[INFO] [stdout] test tree::tree::test_tree::test_get_moves_left_ignoring_elimination ... ok
[INFO] [stderr] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stdout] test tree::tree::test_tree::test_node_gets_legal_moves ... ok
[INFO] [stderr]     |                                      ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_o_bitboard`
[INFO] [stdout] test tree::tree::test_tree::test_node_gets_legal_moves_up_to_row_symmetry ... ok
[INFO] [stderr] 
[INFO] [stdout] test tree::tree::test_tree::test_tree_builds_entire_tree_up_to_symmetry ... ok
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stdout] test tree::tree::test_tree::test_node_handles_elimination ... ok
[INFO] [stderr]    --> src/board/board.rs:408:13
[INFO] [stdout] test tree::tree::test_tree::test_tree_instantiates ... ok
[INFO] [stderr]     |
[INFO] [stdout] test tree::tree::test_tree::test_node_gets_moves ... ok
[INFO] [stderr] 408 |         let mut index = 0;
[INFO] [stdout] test tree::tree::test_tree::test_tree_builds_to_depth ... ok
[INFO] [stderr]     |             ----^^^^^
[INFO] [stdout] test tree::tree::test_tree::test_node_makes_move_and_add_rolls ... ok
[INFO] [stderr]     |             |
[INFO] [stdout] test tree::tree::test_tree::test_node_with_move_made ... ok
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stdout] test tree::tree::test_tree::test_tree_pretty_prints ... ok
[INFO] [stderr]     |
[INFO] [stdout] test tree::tree::test_tree::test_node_generates_children_up_to_row_symmetry ... ok
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] test solver::solver::test_solver::test_solver_solves_hybrid ... ok
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `index`
[INFO] [stderr]    --> src/board/board.rs:408:13
[INFO] [stderr]     |
[INFO] [stderr] 408 |         let mut index = 0;
[INFO] [stderr]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_index`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:123:28
[INFO] [stderr]     |
[INFO] [stderr] 123 |             NodeType::Roll(player) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 123 -             NodeType::Roll(player) => {
[INFO] [stderr] 123 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 123 |             NodeType::Roll(_player) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:132:28
[INFO] [stderr]     |
[INFO] [stderr] 132 |             NodeType::Move(player, die) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 132 -             NodeType::Move(player, die) => {
[INFO] [stderr] 132 +             NodeType::Move(board::board::Player::Player1, die) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 132 |             NodeType::Move(_player, die) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:152:28
[INFO] [stderr]     |
[INFO] [stderr] 152 |             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 152 -             NodeType::Move(player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stderr] 152 +             NodeType::Move(board::board::Player::Player1, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 152 |             NodeType::Move(_player, _) => self.get_legal_moves().map_or(false, |moves| moves.contains(&m)),
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:158:28
[INFO] [stderr]     |
[INFO] [stderr] 158 |             NodeType::Roll(player) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 158 -             NodeType::Roll(player) => {
[INFO] [stderr] 158 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 158 |             NodeType::Roll(_player) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `die`
[INFO] [stderr]    --> src/tree/tree.rs:161:36
[INFO] [stderr]     |
[INFO] [stderr] 161 |             NodeType::Move(player, die) => {
[INFO] [stderr]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:181:28
[INFO] [stderr]     |
[INFO] [stderr] 181 |             NodeType::Roll(player) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 181 -             NodeType::Roll(player) => {
[INFO] [stderr] 181 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 181 |             NodeType::Roll(_player) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `die`
[INFO] [stderr]    --> src/tree/tree.rs:184:36
[INFO] [stderr]     |
[INFO] [stderr] 184 |             NodeType::Move(player, die) => {
[INFO] [stderr]     |                                    ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `die`
[INFO] [stderr]    --> src/tree/tree.rs:347:30
[INFO] [stderr]     |
[INFO] [stderr] 347 |     pub fn with_rolls(&self, die: Die) -> Result<Node, String> {
[INFO] [stderr]     |                              ^^^ help: if this is intentional, prefix it with an underscore: `_die`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:349:28
[INFO] [stderr]     |
[INFO] [stderr] 349 |             NodeType::Roll(player) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 349 -             NodeType::Roll(player) => {
[INFO] [stderr] 349 +             NodeType::Roll(board::board::Player::Player1) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 349 |             NodeType::Roll(_player) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `player`
[INFO] [stderr]    --> src/tree/tree.rs:354:28
[INFO] [stderr]     |
[INFO] [stderr] 354 |             NodeType::Move(player, _) => {
[INFO] [stderr]     |                            ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr] help: you might have meant to pattern match on the similarly named variant `Player1`
[INFO] [stderr]     |
[INFO] [stderr] 354 -             NodeType::Move(player, _) => {
[INFO] [stderr] 354 +             NodeType::Move(board::board::Player::Player1, _) => {
[INFO] [stderr]     |
[INFO] [stderr] help: if this is intentional, prefix it with an underscore
[INFO] [stderr]     |
[INFO] [stderr] 354 |             NodeType::Move(_player, _) => {
[INFO] [stderr]     |                            +
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree/tree.rs:565:13
[INFO] [stderr]     |
[INFO] [stderr] 565 |         let mut result = root.add_move(m).is_ok();
[INFO] [stderr]     |             ----^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree/tree.rs:617:13
[INFO] [stderr]     |
[INFO] [stderr] 617 |         let mut new_node = root.get_children()[0].clone();
[INFO] [stderr]     |             ----^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/tree/tree.rs:671:13
[INFO] [stderr]     |
[INFO] [stderr] 671 |         let mut new_node = root.with_move_made(m).unwrap();
[INFO] [stderr]     |             ----^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/solver/solver.rs:88:13
[INFO] [stderr]    |
[INFO] [stderr] 88 |         let mut player_1_empty_squares = node.get_player_1_board().get_n_empty_squares() as f32;
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/solver/solver.rs:89:13
[INFO] [stderr]    |
[INFO] [stderr] 89 |         let mut player_2_empty_squares = node.get_player_2_board().get_n_empty_squares() as f32;
[INFO] [stderr]    |             ----^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `evaluation`
[INFO] [stderr]    --> src/solver/solver.rs:269:31
[INFO] [stderr]     |
[INFO] [stderr] 269 | ...   let (evaluation_tree, evaluation) = solver.get_evaluation_tree(SolverMode::Hybrid(1, (2, |x| Solver::difference_heuristic(x, ...
[INFO] [stderr]     |                             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_evaluation`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `best_moves`
[INFO] [stderr]    --> src/solver/solver.rs:278:14
[INFO] [stderr]     |
[INFO] [stderr] 278 | ...   let (best_moves, evaluation) = solver.get_best_moves_and_evaluation(SolverMode::Hybrid(5, (4, |x| Solver::difference_heuristi...
[INFO] [stderr]     |            ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_best_moves`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/main.rs:99:13
[INFO] [stderr]    |
[INFO] [stderr] 99 |         let mut game = Node::new(player_board, opponent_board, NodeType::Move(Player::Player1, die));
[INFO] [stderr]    |             ----^^^^
[INFO] [stderr]    |             |
[INFO] [stderr]    |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `all` is never used
[INFO] [stderr]   --> src/board/board.rs:28:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl Move {
[INFO] [stderr]    | --------- associated function in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 28 |     pub fn all() -> Vec<Move> {
[INFO] [stderr]    |            ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `to_string_with_square_highlighted` and `new` are never used
[INFO] [stderr]    --> src/board/board.rs:171:12
[INFO] [stderr]     |
[INFO] [stderr]  82 | impl Board {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 171 |     pub fn to_string_with_square_highlighted(&self, row: usize, col: usize) -> String {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 175 |     pub fn new(x_bitboard: Bitboard, o_bitboard: Bitboard) -> Board {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Bitboard` is never constructed
[INFO] [stderr]    --> src/board/board.rs:375:12
[INFO] [stderr]     |
[INFO] [stderr] 375 | pub struct Bitboard(u16);
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/board/board.rs:379:12
[INFO] [stderr]     |
[INFO] [stderr] 377 | impl Bitboard {
[INFO] [stderr]     | ------------- associated items in this implementation
[INFO] [stderr] 378 |
[INFO] [stderr] 379 |     pub fn empty() -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 383 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 387 |     pub fn full() -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 391 |     pub fn is_victory(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 403 |     pub fn from_binary(binary: &str) -> Result<Self, String> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 427 |     pub fn union(&self, other: &Self) -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 431 |     pub fn intersection(&self, other: &Self) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 435 |     pub fn difference(&self, other: &Self) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 439 |     pub fn contains(&self, other: Self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 443 |     pub fn set(&mut self, row: usize, col: usize) {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 447 |     pub fn n_set(&self) -> usize {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 451 |     pub fn is_set(&self, row: usize, col: usize) -> bool {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_string` is never used
[INFO] [stderr]    --> src/board/board.rs:467:12
[INFO] [stderr]     |
[INFO] [stderr] 465 | impl Outcome {
[INFO] [stderr]     | ------------ method in this implementation
[INFO] [stderr] 466 |
[INFO] [stderr] 467 |     pub fn to_string(&self) -> String {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_string` is never used
[INFO] [stderr]    --> src/board/board.rs:484:12
[INFO] [stderr]     |
[INFO] [stderr] 482 | impl Player {
[INFO] [stderr]     | ----------- method in this implementation
[INFO] [stderr] 483 |
[INFO] [stderr] 484 |     pub fn to_string(&self) -> String {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_boards` and `get_n_empty_squares` are never used
[INFO] [stderr]    --> src/tree/tree.rs:55:12
[INFO] [stderr]     |
[INFO] [stderr]  19 | impl Node {
[INFO] [stderr]     | --------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  55 |     pub fn get_boards(&self) -> (Board, Board) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn get_n_empty_squares(&self) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_root` and `get_evaluation` are never used
[INFO] [stderr]   --> src/solver/solver.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr]  8 | impl Solver {
[INFO] [stderr]    | ----------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub fn get_root(&self) -> &Node {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 78 |     pub fn get_evaluation(&mut self, solver_mode: SolverMode) -> Result<Evaluation, String> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/tree/tree.rs:351:17
[INFO] [stderr]     |
[INFO] [stderr] 351 |                 to_return.add_rolls();
[INFO] [stderr]     |                 ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 351 |                 let _ = to_return.add_rolls();
[INFO] [stderr]     |                 +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/tree/tree.rs:793:9
[INFO] [stderr]     |
[INFO] [stderr] 793 |         expected_root.add_rolls();
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 793 |         let _ = expected_root.add_rolls();
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/tree/tree.rs:797:21
[INFO] [stderr]     |
[INFO] [stderr] 797 |                     child.add_move(m);
[INFO] [stderr]     |                     ^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 797 |                     let _ = child.add_move(m);
[INFO] [stderr]     |                     +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/solver/solver.rs:293:9
[INFO] [stderr]     |
[INFO] [stderr] 293 |         root.add_move(Move::new(2, 2));
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 293 |         let _ = root.add_move(Move::new(2, 2));
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/solver/solver.rs:305:9
[INFO] [stderr]     |
[INFO] [stderr] 305 |         root.add_move(Move::new(2, 2));
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 305 |         let _ = root.add_move(Move::new(2, 2));
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/solver/solver.rs:317:9
[INFO] [stderr]     |
[INFO] [stderr] 317 |         root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 317 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/solver/solver.rs:328:9
[INFO] [stderr]     |
[INFO] [stderr] 328 |         root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 328 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: unused `Result` that must be used
[INFO] [stderr]    --> src/solver/solver.rs:339:9
[INFO] [stderr]     |
[INFO] [stderr] 339 |         root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stderr] help: use `let _ = ...` to ignore the resulting value
[INFO] [stderr]     |
[INFO] [stderr] 339 |         let _ = root.add_move(Move::new(0, 0));
[INFO] [stderr]     |         +++++++
[INFO] [stderr] 
[INFO] [stderr] warning: `knucklebones-solver` (bin "knucklebones-solver" test) generated 46 warnings (run `cargo fix --bin "knucklebones-solver" -p knucklebones-solver --tests` to apply 28 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.12s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/knucklebones_solver-92db546687be3cdb)
[INFO] [stdout] test solver::solver::test_solver::test_difference_heuristic ... ok
[INFO] [stdout] test tree::tree::test_tree::test_is_game_over ... ok
[INFO] [stdout] test solver::solver::test_solver::test_solver_solves_heuristically ... ok
[INFO] [stderr] 
[INFO] [stderr] thread 'solver::solver::test_solver::test_solver_solves_endgame_situations' (33) has overflowed its stack
[INFO] [stderr] fatal runtime error: stack overflow, aborting
[INFO] [stderr] error: test failed, to rerun pass `--bin knucklebones-solver`
[INFO] [stderr] 
[INFO] [stderr] Caused by:
[INFO] [stderr]   process didn't exit successfully: `/opt/rustwide/target/debug/deps/knucklebones_solver-92db546687be3cdb` (signal: 6, SIGABRT: process abort signal)
[INFO] running `Command { std: "docker" "inspect" "01350e2da9c87d93dda986a79e98a14f9626ab942bd0a3b3dfa14f06e842ef89", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "01350e2da9c87d93dda986a79e98a14f9626ab942bd0a3b3dfa14f06e842ef89", kill_on_drop: false }`
[INFO] [stdout] 01350e2da9c87d93dda986a79e98a14f9626ab942bd0a3b3dfa14f06e842ef89
