[INFO] cloning repository https://github.com/SHAfoin/othello_rust [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/SHAfoin/othello_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 6a96853c65784c2fb5a30bb1b4488f15da55a877 [INFO] checking SHAfoin/othello_rust against try#5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db for pr-143717 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/SHAfoin/othello_rust [INFO] finished tweaking git repo https://github.com/SHAfoin/othello_rust [INFO] tweaked toml for git repo https://github.com/SHAfoin/othello_rust written to /workspace/builds/worker-3-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/SHAfoin/othello_rust on toolchain 5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/SHAfoin/othello_rust 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" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [ERROR] error running command: no output for 300 seconds [INFO] checking SHAfoin/othello_rust against try#5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db for pr-143717 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FSHAfoin%2Fothello_rust" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/SHAfoin/othello_rust [INFO] finished tweaking git repo https://github.com/SHAfoin/othello_rust [INFO] tweaked toml for git repo https://github.com/SHAfoin/othello_rust written to /workspace/builds/worker-3-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/SHAfoin/othello_rust on toolchain 5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/SHAfoin/othello_rust 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" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded tui-big-text v0.7.1 [INFO] [stderr] Downloaded font8x8 v0.3.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5 [INFO] running `Command { std: "docker" "start" "-a" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5", kill_on_drop: false }` [INFO] [stdout] fe1b45122ed5bd52df32312b87e127d66766b120d59f42c40da6d6b99d00cae5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+5ef65a4ed75279dc1b7a26cedc27293a9f4ca8db" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9 [INFO] running `Command { std: "docker" "start" "-a" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling unicode-ident v1.0.18 [INFO] [stderr] Compiling libc v0.2.174 [INFO] [stderr] Checking cfg-if v1.0.1 [INFO] [stderr] Compiling fnv v1.0.7 [INFO] [stderr] Compiling strsim v0.11.1 [INFO] [stderr] Compiling ident_case v1.0.1 [INFO] [stderr] Compiling rustversion v1.0.21 [INFO] [stderr] Compiling autocfg v1.5.0 [INFO] [stderr] Compiling signal-hook v0.3.18 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Checking smallvec v1.15.1 [INFO] [stderr] Compiling getrandom v0.3.3 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Checking scopeguard v1.2.0 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Compiling zerocopy v0.8.26 [INFO] [stderr] Checking linux-raw-sys v0.4.15 [INFO] [stderr] Checking allocator-api2 v0.2.21 [INFO] [stderr] Compiling paste v1.0.15 [INFO] [stderr] Checking foldhash v0.1.5 [INFO] [stderr] Checking ryu v1.0.20 [INFO] [stderr] Checking equivalent v1.0.2 [INFO] [stderr] Checking bitflags v2.9.1 [INFO] [stderr] Compiling heck v0.5.0 [INFO] [stderr] Checking itoa v1.0.15 [INFO] [stderr] Checking itertools v0.13.0 [INFO] [stderr] Checking unicode-segmentation v1.12.0 [INFO] [stderr] Checking static_assertions v1.1.0 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling indoc v2.0.6 [INFO] [stderr] Checking hashbrown v0.15.4 [INFO] [stderr] Checking unicode-width v0.1.14 [INFO] [stderr] Checking cassowary v0.3.0 [INFO] [stderr] Checking unicode-width v0.2.0 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Compiling lock_api v0.4.13 [INFO] [stderr] Checking itertools v0.14.0 [INFO] [stderr] Checking memchr v2.7.5 [INFO] [stderr] Checking font8x8 v0.3.1 [INFO] [stderr] Checking castaway v0.2.3 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking compact_str v0.8.1 [INFO] [stderr] Checking lru v0.12.5 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Checking signal-hook-registry v1.4.5 [INFO] [stderr] Checking mio v1.0.4 [INFO] [stderr] Checking rand_core v0.9.3 [INFO] [stderr] Checking parking_lot v0.12.4 [INFO] [stderr] Checking unicode-truncate v1.1.0 [INFO] [stderr] Checking signal-hook-mio v0.2.4 [INFO] [stderr] Checking crossterm v0.28.1 [INFO] [stderr] Checking ppv-lite86 v0.2.21 [INFO] [stderr] Checking rand_chacha v0.9.0 [INFO] [stderr] Checking rand v0.9.1 [INFO] [stderr] Compiling darling_core v0.20.11 [INFO] [stderr] Compiling strum_macros v0.26.4 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Checking strum v0.26.3 [INFO] [stderr] Compiling darling_macro v0.20.11 [INFO] [stderr] Compiling darling v0.20.11 [INFO] [stderr] Compiling derive_builder_core v0.20.2 [INFO] [stderr] Compiling instability v0.3.7 [INFO] [stderr] Checking ratatui v0.29.0 [INFO] [stderr] Compiling derive_builder_macro v0.20.2 [INFO] [stderr] Checking derive_builder v0.20.2 [INFO] [stderr] Checking tui-big-text v0.7.1 [INFO] [stderr] Checking othello_rust v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `MAX_DEPTH` and `ULTRA_THREADING` [INFO] [stdout] --> src/ai/alphabeta.rs:5:14 [INFO] [stdout] | [INFO] [stdout] 5 | consts::{MAX_DEPTH, SIZE, ULTRA_THREADING}, [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `random_range` [INFO] [stdout] --> src/ai/qlearning.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use rand::{random_range, rng, Rng}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `hash::Hash` [INFO] [stdout] --> src/ai/qlearning.rs:2:43 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{collections::HashMap, fs::File, hash::Hash, io::Write}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SIZE` [INFO] [stdout] --> src/ai/qlearning.rs:6:54 [INFO] [stdout] | [INFO] [stdout] 6 | consts::{EPSILON, GAMMA, LAMBDA_LEARN, MATRIX_A, SIZE}, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/game/board.rs:101:17 [INFO] [stdout] | [INFO] [stdout] 101 | ) -> Result<(usize), String> { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 101 - ) -> Result<(usize), String> { [INFO] [stdout] 101 + ) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Widget` and `crossterm::terminal` [INFO] [stdout] --> src/gui/ui.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | crossterm::terminal, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 7 | Block, BorderType, Borders, Clear, List, ListItem, ListState, Padding, Paragraph, Widget, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `board::Board` [INFO] [stdout] --> src/gui/ui.rs:15:19 [INFO] [stdout] | [INFO] [stdout] 15 | use crate::game::{board::Board, cell::Cell}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `human::Human` and `minmax::AIMinMax` [INFO] [stdout] --> src/main.rs:26:57 [INFO] [stdout] | [INFO] [stdout] 26 | ai::{alphabeta::AIAlphaBeta, common::HeuristicType, minmax::AIMinMax, qlearning::QLearning}, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | human::Human, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ratatui::crossterm::event::KeyEventKind` [INFO] [stdout] --> src/main.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 41 | use ratatui::crossterm::event::KeyEventKind; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `MAX_DEPTH` and `ULTRA_THREADING` [INFO] [stdout] --> src/ai/alphabeta.rs:5:14 [INFO] [stdout] | [INFO] [stdout] 5 | consts::{MAX_DEPTH, SIZE, ULTRA_THREADING}, [INFO] [stdout] | ^^^^^^^^^ ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `random_range` [INFO] [stdout] --> src/ai/qlearning.rs:1:12 [INFO] [stdout] | [INFO] [stdout] 1 | use rand::{random_range, rng, Rng}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `hash::Hash` [INFO] [stdout] --> src/ai/qlearning.rs:2:43 [INFO] [stdout] | [INFO] [stdout] 2 | use std::{collections::HashMap, fs::File, hash::Hash, io::Write}; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `SIZE` [INFO] [stdout] --> src/ai/qlearning.rs:6:54 [INFO] [stdout] | [INFO] [stdout] 6 | consts::{EPSILON, GAMMA, LAMBDA_LEARN, MATRIX_A, SIZE}, [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary parentheses around type [INFO] [stdout] --> src/game/board.rs:101:17 [INFO] [stdout] | [INFO] [stdout] 101 | ) -> Result<(usize), String> { [INFO] [stdout] | ^ ^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_parens)]` on by default [INFO] [stdout] help: remove these parentheses [INFO] [stdout] | [INFO] [stdout] 101 - ) -> Result<(usize), String> { [INFO] [stdout] 101 + ) -> Result { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Widget` and `crossterm::terminal` [INFO] [stdout] --> src/gui/ui.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | crossterm::terminal, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 7 | Block, BorderType, Borders, Clear, List, ListItem, ListState, Padding, Paragraph, Widget, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `board::Board` [INFO] [stdout] --> src/gui/ui.rs:15:19 [INFO] [stdout] | [INFO] [stdout] 15 | use crate::game::{board::Board, cell::Cell}; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `human::Human` and `minmax::AIMinMax` [INFO] [stdout] --> src/main.rs:26:57 [INFO] [stdout] | [INFO] [stdout] 26 | ai::{alphabeta::AIAlphaBeta, common::HeuristicType, minmax::AIMinMax, qlearning::QLearning}, [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 33 | human::Human, [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `ratatui::crossterm::event::KeyEventKind` [INFO] [stdout] --> src/main.rs:41:5 [INFO] [stdout] | [INFO] [stdout] 41 | use ratatui::crossterm::event::KeyEventKind; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Stylize` [INFO] [stdout] --> src/gui/ui.rs:4:27 [INFO] [stdout] | [INFO] [stdout] 4 | style::{Color, Style, Stylize}, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `total_r` [INFO] [stdout] --> src/ai/qlearning.rs:154:18 [INFO] [stdout] | [INFO] [stdout] 154 | let (total_r, done) = self.q_learning(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_r` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `done` [INFO] [stdout] --> src/ai/qlearning.rs:154:27 [INFO] [stdout] | [INFO] [stdout] 154 | let (total_r, done) = self.q_learning(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_done` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `Stylize` [INFO] [stdout] --> src/gui/ui.rs:4:27 [INFO] [stdout] | [INFO] [stdout] 4 | style::{Color, Style, Stylize}, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:133:19 [INFO] [stdout] | [INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:133:38 [INFO] [stdout] | [INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:295:24 [INFO] [stdout] | [INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:295:43 [INFO] [stdout] | [INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:297:27 [INFO] [stdout] | [INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:297:46 [INFO] [stdout] | [INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:299:43 [INFO] [stdout] | [INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:301:37 [INFO] [stdout] | [INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:301:56 [INFO] [stdout] | [INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `total_r` [INFO] [stdout] --> src/ai/qlearning.rs:154:18 [INFO] [stdout] | [INFO] [stdout] 154 | let (total_r, done) = self.q_learning(); [INFO] [stdout] | ^^^^^^^ help: if this is intentional, prefix it with an underscore: `_total_r` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `res` [INFO] [stdout] --> src/main.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | let res = run_app(&mut terminal, &mut app); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_res` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `done` [INFO] [stdout] --> src/ai/qlearning.rs:154:27 [INFO] [stdout] | [INFO] [stdout] 154 | let (total_r, done) = self.q_learning(); [INFO] [stdout] | ^^^^ help: if this is intentional, prefix it with an underscore: `_done` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Absolute`, `Matrix`, and `Mobility` are never constructed [INFO] [stdout] --> src/ai/common.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum HeuristicType { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 11 | Absolute, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 12 | Matrix, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 13 | Mobility, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HeuristicType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AIMinMax` is never constructed [INFO] [stdout] --> src/ai/minmax.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct AIMinMax { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_color`, `play_turn`, `init_tree`, and `tree_step` are never used [INFO] [stdout] --> src/ai/minmax.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 17 | impl AIMinMax { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 18 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 32 | pub fn get_color(&self) -> Cell { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn play_turn(&self, board: &mut Board) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | pub fn init_tree(&self, board: &Board, depth: usize) -> isize { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 97 | pub fn tree_step(&self, board: &Board, depth: usize) -> isize { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `max_step`, `heuristic`, `epoch`, `epsilon`, and `color` are never read [INFO] [stdout] --> src/ai/qlearning.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct QLearning { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 11 | max_step: usize, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 12 | q_table: HashMap>, [INFO] [stdout] 13 | heuristic: HeuristicType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 14 | epoch: usize, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 15 | epsilon: f64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 16 | color: Cell, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `set_q_table`, `get_epsilon`, `set_epsilon`, `q_learning`, `try_q_learning`, and `export_q_table` are never used [INFO] [stdout] --> src/ai/qlearning.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 19 | impl QLearning { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 35 | pub fn set_q_table(&mut self, state: String, action: (String, isize)) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn get_epsilon(&self) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn set_epsilon(&mut self, epsilon: f64) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | pub fn q_learning(&mut self) -> (isize, bool) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 150 | pub fn try_q_learning(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 172 | pub fn export_q_table(&self, file_path: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ULTRA_THREADING` is never used [INFO] [stdout] --> src/consts.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | pub const ULTRA_THREADING: bool = false; // Enable or disable ultra threading for AI calculations [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LAMBDA_LEARN` is never used [INFO] [stdout] --> src/consts.rs:6:11 [INFO] [stdout] | [INFO] [stdout] 6 | pub const LAMBDA_LEARN: f64 = 0.8; // Learning rate for Q-learning [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GAMMA` is never used [INFO] [stdout] --> src/consts.rs:7:11 [INFO] [stdout] | [INFO] [stdout] 7 | pub const GAMMA: f64 = 0.99; // Discount factor for future rewards [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MATRIX_A` is never used [INFO] [stdout] --> src/consts.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const MATRIX_A: [[isize; SIZE]; SIZE] = [ [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_cells` and `get_winner` are never used [INFO] [stdout] --> src/game/board.rs:92:12 [INFO] [stdout] | [INFO] [stdout] 15 | impl Board { [INFO] [stdout] | ---------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 92 | pub fn get_cells(&self) -> &[[Cell; SIZE]; SIZE] { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | pub fn get_winner(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Tutorial` is never constructed [INFO] [stdout] --> src/gui/app.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum CurrentScreen { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 8 | Tutorial, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `centered_rect` is never used [INFO] [stdout] --> src/gui/ui.rs:18:4 [INFO] [stdout] | [INFO] [stdout] 18 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Human` is never constructed [INFO] [stdout] --> src/human.rs:3:12 [INFO] [stdout] | [INFO] [stdout] 3 | pub struct Human { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_color`, `get_player_move`, and `play_turn` are never used [INFO] [stdout] --> src/human.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 7 | impl Human { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 8 | pub fn new(color: Cell) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 12 | fn get_color(&self) -> Cell { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | fn get_player_move(&self) -> Option<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub fn play_turn(&self, board: &mut Board) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:133:19 [INFO] [stdout] | [INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> { [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:133:38 [INFO] [stdout] | [INFO] [stdout] 133 | pub fn footer<'a>(frame: &mut Frame, app: &App, text: &'a str) -> Paragraph<'a> { [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:295:24 [INFO] [stdout] | [INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:295:43 [INFO] [stdout] | [INFO] [stdout] 295 | pub fn tutorial_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:297:27 [INFO] [stdout] | [INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:297:46 [INFO] [stdout] | [INFO] [stdout] 297 | pub fn human_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:299:43 [INFO] [stdout] | [INFO] [stdout] 299 | pub fn ai_vs_ai_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `frame` [INFO] [stdout] --> src/gui/ui.rs:301:37 [INFO] [stdout] | [INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^^^ help: if this is intentional, prefix it with an underscore: `_frame` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `app` [INFO] [stdout] --> src/gui/ui.rs:301:56 [INFO] [stdout] | [INFO] [stdout] 301 | pub fn q_learning_parameters_screen(frame: &mut Frame, app: &App) {} [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_app` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `res` [INFO] [stdout] --> src/main.rs:134:9 [INFO] [stdout] | [INFO] [stdout] 134 | let res = run_app(&mut terminal, &mut app); [INFO] [stdout] | ^^^ help: if this is intentional, prefix it with an underscore: `_res` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Absolute`, `Matrix`, and `Mobility` are never constructed [INFO] [stdout] --> src/ai/common.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub enum HeuristicType { [INFO] [stdout] | ------------- variants in this enum [INFO] [stdout] 11 | Absolute, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 12 | Matrix, [INFO] [stdout] | ^^^^^^ [INFO] [stdout] 13 | Mobility, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `HeuristicType` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AIMinMax` is never constructed [INFO] [stdout] --> src/ai/minmax.rs:10:12 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct AIMinMax { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_color`, `play_turn`, `init_tree`, and `tree_step` are never used [INFO] [stdout] --> src/ai/minmax.rs:18:12 [INFO] [stdout] | [INFO] [stdout] 17 | impl AIMinMax { [INFO] [stdout] | ------------- associated items in this implementation [INFO] [stdout] 18 | pub fn new( [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 32 | pub fn get_color(&self) -> Cell { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 36 | pub fn play_turn(&self, board: &mut Board) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 93 | pub fn init_tree(&self, board: &Board, depth: usize) -> isize { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 97 | pub fn tree_step(&self, board: &Board, depth: usize) -> isize { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: fields `max_step`, `heuristic`, `epoch`, `epsilon`, and `color` are never read [INFO] [stdout] --> src/ai/qlearning.rs:11:5 [INFO] [stdout] | [INFO] [stdout] 10 | pub struct QLearning { [INFO] [stdout] | --------- fields in this struct [INFO] [stdout] 11 | max_step: usize, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 12 | q_table: HashMap>, [INFO] [stdout] 13 | heuristic: HeuristicType, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 14 | epoch: usize, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 15 | epsilon: f64, [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] 16 | color: Cell, [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `set_q_table`, `get_epsilon`, `set_epsilon`, `q_learning`, `try_q_learning`, and `export_q_table` are never used [INFO] [stdout] --> src/ai/qlearning.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 19 | impl QLearning { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 35 | pub fn set_q_table(&mut self, state: String, action: (String, isize)) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 42 | pub fn get_epsilon(&self) -> f64 { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | pub fn set_epsilon(&mut self, epsilon: f64) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 50 | pub fn q_learning(&mut self) -> (isize, bool) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 150 | pub fn try_q_learning(&mut self) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 172 | pub fn export_q_table(&self, file_path: &str) { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `ULTRA_THREADING` is never used [INFO] [stdout] --> src/consts.rs:3:11 [INFO] [stdout] | [INFO] [stdout] 3 | pub const ULTRA_THREADING: bool = false; // Enable or disable ultra threading for AI calculations [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `LAMBDA_LEARN` is never used [INFO] [stdout] --> src/consts.rs:6:11 [INFO] [stdout] | [INFO] [stdout] 6 | pub const LAMBDA_LEARN: f64 = 0.8; // Learning rate for Q-learning [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `GAMMA` is never used [INFO] [stdout] --> src/consts.rs:7:11 [INFO] [stdout] | [INFO] [stdout] 7 | pub const GAMMA: f64 = 0.99; // Discount factor for future rewards [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `MATRIX_A` is never used [INFO] [stdout] --> src/consts.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const MATRIX_A: [[isize; SIZE]; SIZE] = [ [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `get_cells` and `get_winner` are never used [INFO] [stdout] --> src/game/board.rs:92:12 [INFO] [stdout] | [INFO] [stdout] 15 | impl Board { [INFO] [stdout] | ---------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 92 | pub fn get_cells(&self) -> &[[Cell; SIZE]; SIZE] { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 252 | pub fn get_winner(&self) -> Option { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Tutorial` is never constructed [INFO] [stdout] --> src/gui/app.rs:8:5 [INFO] [stdout] | [INFO] [stdout] 5 | pub enum CurrentScreen { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 8 | Tutorial, [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `centered_rect` is never used [INFO] [stdout] --> src/gui/ui.rs:18:4 [INFO] [stdout] | [INFO] [stdout] 18 | fn centered_rect(percent_x: u16, percent_y: u16, r: Rect) -> Rect { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `Human` is never constructed [INFO] [stdout] --> src/human.rs:3:12 [INFO] [stdout] | [INFO] [stdout] 3 | pub struct Human { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_color`, `get_player_move`, and `play_turn` are never used [INFO] [stdout] --> src/human.rs:8:12 [INFO] [stdout] | [INFO] [stdout] 7 | impl Human { [INFO] [stdout] | ---------- associated items in this implementation [INFO] [stdout] 8 | pub fn new(color: Cell) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 12 | fn get_color(&self) -> Cell { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | fn get_player_move(&self) -> Option<(usize, usize)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 53 | pub fn play_turn(&self, board: &mut Board) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 19.08s [INFO] running `Command { std: "docker" "inspect" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9", kill_on_drop: false }` [INFO] [stdout] f2fdd54e4fef6f14586baa09c2d37439bb0c0a0cc63c82236dd25b6633f2e0f9