[INFO] fetching crate open_ttt_lib 0.2.2...
[INFO] testing open_ttt_lib-0.2.2 against 1.95.0 for beta-1.96-2
[INFO] extracting crate open_ttt_lib 0.2.2 into /workspace/builds/worker-0-tc1/source
[INFO] started tweaking crates.io crate open_ttt_lib 0.2.2
[INFO] finished tweaking crates.io crate open_ttt_lib 0.2.2
[INFO] tweaked toml for crates.io crate open_ttt_lib 0.2.2 written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate open_ttt_lib 0.2.2 on toolchain 1.95.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate open_ttt_lib 0.2.2 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" "+1.95.0" "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
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.60
[INFO] [stderr]   Downloaded version-sync v0.9.1
[INFO] [stderr]   Downloaded semver-parser v0.9.0
[INFO] [stderr]   Downloaded unicode-xid v0.2.0
[INFO] [stderr]   Downloaded toml v0.5.6
[INFO] [stderr]   Downloaded unicode-normalization v0.1.12
[INFO] [stderr]   Downloaded itoa v0.4.5
[INFO] [stderr]   Downloaded proc-macro2 v1.0.10
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.60
[INFO] [stderr]   Downloaded either v1.5.3
[INFO] [stderr]   Downloaded crossbeam-queue v0.2.1
[INFO] [stderr]   Downloaded oorandom v11.1.0
[INFO] [stderr]   Downloaded wasm-bindgen-backend v0.2.60
[INFO] [stderr]   Downloaded winapi-util v0.1.4
[INFO] [stderr]   Downloaded criterion-plot v0.4.1
[INFO] [stderr]   Downloaded js-sys v0.3.37
[INFO] [stderr]   Downloaded itertools v0.8.2
[INFO] [stderr]   Downloaded bumpalo v3.2.1
[INFO] [stderr]   Downloaded syn v1.0.17
[INFO] [stderr]   Downloaded rayon v1.3.0
[INFO] [stderr]   Downloaded pulldown-cmark v0.7.2
[INFO] [stderr]   Downloaded serde_json v1.0.51
[INFO] [stderr]   Downloaded log v0.4.8
[INFO] [stderr]   Downloaded rayon-core v1.7.0
[INFO] [stderr]   Downloaded serde_derive v1.0.106
[INFO] [stderr]   Downloaded libc v0.2.69
[INFO] [stderr]   Downloaded criterion v0.3.1
[INFO] [stderr]   Downloaded url v2.1.1
[INFO] [stderr]   Downloaded regex v1.3.7
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.60
[INFO] [stderr]   Downloaded num-traits v0.2.11
[INFO] [stderr]   Downloaded web-sys v0.3.37
[INFO] [stderr]   Downloaded bstr v0.2.12
[INFO] [stderr]   Downloaded memoffset v0.5.4
[INFO] [stderr]   Downloaded tinytemplate v1.0.3
[INFO] [stderr]   Downloaded serde v1.0.106
[INFO] [stderr]   Downloaded smallvec v1.3.0
[INFO] [stderr]   Downloaded hermit-abi v0.1.11
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.60
[INFO] [stderr]   Downloaded ryu v1.0.3
[INFO] [stderr]   Downloaded quote v1.0.3
[INFO] [stderr]   Downloaded plotters v0.2.12
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] ad989670a5fd7ee79473d2a263dac98f987b5c233ac879efe5fe35fa5ff8269d
[INFO] running `Command { std: "docker" "start" "-a" "ad989670a5fd7ee79473d2a263dac98f987b5c233ac879efe5fe35fa5ff8269d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "ad989670a5fd7ee79473d2a263dac98f987b5c233ac879efe5fe35fa5ff8269d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "ad989670a5fd7ee79473d2a263dac98f987b5c233ac879efe5fe35fa5ff8269d", kill_on_drop: false }`
[INFO] [stdout] ad989670a5fd7ee79473d2a263dac98f987b5c233ac879efe5fe35fa5ff8269d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 617d8a9ef9eb80e83f248f9811f19b37a0448559af5d06cac9ebcf928a5c669c
[INFO] running `Command { std: "docker" "start" "-a" "617d8a9ef9eb80e83f248f9811f19b37a0448559af5d06cac9ebcf928a5c669c", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.69
[INFO] [stderr]    Compiling ppv-lite86 v0.2.10
[INFO] [stderr]    Compiling doc-comment v0.3.3
[INFO] [stderr]    Compiling getrandom v0.1.16
[INFO] [stderr]    Compiling rand_core v0.5.1
[INFO] [stderr]    Compiling rand_chacha v0.2.2
[INFO] [stderr]    Compiling rand v0.7.3
[INFO] [stderr]    Compiling open_ttt_lib v0.2.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/ai.rs:319:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | #[derive(Debug, Copy, Clone, PartialEq, Hash)]
[INFO] [stdout]     |                              --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 319 |     Custom(fn(depth: i32) -> bool),
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/board.rs:149:17
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter {
[INFO] [stdout]     |                 ^^^^^     ^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter<'_> {
[INFO] [stdout]     |                               ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/game.rs:178:27
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions {
[INFO] [stdout]     |                           ^^^^^     ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions<'_> {
[INFO] [stdout]     |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.28s
[INFO] running `Command { std: "docker" "inspect" "617d8a9ef9eb80e83f248f9811f19b37a0448559af5d06cac9ebcf928a5c669c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "617d8a9ef9eb80e83f248f9811f19b37a0448559af5d06cac9ebcf928a5c669c", kill_on_drop: false }`
[INFO] [stdout] 617d8a9ef9eb80e83f248f9811f19b37a0448559af5d06cac9ebcf928a5c669c
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 48b9f0a4ba2862bf662126a18903fee50d419d4377c2a90c1696d88de500aec4
[INFO] running `Command { std: "docker" "start" "-a" "48b9f0a4ba2862bf662126a18903fee50d419d4377c2a90c1696d88de500aec4", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v1.0.0
[INFO] [stderr]    Compiling serde v1.0.106
[INFO] [stderr]    Compiling proc-macro2 v1.0.10
[INFO] [stderr]    Compiling maybe-uninit v2.0.0
[INFO] [stderr]    Compiling semver-parser v0.7.0
[INFO] [stderr]    Compiling unicode-xid v0.2.0
[INFO] [stderr]    Compiling byteorder v1.3.4
[INFO] [stderr]    Compiling ryu v1.0.3
[INFO] [stderr]    Compiling syn v1.0.17
[INFO] [stderr]    Compiling version_check v0.9.1
[INFO] [stderr]    Compiling itoa v0.4.5
[INFO] [stderr]    Compiling rayon-core v1.7.0
[INFO] [stderr]    Compiling either v1.5.3
[INFO] [stderr]    Compiling smallvec v1.3.0
[INFO] [stderr]    Compiling matches v0.1.8
[INFO] [stderr]    Compiling num_cpus v1.13.0
[INFO] [stderr]    Compiling unicode-normalization v0.1.12
[INFO] [stderr]    Compiling unicode-bidi v0.3.4
[INFO] [stderr]    Compiling regex-syntax v0.6.17
[INFO] [stderr]    Compiling pulldown-cmark v0.7.2
[INFO] [stderr]    Compiling itertools v0.8.2
[INFO] [stderr]    Compiling csv-core v0.1.10
[INFO] [stderr]    Compiling semver v0.9.0
[INFO] [stderr]    Compiling unicase v2.6.0
[INFO] [stderr]    Compiling percent-encoding v2.1.0
[INFO] [stderr]    Compiling clap v2.33.0
[INFO] [stderr]    Compiling atty v0.2.14
[INFO] [stderr]    Compiling crossbeam-utils v0.7.2
[INFO] [stderr]    Compiling memoffset v0.5.4
[INFO] [stderr]    Compiling crossbeam-epoch v0.8.2
[INFO] [stderr]    Compiling rustc_version v0.2.3
[INFO] [stderr]    Compiling num-traits v0.2.11
[INFO] [stderr]    Compiling regex-automata v0.1.9
[INFO] [stderr]    Compiling semver-parser v0.9.0
[INFO] [stderr]    Compiling oorandom v11.1.0
[INFO] [stderr]    Compiling cast v0.2.3
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/ai.rs:319:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | #[derive(Debug, Copy, Clone, PartialEq, Hash)]
[INFO] [stdout]     |                              --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 319 |     Custom(fn(depth: i32) -> bool),
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/board.rs:149:17
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter {
[INFO] [stdout]     |                 ^^^^^     ^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter<'_> {
[INFO] [stdout]     |                               ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/game.rs:178:27
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions {
[INFO] [stdout]     |                           ^^^^^     ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions<'_> {
[INFO] [stdout]     |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling criterion-plot v0.4.1
[INFO] [stderr]    Compiling quote v1.0.3
[INFO] [stderr]    Compiling idna v0.2.0
[INFO] [stderr]    Compiling crossbeam-queue v0.2.1
[INFO] [stderr]    Compiling plotters v0.2.12
[INFO] [stderr]    Compiling url v2.1.1
[INFO] [stderr]    Compiling crossbeam-deque v0.7.3
[INFO] [stderr]    Compiling regex v1.3.7
[INFO] [stderr]    Compiling rayon v1.3.0
[INFO] [stderr]    Compiling bstr v0.2.12
[INFO] [stderr]    Compiling serde_json v1.0.51
[INFO] [stderr]    Compiling toml v0.5.6
[INFO] [stderr]    Compiling csv v1.1.3
[INFO] [stderr]    Compiling serde_derive v1.0.106
[INFO] [stderr]    Compiling tinytemplate v1.0.3
[INFO] [stderr]    Compiling version-sync v0.9.1
[INFO] [stderr]    Compiling criterion v0.3.1
[INFO] [stderr]    Compiling open_ttt_lib v0.2.2 (/opt/rustwide/workdir)
[INFO] [stdout] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stdout]    --> src/ai.rs:319:12
[INFO] [stdout]     |
[INFO] [stdout] 244 | #[derive(Debug, Copy, Clone, PartialEq, Hash)]
[INFO] [stdout]     |                              --------- in this derive macro expansion
[INFO] [stdout] ...
[INFO] [stdout] 319 |     Custom(fn(depth: i32) -> bool),
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: the address of the same function can vary between different codegen units
[INFO] [stdout]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stdout]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stdout]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/board.rs:149:17
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter {
[INFO] [stdout]     |                 ^^^^^     ^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 149 |     pub fn iter(&self) -> Iter<'_> {
[INFO] [stdout]     |                               ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/game.rs:178:27
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions {
[INFO] [stdout]     |                           ^^^^^     ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                           |
[INFO] [stdout]     |                           the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub fn free_positions(&self) -> FreePositions<'_> {
[INFO] [stdout]     |                                                  ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 29.74s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: criterion v0.3.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2`
[INFO] running `Command { std: "docker" "inspect" "48b9f0a4ba2862bf662126a18903fee50d419d4377c2a90c1696d88de500aec4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "48b9f0a4ba2862bf662126a18903fee50d419d4377c2a90c1696d88de500aec4", kill_on_drop: false }`
[INFO] [stdout] 48b9f0a4ba2862bf662126a18903fee50d419d4377c2a90c1696d88de500aec4
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 700acb0f932531d110f85aae8a94a6a7c847ca85f21c33469a3d26bdcd902d1e
[INFO] running `Command { std: "docker" "start" "-a" "700acb0f932531d110f85aae8a94a6a7c847ca85f21c33469a3d26bdcd902d1e", kill_on_drop: false }`
[INFO] [stderr] warning: function pointer comparisons do not produce meaningful results since their addresses are not guaranteed to be unique
[INFO] [stderr]    --> src/ai.rs:319:12
[INFO] [stderr]     |
[INFO] [stderr] 244 | #[derive(Debug, Copy, Clone, PartialEq, Hash)]
[INFO] [stderr]     |                              --------- in this derive macro expansion
[INFO] [stderr] ...
[INFO] [stderr] 319 |     Custom(fn(depth: i32) -> bool),
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: the address of the same function can vary between different codegen units
[INFO] [stderr]     = note: furthermore, different functions could have the same address after being merged together
[INFO] [stderr]     = note: for more information visit <https://doc.rust-lang.org/nightly/core/ptr/fn.fn_addr_eq.html>
[INFO] [stderr]     = note: `#[warn(unpredictable_function_pointer_comparisons)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stderr]    --> src/board.rs:149:17
[INFO] [stderr]     |
[INFO] [stderr] 149 |     pub fn iter(&self) -> Iter {
[INFO] [stderr]     |                 ^^^^^     ^^^^ the same lifetime is hidden here
[INFO] [stderr]     |                 |
[INFO] [stderr]     |                 the lifetime is elided here
[INFO] [stderr]     |
[INFO] [stderr]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stderr]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stderr] help: use `'_` for type paths
[INFO] [stderr]     |
[INFO] [stderr] 149 |     pub fn iter(&self) -> Iter<'_> {
[INFO] [stderr]     |                               ++++
[INFO] [stderr] 
[INFO] [stderr] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stderr]    --> src/game.rs:178:27
[INFO] [stderr]     |
[INFO] [stderr] 178 |     pub fn free_positions(&self) -> FreePositions {
[INFO] [stderr]     |                           ^^^^^     ^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stderr]     |                           |
[INFO] [stderr]     |                           the lifetime is elided here
[INFO] [stderr]     |
[INFO] [stderr]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stderr] help: use `'_` for type paths
[INFO] [stderr]     |
[INFO] [stderr] 178 |     pub fn free_positions(&self) -> FreePositions<'_> {
[INFO] [stderr]     |                                                  ++++
[INFO] [stderr] 
[INFO] [stderr] warning: `open_ttt_lib` (lib) generated 3 warnings (run `cargo fix --lib -p open_ttt_lib` to apply 2 suggestions)
[INFO] [stderr] warning: `open_ttt_lib` (lib test) generated 3 warnings (3 duplicates)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.13s
[INFO] [stderr] warning: the following packages contain code that will be rejected by a future version of Rust: criterion v0.3.1
[INFO] [stderr] note: to see what the problems were, use the option `--future-incompat-report`, or run `cargo report future-incompatibilities --id 2`
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/open_ttt_lib-81b60a025fbe8b30)
[INFO] [stdout] 
[INFO] [stdout] running 98 tests
[INFO] [stdout] test ai::tests::ai_player_from_game_state_when_player_O_move_should_be_player_O ... ok
[INFO] [stdout] test ai::tests::ai_player_from_game_state_when_player_X_move_should_be_player_X ... ok
[INFO] [stdout] test ai::tests::difficulty_when_custom_should_call_provided_function ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_outcomes_empty_should_none ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_cats_game_and_loss_should_be_cats_game ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_when_new_game_and_unbeatable_difficulty_should_be_cats_game_for_all_positions ... ok
[INFO] [stdout] test ai::tests::opponent_get_move_when_game_is_over_should_be_none ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_win_and_loss_should_be_win ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_win_and_unknown_should_be_win ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_depth_should_start_at_zero ... ok
[INFO] [stdout] test ai::tests::opponent_new_should_set_difficulty ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_same_outcome_should_pick_random_position ... ok
[INFO] [stdout] test ai::tests::initialize_free_position_outcomes_should_set_indicated_outcome ... ok
[INFO] [stdout] test ai::tests::opponent_get_move_when_unbeatable_difficulty_should_pick_wining_position ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_when_none_difficulty_should_see_unknown_outcome_for_all_positions ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_unknown_and_loss_should_be_unknown ... ok
[INFO] [stdout] test ai::tests::outcome_from_game_state_when_player_O_win_and_player_O_should_be_win ... ok
[INFO] [stdout] test ai::tests::outcome_from_game_state_when_player_O_win_and_player_X_should_be_loss ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_empty_should_be_unknown ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_my_turn_with_cats_game_and_cats_game_should_be_cats_game ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_my_turn_with_cats_game_and_loss_should_be_loss ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_not_my_turn_with_cats_game_and_cats_game_should_be_win ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_win_and_cats_game_should_be_win ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_my_turn_with_win_and_loss_should_be_loss ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_when_unbeatable_difficulty_should_evaluate_all_positions ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_not_my_turn_with_win_and_loss_should_be_win ... ok
[INFO] [stdout] test ai::tests::worst_outcome_when_not_my_turn_with_cats_game_and_loss_should_be_cats_game ... ok
[INFO] [stdout] test board::tests::board_contains_when_column_outside_board_should_be_false ... ok
[INFO] [stdout] test board::tests::board_contains_when_includes_position_should_be_true ... ok
[INFO] [stdout] test board::tests::board_contains_when_negative_column_should_be_false ... ok
[INFO] [stdout] test ai::tests::opponent_best_position_when_cats_game_and_unknown_should_be_cats_game ... ok
[INFO] [stdout] test ai::tests::outcome_from_game_state_when_player_X_win_and_player_O_should_be_loss ... ok
[INFO] [stdout] test ai::tests::outcome_from_game_state_when_cats_game_should_be_cats_game ... ok
[INFO] [stdout] test ai::tests::outcome_from_game_state_when_player_X_win_and_player_X_should_be_win ... ok
[INFO] [stdout] test board::tests::board_contains_when_negative_row_should_be_false ... ok
[INFO] [stdout] test board::tests::board_contains_when_row_outside_board_should_be_false ... ok
[INFO] [stdout] test board::tests::board_display_when_X_own_squares_should_contain_X_characters ... ok
[INFO] [stdout] test board::tests::board_display_when_O_own_squares_should_contain_O_characters ... ok
[INFO] [stdout] test board::tests::board_get_mut_when_given_new_owner_should_change_owner ... ok
[INFO] [stdout] test board::tests::board_iter_should_include_all_positions ... ok
[INFO] [stdout] test board::tests::board_iter_should_provide_position_and_owner ... ok
[INFO] [stdout] test board::tests::board_new_should_contain_squares_with_no_owner ... ok
[INFO] [stdout] test board::tests::board_get_mut_when_given_position_outside_board_should_return_none ... ok
[INFO] [stdout] test board::tests::board_new_when_given_1x3_size_should_create_1x3_board ... ok
[INFO] [stdout] test board::tests::board_new_when_given_3x3_size_should_create_3x3_board ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_when_game_over_should_be_empty_map ... ok
[INFO] [stdout] test board::tests::board_new_when_given_1x1_size_should_create_1x1_board ... ok
[INFO] [stdout] test board::tests::position_when_cloned_should_compare_equal ... ok
[INFO] [stdout] test board::tests::position_when_copied_should_compare_equal ... ok
[INFO] [stdout] test board::tests::position_when_same_should_compare_equal ... ok
[INFO] [stdout] test board::tests::size_from_tuple_first_item_should_be_rows ... ok
[INFO] [stdout] test board::tests::size_from_tuple_second_item_should_be_columns ... ok
[INFO] [stdout] test board::tests::size_when_copied_should_compare_equal ... ok
[INFO] [stdout] test board::tests::size_when_cloned_should_compare_equal ... ok
[INFO] [stdout] test board::tests::size_when_same_should_compare_equal ... ok
[INFO] [stdout] test game::tests::error_display_when_position_already_owned_should_contain_owner_text ... ok
[INFO] [stdout] test game::tests::error_display_when_position_already_owned_should_contain_position_text ... ok
[INFO] [stdout] test game::tests::game_can_move_when_game_over_should_be_false ... ok
[INFO] [stdout] test game::tests::error_display_when_game_over_should_be_non_empty ... ok
[INFO] [stdout] test game::tests::game_can_move_when_unowned_positions_should_be_true ... ok
[INFO] [stdout] test game::tests::game_default_should_create_3x3_board ... ok
[INFO] [stdout] test game::tests::game_do_move_returned_state_should_match_game_state ... ok
[INFO] [stdout] test game::tests::game_do_move_when_both_winning_row_and_diagonal_should_contain_all_winning_positions ... ok
[INFO] [stdout] test game::tests::error_display_when_invalid_position_should_contain_position_text ... ok
[INFO] [stdout] test game::tests::game_do_move_when_owned_position_should_return_error ... ok
[INFO] [stdout] test game::tests::game_do_move_when_player_O_move_should_return_player_X_move_state ... ok
[INFO] [stdout] test game::tests::game_do_move_when_last_position_filled_should_return_cats_game ... ok
[INFO] [stdout] test ai::tests::opponent_evaluate_game_should_increment_depth - should panic ... ok
[INFO] [stdout] test game::tests::game_do_move_when_game_over_should_return_error ... ok
[INFO] [stdout] test game::tests::game_do_move_when_player_X_move_should_return_player_O_move_state ... ok
[INFO] [stdout] test game::tests::game_do_move_when_position_outside_board_should_return_error ... ok
[INFO] [stdout] test game::tests::game_do_move_when_three_X_in_column_should_return_player_X_win ... ok
[INFO] [stdout] test game::tests::game_do_move_when_three_X_in_row_should_return_player_X_win ... ok
[INFO] [stdout] test game::tests::game_do_move_when_three_X_in_top_left_to_bottom_right_diagonal_should_return_player_X_win ... ok
[INFO] [stdout] test game::tests::game_do_move_when_three_X_in_top_right_to_bottom_left_diagonal_should_return_player_X_win ... ok
[INFO] [stdout] test game::tests::game_do_move_when_three_O_in_row_should_return_player_O_win ... ok
[INFO] [stdout] test game::tests::game_free_positions_should_not_contain_any_owned_positions ... ok
[INFO] [stdout] test game::tests::game_new_should_create_3x3_board ... ok
[INFO] [stdout] test game::tests::game_start_next_game_should_alternate_between_players_who_go_first ... ok
[INFO] [stdout] test game::tests::game_start_next_game_when_game_not_over_should_start_next_game ... ok
[INFO] [stdout] test game::tests::game_free_positions_when_game_over_should_be_none ... ok
[INFO] [stdout] test game::tests::state_is_game_over_when_player_O_move_should_be_false ... ok
[INFO] [stdout] test game::tests::game_start_next_game_should_ensure_player_who_went_went_second_goes_first_next_game ... ok
[INFO] [stdout] test game::tests::game_new_should_all_positions_should_be_free ... ok
[INFO] [stdout] test board::tests::board_new_when_given_0x1_size_should_panic - should panic ... ok
[INFO] [stdout] test game::tests::state_is_game_over_when_player_O_win_should_be_true ... ok
[INFO] [stdout] test board::tests::board_new_when_given_1x0_size_should_panic - should panic ... ok
[INFO] [stdout] test game::tests::state_is_game_over_when_cats_game_should_be_true ... ok
[INFO] [stdout] test game::tests::game_new_should_not_be_game_over_state ... ok
[INFO] [stdout] test game::tests::state_is_game_over_when_player_X_move_should_be_false ... ok
[INFO] [stdout] test game::tests::state_is_game_over_when_player_X_win_should_be_true ... ok
[INFO] [stdout] test board::tests::board_get_when_contains_position_should_be_some_owner ... ok
[INFO] [stdout] test board::tests::board_get_when_not_contains_position_should_be_none ... ok
[INFO] [stdout] test game::tests::game_can_move_when_owned_positions_should_be_false ... ok
[INFO] [stdout] test ai::tests::ai_player_from_game_state_when_game_over_should_panic - should panic ... ok
[INFO] [stdout] test board::tests::position_from_tuple_first_item_should_be_row ... ok
[INFO] [stdout] test board::tests::position_from_tuple_second_item_should_be_column ... ok
[INFO] [stdout] test game::tests::game_can_move_when_outside_game_board_should_be_false ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 98 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/ai_tests.rs (/opt/rustwide/target/debug/deps/ai_tests-8556e71db26fa28b)
[INFO] [stderr]      Running tests/version-numbers.rs (/opt/rustwide/target/debug/deps/version_numbers-2b4f7146bf573015)
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test easy_medium_hard_difficulties_should_increasingly_tie_vs_unbeatable_difficulty ... ignored
[INFO] [stdout] test easy_medium_hard_difficulties_should_increasingly_win_vs_none_difficulty ... ignored
[INFO] [stdout] test unbeatable_opponent_should_never_lose ... ignored
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 3 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 2 tests
[INFO] [stdout] test readme_deps_version_number_should_match_cargo_toml ... ok
[INFO] [stdout] test html_root_url_version_number_should_match_cargo_toml ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests open_ttt_lib
[INFO] [stdout] 
[INFO] [stdout] running 29 tests
[INFO] [stdout] test src/ai.rs - ai (line 4) ... ok
[INFO] [stdout] test src/board.rs - board::Position::from (line 316) ... ok
[INFO] [stdout] test src/board.rs - board::Board::get (line 89) ... ok
[INFO] [stdout] test src/board.rs - board::Board::get_mut (line 112) ... ok
[INFO] [stdout] test src/ai.rs - ai::Opponent::evaluate_game (line 91) ... ok
[INFO] [stdout] test src/ai.rs - ai::best_position (line 453) ... ok
[INFO] [stdout] test src/board.rs - board::Size (line 248) ... ok
[INFO] [stdout] test src/ai.rs - ai::Difficulty::Custom (line 295) ... ok
[INFO] [stdout] test src/ai.rs - ai::Difficulty::Custom (line 304) ... ok
[INFO] [stdout] test src/ai.rs - ai::Opponent::get_move (line 62) ... ok
[INFO] [stdout] test src/board.rs - board::Position (line 294) ... ok
[INFO] [stdout] test src/ai.rs - ai::Opponent::new (line 40) ... ok
[INFO] [stdout] test src/board.rs - board::Board::contains (line 64) ... ok
[INFO] [stdout] test src/ai.rs - ai::Opponent::new (line 47) ... ok
[INFO] [stdout] test src/board.rs - board::Size::from (line 271) ... ok
[INFO] [stdout] test src/board.rs - board::Board::new (line 24) ... ok
[INFO] [stdout] test src/game.rs - game::Game (line 64) ... ok
[INFO] [stdout] test src/game.rs - game::Game::state (line 147) ... ok
[INFO] [stdout] test src/game.rs - game::Game::do_move (line 231) ... ok
[INFO] [stdout] test src/board.rs - board::Board::iter (line 139) ... ok
[INFO] [stdout] test src/game.rs - game::State::is_game_over (line 608) ... ok
[INFO] [stdout] test src/game.rs - game (line 4) ... ok
[INFO] [stdout] test src/game.rs - game::Game::start_next_game (line 274) ... ok
[INFO] [stdout] test src/game.rs - game::Game::can_move (line 192) ... ok
[INFO] [stdout] test src/lib.rs - (line 19) ... ok
[INFO] [stdout] test src/lib.rs - examples_in_readme (line 97) ... ok
[INFO] [stdout] test src/game.rs - game::Game::new (line 105) ... ok
[INFO] [stdout] test src/game.rs - game::Game::board (line 128) ... ok
[INFO] [stdout] test src/game.rs - game::Game::free_positions (line 170) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 1.16s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "700acb0f932531d110f85aae8a94a6a7c847ca85f21c33469a3d26bdcd902d1e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "700acb0f932531d110f85aae8a94a6a7c847ca85f21c33469a3d26bdcd902d1e", kill_on_drop: false }`
[INFO] [stdout] 700acb0f932531d110f85aae8a94a6a7c847ca85f21c33469a3d26bdcd902d1e
