[INFO] cloning repository https://github.com/csun/voronoi-go-rs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/csun/voronoi-go-rs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcsun%2Fvoronoi-go-rs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcsun%2Fvoronoi-go-rs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 4dc737000c560f78f1d0c43e38d553d624a30165
[INFO] testing csun/voronoi-go-rs against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fcsun%2Fvoronoi-go-rs" "/workspace/builds/worker-3-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc2/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-3-tc2/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/csun/voronoi-go-rs
[INFO] finished tweaking git repo https://github.com/csun/voronoi-go-rs
[INFO] tweaked toml for git repo https://github.com/csun/voronoi-go-rs written to /workspace/builds/worker-3-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/csun/voronoi-go-rs on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/csun/voronoi-go-rs 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.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 19 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go` (manifest) generated 1 warning
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go-engine/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 17 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go-engine` (manifest) generated 1 warning
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,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" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:77db811e55d90add9212f6832c23229e3de5f1c1f9905e8cb07319ea15df73ac" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869
[INFO] running `Command { std: "docker" "start" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 19 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go` (manifest) generated 1 warning
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go-engine/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 17 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go-engine` (manifest) generated 1 warning
[INFO] [stderr] warning: output filename collision at /opt/rustwide/target/release/libvoronoi_go.rlib
[INFO] [stderr]   |
[INFO] [stderr]   = note: the lib target `voronoi_go` in package `voronoi-go-py v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go-py)` has the same output filename as the lib target `voronoi_go` in package `voronoi-go v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go)`
[INFO] [stderr]   = note: this may become a hard error in the future; see <https://github.com/rust-lang/cargo/issues/6313>
[INFO] [stderr]   = help: consider changing their names to be unique or compiling them separately
[INFO] [stderr]    Compiling target-lexicon v0.13.5
[INFO] [stderr]    Compiling proc-macro2 v1.0.107
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling quote v1.0.47
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling thiserror v2.0.19
[INFO] [stderr]    Compiling autocfg v1.5.1
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling maybe_parallel_iterator v0.12.0
[INFO] [stderr]    Compiling heck v0.5.0
[INFO] [stderr]    Compiling zmij v1.0.23
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling memchr v2.8.3
[INFO] [stderr]    Compiling unindent v0.2.4
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling voronator v0.2.1
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling pyo3-build-config v0.27.2
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling pyo3-macros-backend v0.27.2
[INFO] [stderr]    Compiling pyo3-ffi v0.27.2
[INFO] [stderr]    Compiling pyo3 v0.27.2
[INFO] [stderr]    Compiling thiserror-impl v2.0.19
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling voronoi-go v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go)
[INFO] [stderr]    Compiling pyo3-macros v0.27.2
[INFO] [stderr]    Compiling voronoi-go-engine v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go-engine)
[INFO] [stderr]    Compiling voronoi-go-py v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go-py)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 41.17s
[INFO] running `Command { std: "docker" "inspect" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 19 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go` (manifest) generated 1 warning
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go-engine/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 17 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go-engine` (manifest) generated 1 warning
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling zerocopy v0.8.55
[INFO] [stderr]    Compiling cfg-if v1.0.4
[INFO] [stderr]    Compiling maybe_parallel_iterator v0.12.0
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling either v1.17.0
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling zerocopy-derive v0.8.55
[INFO] [stderr]    Compiling thiserror v2.0.19
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling roxmltree v0.21.1
[INFO] [stderr]    Compiling voronator v0.2.1
[INFO] [stderr]    Compiling libc v0.2.189
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]    Compiling unindent v0.2.4
[INFO] [stderr]    Compiling clap_builder v4.6.5
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling pyo3-ffi v0.27.2
[INFO] [stderr]    Compiling pyo3 v0.27.2
[INFO] [stderr]    Compiling regex-automata v0.4.16
[INFO] [stderr]    Compiling criterion-plot v0.6.0
[INFO] [stderr]    Compiling clap v4.6.5
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling regex v1.13.1
[INFO] [stderr]    Compiling voronoi-go v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go)
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.7.0
[INFO] [stderr]    Compiling voronoi-go-engine v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go-engine)
[INFO] [stderr]    Compiling voronoi-go-py v1.0.1 (/opt/rustwide/workdir/crates/voronoi-go-py)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 2m 11s
[INFO] running `Command { std: "docker" "inspect" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-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" "-w" "/opt/rustwide/workdir" "--user" "0:0" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 19 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go` (manifest) generated 1 warning
[INFO] [stderr] warning: `package.homepage` is redundant with `package.repository`
[INFO] [stderr]   --> crates/voronoi-go-engine/Cargo.toml:7:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | homepage = "https://github.com/csun/voronoi-go-rs"
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 17 | repository.workspace = true
[INFO] [stderr]    | ----------
[INFO] [stderr]    |
[INFO] [stderr]    = note: `cargo::redundant_homepage` is set to `warn` by default
[INFO] [stderr] help: consider removing `package.homepage`
[INFO] [stderr] warning: `voronoi-go-engine` (manifest) generated 1 warning
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.16s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/voronoi-go/e626cad133d65ea8/out/voronoi_go-e626cad133d65ea8)
[INFO] [stdout] 
[INFO] [stdout] running 338 tests
[INFO] [stdout] test alive_zone::forced_eyes::tests::taking_answers_the_stored_point_and_empties_the_slot ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_swallowing_a_forced_eye_is_alive ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_swallowing_a_sliver_between_dead_zones_is_alive ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_with_no_rings_is_dead ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_forced_eye_can_be_the_nearest_playable_point ... ok
[INFO] [stdout] test alive_zone::forced_eyes::tests::inserting_the_same_eye_twice_keeps_one ... ok
[INFO] [stdout] test alive_zone::forced_eyes::tests::an_eye_is_found_only_at_its_exact_point ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_full_board_leaves_nothing_playable ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_crossing_a_dead_zone_rim_is_zero_away ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_deep_in_overlapping_dead_zones_is_dead ... ok
[INFO] [stdout] test alive_zone::forced_eyes::tests::the_two_zeroes_are_one_eye ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_covering_playable_space_is_alive ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_edge_crossing_the_outline_is_alive ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_far_off_the_board_is_dead ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_just_off_the_board_but_within_a_stone_radius_is_alive ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_lying_along_a_board_edge_is_zero_away ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_between_two_dead_zones_measures_to_the_nearer ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_grid_of_dead_zones_kills_only_what_it_covers ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_through_a_forced_eye_is_zero_away ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_point_off_the_board_lands_on_the_nearest_edge ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_hole_is_not_part_of_the_cell_for_reverse_containment ... ok
[INFO] [stdout] test alive_zone::forced_eyes::tests::iteration_is_by_key_not_by_insertion ... ok
[INFO] [stdout] test alive_zone::queries::tests::every_cell_on_a_full_board_is_dead ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_ring_is_walked_as_a_closed_loop ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_forced_eye_is_a_candidate_of_its_own ... ok
[INFO] [stdout] test alive_zone::queries::tests::the_nearest_of_several_dead_zones_wins ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_forced_eye_is_content_enough_to_stop_a_zone_being_empty ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_wholly_inside_a_dead_zone_measures_out_to_its_rim ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_line_in_open_space_measures_to_the_nearest_edge ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_point_inside_a_dead_zone_lands_on_its_rim ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_playable_point_is_its_own_nearest_playable_point ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_point_off_a_corner_lands_on_the_corner ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_ring_too_short_to_enclose_anything_has_no_edges ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_within_a_stone_radius_of_the_outline_is_alive ... ok
[INFO] [stdout] test alive_zone::svg::tests::a_round_trip_redraws_the_same_geometry_possibly_rotated ... ok
[INFO] [stdout] test alive_zone::svg::tests::a_zone_with_nothing_visible_draws_nothing ... ok
[INFO] [stdout] test alive_zone::svg::tests::an_empty_board_draws_its_inset_square ... ok
[INFO] [stdout] test alive_zone::svg::tests::a_dead_zone_against_an_edge_hands_the_outline_over_and_back ... ok
[INFO] [stdout] test alive_zone::svg::tests::a_dead_zone_in_open_space_draws_its_whole_rim ... ok
[INFO] [stdout] test alive_zone::svg::tests::a_string_of_dead_zones_still_closes_every_loop ... ok
[INFO] [stdout] test alive_zone::svg::tests::drawing_the_outline_changes_nothing ... ok
[INFO] [stdout] test alive_zone::svg::tests::an_enclosed_dead_zone_leaves_no_arc_behind ... ok
[INFO] [stdout] test alive_zone::svg::tests::every_point_drawn_is_on_the_boundary_of_the_playable_area ... ok
[INFO] [stdout] test alive_zone::svg::tests::the_path_is_the_same_however_the_zone_was_reached ... ok
[INFO] [stdout] test alive_zone::tests::a_crossing_three_shapes_share_survives_the_collector ... ok
[INFO] [stdout] test alive_zone::tests::a_new_stone_consumes_the_forced_eyes_around_it ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_tiny_cell_deep_inside_a_dead_zone_is_dead ... ok
[INFO] [stdout] test alive_zone::tests::a_forced_eye_is_removed_by_its_own_point ... ok
[INFO] [stdout] test alive_zone::tests::a_forced_eye_overrides_every_shape_including_a_board_edge ... ok
[INFO] [stdout] test alive_zone::tests::a_point_off_the_inset_board_is_not_playable ... ok
[INFO] [stdout] test alive_zone::queries::tests::an_empty_zone_is_infinitely_far_away_not_zero ... ok
[INFO] [stdout] test alive_zone::tests::a_new_zone_is_the_board_and_nothing_else ... ok
[INFO] [stdout] test alive_zone::queries::tests::every_ring_dead_is_dead ... ok
[INFO] [stdout] test alive_zone::tests::a_dead_zone_at_a_corner_splits_both_edges ... ok
[INFO] [stdout] test alive_zone::queries::tests::one_live_ring_is_enough ... ok
[INFO] [stdout] test alive_zone::tests::a_point_inside_a_dead_zone_is_not_playable ... ok
[INFO] [stdout] test alive_zone::tests::a_dead_zone_surrounded_on_every_side_has_nothing_visible_left ... ok
[INFO] [stdout] test alive_zone::tests::a_forced_eye_cannot_put_a_position_back_on_the_board ... ok
[INFO] [stdout] test alive_zone::tests::a_forced_eye_is_playable_however_it_is_covered ... ok
[INFO] [stdout] test alive_zone::queries::tests::an_empty_zone_has_no_nearest_playable_point ... ok
[INFO] [stdout] test alive_zone::tests::a_temporary_circle_is_restored_even_when_the_closure_panics ... ok
[INFO] [stdout] test alive_zone::tests::a_temporary_circle_leaves_the_zone_bit_identical ... ok
[INFO] [stdout] test alive_zone::tests::a_temporary_circle_is_restored_on_an_early_return ... ok
[INFO] [stdout] test alive_zone::tests::an_exact_hit_leaves_the_eyes_around_it_alone ... ok
[INFO] [stdout] test alive_zone::tests::an_eye_exactly_a_stone_diameter_away_is_consumed ... ok
[INFO] [stdout] test alive_zone::queries::tests::a_cell_just_beyond_a_stone_radius_of_the_board_is_dead ... ok
[INFO] [stdout] test alive_zone::tests::a_point_on_the_rim_of_a_dead_zone_is_playable ... ok
[INFO] [stdout] test alive_zone::tests::a_stone_can_still_be_carved_while_a_temporary_circle_is_out ... ok
[INFO] [stdout] test alive_zone::tests::a_dead_zone_against_an_edge_round_trips_too ... ok
[INFO] [stdout] test alive_zone::tests::forced_eyes_are_added_and_found_exactly ... ok
[INFO] [stdout] test alive_zone::tests::forced_eyes_are_walked_in_a_reproducible_order ... ok
[INFO] [stdout] test alive_zone::tests::exactly_tangent_dead_zones_do_not_split_each_other ... ok
[INFO] [stdout] test alive_zone::tests::a_point_where_two_dead_zones_overlap_is_not_playable ... ok
[INFO] [stdout] test alive_zone::tests::dead_zones_that_do_not_touch_leave_each_other_whole ... ok
[INFO] [stdout] test alive_zone::tests::a_single_dead_zone_is_carved_and_named ... ok
[INFO] [stdout] test alive_zone::tests::overlapping_dead_zones_split_each_other ... ok
[INFO] [stdout] test alive_zone::tests::every_crossing_of_a_carve_is_shared_by_exactly_two_shapes ... ok
[INFO] [stdout] test alive_zone::tests::a_dead_zone_against_an_edge_splits_the_edge ... ok
[INFO] [stdout] test alive_zone::tests::reclaiming_a_stone_that_has_no_dead_zone_is_refused ... ok
[INFO] [stdout] test alive_zone::tests::every_point_on_an_empty_board_is_playable ... ok
[INFO] [stdout] test alive_zone::tests::a_progressive_run_of_overlaps_stays_consistent ... ok
[INFO] [stdout] test alive_zone::tests::reclaiming_gives_the_area_back ... ok
[INFO] [stdout] test alive_zone::tests::removing_near_a_point_with_nothing_around_it_removes_nothing ... ok
[INFO] [stdout] test alive_zone::tests::reclaiming_a_surrounded_dead_zone_restores_its_neighbours ... ok
[INFO] [stdout] test alive_zone::tests::reclaiming_out_of_order_restores_the_empty_board_too ... ok
[INFO] [stdout] test alive_zone::tests::reclaiming_takes_the_shape_and_its_crossings_away ... ok
[INFO] [stdout] test alive_zone::tests::a_recarved_dead_zone_gets_a_fresh_shape_id ... ok
[INFO] [stdout] test alive_zone::tests::a_reclaimed_dead_zone_leaves_no_shape_behind ... ok
[INFO] [stdout] test alive_zone::tests::a_temporary_circle_is_not_a_stone_and_cannot_be_reclaimed_by_one ... ok
[INFO] [stdout] test alive_zone::tests::three_dead_zones_through_one_point_meet_there_exactly ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_healthy_zone_validates ... ok
[INFO] [stdout] test alive_zone::tests::a_temporary_circle_is_there_inside_the_closure ... ok
[INFO] [stdout] test alive_zone::tests::unwinding_every_dead_zone_restores_the_empty_board ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_forced_eye_under_the_wrong_key_is_caught ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_dead_zone_no_stone_names_is_caught ... ok
[INFO] [stdout] test alive_zone::tests::carving_reclaiming_and_carving_again_reproduces_the_structure ... ok
[INFO] [stdout] test alive_zone::tests::segments_are_never_consulted_by_contains ... ok
[INFO] [stdout] test alive_zone::tests::carving_the_same_stone_twice_is_refused ... ok
[INFO] [stdout] test alive_zone::tests::several_dead_zones_are_all_consulted ... ok
[INFO] [stdout] test alive_zone::tests::the_meeting_point_drains_however_the_dead_zones_are_reclaimed ... ok
[INFO] [stdout] test alive_zone::tests::temporary_circles_nest ... ok
[INFO] [stdout] test alive_zone::tests::the_third_pair_crosses_a_hair_away_and_is_therefore_a_second_point ... ok
[INFO] [stdout] test alive_zone::tests::the_concurrent_triple_round_trips_exactly ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_dead_zone_that_has_gone_is_caught ... ok
[INFO] [stdout] test alive_zone::queries::tests::the_stone_radius_threshold_is_inclusive ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_live_temporary_circle_is_named_by_the_zone_itself ... ok
[INFO] [stdout] test alive_zone::validate::tests::two_stones_naming_one_dead_zone_is_caught ... ok
[INFO] [stdout] test clipping::graph::tests::a_new_segment_inherits_what_covered_the_piece_it_split ... ok
[INFO] [stdout] test clipping::graph::tests::a_walk_over_a_missing_shape_yields_nothing ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_temporary_circle_naming_nothing_is_caught ... ok
[INFO] [stdout] test clipping::graph::tests::add_overlapping_from_a_segment_to_itself_covers_everything ... ok
[INFO] [stdout] test alive_zone::validate::tests::corruption_underneath_surfaces_through_the_zone ... ok
[INFO] [stdout] test clipping::graph::tests::an_edge_is_split_into_three_stretches_and_a_tail ... ok
[INFO] [stdout] test clipping::graph::tests::a_dead_zone_against_an_edge_splits_both ... ok
[INFO] [stdout] test clipping::graph::tests::a_point_a_single_bit_away_is_a_different_segment ... ok
[INFO] [stdout] test clipping::graph::tests::an_open_shape_can_be_extended_past_either_end ... ok
[INFO] [stdout] test clipping::graph::tests::a_span_runs_from_a_segment_to_its_successor ... ok
[INFO] [stdout] test clipping::graph::tests::a_new_graph_holds_the_four_board_edges ... ok
[INFO] [stdout] test clipping::graph::tests::add_overlapping_covers_the_run_between_its_ends ... ok
[INFO] [stdout] test clipping::graph::tests::a_covered_stretch_is_not_measured ... ok
[INFO] [stdout] test clipping::graph::tests::a_shape_with_nothing_visible_is_infinitely_far_away ... ok
[INFO] [stdout] test clipping::graph::tests::carving_reclaiming_and_carving_again_reproduces_the_structure ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_stone_naming_a_board_edge_is_caught ... ok
[INFO] [stdout] test clipping::graph::tests::a_dead_zone_in_open_space_stays_whole ... ok
[INFO] [stdout] test alive_zone::validate::tests::a_panic_out_of_a_compound_operation_puts_the_structure_check_back ... ok
[INFO] [stdout] test clipping::segment::tests::a_freed_slot_is_handed_out_again ... ok
[INFO] [stdout] test clipping::graph::tests::insertion_keeps_an_edge_in_offset_order ... ok
[INFO] [stdout] test clipping::graph::tests::remove_overlapping_brings_the_outline_back ... ok
[INFO] [stdout] test clipping::graph::tests::two_dead_zones_clip_each_other ... ok
[INFO] [stdout] test clipping::graph::tests::inserting_the_same_point_twice_returns_the_same_segment ... ok
[INFO] [stdout] test clipping::shape::tests::a_boundary_contains_what_is_off_the_board ... ok
[INFO] [stdout] test clipping::shape::tests::a_dead_zone_contains_its_interior_only ... ok
[INFO] [stdout] test clipping::graph::tests::insertion_keeps_a_dead_zone_in_offset_order_around_the_wrap ... ok
[INFO] [stdout] test clipping::graph::tests::the_far_ends_of_an_edge_are_shared_with_nothing ... ok
[INFO] [stdout] test clipping::segment::tests::a_segment_is_active_only_when_nothing_covers_it ... ok
[INFO] [stdout] test clipping::graph::tests::deleting_the_head_moves_it_to_the_successor ... ok
[INFO] [stdout] test clipping::graph::tests::deleting_the_last_segment_leaves_the_outline_whole ... ok
[INFO] [stdout] test clipping::graph::tests::removing_a_shape_takes_its_segments_with_it ... ok
[INFO] [stdout] test clipping::segment::tests::removing_twice_is_harmless ... ok
[INFO] [stdout] test clipping::graph::tests::deleting_a_segment_relinks_the_list_and_clears_the_index ... ok
[INFO] [stdout] test clipping::shared_starts::tests::an_emptied_point_leaves_no_entry_behind ... ok
[INFO] [stdout] test clipping::shape::tests::tangency_and_coincidence_are_rejected ... ok
[INFO] [stdout] test clipping::shared_starts::tests::segments_group_by_exact_point ... ok
[INFO] [stdout] test clipping::shape::tests::the_overlapped_arc_is_the_shorter_way_round ... ok
[INFO] [stdout] test clipping::shared_starts::tests::adding_the_same_segment_twice_is_idempotent ... ok
[INFO] [stdout] test clipping::shape::tests::an_edge_starts_and_ends_at_the_inset_corners ... ok
[INFO] [stdout] test clipping::shape::tests::board_edges_run_opposite_to_a_dead_zone ... ok
[INFO] [stdout] test clipping::shape::tests::offsets_and_points_are_inverses_on_a_dead_zone ... ok
[INFO] [stdout] test clipping::shape::tests::a_span_runs_between_its_two_offsets ... ok
[INFO] [stdout] test clipping::shape::tests::an_edge_grazing_a_circle_is_rejected ... ok
[INFO] [stdout] test clipping::shape::tests::offsets_and_points_are_inverses_on_every_edge ... ok
[INFO] [stdout] test clipping::shape::tests::an_edge_enters_a_circle_at_the_lower_offset ... ok
[INFO] [stdout] test clipping::shape::tests::an_edge_misses_a_circle_it_does_not_reach ... ok
[INFO] [stdout] test clipping::shape::tests::two_overlapping_dead_zones_cross_twice ... ok
[INFO] [stdout] test clipping::validate::tests::a_self_loop_part_way_round_the_list_is_caught ... ok
[INFO] [stdout] test clipping::shared_starts::tests::the_sole_segment_is_reported_only_when_it_is_alone ... ok
[INFO] [stdout] test clipping::shared_starts::tests::there_is_no_tolerance_in_the_key ... ok
[INFO] [stdout] test clipping::validate::tests::an_asymmetric_link_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::a_segment_no_shape_can_reach_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::a_cover_by_a_shape_that_has_gone_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::a_healthy_structure_validates ... ok
[INFO] [stdout] test clipping::validate::tests::a_segment_missing_from_the_index_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::a_shape_covering_itself_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::an_index_entry_pointing_at_nothing_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::an_index_entry_filed_under_the_wrong_point_is_caught ... ok
[INFO] [stdout] test color::tests::per_color_indexes_by_color ... ok
[INFO] [stdout] test color::tests::per_color_round_trips_an_array ... ok
[INFO] [stdout] test color::tests::per_color_is_mutable_through_the_index ... ok
[INFO] [stdout] test connectivity::tests::a_cached_status_is_reused_until_it_is_invalidated ... ok
[INFO] [stdout] test connectivity::tests::a_pair_further_apart_than_the_limit_is_not_judged_at_all ... ok
[INFO] [stdout] test clipping::shared_starts::tests::the_two_zeroes_are_one_point ... ok
[INFO] [stdout] test connectivity::tests::a_dense_friendly_shape_is_connected_all_the_way_through ... ok
[INFO] [stdout] test clipping::validate::tests::a_count_larger_than_the_list_is_caught ... ok
[INFO] [stdout] test connectivity::tests::a_corner_stone_holds_on_to_both_its_walls ... ok
[INFO] [stdout] test color::tests::all_is_in_turn_order ... ok
[INFO] [stdout] test color::tests::opposite_swaps_and_is_an_involution ... ok
[INFO] [stdout] test clipping::validate::tests::a_count_smaller_than_the_list_is_caught ... ok
[INFO] [stdout] test connectivity::tests::a_pair_that_reaches_the_wall_stays_connected ... ok
[INFO] [stdout] test clipping::validate::tests::an_offset_that_does_not_match_its_point_is_caught ... ok
[INFO] [stdout] test clipping::validate::tests::a_segment_in_the_wrong_shapes_list_is_caught ... ok
[INFO] [stdout] test connectivity::tests::a_stone_between_the_boundary_bound_and_the_limit_is_still_evaluated ... ok
[INFO] [stdout] test connectivity::tests::every_pair_inside_the_safe_pair_distance_is_connected ... ok
[INFO] [stdout] test connectivity::tests::either_order_finds_the_same_cached_status ... ok
[INFO] [stdout] test connectivity::tests::invalidation_spares_a_status_out_of_range ... ok
[INFO] [stdout] test connectivity::tests::a_tight_pair_holds_and_a_looser_one_does_not ... ok
[INFO] [stdout] test connectivity::tests::only_an_uncuttable_same_color_pair_is_connected ... ok
[INFO] [stdout] test connectivity::tests::a_pair_well_past_the_safe_distance_is_cuttable ... ok
[INFO] [stdout] test connectivity::tests::the_fast_path_stays_optimistic_about_a_forced_eye_between_a_pair ... ok
[INFO] [stdout] test connectivity::tests::the_thresholds_are_the_numbers_they_are ... ok
[INFO] [stdout] test connectivity::tests::two_pairs_that_cross_each_other_are_both_connected ... ok
[INFO] [stdout] test delta::tests::a_capture_carries_its_victims ... ok
[INFO] [stdout] test game::tests::a_board_answers_whether_its_own_stones_can_be_cut ... ok
[INFO] [stdout] test connectivity::tests::an_edge_is_cut_off_while_an_enemy_pair_straddles_the_foot ... ok
[INFO] [stdout] test clipping::validate::tests::offsets_out_of_order_are_caught ... ok
[INFO] [stdout] test connectivity::tests::a_question_that_is_never_measured_is_never_cached ... ok
[INFO] [stdout] test delta::tests::a_pass_places_nothing_and_captures_nothing ... ok
[INFO] [stdout] test game::tests::a_board_that_is_not_a_number_holds_no_positions ... ok
[INFO] [stdout] test game::tests::a_delta_placing_a_stone_off_the_board_is_refused ... ok
[INFO] [stdout] test connectivity::tests::every_stone_inside_the_safe_boundary_distance_reaches_its_edge ... ok
[INFO] [stdout] test connectivity::tests::measuring_leaves_the_alive_zone_exactly_as_it_was ... ok
[INFO] [stdout] test delta::tests::a_placement_is_not_a_pass ... ok
[INFO] [stdout] test game::tests::a_delta_that_captures_the_same_stone_twice_is_refused ... ok
[INFO] [stdout] test game::tests::a_delta_that_reuses_a_stone_id_is_refused ... ok
[INFO] [stdout] test game::tests::a_delta_that_captures_a_stone_that_is_not_there_is_refused ... ok
[INFO] [stdout] test game::tests::a_coordinate_that_is_not_a_number_is_not_placeable ... ok
[INFO] [stdout] test game::tests::a_capture_leaves_a_forced_eye_to_snap_to ... ok
[INFO] [stdout] test clipping::validate::tests::an_open_shape_whose_head_is_not_its_lowest_offset_is_caught ... ok
[INFO] [stdout] test connectivity::tests::a_stone_over_the_line_is_judged_like_any_other_position ... ok
[INFO] [stdout] test game::tests::a_game_rebuilt_from_its_deltas_is_the_same_game ... ok
[INFO] [stdout] test game::tests::a_packed_board_captures_every_group_on_it ... ok
[INFO] [stdout] test game::tests::a_probe_that_is_not_a_number_snaps_to_nothing ... ok
[INFO] [stdout] test game::tests::a_surrounded_corner_stone_is_taken_and_leaves_an_eye ... ok
[INFO] [stdout] test game::tests::a_pass_that_captures_is_refused ... ok
[INFO] [stdout] test game::tests::a_probe_already_in_the_clear_is_its_own_answer ... ok
[INFO] [stdout] test game::tests::a_replayed_log_that_carries_on_past_two_passes_is_refused ... ok
[INFO] [stdout] test game::tests::a_transient_change_invalidates_around_itself_too ... ok
[INFO] [stdout] test game::tests::a_self_capture_is_refused_and_changes_nothing ... ok
[INFO] [stdout] test game::tests::a_transient_question_is_answered_with_the_stone_on_the_board ... ok
[INFO] [stdout] test game::tests::a_transient_placement_leaves_nothing_behind ... ok
[INFO] [stdout] test game::tests::a_surrounded_edge_stone_is_taken_too ... ok
[INFO] [stdout] test game::tests::a_stone_placed_near_a_forced_eye_consumes_it ... ok
[INFO] [stdout] test game::tests::an_empty_board_snaps_a_corner_probe_onto_the_inset_corner ... ok
[INFO] [stdout] test game::tests::a_panic_while_a_transient_stone_is_down_leaves_the_board_as_it_was ... ok
[INFO] [stdout] test game::tests::a_position_no_centre_can_reach_is_refused_without_being_played ... ok
[INFO] [stdout] test connectivity::tests::an_edge_is_cut_off_when_an_enemy_contests_the_foot ... ok
[INFO] [stdout] test game::tests::reading_the_diagram_twice_builds_it_once ... ok
[INFO] [stdout] test game::tests::the_board_rectangle_is_the_whole_domain_a_delta_may_use ... ok
[INFO] [stdout] test game::tests::a_pass_arms_the_next_one_and_an_undo_disarms_it_again ... ok
[INFO] [stdout] test game::tests::an_ended_game_still_answers_everything_it_answered_before ... ok
[INFO] [stdout] test game::tests::no_cut_status_outlives_the_position_it_was_computed_for ... ok
[INFO] [stdout] test game::tests::a_stone_played_exactly_on_one_forced_eye_leaves_the_others_alone ... ok
[INFO] [stdout] test game::tests::the_delta_log_holds_the_committed_turns_and_nothing_else ... ok
[INFO] [stdout] test game::tests::asking_whether_a_pair_can_be_cut_does_not_change_the_board ... ok
[INFO] [stdout] test game::tests::there_is_nothing_to_undo_on_an_empty_board ... ok
[INFO] [stdout] test game::tests::turns_captures_and_territory_all_follow_from_the_deltas ... ok
[INFO] [stdout] test game::tests::the_revision_moves_on_every_change_including_a_transient_one ... ok
[INFO] [stdout] test geometry::predicates::tests::ccw_signs_the_turn ... ok
[INFO] [stdout] test geometry::predicates::tests::a_shared_endpoint_does_not_intersect ... ok
[INFO] [stdout] test game::tests::two_passes_in_a_row_end_the_game_and_it_then_takes_no_turns ... ok
[INFO] [stdout] test game::tests::undoing_a_capture_takes_its_forced_eye_back_with_it ... ok
[INFO] [stdout] test geometry::predicates::tests::a_degenerate_polygon_contains_nothing ... ok
[INFO] [stdout] test geometry::predicates::tests::a_collinear_overlap_does_not_intersect ... ok
[INFO] [stdout] test game::tests::undoing_a_capture_restores_the_board_bit_for_bit ... ok
[INFO] [stdout] test geometry::predicates::tests::a_ring_set_with_no_hull_contains_nothing ... ok
[INFO] [stdout] test geometry::predicates::tests::ring_area_signs_the_winding ... ok
[INFO] [stdout] test geometry::predicates::tests::ring_area_ignores_a_repeated_closing_point ... ok
[INFO] [stdout] test geometry::predicates::tests::point_in_polygon_counts_crossings ... ok
[INFO] [stdout] test game::tests::undoing_a_plain_move_restores_the_board_bit_for_bit ... ok
[INFO] [stdout] test geometry::predicates::tests::a_degenerate_ring_has_no_area ... ok
[INFO] [stdout] test game::tests::undoing_the_second_pass_un_ends_the_game ... ok
[INFO] [stdout] test geometry::predicates::tests::parallel_segments_do_not_intersect ... ok
[INFO] [stdout] test geometry::shapes::tests::circle_to_segment_covers_all_three_cases ... ok
[INFO] [stdout] test geometry::shapes::tests::closest_point_on_arc_falls_back_to_the_nearer_end ... ok
[INFO] [stdout] test geometry::shapes::tests::arc_to_segment_measures_candidates_not_crossings ... ok
[INFO] [stdout] test geometry::shapes::tests::arc_touching_a_segment_is_zero ... ok
[INFO] [stdout] test geometry::shapes::tests::parallel_segments_are_their_offset_apart ... ok
[INFO] [stdout] test geometry::shapes::tests::touching_segments_are_zero_apart_via_the_endpoint_sweep ... ok
[INFO] [stdout] test geometry::tests::a_board_that_is_not_a_number_holds_no_positions ... ok
[INFO] [stdout] test geometry::tests::a_coordinate_that_is_not_a_number_is_not_on_the_board ... ok
[INFO] [stdout] test geometry::tests::approx_equal_is_a_magnitude_test ... ok
[INFO] [stdout] test geometry::tests::the_board_rectangle_is_closed ... ok
[INFO] [stdout] test geometry::tests::truncate_coord_fixes_the_decimals ... ok
[INFO] [stdout] test geometry::predicates::tests::rings_are_a_hull_minus_its_holes ... ok
[INFO] [stdout] test geometry::shapes::tests::a_degenerate_segment_answers_with_its_start ... ok
[INFO] [stdout] test geometry::shapes::tests::closest_point_on_circle_projects_radially ... ok
[INFO] [stdout] test geometry::shapes::tests::a_point_at_the_centre_answers_with_angle_zero ... ok
[INFO] [stdout] test geometry::shapes::tests::closest_point_on_arc_projects_within_the_span ... ok
[INFO] [stdout] test geometry::shapes::tests::closest_point_on_segment_projects_and_clamps ... ok
[INFO] [stdout] test geometry::shapes::tests::arc_to_segment_finds_the_radial_approach ... ok
[INFO] [stdout] test geometry::shapes::tests::an_arc_span_may_cross_zero ... ok
[INFO] [stdout] test point::tests::nan_is_not_equal_to_itself_bitwise_but_keys_alike ... ok
[INFO] [stdout] test point::tests::zeroes_are_one_point ... ok
[INFO] [stdout] test serde_support::tests::a_color_is_a_lowercase_string ... ok
[INFO] [stdout] test geometry::tests::truncate_coord_normalizes_negative_zero ... ok
[INFO] [stdout] test serde_support::tests::a_point_is_a_two_element_array ... ok
[INFO] [stdout] test serde_support::tests::a_stone_matches_the_protocol_shape ... ok
[INFO] [stdout] test stone::tests::ids_order_and_display_as_numbers ... ok
[INFO] [stdout] test geometry::shapes::tests::crossing_segments_are_zero_apart ... ok
[INFO] [stdout] test point::tests::distance_is_euclidean ... ok
[INFO] [stdout] test serde_support::tests::a_per_color_pair_is_keyed_by_colour_name ... ok
[INFO] [stdout] test geometry::shapes::tests::normalize_angle_lands_in_one_turn ... ok
[INFO] [stdout] test svg::tests::a_dump_does_not_move_the_position ... ok
[INFO] [stdout] test serde_support::tests::a_delta_matches_the_protocol_shape ... ok
[INFO] [stdout] test serde_support::tests::a_pass_delta_has_a_null_stone ... ok
[INFO] [stdout] test svg::tests::a_group_with_no_territory_is_neither_drawn_nor_ranked ... ok
[INFO] [stdout] test svg::tests::a_groups_fill_is_its_rank_in_the_palette ... ok
[INFO] [stdout] test stone::tests::stone_equality_is_exact_in_its_position ... ok
[INFO] [stdout] test svg::tests::an_empty_board_still_produces_a_document ... ok
[INFO] [stdout] test svg::tests::every_stone_gets_a_circle_and_a_label ... ok
[INFO] [stdout] test point::tests::identity_has_no_tolerance ... ok
[INFO] [stdout] test svg::tests::a_group_with_no_rings_draws_nothing ... ok
[INFO] [stdout] test svg::tests::a_captured_stone_leaves_a_forced_eye_in_the_alive_zone_geometry ... ok
[INFO] [stdout] test svg::tests::a_groups_path_closes_every_ring ... ok
[INFO] [stdout] test point::tests::key_survives_a_hash_map_round_trip ... ok
[INFO] [stdout] test svg::tests::every_palette_entry_is_a_hex_colour ... ok
[INFO] [stdout] test svg::tests::black_groups_count_from_one ... ok
[INFO] [stdout] test geometry::shapes::tests::arc_to_segment_ignores_the_circle_outside_the_span ... ok
[INFO] [stdout] test svg::tests::the_letter_helper_wraps_rather_than_overflowing ... ok
[INFO] [stdout] test svg::tests::rank_follows_the_colour_seed_and_not_the_discovery_order ... ok
[INFO] [stdout] test svg::tests::the_palette_wraps_rather_than_running_out ... ok
[INFO] [stdout] test svg::tests::the_derived_constants_are_the_ones_the_renderer_used ... ok
[INFO] [stdout] test svg::tests::the_two_players_are_ranked_independently ... ok
[INFO] [stdout] test svg::tests::the_layers_come_out_in_order ... ok
[INFO] [stdout] test svg::tests::a_white_group_past_z_gains_a_second_letter_at_the_end ... ok
[INFO] [stdout] test svg::tests::path_coordinates_are_truncated_and_nothing_else_is ... ok
[INFO] [stdout] test clipping::graph::tests::the_board_corners_are_shared_starts ... ok
[INFO] [stdout] test voronoi::rect::tests::a_vertex_on_the_edge_lands_exactly_on_it ... ok
[INFO] [stdout] test voronoi::tests::a_board_the_arithmetic_cannot_carry_gets_no_diagram ... ok
[INFO] [stdout] test voronoi::tests::a_duplicate_position_still_belongs_to_a_group ... ok
[INFO] [stdout] test voronoi::tests::a_groups_stones_come_back_ascending_by_id ... ok
[INFO] [stdout] test voronoi::rect::tests::clipping_is_indifferent_to_winding ... ok
[INFO] [stdout] test voronoi::tests::a_merged_block_has_one_ring_of_real_numbers ... ok
[INFO] [stdout] test voronoi::tests::a_lone_stone_owns_the_whole_board ... ok
[INFO] [stdout] test voronoi::tests::a_narrowly_connected_group_still_has_a_single_hull ... ok
[INFO] [stdout] test voronoi::tests::a_mixed_position_splits_into_the_expected_groups ... ok
[INFO] [stdout] test svg::tests::white_groups_letter_from_a ... ok
[INFO] [stdout] test voronoi::tests::an_empty_board_has_no_groups ... ok
[INFO] [stdout] test voronoi::tests::a_run_of_touching_stones_merges_into_one_group ... ok
[INFO] [stdout] test voronoi::rect::tests::a_ring_already_inside_is_returned_unchanged ... ok
[INFO] [stdout] test voronoi::merge::tests::a_cell_walk_closes_around_every_stone ... ok
[INFO] [stdout] test voronoi::rect::tests::a_ring_entirely_outside_clips_away ... ok
[INFO] [stdout] test voronoi::rect::tests::a_ring_covering_the_board_becomes_the_board ... ok
[INFO] [stdout] test voronoi::tests::a_board_the_arithmetic_can_carry_still_gets_one ... ok
[INFO] [stdout] test voronoi::merge::tests::a_duplicate_position_leaves_one_cell_degenerate ... ok
[INFO] [stdout] test voronoi::tests::a_group_without_rings_has_no_area_and_contains_nothing ... ok
[INFO] [stdout] test voronoi::rect::tests::a_corner_is_inserted_where_a_ring_wraps_one ... ok
[INFO] [stdout] test voronoi::merge::tests::every_stone_lands_in_exactly_one_group ... ok
[INFO] [stdout] test voronoi::tests::containment_follows_the_hole ... ok
[INFO] [stdout] test voronoi::tests::every_ring_is_closed ... ok
[INFO] [stdout] test voronoi::tests::stones_in_the_corners_all_get_a_group ... ok
[INFO] [stdout] test voronoi::tests::the_two_colours_get_a_group_each ... ok
[INFO] [stdout] test voronoi::tests::two_touching_stones_of_a_colour_merge ... ok
[INFO] [stdout] test voronoi::tests::the_groups_partition_the_board ... ok
[INFO] [stdout] test voronoi::tests::rings_are_sorted_by_descending_area_and_closed ... ok
[INFO] [stdout] test game::tests::every_position_the_zone_names_is_one_a_move_can_be_played_at ... ok
[INFO] [stdout] test voronoi::tests::an_enemy_between_two_stones_keeps_them_apart ... ok
[INFO] [stdout] test geometry::predicates::tests::a_proper_crossing_intersects ... ok
[INFO] [stderr]      Running tests/alive_zone.rs (/opt/rustwide/target/release/build/voronoi-go/8f7881ce0bbc0088/out/alive_zone-8f7881ce0bbc0088)
[INFO] [stdout] test clipping::segment::tests::iteration_yields_only_live_segments ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 338 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.20s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test schema_states_the_contract_this_file_asserts ... ok
[INFO] [stdout] test a_packed_board_is_infinitely_far_away_rather_than_zero_away ... ok
[INFO] [stdout] test the_concurrent_triple_is_no_different ... ok
[INFO] [stdout] test every_probe_of_every_case_matches ... ok
[INFO] [stdout] test every_round_trip_sequence_matches_and_is_exact ... ok
[INFO] [stdout] test every_recorded_value_in_the_fixture_is_asserted ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.17s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/cuts.rs (/opt/rustwide/target/release/build/voronoi-go/ea10f1501d60693e/out/cuts-ea10f1501d60693e)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test schema_states_the_contract_this_file_asserts ... ok
[INFO] [stdout] test every_recorded_connection_names_a_pair_the_reference_related ... ok
[INFO] [stdout] test the_pair_sweep_really_does_flip_at_the_threshold ... ok
[INFO] [stdout] test the_sweeps_flip_where_the_fixture_says_they_flip ... ok
[INFO] [stdout] test every_stone_below_the_boundary_threshold_reaches_its_edge ... ok
[INFO] [stdout] test every_recorded_connection_is_one_the_port_proves ... ok
[INFO] [stderr]      Running tests/games.rs (/opt/rustwide/target/release/build/voronoi-go/2d076260b213341b/out/games-2d076260b213341b)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test schema_states_the_contract_this_file_asserts ... ok
[INFO] [stdout] test a_game_replays_from_its_own_deltas ... ok
[INFO] [stderr]      Running tests/geometry.rs (/opt/rustwide/target/release/build/voronoi-go/6774d80159126ef4/out/geometry-6774d80159126ef4)
[INFO] [stdout] test every_game_replays_move_for_move ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.27s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 12 tests
[INFO] [stdout] test closest_point_on_circle_matches_the_fixture ... ok
[INFO] [stdout] test closest_point_on_arc_matches_the_fixture ... ok
[INFO] [stdout] test closest_distance_arc_to_segment_matches_the_fixture ... ok
[INFO] [stdout] test closest_point_on_segment_matches_the_fixture ... ok
[INFO] [stdout] test point_in_polygon_matches_the_fixture ... ok
[INFO] [stdout] test segments_intersect_matches_the_fixture ... ok
[INFO] [stdout] test every_fixture_section_is_covered ... ok
[INFO] [stdout] test ccw_matches_the_fixture ... ok
[INFO] [stdout] test schema_states_the_tolerances_this_file_asserts ... ok
[INFO] [stdout] test closest_distance_circle_to_segment_matches_the_fixture ... ok
[INFO] [stdout] test segment_to_segment_distance_matches_the_fixture ... ok
[INFO] [stdout] test signed_ring_area_matches_the_fixture ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 12 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/svg.rs (/opt/rustwide/target/release/build/voronoi-go/c7db0e11422d9477/out/svg-c7db0e11422d9477)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test a_board_with_barely_any_room_left_still_dumps ... ok
[INFO] [stdout] test every_reference_in_a_dump_resolves ... ok
[INFO] [stdout] test every_snapshot_is_well_formed_xml ... ok
[INFO] [stdout] test a_board_of_only_captures_dumps ... ok
[INFO] [stdout] test recorded_positions_dump_the_same_document_they_always_did ... ok
[INFO] [stdout] test a_dump_is_a_function_of_the_position_alone ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/voronoi.rs (/opt/rustwide/target/release/build/voronoi-go/dec5d5aa7a3894cb/out/voronoi-dec5d5aa7a3894cb)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test two_stones_split_the_board_between_them ... ok
[INFO] [stdout] test every_case_partitions_the_whole_board ... ok
[INFO] [stdout] test every_case_reproduces_its_partition_and_its_areas ... ok
[INFO] [stdout] test a_lone_stone_owns_the_whole_board_wherever_it_stands ... ok
[INFO] [stdout] test the_partition_does_not_depend_on_the_order_the_stones_arrive_in ... ok
[INFO] [stdout] test schema_states_the_contract_this_file_asserts ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/build/voronoi-go-engine/6389b411b350f414/out/voronoi_go_engine-6389b411b350f414)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test tests::every_line_is_answered_with_one_line_of_json ... ok
[INFO] [stdout] test tests::threads_takes_a_value_either_way_round ... ok
[INFO] [stdout] test tests::a_command_line_that_makes_no_sense_is_refused ... ok
[INFO] [stdout] test tests::help_is_not_an_error ... ok
[INFO] [stdout] test tests::threads_defaults_to_one ... ok
[INFO] [stdout] test tests::a_last_line_without_a_newline_is_still_answered ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/protocol.rs (/opt/rustwide/target/release/build/voronoi-go-engine/9759312d00b74acb/out/protocol-9759312d00b74acb)
[INFO] [stdout] 
[INFO] [stdout] running 19 tests
[INFO] [stdout] test a_batch_answers_every_op_in_request_order ... ok
[INFO] [stdout] test a_connection_that_is_not_drawn_is_still_a_connection ... ok
[INFO] [stdout] test a_game_plays_reads_back_and_undoes ... ok
[INFO] [stdout] test a_malformed_line_is_answered_and_the_engine_carries_on ... ok
[INFO] [stdout] test end_of_input_ends_the_process_cleanly ... ok
[INFO] [stdout] test a_position_survives_the_wire_bit_for_bit ... ok
[INFO] [stdout] test dump_svg_writes_a_document_and_says_when_it_cannot ... ok
[INFO] [stdout] test a_command_line_that_makes_no_sense_writes_nothing_to_stdout ... ok
[INFO] [stdout] test a_line_is_answered_before_the_next_one_is_read ... ok
[INFO] [stdout] test a_batch_stays_in_request_order_across_threads ... ok
[INFO] [stdout] test two_passes_end_the_game_and_an_undo_un_ends_it ... ok
[INFO] [stdout] test ops_on_one_game_stay_sequential_across_threads ... ok
[INFO] [stdout] test a_move_off_the_board_is_not_the_same_as_one_that_is_merely_unplayable ... ok
[INFO] [stdout] test a_deeply_nested_line_is_refused_rather_than_walked ... ok
[INFO] [stdout] test version_answers_the_protocol_revision ... ok
[INFO] [stdout] test cutting_is_answered_from_the_position ... ok
[INFO] [stdout] test a_pair_past_the_limit_is_declined_rather_than_guessed ... ok
[INFO] [stdout] test a_batch_can_open_a_game_and_use_it ... ok
[INFO] [stdout] test stdout_is_protocol_only_even_when_there_are_diagnostics ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 19 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/build/voronoi-go-py/0c3cc00471c731ca/out/voronoi_go-0c3cc00471c731ca)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests voronoi_go
[INFO] [stdout] 
[INFO] [stdout] running 3 tests
[INFO] [stdout] test crates/voronoi-go/src/game/mod.rs - game::Game::pair_cuttable (line 492) ... ok
[INFO] [stdout] test crates/voronoi-go/src/game/mod.rs - game::Game::try_move (line 600) ... ok
[INFO] [stdout] test crates/voronoi-go/src/lib.rs - (line 18) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.02s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 3.99s; merged doctests compilation took 3.96s
[INFO] running `Command { std: "docker" "inspect" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869", kill_on_drop: false }`
[INFO] [stdout] 51b66152000937c8d87a61e137df3867d863fb8aaf915e140b9a384e013dc869
