[INFO] cloning repository https://github.com/davetttt/ttt_rust
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/davetttt/ttt_rust" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavetttt%2Fttt_rust", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavetttt%2Fttt_rust'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] da0b52d21262d7f8c8fc70ea1f5b02a978d43af2
[INFO] checking davetttt/ttt_rust against master#32cd9114712a24010b0583624dc52ac302194128 for pr-143717
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fdavetttt%2Fttt_rust" "/workspace/builds/worker-1-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-1-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/davetttt/ttt_rust
[INFO] finished tweaking git repo https://github.com/davetttt/ttt_rust
[INFO] tweaked toml for git repo https://github.com/davetttt/ttt_rust written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/davetttt/ttt_rust on toolchain 32cd9114712a24010b0583624dc52ac302194128
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+32cd9114712a24010b0583624dc52ac302194128" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/davetttt/ttt_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" "+32cd9114712a24010b0583624dc52ac302194128" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+32cd9114712a24010b0583624dc52ac302194128" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0877031fe01cb11f687f6023354f0d89a93487b27a3e692da9c825dcb3faf125
[INFO] running `Command { std: "docker" "start" "-a" "0877031fe01cb11f687f6023354f0d89a93487b27a3e692da9c825dcb3faf125", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0877031fe01cb11f687f6023354f0d89a93487b27a3e692da9c825dcb3faf125", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0877031fe01cb11f687f6023354f0d89a93487b27a3e692da9c825dcb3faf125", kill_on_drop: false }`
[INFO] [stdout] 0877031fe01cb11f687f6023354f0d89a93487b27a3e692da9c825dcb3faf125
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+32cd9114712a24010b0583624dc52ac302194128" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 69ca17debf3db354b178152f62f2a139d2d9bbc85824f73cad4fbb8f5058bd2b
[INFO] running `Command { std: "docker" "start" "-a" "69ca17debf3db354b178152f62f2a139d2d9bbc85824f73cad4fbb8f5058bd2b", kill_on_drop: false }`
[INFO] [stderr] warning: no edition set: defaulting to the 2015 edition while the latest is 2024
[INFO] [stderr]     Checking ttt_rust v0.0.1 (/opt/rustwide/workdir)
[INFO] [stdout] error[E0432]: unresolved import `std::io::BufferedReader`
[INFO] [stdout]  --> src/io.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::BufferedReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^ no `BufferedReader` in `io`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `range` in this scope
[INFO] [stdout]   --> src/minimax.rs:34:18
[INFO] [stdout]    |
[INFO] [stdout] 34 |     for index in range(0, scores.len()) {
[INFO] [stdout]    |                  ^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]    |
[INFO] [stdout] 1  + use std::slice::range;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `range` in this scope
[INFO] [stdout]   --> src/minimax.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 46 |     for index in range(0, scores.len()) {
[INFO] [stdout]    |                  ^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]    |
[INFO] [stdout] 1  + use std::slice::range;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::game::*`
[INFO] [stdout]  --> src/game_test.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::game::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]  --> src/main.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | mod game_test;
[INFO] [stdout]   | ^^^^^^^^^^^^^^
[INFO] [stdout]   = note: `#[warn(unused_imports)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::player::*`
[INFO] [stdout]  --> src/game_test.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use super::player::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]  --> src/main.rs:6:1
[INFO] [stdout]   |
[INFO] [stdout] 6 | mod game_test;
[INFO] [stdout]   | ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::io::*`
[INFO] [stdout]  --> src/io_test.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use super::io::*;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]  --> src/main.rs:8:1
[INFO] [stdout]   |
[INFO] [stdout] 8 | mod io_test;
[INFO] [stdout]   | ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: patterns aren't allowed in functions without bodies
[INFO] [stdout]  --> src/player.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 |     fn get_move(&self, mut board: Board) -> usize;
[INFO] [stdout]   |                        ^^^^^^^^^ help: remove `mut` from the parameter: `board`
[INFO] [stdout]   |
[INFO] [stdout]   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]   = note: for more information, see issue #35203 <https://github.com/rust-lang/rust/issues/35203>
[INFO] [stdout]   = note: `#[deny(patterns_in_fns_without_body)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::player::*`
[INFO] [stdout]   --> src/player_test.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout] 1  | use super::player::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | mod player_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::io::*`
[INFO] [stdout]   --> src/player_test.rs:2:5
[INFO] [stdout]    |
[INFO] [stdout] 2  | use super::io::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | mod player_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::board::*`
[INFO] [stdout]   --> src/player_test.rs:3:5
[INFO] [stdout]    |
[INFO] [stdout] 3  | use super::board::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:10:1
[INFO] [stdout]    |
[INFO] [stdout] 10 | mod player_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::board::*`
[INFO] [stdout]   --> src/board_test.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout] 1  | use super::board::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:12:1
[INFO] [stdout]    |
[INFO] [stdout] 12 | mod board_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::rules::*`
[INFO] [stdout]   --> src/rules_test.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout] 1  | use super::rules::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | mod rules_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::board::*`
[INFO] [stdout]   --> src/rules_test.rs:2:5
[INFO] [stdout]    |
[INFO] [stdout] 2  | use super::board::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:14:1
[INFO] [stdout]    |
[INFO] [stdout] 14 | mod rules_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::minimax::*`
[INFO] [stdout]   --> src/minimax_test.rs:1:5
[INFO] [stdout]    |
[INFO] [stdout] 1  | use super::minimax::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | mod minimax_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::board::*`
[INFO] [stdout]   --> src/minimax_test.rs:2:5
[INFO] [stdout]    |
[INFO] [stdout] 2  | use super::board::*;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: if this is a test module, consider adding a `#[cfg(test)]` to the containing module
[INFO] [stdout]   --> src/main.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | mod minimax_test;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: invalid suffix `us` for number literal
[INFO] [stdout]  --> src/board.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 |         Board { board:[0us; 9] }
[INFO] [stdout]   |                        ^^^ invalid suffix `us`
[INFO] [stdout]   |
[INFO] [stdout]   = help: the suffix must be one of the numeric types (`u32`, `isize`, `f32`, etc.)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0432]: unresolved import `std::io::BufferedReader`
[INFO] [stdout]  --> src/io.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::BufferedReader;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^ no `BufferedReader` in `io`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/player.rs:50:36
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let space: Option<usize> = response.trim().parse();
[INFO] [stdout]    |                    -------------   ^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<usize>`, found `Result<_, _>`
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    expected due to this
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected enum `Option<usize>`
[INFO] [stdout]               found enum `Result<_, _>`
[INFO] [stdout] help: consider using `Result::expect` to unwrap the `Result<_, _>` value, panicking if the value is a `Result::Err`
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let space: Option<usize> = response.trim().parse().expect("REASON");
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `range` in this scope
[INFO] [stdout]   --> src/minimax.rs:34:18
[INFO] [stdout]    |
[INFO] [stdout] 34 |     for index in range(0, scores.len()) {
[INFO] [stdout]    |                  ^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]    |
[INFO] [stdout] 1  + use std::slice::range;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0425]: cannot find function `range` in this scope
[INFO] [stdout]   --> src/minimax.rs:46:18
[INFO] [stdout]    |
[INFO] [stdout] 46 |     for index in range(0, scores.len()) {
[INFO] [stdout]    |                  ^^^^^ not found in this scope
[INFO] [stdout]    |
[INFO] [stdout] help: consider importing this function
[INFO] [stdout]    |
[INFO] [stdout] 1  + use std::slice::range;
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: patterns aren't allowed in functions without bodies
[INFO] [stdout]  --> src/player.rs:6:24
[INFO] [stdout]   |
[INFO] [stdout] 6 |     fn get_move(&self, mut board: Board) -> usize;
[INFO] [stdout]   |                        ^^^^^^^^^ help: remove `mut` from the parameter: `board`
[INFO] [stdout]   |
[INFO] [stdout]   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
[INFO] [stdout]   = note: for more information, see issue #35203 <https://github.com/rust-lang/rust/issues/35203>
[INFO] [stdout]   = note: `#[deny(patterns_in_fns_without_body)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: invalid suffix `us` for number literal
[INFO] [stdout]  --> src/board.rs:8:24
[INFO] [stdout]   |
[INFO] [stdout] 8 |         Board { board:[0us; 9] }
[INFO] [stdout]   |                        ^^^ invalid suffix `us`
[INFO] [stdout]   |
[INFO] [stdout]   = help: the suffix must be one of the numeric types (`u32`, `isize`, `f32`, etc.)
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `as_slice` found for struct `String` in the current scope
[INFO] [stdout]   --> src/board.rs:32:37
[INFO] [stdout]    |
[INFO] [stdout] 30 |               result.push_str(format!(" {} |",
[INFO] [stdout]    |  _____________________________-
[INFO] [stdout] 31 | |                                     self.render_token(*space)).
[INFO] [stdout] 32 | |                                     as_slice());
[INFO] [stdout]    | |                                    -^^^^^^^^ method not found in `String`
[INFO] [stdout]    | |____________________________________|
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `as_slice` found for struct `String` in the current scope
[INFO] [stdout]   --> src/board.rs:47:69
[INFO] [stdout]    |
[INFO] [stdout] 47 |             result.push_str((format!("\n{}", self.render_row(row))).as_slice());
[INFO] [stdout]    |                                                                     ^^^^^^^^ method not found in `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `is_some` found for enum `Result` in the current scope
[INFO] [stdout]   --> src/main.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |         if choice.is_some() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout]    |                   ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: there is a method `is_ok` with a similar name
[INFO] [stdout]    |
[INFO] [stdout] 34 -         if choice.is_some() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout] 34 +         if choice.is_ok() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `statement`
[INFO] [stdout]   --> src/io.rs:20:21
[INFO] [stdout]    |
[INFO] [stdout] 20 |     fn print(&self, statement: String) {}
[INFO] [stdout]    |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_statement`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `question`
[INFO] [stdout]   --> src/io.rs:22:22
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn prompt(&self, question: String) -> String {
[INFO] [stdout]    |                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_question`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/player.rs:21:24
[INFO] [stdout]    |
[INFO] [stdout] 21 |     fn get_move(&self, mut board: Board) -> usize {
[INFO] [stdout]    |                        ----^^^^^
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]  --> src/minimax.rs:4:18
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn get_score(mut board: &Board) -> isize {
[INFO] [stdout]   |                  ----^^^^^
[INFO] [stdout]   |                  |
[INFO] [stdout]   |                  help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `as_slice` found for struct `String` in the current scope
[INFO] [stdout]  --> src/io_test.rs:7:46
[INFO] [stdout]   |
[INFO] [stdout] 7 |     assert_eq!("answer", io.prompt(question).as_slice());
[INFO] [stdout]   |                                              ^^^^^^^^ method not found in `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]  --> src/minimax.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 |     let mut score = (board.number_of_spaces() + 1) as isize;
[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/minimax.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn get_token(mut board: &Board) -> usize {
[INFO] [stdout]    |                  ----^^^^^
[INFO] [stdout]    |                  |
[INFO] [stdout]    |                  help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `index` is never read
[INFO] [stdout]   --> src/minimax.rs:64:17
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let mut index = 0;
[INFO] [stdout]    |                 ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0308]: mismatched types
[INFO] [stdout]   --> src/player.rs:50:36
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let space: Option<usize> = response.trim().parse();
[INFO] [stdout]    |                    -------------   ^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<usize>`, found `Result<_, _>`
[INFO] [stdout]    |                    |
[INFO] [stdout]    |                    expected due to this
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected enum `Option<usize>`
[INFO] [stdout]               found enum `Result<_, _>`
[INFO] [stdout] help: consider using `Result::expect` to unwrap the `Result<_, _>` value, panicking if the value is a `Result::Err`
[INFO] [stdout]    |
[INFO] [stdout] 50 |         let space: Option<usize> = response.trim().parse().expect("REASON");
[INFO] [stdout]    |                                                           +++++++++++++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0425, E0432, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `ttt_rust` (bin "ttt_rust") due to 9 previous errors; 18 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[INFO] [stdout] error[E0599]: no method named `as_slice` found for struct `String` in the current scope
[INFO] [stdout]   --> src/board.rs:32:37
[INFO] [stdout]    |
[INFO] [stdout] 30 |               result.push_str(format!(" {} |",
[INFO] [stdout]    |  _____________________________-
[INFO] [stdout] 31 | |                                     self.render_token(*space)).
[INFO] [stdout] 32 | |                                     as_slice());
[INFO] [stdout]    | |                                    -^^^^^^^^ method not found in `String`
[INFO] [stdout]    | |____________________________________|
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `as_slice` found for struct `String` in the current scope
[INFO] [stdout]   --> src/board.rs:47:69
[INFO] [stdout]    |
[INFO] [stdout] 47 |             result.push_str((format!("\n{}", self.render_row(row))).as_slice());
[INFO] [stdout]    |                                                                     ^^^^^^^^ method not found in `String`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error[E0599]: no method named `is_some` found for enum `Result` in the current scope
[INFO] [stdout]   --> src/main.rs:34:19
[INFO] [stdout]    |
[INFO] [stdout] 34 |         if choice.is_some() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout]    |                   ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout] help: there is a method `is_ok` with a similar name
[INFO] [stdout]    |
[INFO] [stdout] 34 -         if choice.is_some() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout] 34 +         if choice.is_ok() && [1, 2, 3].contains(&choice.unwrap()) {
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `statement`
[INFO] [stdout]   --> src/io.rs:20:21
[INFO] [stdout]    |
[INFO] [stdout] 20 |     fn print(&self, statement: String) {}
[INFO] [stdout]    |                     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_statement`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `question`
[INFO] [stdout]   --> src/io.rs:22:22
[INFO] [stdout]    |
[INFO] [stdout] 22 |     fn prompt(&self, question: String) -> String {
[INFO] [stdout]    |                      ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_question`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/player.rs:21:24
[INFO] [stdout]    |
[INFO] [stdout] 21 |     fn get_move(&self, mut board: Board) -> usize {
[INFO] [stdout]    |                        ----^^^^^
[INFO] [stdout]    |                        |
[INFO] [stdout]    |                        help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/rules_test.rs:19:9
[INFO] [stdout]    |
[INFO] [stdout] 19 |     let mut board = Board::new();
[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/minimax.rs:4:18
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn get_score(mut board: &Board) -> isize {
[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/minimax.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 5 |     let mut score = (board.number_of_spaces() + 1) as isize;
[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/minimax.rs:13:18
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub fn get_token(mut board: &Board) -> usize {
[INFO] [stdout]    |                  ----^^^^^
[INFO] [stdout]    |                  |
[INFO] [stdout]    |                  help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `index` is never read
[INFO] [stdout]   --> src/minimax.rs:64:17
[INFO] [stdout]    |
[INFO] [stdout] 64 |         let mut index = 0;
[INFO] [stdout]    |                 ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = help: maybe it is overwritten before being read?
[INFO] [stdout]    = note: `#[warn(unused_assignments)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `e`
[INFO] [stdout]   --> src/minimax_test.rs:67:13
[INFO] [stdout]    |
[INFO] [stdout] 67 |         Err(e) => 999,
[INFO] [stdout]    |             ^ help: if this is intentional, prefix it with an underscore: `_e`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] Some errors have detailed explanations: E0308, E0425, E0432, E0599.
[INFO] [stdout] 
[INFO] [stdout] For more information about an error, try `rustc --explain E0308`.
[INFO] [stdout] 
[INFO] [stderr] error: could not compile `ttt_rust` (bin "ttt_rust" test) due to 10 previous errors; 9 warnings emitted
[INFO] running `Command { std: "docker" "inspect" "69ca17debf3db354b178152f62f2a139d2d9bbc85824f73cad4fbb8f5058bd2b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "69ca17debf3db354b178152f62f2a139d2d9bbc85824f73cad4fbb8f5058bd2b", kill_on_drop: false }`
[INFO] [stdout] 69ca17debf3db354b178152f62f2a139d2d9bbc85824f73cad4fbb8f5058bd2b
