[INFO] cloning repository https://github.com/fonces/mj-models [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/fonces/mj-models" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffonces%2Fmj-models", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffonces%2Fmj-models'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] a2d9b9ca8dbdf868687330b7932e66fcf187f925 [INFO] testing fonces/mj-models against 1.100.0-beta.1+cargoflags=--release for beta-release-1.100-2 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffonces%2Fmj-models" "/workspace/builds/worker-7-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-7-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/fonces/mj-models [INFO] finished tweaking git repo https://github.com/fonces/mj-models [INFO] tweaked toml for git repo https://github.com/fonces/mj-models written to /workspace/builds/worker-7-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/fonces/mj-models 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/fonces/mj-models 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] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-7-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] aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754 [INFO] running `Command { std: "docker" "start" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", 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" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754" "/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" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", 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" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }` [INFO] [stderr] Compiling wasm-bindgen-shared v0.2.120 [INFO] [stderr] Compiling bumpalo v3.20.2 [INFO] [stderr] Compiling futures-core v0.3.32 [INFO] [stderr] Compiling once_cell v1.21.4 [INFO] [stderr] Compiling mj-core v0.1.0 (/opt/rustwide/workdir/mj-core) [INFO] [stderr] Compiling wasm-bindgen v0.2.120 [INFO] [stderr] Compiling syn v2.0.117 [INFO] [stderr] Compiling futures-util v0.3.32 [INFO] [stderr] Compiling sanma v0.1.0 (/opt/rustwide/workdir/sanma) [INFO] [stderr] Compiling yonma v0.1.0 (/opt/rustwide/workdir/yonma) [INFO] [stderr] Compiling player v0.1.0 (/opt/rustwide/workdir/player) [INFO] [stderr] Compiling wasm-bindgen-macro-support v0.2.120 [INFO] [stderr] Compiling serde_derive v1.0.228 [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling wasm-bindgen-macro v0.2.120 [INFO] [stderr] Compiling js-sys v0.3.97 [INFO] [stderr] Compiling serde-wasm-bindgen v0.6.5 [INFO] [stderr] Compiling player-wasm v0.1.0 (/opt/rustwide/workdir/player-wasm) [INFO] [stderr] Finished `release` profile [optimized] target(s) in 29.53s [INFO] running `Command { std: "docker" "inspect" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", 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" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754" "/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] Compiling wasm-bindgen-test-macro v0.3.70 [INFO] [stderr] Compiling async-trait v0.1.89 [INFO] [stderr] Compiling nu-ansi-term v0.50.3 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling wasm-bindgen-test-shared v0.2.120 [INFO] [stderr] Compiling cast v0.3.0 [INFO] [stderr] Compiling oorandom v11.1.5 [INFO] [stderr] Compiling player v0.1.0 (/opt/rustwide/workdir/player) [INFO] [stderr] Compiling serde v1.0.228 [INFO] [stderr] Compiling serde_json v1.0.149 [INFO] [stderr] Compiling sanma v0.1.0 (/opt/rustwide/workdir/sanma) [INFO] [stderr] Compiling yonma v0.1.0 (/opt/rustwide/workdir/yonma) [INFO] [stderr] Compiling mj-core v0.1.0 (/opt/rustwide/workdir/mj-core) [INFO] [stderr] Compiling wasm-bindgen-futures v0.4.70 [INFO] [stdout] warning: function `pin` is never used [INFO] [stdout] --> mj-core/src/meld.rs:815:8 [INFO] [stdout] | [INFO] [stdout] 815 | fn pin(n: u8) -> Tile { [INFO] [stdout] | ^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling serde-wasm-bindgen v0.6.5 [INFO] [stderr] Compiling player-wasm v0.1.0 (/opt/rustwide/workdir/player-wasm) [INFO] [stderr] Compiling wasm-bindgen-test v0.3.70 [INFO] [stderr] Finished `release` profile [optimized] target(s) in 33.26s [INFO] running `Command { std: "docker" "inspect" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", 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" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--release", kill_on_drop: false }` [INFO] [stderr] warning: function `pin` is never used [INFO] [stderr] --> mj-core/src/meld.rs:815:8 [INFO] [stderr] | [INFO] [stderr] 815 | fn pin(n: u8) -> Tile { [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: `mj-core` (lib test) generated 1 warning [INFO] [stderr] Finished `release` profile [optimized] target(s) in 0.08s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/release/build/mj-core/9e86aa9abb90c8af/out/mj_core-9e86aa9abb90c8af) [INFO] [stdout] [INFO] [stdout] running 190 tests [INFO] [stdout] test dora::tests::dora_count_handles_chun_to_haku_wrap ... ok [INFO] [stdout] test dora::tests::aka_dora_is_orthogonal_to_kind_dora ... ok [INFO] [stdout] test dora::tests::dora_count_handles_north_to_east_wrap ... ok [INFO] [stdout] test dora::tests::dora_count_handles_9_to_1_wrap ... ok [INFO] [stdout] test dora::tests::dora_count_mixed_indicators ... ok [INFO] [stdout] test dora::tests::dora_count_ignores_red_flag_on_query_tile ... ok [INFO] [stdout] test dora::tests::dora_for_man_nine_is_man_one ... ok [INFO] [stdout] test dora::tests::is_aka_dora_false_for_normal_fives ... ok [INFO] [stdout] test dora::tests::dora_for_man_one_is_man_nine ... ok [INFO] [stdout] test dora::tests::dora_count_multiple_indicators_for_same_kind_accumulate ... ok [INFO] [stdout] test dora::tests::is_aka_dora_true_for_red_fives ... ok [INFO] [stdout] test dora::tests::dora_count_single_indicator_miss ... ok [INFO] [stdout] test dora::tests::next_after_indicator_does_not_cross_suits ... ok [INFO] [stdout] test dora::tests::next_after_indicator_dragons_full_cycle ... ok [INFO] [stdout] test dora::tests::next_after_indicator_numbered_sou_full_cycle ... ok [INFO] [stdout] test dora::tests::dora_count_single_indicator_hit ... ok [INFO] [stdout] test dora::tests::is_aka_dora_false_for_other_numbers_and_honors ... ok [INFO] [stdout] test dora::tests::next_after_indicator_numbered_man_full_cycle ... ok [INFO] [stdout] test dora::tests::dora_kind_never_carries_red_flag ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_handles_pin_9_to_1_wrap ... ok [INFO] [stdout] test dora::tests::sanma_defensive_fallback_for_manzu_2_to_8 ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_mixed_indicators ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_multiple_indicators_for_same_kind_accumulate ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_no_indicators_is_zero ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_single_indicator_hit ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_single_indicator_miss ... ok [INFO] [stdout] test dora::tests::sanma_dora_kind_never_carries_red_flag ... ok [INFO] [stdout] test dora::tests::next_after_indicator_winds_full_cycle ... ok [INFO] [stdout] test dora::tests::sanma_aka_dora_is_orthogonal_to_kind_dora ... ok [INFO] [stdout] test dora::tests::is_aka_dora_matches_tile_is_red ... ok [INFO] [stdout] test dora::tests::next_after_indicator_explicit_honor_variants ... ok [INFO] [stdout] test dora::tests::dora_count_no_indicators_is_zero ... ok [INFO] [stdout] test dora::tests::next_after_red_five_is_normal_six ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_ignores_red_flag_on_query_tile ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_handles_north_to_east_wrap ... ok [INFO] [stdout] test dora::tests::sanma_next_after_red_five_is_normal_six ... ok [INFO] [stdout] test meld::tests::adjacent_partial_tiles_low_and_low_plus_one ... ok [INFO] [stdout] test dora::tests::next_after_indicator_numbered_pin_full_cycle ... ok [INFO] [stdout] test meld::tests::adjacent_partial_permissive_accepts_manzu ... ok [INFO] [stdout] test dora::tests::sanma_dora_count_handles_chun_to_haku_wrap ... ok [INFO] [stdout] test meld::tests::adjacent_partial_red_five_only_when_pair_contains_five ... ok [INFO] [stdout] test dora::tests::sanma_manzu_indicator_cycle_full_table ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_explicit_honor_variants ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_dragons_full_cycle ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_numbered_pin_full_cycle ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_numbered_sou_full_cycle ... ok [INFO] [stdout] test meld::tests::adjacent_partial_accepts_low_one_through_eight ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_does_not_cross_suits ... ok [INFO] [stdout] test dora::tests::sanma_winds_and_dragons_do_not_cross ... ok [INFO] [stdout] test dora::tests::winds_and_dragons_do_not_cross ... ok [INFO] [stdout] test meld::tests::adjacent_partial_rejects_out_of_range_low ... ok [INFO] [stdout] test dora::tests::sanma_next_after_indicator_winds_full_cycle ... ok [INFO] [stdout] test meld::tests::caller_seat_returns_seat_for_open_variants_only ... ok [INFO] [stdout] test meld::tests::adjacent_partial_tiles_with_red_five ... ok [INFO] [stdout] test meld::tests::partial_tiles_returns_none_for_other_variants ... ok [INFO] [stdout] test meld::tests::kanchan_partial_red_five_only_when_pair_contains_five ... ok [INFO] [stdout] test meld::tests::quad_can_be_built_from_suited_honor_or_red_five ... ok [INFO] [stdout] test meld::tests::kanchan_partial_accepts_low_one_through_seven ... ok [INFO] [stdout] test meld::tests::kanchan_partial_permissive_accepts_manzu ... ok [INFO] [stdout] test meld::tests::pair_tiles_with_red_slot0_red_slot1_normal_sanma_suit ... ok [INFO] [stdout] test meld::tests::kanchan_partial_tiles_with_red_five ... ok [INFO] [stdout] test meld::tests::is_concealed_for_all_variants ... ok [INFO] [stdout] test meld::tests::kan_kind_added_constructible_for_each_seat ... ok [INFO] [stdout] test meld::tests::meld_error_display_is_non_empty ... ok [INFO] [stdout] test meld::tests::kanchan_partial_tiles_low_and_low_plus_two ... ok [INFO] [stdout] test meld::tests::sanma_adjacent_partial_rejects_out_of_range_low ... ok [INFO] [stdout] test meld::tests::sanma_kanchan_partial_accepts_low_one_through_seven ... ok [INFO] [stdout] test meld::tests::sanma_kanchan_partial_red_five_only_when_pair_contains_five ... ok [INFO] [stdout] test meld::tests::kanchan_partial_rejects_out_of_range_low ... ok [INFO] [stdout] test meld::tests::sanma_adjacent_partial_rejects_man_suit ... ok [INFO] [stdout] test meld::tests::pair_tiles_returns_none_for_other_variants ... ok [INFO] [stdout] test meld::tests::quad_tiles_normal_all_identical ... ok [INFO] [stdout] test meld::tests::sanma_kanchan_partial_rejects_out_of_range_low ... ok [INFO] [stdout] test meld::tests::sanma_sequence_red_five_only_when_run_contains_five ... ok [INFO] [stdout] test meld::tests::sanma_sequence_accepts_low_one_through_seven ... ok [INFO] [stdout] test meld::tests::sanma_kanchan_partial_rejects_man_suit ... ok [INFO] [stdout] test meld::tests::quad_tiles_returns_none_for_other_variants ... ok [INFO] [stdout] test meld::tests::sanma_sequence_rejects_man_suit_takes_priority_over_low_range ... ok [INFO] [stdout] test meld::tests::sequence_accepts_low_one_through_seven ... ok [INFO] [stdout] test meld::tests::quad_tiles_with_red_contains_exactly_one_red_and_all_same_kind ... ok [INFO] [stdout] test meld::tests::sanma_adjacent_partial_accepts_low_one_through_eight ... ok [INFO] [stdout] test meld::tests::sanma_adjacent_partial_red_five_only_when_pair_contains_five ... ok [INFO] [stdout] test meld::tests::pair_can_be_built_from_suited_honor_or_red_five ... ok [INFO] [stdout] test meld::tests::sanma_sequence_rejects_man_suit ... ok [INFO] [stdout] test meld::tests::sequence_permissive_accepts_manzu ... ok [INFO] [stdout] test meld::tests::pair_tiles_normal_both_slots_equal ... ok [INFO] [stdout] test meld::tests::sequence_tiles_in_ascending_order ... ok [INFO] [stdout] test meld::tests::sanma_sequence_rejects_out_of_range_low ... ok [INFO] [stdout] test meld::tests::sequence_tiles_with_red_five_marks_only_the_five_slot ... ok [INFO] [stdout] test meld::tests::sanma_sequence_tiles_in_ascending_order ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_preserves_red_five_when_pon_already_has_red ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_from_open_triplet_normal_tile ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_concealed_triplet ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_preserves_red_five_when_added_is_red ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_mismatched_tile_kind ... ok [INFO] [stdout] test meld::tests::triplet_can_be_built_from_suited_honor_or_red_five ... ok [INFO] [stdout] test meld::tests::sanma_sequence_rejects_man_suit_for_all_low ... ok [INFO] [stdout] test meld::tests::pair_tiles_with_red_slot0_red_slot1_normal ... ok [INFO] [stdout] test meld::tests::triplet_of_manzu_terminal_is_constructible ... ok [INFO] [stdout] test meld::tests::sequence_red_five_only_when_run_contains_five ... ok [INFO] [stdout] test meld::tests::triplet_tiles_normal_all_identical ... ok [INFO] [stdout] test score::tests::add_assign_i32 ... ok [INFO] [stdout] test meld::tests::sequence_rejects_out_of_range_low ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_pair ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_quad ... ok [INFO] [stdout] test score::tests::add_score_to_score ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_sequence ... ok [INFO] [stdout] test score::tests::add_assign_score ... ok [INFO] [stdout] test score::tests::add_i32_to_score ... ok [INFO] [stdout] test meld::tests::triplet_tiles_returns_none_for_other_variants ... ok [INFO] [stdout] test meld::tests::sequence_tiles_returns_none_for_other_variants ... ok [INFO] [stdout] test score::tests::display_is_plain_integer ... ok [INFO] [stdout] test meld::tests::shouminkan_upgrade_rejects_partial ... ok [INFO] [stdout] test meld::tests::triplet_tiles_with_red_contains_exactly_one_red_and_all_same_kind ... ok [INFO] [stdout] test seat::tests::sanma_kamicha_equals_two_sanma_shimocha_steps ... ok [INFO] [stdout] test seat::tests::sanma_kamicha_for_three_players ... ok [INFO] [stdout] test seat::tests::sanma_shimocha_for_three_players ... ok [INFO] [stdout] test seat::tests::relative_to_full_mapping ... ok [INFO] [stdout] test score::tests::ordering_is_numeric ... ok [INFO] [stdout] test seat::tests::kamicha_equals_three_shimocha_steps ... ok [INFO] [stdout] test score::tests::return_target_is_30000 ... ok [INFO] [stdout] test seat::tests::relative_to_self_is_none ... ok [INFO] [stdout] test score::tests::starting_score_is_25000 ... ok [INFO] [stdout] test tile::tests::explicit_honor_mapping ... ok [INFO] [stdout] test score::tests::sub_score_from_score_allows_negative ... ok [INFO] [stdout] test seat::tests::called_from_variants_are_eq ... ok [INFO] [stdout] test score::tests::sub_assign_i32 ... ok [INFO] [stdout] test score::tests::sub_assign_score ... ok [INFO] [stdout] test seat::tests::shimocha_follows_counter_clockwise_rotation ... ok [INFO] [stdout] test score::tests::sub_i32_from_score ... ok [INFO] [stdout] test tile::tests::honor_z_index_round_trip ... ok [INFO] [stdout] test seat::tests::toimen_is_self_inverse ... ok [INFO] [stdout] test seat::tests::is_sanma_player_only_for_three_seats ... ok [INFO] [stdout] test seat::tests::sanma_helpers_return_none_for_north ... ok [INFO] [stdout] test tile::tests::parse_error_variants_are_specific ... ok [INFO] [stdout] test tile::tests::parse_and_display_all_37_patterns ... ok [INFO] [stdout] test tile::tests::invalid_strings_are_errors ... ok [INFO] [stdout] test tile::tests::is_honor_true_only_for_z_tiles ... ok [INFO] [stdout] test tile::tests::is_red_only_for_zero_suited ... ok [INFO] [stdout] test tile::tests::round_trip_parse_display_parse ... ok [INFO] [stdout] test tile::tests::parser_rejects_2m_through_8m_in_sanma ... ok [INFO] [stdout] test tile::tests::parser_rejects_red_5m_in_sanma ... ok [INFO] [stdout] test tile::tests::sanma_parse_and_display_all_29_patterns ... ok [INFO] [stdout] test tile::tests::sanma_parse_error_variants_are_specific ... ok [INFO] [stdout] test tile::tests::sanma_red_five_not_equal_to_normal_five ... ok [INFO] [stdout] test tile::tests::sanma_round_trip_parse_display_parse ... ok [INFO] [stdout] test tile::tests::sanma_simple_terminal_honor_categories_are_disjoint_and_complete ... ok [INFO] [stdout] test tile::tests::red_five_not_equal_to_normal_five ... ok [INFO] [stdout] test tile::tests::sanma_invalid_strings_are_errors ... ok [INFO] [stdout] test tile::tests::sanma_simples_are_two_through_eight_of_pin_and_sou_only ... ok [INFO] [stdout] test tile::tests::sanma_suited_red_5m_rejected ... ok [INFO] [stdout] test tile::tests::sanma_suited_1m_and_9m_accepted ... ok [INFO] [stdout] test tile::tests::sanma_suited_2m_through_8m_rejected ... ok [INFO] [stdout] test tile::tests::sanma_suited_constructor_validates ... ok [INFO] [stdout] test tile::tests::simple_terminal_honor_categories_are_disjoint_and_complete ... ok [INFO] [stdout] test tile::tests::simples_are_two_through_eight_of_each_suit ... ok [INFO] [stdout] test tile::tests::suited_constructor_validates ... ok [INFO] [stdout] test tile::tests::yaochuhai_is_terminals_plus_honors ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_allows_red_five_pair_when_no_other_five_present ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_rejects_duplicate_kind_red_vs_normal_five ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_rejects_duplicate_kind_strict_equal ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_rejects_non_pair_entry ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_seven_distinct_pairs_is_ok_and_yields_fourteen_tiles ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_seven_distinct_pairs_sanma_path ... ok [INFO] [stdout] test winning_shape::tests::standard_four_sequences_plus_pair_is_ok_and_yields_fourteen_tiles ... ok [INFO] [stdout] test winning_shape::tests::standard_four_sequences_plus_pair_sanma_path ... ok [INFO] [stdout] test tile::tests::sanma_manzu_terminals_are_yaochuhai ... ok [INFO] [stdout] test winning_shape::tests::standard_four_triplets_plus_pair_is_ok_and_yields_fourteen_tiles ... ok [INFO] [stdout] test tile::tests::same_kind_basic_cases ... ok [INFO] [stdout] test winning_shape::tests::standard_mixed_triplet_sequence_quad_plus_pair_is_ok ... ok [INFO] [stdout] test tile::tests::sanma_is_red_only_for_zero_p_or_s ... ok [INFO] [stdout] test winning_shape::tests::standard_mixed_triplet_sequence_quad_plus_pair_sanma_path ... ok [INFO] [stdout] test winning_shape::tests::standard_red_five_in_sequence_sanma_path ... ok [INFO] [stdout] test winning_shape::tests::standard_rejects_non_pair_in_pair_slot ... ok [INFO] [stdout] test tile::tests::terminals_are_one_and_nine_of_each_suit_only ... ok [INFO] [stdout] test winning_shape::tests::standard_rejects_pair_in_meld_slot ... ok [INFO] [stdout] test tile::tests::winds_and_dragons ... ok [INFO] [stdout] test tile::tests::yonma_from_str_accepts_manzu_2_through_8_and_red_5m ... ok [INFO] [stdout] test winning_shape::tests::standard_red_five_in_sequence_round_trips_through_tiles ... ok [INFO] [stdout] test winning_shape::tests::standard_tiles_match_concatenation_of_meld_tiles_sanma_path ... ok [INFO] [stdout] test winning_shape::tests::standard_with_open_call_is_ok ... ok [INFO] [stdout] test winning_shape::tests::seven_pairs_tiles_have_each_kind_exactly_twice ... ok [INFO] [stdout] test winning_shape::tests::standard_rejects_partial_in_meld_slot ... ok [INFO] [stdout] test winning_shape::tests::standard_tiles_match_concatenation_of_meld_tiles ... ok [INFO] [stdout] test winning_shape::tests::thirteen_orphans_accepts_each_of_thirteen_yaochuhai_as_pair_tile ... ok [INFO] [stdout] test winning_shape::tests::thirteen_orphans_rejects_red_five ... ok [INFO] [stdout] test winning_shape::tests::thirteen_orphans_rejects_simples ... ok [INFO] [stdout] test winning_shape::tests::thirteen_orphans_rejects_simples_sanma_path ... ok [INFO] [stdout] test winning_shape::tests::thirteen_orphans_tiles_canonical_order_with_pair_doubled ... ok [INFO] [stdout] test winning_shape::tests::winning_shape_error_display_is_non_empty ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 190 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/release/build/player/d47355b89d1d87e0/out/player-d47355b89d1d87e0) [INFO] [stdout] [INFO] [stdout] running 26 tests [INFO] [stdout] test game::tests::after_draw_discard_then_pass_advances_to_next_draw ... ok [INFO] [stdout] test game::tests::finish_round_without_active_round_returns_no_active_round ... ok [INFO] [stdout] test game::tests::east_only_4_dealer_moves_end_hanchan_and_block_start_round ... ok [INFO] [stdout] test game::tests::finish_round_when_not_ended_returns_round_not_ended ... ok [INFO] [stdout] test sanma::tests::finish_round_without_active_round_returns_no_active_round ... ok [INFO] [stdout] test game::tests::forfeit_with_no_active_round_is_noop ... ok [INFO] [stdout] test sanma::tests::finish_round_when_not_ended_returns_round_not_ended ... ok [INFO] [stdout] test sanma::tests::new_hanchan_east_only_initial_state ... ok [INFO] [stdout] test sanma::tests::resolve_calls_with_no_active_round_returns_no_active_round ... ok [INFO] [stdout] test sanma::tests::start_round_after_hanchan_over_returns_hanchan_over ... ok [INFO] [stdout] test game::tests::new_hanchan_initial_state ... ok [INFO] [stdout] test sanma::tests::forfeit_with_no_active_round_is_noop ... ok [INFO] [stdout] test sanma::tests::is_awaiting_kita_ron_false_initially_and_true_after_kita_declaration ... ok [INFO] [stdout] test sanma::tests::start_round_twice_returns_already_active ... ok [INFO] [stdout] test sanma::tests::resolve_kita_ron_with_no_active_round_returns_no_active_round ... ok [INFO] [stdout] test game::tests::draw_in_after_draw_state_returns_round_error ... ok [INFO] [stdout] test game::tests::riichi_then_apply_dealer_win_clears_pool_and_credits_winner ... ok [INFO] [stdout] test game::tests::start_round_twice_returns_already_active ... ok [INFO] [stdout] test game::tests::default_matches_new_hanchan ... ok [INFO] [stdout] test game::tests::riichi_action_immediately_decrements_score_and_pools_a_stick ... ok [INFO] [stdout] test sanma::tests::after_draw_discard_then_pass_advances_to_next_draw ... ok [INFO] [stdout] test game::tests::new_hanchan_east_only_initial_state ... ok [INFO] [stdout] test sanma::tests::new_hanchan_east_south_initial_state ... ok [INFO] [stdout] test sanma::tests::default_is_east_south ... ok [INFO] [stdout] test sanma::tests::draw_in_after_draw_state_returns_round_error ... ok [INFO] [stdout] test game::tests::start_round_after_hanchan_over_returns_hanchan_over ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/release/build/player-wasm/b2be2327ce5a7053/out/player_wasm-b2be2327ce5a7053) [INFO] [stdout] [INFO] [stdout] test result: ok. 26 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 30 tests [INFO] [stdout] test tests::after_draw_action_de_each_variant_round_trips_through_json ... ok [INFO] [stdout] test tests::game_state_snapshot_serializes_east_only_yonma ... ok [INFO] [stdout] test tests::round_snapshot_hand_round_trip_via_hand_to_snapshot ... ok [INFO] [stdout] test tests::from_valid_call_actions_initial_state_is_none_then_some_after_discard ... ok [INFO] [stdout] test tests::parse_sanma_player_seat_accepts_three_and_rejects_north ... ok [INFO] [stdout] test tests::from_yaku_basic_variants ... ok [INFO] [stdout] test tests::parse_seat_accepts_four_strings_and_rejects_others ... ok [INFO] [stdout] test tests::meld_snapshot_open_meld_with_none_meta_yields_empty_display_slots ... ok [INFO] [stdout] test tests::call_action_de_each_variant_round_trips_through_json_yonma ... ok [INFO] [stdout] test tests::sanma_from_valid_call_actions_returns_3_entries_with_no_chi ... ok [INFO] [stdout] test tests::from_valid_after_draw_actions_round_trip_initial_dealer ... ok [INFO] [stdout] test tests::agari_breakdown_serializes_to_camel_case ... ok [INFO] [stdout] test tests::game_state_snapshot_serializes_to_expected_json_sanma ... ok [INFO] [stdout] test tests::parse_tile_rejects_garbage ... ok [INFO] [stdout] test tests::parse_hanchan_format_round_trip ... ok [INFO] [stdout] test tests::sanma_from_valid_after_draw_actions_initial_dealer_has_kita_options_field ... ok [INFO] [stdout] test tests::parse_sanma_tile_round_trip ... ok [INFO] [stdout] test tests::meld_snapshot_for_each_variant ... ok [INFO] [stdout] test tests::game_state_snapshot_serializes_to_expected_json_yonma ... ok [INFO] [stdout] test tests::valid_after_draw_actions_snapshot_serializes_to_camel_case ... ok [INFO] [stdout] test tests::valid_call_actions_for_seat_snapshot_serializes_to_camel_case ... ok [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/release/build/sanma/6e51815db538d02b/out/sanma-6e51815db538d02b) [INFO] [stdout] test tests::yaku_entry_serializes_to_camel_case ... ok [INFO] [stdout] test tests::sanma_into_call_action_accepts_pass_ron_pon_daiminkan ... ok [INFO] [stdout] test tests::sanma_into_call_action_rejects_chi ... ok [INFO] [stdout] test tests::yonma_into_after_draw_action_rejects_kita ... ok [INFO] [stdout] test tests::sanma_into_after_draw_action_accepts_kita ... ok [INFO] [stdout] test tests::round_snapshot_initial_state_after_draw_with_correct_hand_sizes ... ok [INFO] [stdout] test tests::sanma_round_snapshot_initial_state_after_draw_with_correct_hand_sizes ... ok [INFO] [stdout] test tests::sanma_standard_deck_strings_are_108_and_parseable ... ok [INFO] [stdout] test tests::tile_string_round_trip_for_all_kinds ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 30 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] running 442 tests [INFO] [stdout] test abortive::tests::kyuushu_all_chunchan_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_eight_distinct_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_duplicates_collapse_to_one_kind ... ok [INFO] [stdout] test abortive::tests::suukan_three_distinct_player_seats_is_true ... ok [INFO] [stdout] test abortive::tests::kyuushu_red_five_is_not_yaochuhai ... ok [INFO] [stdout] test abortive::tests::suukan_excess_entries_with_uniform_first_four_is_false ... ok [INFO] [stdout] test abortive::tests::three_winds_two_easts_one_south_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_kokushi_tenpai_with_pair_is_true ... ok [INFO] [stdout] test abortive::tests::kyuushu_exactly_nine_distinct_is_true ... ok [INFO] [stdout] test abortive::tests::sanchahou_boundary ... ok [INFO] [stdout] test agari::tests::between_draws_winning_tile_added_to_concealed_for_decomposition ... ok [INFO] [stdout] test agari::tests::calculate_best_pinfu_riichi_tsumo_sanma ... ok [INFO] [stdout] test agari::tests::calculate_best_yakunashi_returns_none ... ok [INFO] [stdout] test agari::tests::chiitoitsu_seven_pairs_using_pin_sou_terminals_and_honors ... ok [INFO] [stdout] test abortive::tests::three_winds_three_easts_is_true ... ok [INFO] [stdout] test abortive::tests::three_winds_three_one_man_is_false ... ok [INFO] [stdout] test agari::tests::decompose_man_terminal_triplet_in_standard ... ok [INFO] [stdout] test abortive::tests::kyuushu_thirteen_distinct_yaochuhai_is_true ... ok [INFO] [stdout] test abortive::tests::suukan_sole_player_four_kans_is_false ... ok [INFO] [stdout] test abortive::tests::suukan_three_total_kans_is_false ... ok [INFO] [stdout] test abortive::tests::three_winds_three_distinct_winds_is_false ... ok [INFO] [stdout] test abortive::tests::three_winds_works_for_all_four_winds ... ok [INFO] [stdout] test agari::tests::calculate_best_kita_count_adds_han ... ok [INFO] [stdout] test agari::tests::decompose_simple_concealed_pin_sou_hand ... ok [INFO] [stdout] test agari::tests::calculate_best_kokushi_yakuman_sanma ... ok [INFO] [stdout] test agari::tests::decompose_multiple_readings_for_pin_runs ... ok [INFO] [stdout] test abortive::tests::suukan_empty_is_false ... ok [INFO] [stdout] test chombo::tests::non_dealer_chombo_west ... ok [INFO] [stdout] test abortive::tests::suukan_excess_entries_use_only_first_four ... ok [INFO] [stdout] test abortive::tests::suukan_two_players_total_four_kans_is_true ... ok [INFO] [stdout] test agari::tests::kokushi_thirteen_singles_plus_winning_yao_doubles_winning ... ok [INFO] [stdout] test chombo::tests::dealer_chombo_east ... ok [INFO] [stdout] test chombo::tests::non_dealer_pays_mangan_ko_total ... ok [INFO] [stdout] test abortive::tests::three_riichi_boundary ... ok [INFO] [stdout] test agari::tests::red_5_in_concealed_propagates_to_dora_breakdown ... ok [INFO] [stdout] test agari::tests::post_draw_winning_tile_must_be_in_concealed ... ok [INFO] [stdout] test chombo::tests::seat_east_is_index_zero ... ok [INFO] [stdout] test abortive::tests::three_winds_three_dragons_is_false ... ok [INFO] [stdout] test dice::tests::full_mapping_2_to_12_for_all_seats ... ok [INFO] [stdout] test dice::tests::kamicha_for_3_6_9_12 ... ok [INFO] [stdout] test chombo::tests::all_player_seats_zero_sum ... ok [INFO] [stdout] test chombo::tests::non_dealer_chombo_south ... ok [INFO] [stdout] test double_ron::tests::deltas_priority_is_yakuman_winner ... ok [INFO] [stdout] test chombo::tests::north_is_not_a_player ... ok [INFO] [stdout] test chombo::tests::dealer_pays_mangan_oya_total ... ok [INFO] [stdout] test chombo::tests::non_dealer_dealer_share_is_equal ... ok [INFO] [stdout] test dice::tests::out_of_range_returns_none ... ok [INFO] [stdout] test dice::tests::period_3_invariant ... ok [INFO] [stdout] test chombo::tests::offender_is_the_only_payer ... ok [INFO] [stdout] test double_ron::tests::deltas_with_honba_and_sticks ... ok [INFO] [stdout] test agari::tests::kokushi_with_call_does_not_produce_kokushi_shape ... ok [INFO] [stdout] test double_ron::tests::error_not_ron_payment_dealer_tsumo_first_winner ... ok [INFO] [stdout] test double_ron::tests::error_not_ron_payment_non_dealer_tsumo_second_winner ... ok [INFO] [stdout] test double_ron::tests::error_north_winner_rejected ... ok [INFO] [stdout] test dice::tests::roller_themselves_for_4_7_10 ... ok [INFO] [stdout] test double_ron::tests::deltas_no_honba_no_sticks ... ok [INFO] [stdout] test dice::tests::north_oya_returns_none ... ok [INFO] [stdout] test dice::tests::shimocha_for_2_5_8_11 ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_east_winners_south_west ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_south_winners_east_west ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_west_winners_east_south ... ok [INFO] [stdout] test furiten::tests::honor_wait_matches_only_same_honor ... ok [INFO] [stdout] test double_ron::tests::error_duplicate_winner_seat ... ok [INFO] [stdout] test furiten::tests::both_flags_can_be_set ... ok [INFO] [stdout] test furiten::tests::default_is_all_false ... ok [INFO] [stdout] test double_ron::tests::zero_sum_invariant_across_all_legal_sanma_configurations ... ok [INFO] [stdout] test furiten::tests::manzu_terminal_wait_matches_only_same_manzu_terminal ... ok [INFO] [stdout] test double_ron::tests::error_north_discarder_rejected ... ok [INFO] [stdout] test double_ron::tests::sanma_ccw_distance_basic_cases ... ok [INFO] [stdout] test furiten::tests::red_five_in_passes_matches_ordinary_five_wait ... ok [INFO] [stdout] test furiten::tests::one_of_many_waits_in_discard_triggers_self_discard ... ok [INFO] [stdout] test furiten::tests::self_discard_only ... ok [INFO] [stdout] test double_ron::tests::error_winner_is_discarder_second_position ... ok [INFO] [stdout] test game_state::tests::abortive_draw_renchan_no_deltas ... ok [INFO] [stdout] test game_state::tests::chombo_replays_round_no_honba_no_sticks_change ... ok [INFO] [stdout] test furiten::tests::empty_passes_and_no_match_in_discards ... ok [INFO] [stdout] test game_state::tests::agari_child_win_rotates_dealer_clears_honba_and_sticks ... ok [INFO] [stdout] test furiten::tests::no_waits_means_all_flags_false ... ok [INFO] [stdout] test game_state::tests::default_is_east_south ... ok [INFO] [stdout] test game_state::tests::deltas_apply_to_seat_holders_in_east1 ... ok [INFO] [stdout] test furiten::tests::red_five_in_discard_matches_ordinary_five_wait ... ok [INFO] [stdout] test furiten::tests::same_turn_only ... ok [INFO] [stdout] test double_ron::tests::priority_independent_of_argument_order ... ok [INFO] [stdout] test game_state::tests::deltas_apply_to_seat_holders_in_east2 ... ok [INFO] [stdout] test game_state::tests::declare_riichi_in_east2_deducts_correct_player ... ok [INFO] [stdout] test game_state::tests::east1_to_east2_dealer_moves_to_player1 ... ok [INFO] [stdout] test game_state::tests::east3_to_south1_round_wind_advances_in_east_south_format ... ok [INFO] [stdout] test game_state::tests::east_one_seat_assignment ... ok [INFO] [stdout] test game_state::tests::east_only_east3_dealer_move_ends_hanchan ... ok [INFO] [stdout] test game_state::tests::declare_riichi_panics_for_north - should panic ... ok [INFO] [stdout] test furiten::tests::no_match_means_not_furiten ... ok [INFO] [stdout] test game_state::tests::east_south_progression_table ... ok [INFO] [stdout] test game_state::tests::new_hanchan_east_only_initial_state ... ok [INFO] [stdout] test game_state::tests::east_only_progression_table ... ok [INFO] [stdout] test game_state::tests::agari_dealer_win_renchan_clears_sticks_increments_honba ... ok [INFO] [stdout] test game_state::tests::east_south_south3_dealer_move_ends_hanchan ... ok [INFO] [stdout] test game_state::tests::seat_player_round_trip_all_rounds_east_south ... ok [INFO] [stdout] test game_state::tests::ryuukyoku_dealer_tenpai_renchan ... ok [INFO] [stdout] test game_state::tests::new_hanchan_east_south_initial_state ... ok [INFO] [stdout] test game_state::tests::uma_clear_ranking ... ok [INFO] [stdout] test hand::tests::between_draws_concealed_only_thirteen_succeeds ... ok [INFO] [stdout] test game_state::tests::uma_ties_broken_by_lower_id_first ... ok [INFO] [stdout] test game_state::tests::ryuukyoku_dealer_noten_rotates_dealer_increments_honba ... ok [INFO] [stdout] test hand::tests::ankan_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test hand::tests::between_draws_with_one_open_triplet_ten_plus_three_succeeds ... ok [INFO] [stdout] test double_ron::tests::error_winner_is_discarder_first_position ... ok [INFO] [stdout] test hand::tests::ankan_records_call_meta_none ... ok [INFO] [stdout] test hand::tests::ankan_then_rinshan_draw_state_progression ... ok [INFO] [stdout] test hand::tests::ankan_tiles_kind_mismatch ... ok [INFO] [stdout] test hand::tests::call_meta_at_returns_none_out_of_bounds ... ok [INFO] [stdout] test hand::tests::concealed_accessor_returns_input_multiset ... ok [INFO] [stdout] test hand::tests::daiminkan_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test game_state::tests::apply_result_is_idempotent_after_game_over ... ok [INFO] [stdout] test hand::tests::daiminkan_records_call_meta_open_with_claimed_tile ... ok [INFO] [stdout] test game_state::tests::declare_riichi_deducts_and_pools_in_east1 ... ok [INFO] [stdout] test game_state::tests::uma_with_zero_pool_balance ... ok [INFO] [stdout] test hand::tests::discard_from_post_draw_to_between_draws ... ok [INFO] [stdout] test hand::tests::discard_tile_not_present_returns_tile_not_in_concealed ... ok [INFO] [stdout] test hand::tests::draw_from_between_draws_to_post_draw ... ok [INFO] [stdout] test hand::tests::discard_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test hand::tests::draw_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::hand_has_no_chi_method_in_sanma ... ok [INFO] [stdout] test hand::tests::called_accessor_returns_input_in_order ... ok [INFO] [stdout] test hand::tests::one_quad_plus_eleven_concealed_is_post_draw ... ok [INFO] [stdout] test hand::tests::hand_error_display_is_non_empty ... ok [INFO] [stdout] test hand::tests::is_concealed_only_reflects_called_emptiness ... ok [INFO] [stdout] test hand::tests::one_quad_plus_ten_concealed_is_between_draws ... ok [INFO] [stdout] test hand::tests::one_quad_plus_nine_concealed_thirteen_is_rejected ... ok [INFO] [stdout] test hand::tests::one_quad_plus_twelve_concealed_sixteen_is_rejected ... ok [INFO] [stdout] test hand::tests::pon_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::pon_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::pon_from_kamicha_toimen_shimocha_each_works ... ok [INFO] [stdout] test hand::tests::pon_records_call_meta_open_with_claimed_tile ... ok [INFO] [stdout] test hand::tests::pon_red_five_claimed_records_red_in_call_meta ... ok [INFO] [stdout] test hand::tests::discard_strict_equality_red_five_vs_normal ... ok [INFO] [stdout] test hand::tests::daiminkan_then_rinshan_draw_state_progression ... ok [INFO] [stdout] test hand::tests::daiminkan_tiles_kind_mismatch ... ok [INFO] [stdout] test hand::tests::discard_red_five_specifically_consumes_red ... ok [INFO] [stdout] test hand::tests::ankan_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::between_draws_with_four_triplet_calls_one_plus_twelve_succeeds ... ok [INFO] [stdout] test hand::tests::daiminkan_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::between_draws_with_two_calls_seven_plus_six_succeeds ... ok [INFO] [stdout] test game_state::tests::seat_player_round_trip_all_rounds_east_only ... ok [INFO] [stdout] test hand::tests::rejects_kanchan_partial_in_called_list ... ok [INFO] [stdout] test hand::tests::rejects_fifteen_concealed_tiles ... ok [INFO] [stdout] test hand::tests::post_draw_with_one_call_eleven_plus_three_succeeds ... ok [INFO] [stdout] test hand::tests::shouminkan_fourth_tile_not_in_concealed ... ok [INFO] [stdout] test hand::tests::shouminkan_no_matching_pon ... ok [INFO] [stdout] test hand::tests::rejects_pair_in_called_list ... ok [INFO] [stdout] test hand::tests::post_draw_with_two_calls_eight_plus_six_succeeds ... ok [INFO] [stdout] test hand::tests::shouminkan_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test hand::tests::shouminkan_replaces_pon_and_progresses_state ... ok [INFO] [stdout] test hand::tests::shouminkan_normal_pon_plus_red_fourth ... ok [INFO] [stdout] test hand::tests::post_draw_and_between_draws_predicates_are_mutually_exclusive ... ok [INFO] [stdout] test hand::tests::between_draws_with_three_calls_four_plus_nine_succeeds ... ok [INFO] [stdout] test hand::tests::post_draw_concealed_only_fourteen_succeeds ... ok [INFO] [stdout] test hand::tests::call_meta_indices_align_with_called_indices_across_chained_calls ... ok [INFO] [stdout] test hand::tests::shouminkan_red_five_pon_plus_normal_fourth ... ok [INFO] [stdout] test hand::tests::pon_with_red_five_in_concealed_makes_red_representative ... ok [INFO] [stdout] test hand::tests::shouminkan_rejects_missing_pon_meta ... ok [INFO] [stdout] test hand::tests::rejects_twelve_concealed_tiles ... ok [INFO] [stdout] test hand::tests::rejects_partial_in_called_list ... ok [INFO] [stdout] test hand::tests::with_calls_fills_call_meta_with_none ... ok [INFO] [stdout] test hand::tests::three_triplets_plus_one_quad_one_concealed_is_between_draws ... ok [INFO] [stdout] test hand::tests::pon_tiles_kind_mismatch ... ok [INFO] [stdout] test hand::tests::shouminkan_upgrades_call_meta_to_shouminkan ... ok [INFO] [stdout] test hand::tests::two_quads_plus_eight_concealed_is_post_draw_mixed_kan_kinds ... ok [INFO] [stdout] test hand::tests::three_triplets_plus_one_quad_zero_concealed_is_rejected ... ok [INFO] [stdout] test kita::tests::kita_count_default_is_zero ... ok [INFO] [stdout] test hand::tests::two_quads_plus_seven_concealed_is_between_draws ... ok [INFO] [stdout] test kita::tests::kita_count_increments_up_to_four ... ok [INFO] [stdout] test kita::tests::kita_pull_new_accepts_north ... ok [INFO] [stdout] test kita::tests::kita_pull_new_rejects_suited ... ok [INFO] [stdout] test kita::tests::validate_pull_not_in_concealed_takes_precedence_over_just_after_pon ... ok [INFO] [stdout] test kita::tests::kita_count_new_is_zero ... ok [INFO] [stdout] test kita::tests::validate_pull_already_maxed_out_takes_precedence_over_not_in_concealed ... ok [INFO] [stdout] test kita::tests::validate_pull_not_north_tile_takes_precedence_over_everything ... ok [INFO] [stdout] test hand::tests::with_calls_and_meta_length_mismatch_rejected ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_dragons ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_just_after_pon ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_other_winds ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_suited_tile_sou ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_when_no_north_in_concealed ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_when_concealed_empty ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_suited_tile_man ... ok [INFO] [stdout] test kita::tests::kita_count_is_max_boundary ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_suited_tile_pin ... ok [INFO] [stdout] test kita::tests::kita_count_fifth_increment_errors ... ok [INFO] [stdout] test hand::tests::with_calls_and_meta_accepts_consistent_lengths ... ok [INFO] [stdout] test kita::tests::validate_pull_rejects_when_already_maxed ... ok [INFO] [stdout] test kita::tests::kita_error_display_is_non_empty_for_all_variants ... ok [INFO] [stdout] test kita::tests::kita_pull_new_rejects_other_honors ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_open_passed_to_shouminkan ... ok [INFO] [stdout] test meld_display::tests::daiminkan_rotated_index_full_table ... ok [INFO] [stdout] test kita::tests::validate_pull_success_with_one_north_in_concealed ... ok [INFO] [stdout] test meld_display::tests::display_error_messages_non_empty ... ok [INFO] [stdout] test meld_display::tests::chi_rotated_at_slot0_full_table ... ok [INFO] [stdout] test meld_display::tests::chi_with_red_five_called_keeps_red_in_slot0 ... ok [INFO] [stdout] test meld_display::tests::concealed_quad_with_red_five_keeps_one_red_total ... ok [INFO] [stdout] test meld_display::tests::concealed_sequence_three_upright_in_ascending_order ... ok [INFO] [stdout] test kita::tests::validate_pull_success_at_count_three_just_below_cap ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_shouminkan_passed_to_pon_or_daiminkan ... ok [INFO] [stdout] test meld_display::tests::concealed_triplet_three_upright ... ok [INFO] [stdout] test meld_display::tests::daiminkan_red_five_called_red_three_normal_remaining ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_pon ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_shouminkan ... ok [INFO] [stdout] test meld_display::tests::daiminkan_red_five_called_normal_one_red_in_others ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_none_passed_to_open ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_when_uniform_meld_called_red ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_open_info_passed_to_concealed ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_daiminkan ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_honor_is_kind_mismatch ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_not_in_sequence ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_wrong_suit_is_kind_mismatch ... ok [INFO] [stdout] test meld_display::tests::shouminkan_red_five_three_red_distributions ... ok [INFO] [stdout] test noten::tests::all_patterns_are_zero_sum ... ok [INFO] [stdout] test noten::tests::enumerated_table_is_complete ... ok [INFO] [stdout] test noten::tests::one_tenpai_east ... ok [INFO] [stdout] test noten::tests::one_tenpai_south ... ok [INFO] [stdout] test meld_display::tests::man_terminal_helper_smoke ... ok [INFO] [stdout] test noten::tests::three_tenpai_no_movement ... ok [INFO] [stdout] test meld_display::tests::pair_layout_is_two_upright ... ok [INFO] [stdout] test meld_display::tests::pair_layout_with_red_five_red_in_slot0 ... ok [INFO] [stdout] test kita::tests::validate_pull_success_with_multiple_norths ... ok [INFO] [stdout] test meld_display::tests::partial_layout_adjacent_and_kanchan_table ... ok [INFO] [stdout] test noten::tests::one_tenpai_west ... ok [INFO] [stdout] test meld_display::tests::pon_red_five_called_normal_remaining_one_red_one_normal ... ok [INFO] [stdout] test noten::tests::split_total_always_3000_when_movement_happens ... ok [INFO] [stdout] test noten::tests::two_tenpai_east_south ... ok [INFO] [stdout] test noten::tests::two_tenpai_south_west ... ok [INFO] [stdout] test pao::tests::error_north_winner_rejected ... ok [INFO] [stdout] test pao::tests::error_pao_seat_is_winner ... ok [INFO] [stdout] test pao::tests::error_ron_without_discarder ... ok [INFO] [stdout] test meld_display::tests::pon_rotated_index_full_table ... ok [INFO] [stdout] test pao::tests::yakuman_dealer_tsumo_pao_pays_full_sanma ... ok [INFO] [stdout] test pao::tests::yakuman_non_dealer_tsumo_pao_pays_full_sanma ... ok [INFO] [stdout] test pao::tests::yakuman_ron_dealer_pao_is_not_discarder ... ok [INFO] [stdout] test pao::tests::yakuman_ron_non_dealer_pao_is_not_discarder ... ok [INFO] [stdout] test noten::tests::two_tenpai_east_west ... ok [INFO] [stdout] test round::tests::dealer_pinfu_tsumo_wins ... ok [INFO] [stdout] test round::tests::discard_in_awaiting_calls_state_is_wrong_state ... ok [INFO] [stdout] test noten::tests::zero_tenpai_no_movement ... ok [INFO] [stdout] test pao::tests::yakuman_ron_pao_seat_equals_discarder_pays_full ... ok [INFO] [stdout] test pao::tests::error_dealer_tsumo_with_discarder ... ok [INFO] [stdout] test pao::tests::error_north_pao_seat_rejected ... ok [INFO] [stdout] test round::tests::discard_then_all_pass_advances_to_sanma_shimocha ... ok [INFO] [stdout] test round::tests::draw_in_after_draw_state_is_wrong_state ... ok [INFO] [stdout] test pao::tests::non_yakuman_ron_runs_through_split_logic ... ok [INFO] [stdout] test round::tests::enumerate_ankan_sets_quad_present ... ok [INFO] [stdout] test round::tests::daiminkan_advances_to_rinshan_draw ... ok [INFO] [stdout] test pao::tests::ron_split_residual_absorbed_by_discarder_for_odd_total ... ok [INFO] [stdout] test meld_display::tests::concealed_quad_face_down_at_both_ends ... ok [INFO] [stdout] test pao::tests::zero_sum_invariant_across_all_winner_pao_combinations_ron ... ok [INFO] [stdout] test pao::tests::zero_sum_invariant_dealer_tsumo_sanma ... ok [INFO] [stdout] test meld_display::tests::shouminkan_rotated_index_and_stacked_full_table ... ok [INFO] [stdout] test meld_display::tests::pon_red_five_called_red_remaining_two_normal ... ok [INFO] [stdout] test pao::tests::error_non_dealer_tsumo_with_discarder ... ok [INFO] [stdout] test meld_display::tests::sou_helper_smoke ... ok [INFO] [stdout] test pao::tests::error_north_discarder_rejected ... ok [INFO] [stdout] test round::tests::enumerate_daiminkan_triples_basic ... ok [INFO] [stdout] test round::tests::new_round_dora_indicator_visible ... ok [INFO] [stdout] test round::tests::enumerate_pon_pairs_red_five_mix ... ok [INFO] [stdout] test round::tests::forfeit_blocks_kita ... ok [INFO] [stdout] test round::tests::new_round_rejects_north_dealer - should panic ... ok [INFO] [stdout] test round::tests::resolve_kita_ron_in_awaiting_calls_is_wrong_state ... ok [INFO] [stdout] test round::tests::new_round_initial_drawn_tile_is_index_39_of_input ... ok [INFO] [stdout] test round::tests::new_round_dealer_east_is_after_draw_with_14_tiles ... ok [INFO] [stdout] test round::tests::pon_advances_to_caller_after_draw ... ok [INFO] [stdout] test round::tests::kita_blocked_just_after_pon ... ok [INFO] [stdout] test round::tests::forfeit_blocks_tsumo ... ok [INFO] [stdout] test round::tests::kita_invalid_when_no_north_in_concealed ... ok [INFO] [stdout] test round::tests::invalid_tsumo_is_rejected ... ok [INFO] [stdout] test round::tests::kita_allowed_after_pon_then_discard ... ok [INFO] [stdout] test round::tests::kita_invalid_when_tile_is_not_north ... ok [INFO] [stdout] test round::tests::kita_pull_transitions_to_awaiting_kita_ron_then_rinshan ... ok [INFO] [stdout] test round::tests::kita_max_four_pulls_per_seat ... ok [INFO] [stdout] test round::tests::valid_call_actions_returns_no_chi_field ... ok [INFO] [stdout] test scoring::tests::aka_dora_red_5p_in_pin_sequence_adds_one_han ... ok [INFO] [stdout] test round::tests::sanma_ccw_distance_basics ... ok [INFO] [stdout] test round::tests::three_player_first_go_around_no_call_returns_to_east ... ok [INFO] [stdout] test round::tests::three_winds_first_round_aborts_on_third_discard ... ok [INFO] [stdout] test round::tests::three_riichi_aborts_on_all_pass_path ... ok [INFO] [stdout] test round::tests::valid_call_actions_in_awaiting_kita_ron_returns_pass_only_for_non_puller ... ok [INFO] [stdout] test scoring::tests::category_thresholds ... ok [INFO] [stdout] test round::tests::kyuushu_kyuuhai_dealer_first_turn_aborts ... ok [INFO] [stdout] test round::tests::kita_pull_increments_count_and_keeps_tile_count_invariant ... ok [INFO] [stdout] test scoring::tests::pair_fu_north_is_zero_in_sanma ... ok [INFO] [stdout] test scoring::tests::ceil_to_100_examples ... ok [INFO] [stdout] test scoring::tests::chiitoitsu_is_25_fu ... ok [INFO] [stdout] test round::tests::riichi_at_two_live_remaining_is_rejected ... ok [INFO] [stdout] test scoring::tests::dora_breakdown_default_is_zero ... ok [INFO] [stdout] test scoring::tests::payment_dealer_ron_30fu_3han ... ok [INFO] [stdout] test scoring::tests::payment_mangan_dealer_tsumo_sanma_each_4000 ... ok [INFO] [stdout] test scoring::tests::payment_mangan_non_dealer_tsumo_sanma ... ok [INFO] [stdout] test scoring::tests::dora_breakdown_total_includes_kita ... ok [INFO] [stdout] test round::tests::riichi_declaration_succeeds ... ok [INFO] [stdout] test scoring::tests::pinfu_ron_is_30_fu ... ok [INFO] [stdout] test round::tests::riichi_threshold_is_three_in_sanma ... ok [INFO] [stdout] test scoring::tests::payment_non_dealer_tsumo_sanma_no_tsumo_loss ... ok [INFO] [stdout] test scoring::tests::payment_dealer_tsumo_sanma_two_payers ... ok [INFO] [stdout] test scoring::tests::pinfu_riichi_tsumo_sanma_non_dealer ... ok [INFO] [stdout] test scoring::tests::yakuman_non_dealer_ron_is_32000 ... ok [INFO] [stdout] test round::tests::ryuukyoku_when_wall_runs_out ... ok [INFO] [stdout] test round::tests::seat_to_wind_three_handed ... ok [INFO] [stdout] test scoring::tests::meld_fu_table ... ok [INFO] [stdout] test scoring::tests::ceil_to_10_examples ... ok [INFO] [stdout] test scoring::tests::kuipinfu_open_ron_all_seq_ryanmen_otakaze_pair_rounds_up_to_30_fu ... ok [INFO] [stdout] test scoring::tests::yakuman_kokushi_dealer_tsumo_sanma_payment ... ok [INFO] [stdout] test scoring::tests::pair_fu_round_seat_double_wind ... ok [INFO] [stdout] test scoring::tests::kita_count_adds_to_han ... ok [INFO] [stdout] test scoring::tests::kita_does_not_affect_yakuman_base ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_1m_points_at_9m_in_sanma ... ok [INFO] [stdout] test scoring::tests::pinfu_tsumo_is_20_fu ... ok [INFO] [stdout] test tenpai::tests::chiitoitsu_six_pairs_plus_one ... ok [INFO] [stdout] test tenpai::tests::chiitoitsu_with_quad_kind_not_seven_pairs ... ok [INFO] [stdout] test tenpai::tests::noten_random_thirteen ... ok [INFO] [stdout] test tenpai::tests::one_concealed_kan_post_draw_waits ... ok [INFO] [stdout] test tenpai::tests::multiwait_three_tanki_1_4_7p ... ok [INFO] [stdout] test tenpai::tests::kokushi_with_simple_is_noten ... ok [INFO] [stdout] test scoring::tests::yakunashi_returns_none ... ok [INFO] [stdout] test tenpai::tests::dealer_count_discard_yields_waits ... ok [INFO] [stdout] test tenpai::tests::kanchan_3p ... ok [INFO] [stdout] test scoring::tests::ura_dora_only_counted_with_riichi ... ok [INFO] [stdout] test tenpai::tests::multiwait_three_of_a_kind_minimal_self_consistent ... ok [INFO] [stdout] test tenpai::tests::invalid_sanma_indices_are_exactly_seven ... ok [INFO] [stdout] test tenpai::tests::called_triplet_plus_concealed_tanki ... ok [INFO] [stdout] test tenpai::tests::one_open_kan_between_draws_waits ... ok [INFO] [stdout] test tenpai::tests::penchan_7s ... ok [INFO] [stdout] test tenpai::tests::red_five_in_hand_yields_non_red_in_result ... ok [INFO] [stdout] test tenpai::tests::multiwait_four_of_a_kind_in_pinzu ... ok [INFO] [stdout] test tenpai::tests::kokushi_thirteen_way_wait ... ok [INFO] [stdout] test tenpai::tests::multiwait_two_ryanmen_overlap_3_6_9p ... ok [INFO] [stdout] test tenpai::tests::kokushi_single_wait ... ok [INFO] [stdout] test tenpai::tests::one_shouminkan_between_draws_waits ... ok [INFO] [stdout] test tenpai::tests::penchan_3p ... ok [INFO] [stdout] test tenpai::tests::tenpai_man_one_kokushi_wait_when_other_yaochuhai_complete ... ok [INFO] [stdout] test scoring::tests::payment_non_dealer_ron_30fu_3han ... ok [INFO] [stdout] test tenpai::tests::tenpai_man_one_tanki_with_other_complete_melds_waits_on_man_one ... ok [INFO] [stdout] test tenpai::tests::tile_kind_index_collapses_red_onto_normal_five ... ok [INFO] [stdout] test wall::tests::haitei_imminent_false_at_start_and_with_many_left ... ok [INFO] [stdout] test wall::tests::haitei_imminent_only_at_one_remaining ... ok [INFO] [stdout] test wall::tests::initial_dora_indicator_is_dead_index_8 ... ok [INFO] [stdout] test tenpai::tests::shanpon_1m_or_9m ... ok [INFO] [stdout] test tenpai::tests::two_kans_between_draws_waits ... ok [INFO] [stdout] test wall::tests::initial_ura_dora_indicator_is_dead_index_13 ... ok [INFO] [stdout] test wall::tests::rinshan_and_kan_dora_are_independent ... ok [INFO] [stdout] test wall::tests::flip_kan_ura_dora_progresses_through_slots_14_to_17 ... ok [INFO] [stdout] test tenpai::tests::ryanmen_simple_5p_or_8p ... ok [INFO] [stdout] test wall::tests::rinshan_consumes_one_live_tail_slot_per_draw ... ok [INFO] [stdout] test tenpai::tests::tenpai_man_nine_tanki_with_other_complete_melds_waits_on_man_nine ... ok [INFO] [stdout] test wall::tests::live_remaining_decrements_each_draw ... ok [INFO] [stdout] test wall::tests::wall_rejects_empty_deck ... ok [INFO] [stdout] test wall::tests::first_draw_is_index_zero_of_input ... ok [INFO] [stdout] test tenpai::tests::yaochuhai_indices_are_exactly_thirteen ... ok [INFO] [stdout] test wall::tests::wall_rejects_extra_one_pin_short_nine_pin ... ok [INFO] [stdout] test tenpai::tests::tile_kind_index_round_trips_for_valid_sanma_indices ... ok [INFO] [stdout] test tenpai::tests::waits_never_contain_2m_through_8m ... ok [INFO] [stdout] test wall::tests::flip_kan_dora_progresses_through_slots_9_to_12 ... ok [INFO] [stdout] test wall::tests::rinshan_drawn_without_flipping_kan_dora_keeps_dora_at_one ... ok [INFO] [stdout] test wall::tests::error_display_smoke ... ok [INFO] [stdout] test wall::tests::wall_rejects_missing_honor ... ok [INFO] [stdout] test wall::tests::standard_sanma_deck_composition_is_108 ... ok [INFO] [stdout] test wall::tests::wall_accepts_standard_sanma_108 ... ok [INFO] [stdout] test wall::tests::full_live_wall_drain_is_90_tiles ... ok [INFO] [stdout] test wall::tests::wall_rejects_yonma_count_136 ... ok [INFO] [stdout] test yaku::tests::chinitsu_pin_only_no_honor_is_6han_concealed ... ok [INFO] [stdout] test wall::tests::wall_dead_wall_layout ... ok [INFO] [stdout] test yaku::tests::chiitoitsu_seven_pairs_is_true ... ok [INFO] [stdout] test tenpai::tests::tanki_1z ... ok [INFO] [stdout] test yaku::tests::chuuren_pin_canonical_form_is_yakuman ... ok [INFO] [stdout] test yaku::tests::chinroutou_only_terminals_is_yakuman ... ok [INFO] [stdout] test wall::tests::wall_rejects_2m_through_8m_present ... ok [INFO] [stdout] test yaku::tests::daisangen_three_dragon_triplets_is_true ... ok [INFO] [stdout] test wall::tests::wall_rejects_long_count_109 ... ok [INFO] [stdout] test yaku::tests::dai_suushii_four_wind_triplets_is_yakuman ... ok [INFO] [stdout] test yaku::tests::detect_yaku_double_riichi_suppresses_riichi ... ok [INFO] [stdout] test yaku::tests::detect_yaku_honroutou_suppresses_chanta ... ok [INFO] [stdout] test wall::tests::wall_rejects_pin_no_red_five ... ok [INFO] [stdout] test wall::tests::rinshan_draw_up_to_eight_then_exhausted ... ok [INFO] [stdout] test wall::tests::wall_rejects_red_5m_present ... ok [INFO] [stdout] test wall::tests::wall_rejects_5m_present_directly ... ok [INFO] [stdout] test wall::tests::wall_rejects_short_count_107 ... ok [INFO] [stdout] test yaku::tests::chanta_concealed_is_2han ... ok [INFO] [stdout] test wall::tests::wall_rejects_red_5m_when_manzu_terminals_balanced ... ok [INFO] [stdout] test yaku::tests::detect_yaku_junchan_suppresses_chanta ... ok [INFO] [stdout] test yaku::tests::detect_yaku_north_triplet_is_otaakaze_in_sanma ... ok [INFO] [stdout] test yaku::tests::han_one_han_set ... ok [INFO] [stdout] test yaku::tests::ittsuu_open_is_kuisagari ... ok [INFO] [stdout] test yaku::tests::ittsuu_man_unreachable_in_sanma ... ok [INFO] [stdout] test yaku::tests::junchan_concealed_is_3han ... ok [INFO] [stdout] test yaku::tests::detect_yaku_yakunashi_returns_empty ... ok [INFO] [stdout] test yaku::tests::detect_yaku_kita_count_does_not_affect_yaku_list ... ok [INFO] [stdout] test yaku::tests::honroutou_all_terminals_and_honors_is_true ... ok [INFO] [stdout] test yaku::tests::han_yakuman_set ... ok [INFO] [stdout] test yaku::tests::iipeikou_open_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_two_identical_pin_sequences_is_true ... ok [INFO] [stdout] test yaku::tests::haitei_requires_tsumo ... ok [INFO] [stdout] test yaku::tests::houtei_requires_ron ... ok [INFO] [stdout] test yaku::tests::ittsuu_pin_one_through_nine_is_concealed_2han ... ok [INFO] [stdout] test yaku::tests::detect_yaku_riichi_tsumo_pinfu_emits_in_order ... ok [INFO] [stdout] test yaku::tests::ippatsu_requires_concealed ... ok [INFO] [stdout] test yaku::tests::honitsu_pin_with_honor_is_3han_concealed ... ok [INFO] [stdout] test yaku::tests::ittsuu_sou_one_through_nine_is_concealed_2han ... ok [INFO] [stdout] test yaku::tests::detect_yaku_yakuman_suppresses_non_yakuman ... ok [INFO] [stdout] test yaku::tests::label_smoke ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_fires ... ok [INFO] [stdout] test yaku::tests::pinfu_basic_ryanmen_is_true ... ok [INFO] [stdout] test yaku::tests::pinfu_open_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_green_only_is_yakuman ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_only_two_suits_is_false ... ok [INFO] [stdout] test yaku::tests::kokushi_thirteen_orphans_fires ... ok [INFO] [stdout] test yaku::tests::suuankou_ron_completing_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_unreachable_in_sanma_returns_none ... ok [INFO] [stdout] test yaku::tests::pinfu_north_pair_is_pinfu_in_sanma ... ok [INFO] [stdout] test yaku::tests::pinfu_yakuhai_pair_is_false ... ok [INFO] [stdout] test yaku::tests::shou_sangen_two_dragon_triplets_plus_dragon_pair_is_true ... ok [INFO] [stdout] test yaku::tests::pinfu_kanchan_is_false ... ok [INFO] [stdout] test yaku::tests::riichi_concealed_fires ... ok [INFO] [stdout] test yaku::tests::riichi_open_does_not_fire ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_terminal_1_in_three_suits_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_with_man_terminal_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::suuankou_four_concealed_triplets_tsumo_is_yakuman ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_two_pairs_of_identical_sequences_is_true ... ok [INFO] [stdout] test yaku::tests::shou_suushii_three_wind_triplets_plus_wind_pair_is_yakuman ... ok [INFO] [stdout] test yaku::tests::yakuhai_chiitoitsu_returns_empty ... ok [INFO] [stdout] test yaku::tests::san_ankou_ron_completing_one_triplet_treats_as_minko ... ok [INFO] [stdout] test yaku::tests::yakuhai_dragons_always_fire ... ok [INFO] [stdout] test yaku::tests::yakuhai_north_triplet_is_otaakaze ... ok [INFO] [stdout] test yaku::tests::yakuhai_pair_does_not_fire ... ok [INFO] [stdout] test yaku::tests::yakuhai_round_east_seat_east_double_fires ... ok [INFO] [stdout] test yaku::tests::yakuhai_west_meld_is_otaakaze_for_east_round_south_seat ... ok [INFO] [stdout] test yaku::tests::san_ankou_three_concealed_triplets_is_true ... ok [INFO] [stdout] test yaku::tests::suuankou_tanki_ron_on_pair_is_yakuman ... ok [INFO] [stdout] test yaku::tests::san_kantsu_three_quads_is_true ... ok [INFO] [stdout] test yaku::tests::suukantsu_four_quads_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_with_terminal_pin_is_false ... ok [INFO] [stdout] test yaku::tests::tsuuiisou_all_honor_is_yakuman ... ok [INFO] [stdout] test yaku::tests::tanyao_kokushi_is_false_by_construction ... ok [INFO] [stdout] test yaku::tests::tanyao_chiitoitsu_pin_sou_simples_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_pin_sou_simples_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_with_honor_pair_is_false ... ok [INFO] [stdout] test yaku::tests::toitoi_all_triplets_is_true ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 442 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s [INFO] [stdout] [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/release/build/yonma/d60351e1418aab56/out/yonma-d60351e1418aab56) [INFO] [stdout] [INFO] [stdout] running 732 tests [INFO] [stdout] test abortive::tests::suufon_four_distinct_winds_is_false ... ok [INFO] [stdout] test abortive::tests::suucha_riichi_boundary ... ok [INFO] [stdout] test abortive::tests::suufon_four_dragons_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_eight_distinct_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_duplicates_collapse_to_one_kind ... ok [INFO] [stdout] test abortive::tests::kyuushu_red_five_is_not_yaochuhai ... ok [INFO] [stdout] test abortive::tests::kyuushu_exactly_nine_distinct_is_true ... ok [INFO] [stdout] test abortive::tests::kyuushu_kokushi_tenpai_with_pair_is_true ... ok [INFO] [stdout] test abortive::tests::kyuushu_all_chunchan_is_false ... ok [INFO] [stdout] test abortive::tests::kyuushu_thirteen_distinct_yaochuhai_is_true ... ok [INFO] [stdout] test abortive::tests::suufon_four_easts_is_true ... ok [INFO] [stdout] test abortive::tests::suufon_four_one_man_is_false ... ok [INFO] [stdout] test abortive::tests::suufon_works_for_all_four_winds ... ok [INFO] [stdout] test abortive::tests::suukan_three_total_kans_is_false ... ok [INFO] [stdout] test abortive::tests::suufon_three_easts_one_south_is_false ... ok [INFO] [stdout] test agari::tests::calculate_best_yakunashi_returns_none ... ok [INFO] [stdout] test abortive::tests::suukan_four_distinct_seats_is_true ... ok [INFO] [stdout] test agari::tests::calculate_best_yakuman_beats_normal_win ... ok [INFO] [stdout] test agari::tests::calculate_best_tanyao_open_returns_some ... ok [INFO] [stdout] test abortive::tests::suukan_excess_entries_use_only_first_four ... ok [INFO] [stdout] test abortive::tests::suukan_sole_player_four_kans_is_false ... ok [INFO] [stdout] test abortive::tests::suukan_excess_entries_with_uniform_first_four_is_false ... ok [INFO] [stdout] test abortive::tests::suukan_two_players_total_four_kans_is_true ... ok [INFO] [stdout] test abortive::tests::suukan_empty_is_false ... ok [INFO] [stdout] test abortive::tests::sanchahou_boundary ... ok [INFO] [stdout] test agari::tests::calculate_best_ron_vs_tsumo_payment_differs ... ok [INFO] [stdout] test agari::tests::calculate_best_chiitoitsu_returns_some ... ok [INFO] [stdout] test agari::tests::calculate_best_dealer_vs_non_dealer_payment_differs ... ok [INFO] [stdout] test agari::tests::calculate_best_picks_higher_fu_among_equivalent_decompositions ... ok [INFO] [stdout] test agari::tests::calculate_best_returns_payment_consistent_with_chosen_shape ... ok [INFO] [stdout] test agari::tests::standard_pair_picks_red_for_pair_when_both_present ... ok [INFO] [stdout] test agari::tests::standard_single_decomposition_ryanmen_completion ... ok [INFO] [stdout] test agari::tests::standard_single_decomposition_7m_completion ... ok [INFO] [stdout] test agari::tests::standard_triplet_vs_sequence_ambiguous_yields_multiple_shapes ... ok [INFO] [stdout] test agari::tests::kokushi_noten_returns_empty ... ok [INFO] [stdout] test agari::tests::standard_with_one_pon_then_three_concealed_melds_plus_pair ... ok [INFO] [stdout] test agari::tests::chiitoitsu_six_pairs_plus_single_with_winning_completing ... ok [INFO] [stdout] test agari::tests::empty_hand_returns_empty ... ok [INFO] [stdout] test agari::tests::chiitoitsu_quad_kind_is_rejected_for_seven_pairs ... ok [INFO] [stdout] test agari::tests::chiitoitsu_with_call_not_returned ... ok [INFO] [stdout] test agari::tests::post_draw_with_winning_tile_not_in_concealed_returns_empty ... ok [INFO] [stdout] test agari::tests::kokushi_with_call_returns_no_kokushi_shape ... ok [INFO] [stdout] test chombo::tests::offender_is_the_only_payer ... ok [INFO] [stdout] test agari::tests::standard_with_quad_called_concealed_count_consistent ... ok [INFO] [stdout] test agari::tests::red_five_in_sequence_is_preserved ... ok [INFO] [stdout] test chombo::tests::dealer_chombo_east ... ok [INFO] [stdout] test chombo::tests::non_dealer_chombo_north ... ok [INFO] [stdout] test agari::tests::post_draw_with_winning_tile_in_concealed_decomposes ... ok [INFO] [stdout] test chombo::tests::non_dealer_pays_mangan_ko ... ok [INFO] [stdout] test chombo::tests::non_dealer_chombo_west ... ok [INFO] [stdout] test chombo::tests::non_dealer_chombo_south ... ok [INFO] [stdout] test chombo::tests::all_seats_zero_sum ... ok [INFO] [stdout] test chombo::tests::seat_east_is_index_zero ... ok [INFO] [stdout] test dice::tests::opposite_player_for_3_7_11 ... ok [INFO] [stdout] test agari::tests::kokushi_thirteen_singles_plus_winning_yao_doubles_winning ... ok [INFO] [stdout] test agari::tests::kokushi_thirteen_unique_yao_plus_winning_doubles_one ... ok [INFO] [stdout] test agari::tests::red_five_in_pair_is_preserved ... ok [INFO] [stdout] test dice::tests::spec_example_roll_5_from_east_returns_east ... ok [INFO] [stdout] test dice::tests::spec_example_roll_6_from_east_returns_south ... ok [INFO] [stdout] test double_ron::tests::deltas_priority_is_yakuman_winner ... ok [INFO] [stdout] test double_ron::tests::deltas_with_honba_and_sticks ... ok [INFO] [stdout] test double_ron::tests::error_winner_is_discarder_first_position ... ok [INFO] [stdout] test dice::tests::out_of_range_returns_none ... ok [INFO] [stdout] test dice::tests::right_player_for_2_6_10 ... ok [INFO] [stdout] test double_ron::tests::error_winner_is_discarder_second_position ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_east_winners_south_west ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_east_winners_west_north ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_north_winners_east_south ... ok [INFO] [stdout] test double_ron::tests::priority_discarder_south_winners_east_west ... ok [INFO] [stdout] test double_ron::tests::priority_independent_of_argument_order ... ok [INFO] [stdout] test double_ron::tests::error_duplicate_winner_seat ... ok [INFO] [stdout] test double_ron::tests::ccw_distance_basic_cases ... ok [INFO] [stdout] test double_ron::tests::error_not_ron_payment_dealer_tsumo_first_winner ... ok [INFO] [stdout] test double_ron::tests::zero_sum_invariant_across_all_legal_configurations ... ok [INFO] [stdout] test double_ron::tests::ccw_distance_wraps_for_each_origin ... ok [INFO] [stdout] test double_ron::tests::error_not_ron_payment_non_dealer_tsumo_second_winner ... ok [INFO] [stdout] test double_ron::tests::deltas_asymmetric_scores_are_each_paid_in_full ... ok [INFO] [stdout] test double_ron::tests::deltas_no_honba_no_sticks ... ok [INFO] [stdout] test double_ron::tests::deltas_symmetric_when_bonus_zero_and_totals_equal ... ok [INFO] [stdout] test furiten::tests::both_flags_can_be_set ... ok [INFO] [stdout] test furiten::tests::default_is_all_false ... ok [INFO] [stdout] test dice::tests::full_mapping_2_to_12_for_all_seats ... ok [INFO] [stdout] test chombo::tests::dealer_pays_mangan_oya ... ok [INFO] [stdout] test game_state::tests::agari_dealer_win_renchan_clears_sticks_increments_honba ... ok [INFO] [stdout] test furiten::tests::empty_passes_and_no_match_in_discards ... ok [INFO] [stdout] test furiten::tests::no_match_means_not_furiten ... ok [INFO] [stdout] test furiten::tests::self_discard_only ... ok [INFO] [stdout] test game_state::tests::agari_child_win_rotates_dealer_clears_honba_and_sticks ... ok [INFO] [stdout] test game_state::tests::declare_riichi_in_east2_deducts_correct_player ... ok [INFO] [stdout] test game_state::tests::declare_riichi_then_winner_collects_via_agari_clears_sticks ... ok [INFO] [stdout] test game_state::tests::default_matches_new_hanchan ... ok [INFO] [stdout] test game_state::tests::deltas_apply_to_seat_holders_in_east1 ... ok [INFO] [stdout] test game_state::tests::deltas_apply_to_seat_holders_in_east2 ... ok [INFO] [stdout] test game_state::tests::east4_dealer_win_renchan_keeps_east_only_alive ... ok [INFO] [stdout] test game_state::tests::east4_ends_hanchan_in_east_only_format ... ok [INFO] [stdout] test dice::tests::left_player_for_4_8_12 ... ok [INFO] [stdout] test game_state::tests::east4_dealer_noten_ryuukyoku_ends_east_only ... ok [INFO] [stdout] test dice::tests::roller_themselves_for_5_and_9 ... ok [INFO] [stdout] test furiten::tests::one_of_many_waits_in_discard_triggers_self_discard ... ok [INFO] [stdout] test furiten::tests::red_five_in_discard_matches_ordinary_five_wait ... ok [INFO] [stdout] test game_state::tests::east_one_seat_assignment ... ok [INFO] [stdout] test furiten::tests::red_five_in_passes_matches_ordinary_five_wait ... ok [INFO] [stdout] test game_state::tests::east_only_does_not_advance_to_south ... ok [INFO] [stdout] test furiten::tests::same_turn_only ... ok [INFO] [stdout] test game_state::tests::east_only_progression_table ... ok [INFO] [stdout] test furiten::tests::honor_wait_matches_only_same_honor ... ok [INFO] [stdout] test furiten::tests::no_waits_means_all_flags_false ... ok [INFO] [stdout] test game_state::tests::abortive_draw_renchan_no_deltas ... ok [INFO] [stdout] test game_state::tests::seat_player_round_trip_all_rounds ... ok [INFO] [stdout] test game_state::tests::seat_player_round_trip_all_rounds_east_only ... ok [INFO] [stdout] test game_state::tests::default_is_east_south ... ok [INFO] [stdout] test game_state::tests::south3_child_win_advances_to_south4 ... ok [INFO] [stdout] test game_state::tests::east1_to_east2_dealer_moves_to_player1 ... ok [INFO] [stdout] test game_state::tests::south4_child_win_ends_hanchan ... ok [INFO] [stdout] test game_state::tests::apply_result_is_idempotent_after_game_over ... ok [INFO] [stdout] test game_state::tests::south4_dealer_noten_ryuukyoku_ends_hanchan ... ok [INFO] [stdout] test hand::tests::ankan_then_rinshan_draw_state_progression ... ok [INFO] [stdout] test hand::tests::ankan_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test game_state::tests::south4_dealer_tenpai_ryuukyoku_renchan_keeps_hanchan_alive ... ok [INFO] [stdout] test hand::tests::between_draws_with_four_triplet_calls_one_plus_twelve_succeeds ... ok [INFO] [stdout] test hand::tests::between_draws_with_one_open_triplet_ten_plus_three_succeeds ... ok [INFO] [stdout] test game_state::tests::new_hanchan_initial_state ... ok [INFO] [stdout] test hand::tests::between_draws_with_three_calls_four_plus_nine_succeeds ... ok [INFO] [stdout] test hand::tests::call_meta_at_returns_none_out_of_bounds ... ok [INFO] [stdout] test game_state::tests::chombo_replays_round_no_honba_no_sticks_change ... ok [INFO] [stdout] test hand::tests::between_draws_with_two_calls_seven_plus_six_succeeds ... ok [INFO] [stdout] test hand::tests::call_meta_indices_align_with_called_indices_across_chained_calls ... ok [INFO] [stdout] test game_state::tests::east4_to_south1_round_wind_advances ... ok [INFO] [stdout] test game_state::tests::ryuukyoku_dealer_noten_rotates_dealer_increments_honba ... ok [INFO] [stdout] test game_state::tests::ryuukyoku_dealer_tenpai_renchan ... ok [INFO] [stdout] test game_state::tests::new_hanchan_east_only_initial_state ... ok [INFO] [stdout] test hand::tests::ankan_records_call_meta_none ... ok [INFO] [stdout] test game_state::tests::south4_abortive_draw_renchan_keeps_hanchan_alive ... ok [INFO] [stdout] test game_state::tests::south4_dealer_move_ends_hanchan ... ok [INFO] [stdout] test game_state::tests::declare_riichi_deducts_and_pools_in_east1 ... ok [INFO] [stdout] test hand::tests::ankan_tiles_kind_mismatch ... ok [INFO] [stdout] test hand::tests::ankan_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::between_draws_concealed_only_thirteen_succeeds ... ok [INFO] [stdout] test hand::tests::chi_mismatched_suits_rejected ... ok [INFO] [stdout] test hand::tests::chi_records_call_meta_open_with_claimed_tile ... ok [INFO] [stdout] test hand::tests::chi_with_red_five_in_concealed_marks_has_red_five ... ok [INFO] [stdout] test hand::tests::daiminkan_then_rinshan_draw_state_progression ... ok [INFO] [stdout] test game_state::tests::south4_dealer_win_renchan_keeps_hanchan_alive ... ok [INFO] [stdout] test hand::tests::discard_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test hand::tests::discard_from_post_draw_to_between_draws ... ok [INFO] [stdout] test hand::tests::discard_red_five_specifically_consumes_red ... ok [INFO] [stdout] test hand::tests::called_accessor_returns_input_in_order ... ok [INFO] [stdout] test hand::tests::daiminkan_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::chi_concealed_missing_tile ... ok [INFO] [stdout] test hand::tests::daiminkan_records_call_meta_open_with_claimed_tile ... ok [INFO] [stdout] test hand::tests::chi_covers_runs_234_through_789 ... ok [INFO] [stdout] test hand::tests::chi_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::draw_from_between_draws_to_post_draw ... ok [INFO] [stdout] test hand::tests::chi_with_honors_rejected ... ok [INFO] [stdout] test hand::tests::hand_error_display_is_non_empty ... ok [INFO] [stdout] test hand::tests::daiminkan_tiles_kind_mismatch ... ok [INFO] [stdout] test hand::tests::is_concealed_only_reflects_called_emptiness ... ok [INFO] [stdout] test hand::tests::discard_tile_not_present_returns_tile_not_in_concealed ... ok [INFO] [stdout] test hand::tests::daiminkan_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::discard_strict_equality_red_five_vs_normal ... ok [INFO] [stdout] test hand::tests::chi_non_consecutive_rejected ... ok [INFO] [stdout] test hand::tests::concealed_accessor_returns_input_multiset ... ok [INFO] [stdout] test hand::tests::draw_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::one_quad_plus_eleven_concealed_is_post_draw ... ok [INFO] [stdout] test hand::tests::one_quad_plus_nine_concealed_thirteen_is_rejected ... ok [INFO] [stdout] test hand::tests::one_quad_plus_ten_concealed_is_between_draws ... ok [INFO] [stdout] test hand::tests::pon_concealed_count_insufficient ... ok [INFO] [stdout] test hand::tests::pon_records_call_meta_open_with_claimed_tile ... ok [INFO] [stdout] test hand::tests::post_draw_and_between_draws_predicates_are_mutually_exclusive ... ok [INFO] [stdout] test hand::tests::post_draw_concealed_only_fourteen_succeeds ... ok [INFO] [stdout] test hand::tests::post_draw_with_one_call_eleven_plus_three_succeeds ... ok [INFO] [stdout] test hand::tests::post_draw_with_two_calls_eight_plus_six_succeeds ... ok [INFO] [stdout] test hand::tests::rejects_fifteen_concealed_tiles ... ok [INFO] [stdout] test hand::tests::rejects_kanchan_partial_in_called_list ... ok [INFO] [stdout] test hand::tests::rejects_twelve_concealed_tiles ... ok [INFO] [stdout] test hand::tests::shouminkan_fourth_tile_not_in_concealed ... ok [INFO] [stdout] test hand::tests::shouminkan_from_between_draws_is_wrong_state ... ok [INFO] [stdout] test hand::tests::shouminkan_no_matching_pon ... ok [INFO] [stdout] test hand::tests::shouminkan_normal_pon_plus_red_fourth ... ok [INFO] [stdout] test hand::tests::shouminkan_rejects_missing_pon_meta ... ok [INFO] [stdout] test hand::tests::shouminkan_replaces_pon_and_progresses_state ... ok [INFO] [stdout] test hand::tests::three_triplets_plus_one_quad_one_concealed_is_between_draws ... ok [INFO] [stdout] test hand::tests::pon_from_post_draw_is_wrong_state ... ok [INFO] [stdout] test hand::tests::three_triplets_plus_one_quad_zero_concealed_is_rejected ... ok [INFO] [stdout] test hand::tests::two_quads_plus_eight_concealed_is_post_draw_mixed_kan_kinds ... ok [INFO] [stdout] test hand::tests::shouminkan_red_five_pon_plus_normal_fourth ... ok [INFO] [stdout] test hand::tests::pon_from_kamicha_toimen_shimocha_each_works ... ok [INFO] [stdout] test hand::tests::two_quads_plus_seven_concealed_is_between_draws ... ok [INFO] [stdout] test meld_display::tests::chi_rotated_at_slot0_full_table ... ok [INFO] [stdout] test hand::tests::rejects_partial_in_called_list ... ok [INFO] [stdout] test hand::tests::with_calls_and_meta_length_mismatch_rejected ... ok [INFO] [stdout] test hand::tests::pon_red_five_claimed_records_red_in_call_meta ... ok [INFO] [stdout] test hand::tests::with_calls_fills_call_meta_with_none ... ok [INFO] [stdout] test hand::tests::with_calls_and_meta_accepts_consistent_lengths ... ok [INFO] [stdout] test meld_display::tests::chi_with_red_five_called_keeps_red_in_slot0 ... ok [INFO] [stdout] test meld_display::tests::concealed_quad_face_down_at_both_ends ... ok [INFO] [stdout] test meld_display::tests::concealed_quad_with_red_five_keeps_one_red_total ... ok [INFO] [stdout] test meld_display::tests::concealed_sequence_three_upright_in_ascending_order ... ok [INFO] [stdout] test meld_display::tests::daiminkan_red_five_called_normal_one_red_in_others ... ok [INFO] [stdout] test meld_display::tests::daiminkan_red_five_called_red_three_normal_remaining ... ok [INFO] [stdout] test hand::tests::one_quad_plus_twelve_concealed_sixteen_is_rejected ... ok [INFO] [stdout] test meld_display::tests::display_error_messages_non_empty ... ok [INFO] [stdout] test hand::tests::rejects_pair_in_called_list ... ok [INFO] [stdout] test meld_display::tests::concealed_triplet_three_upright ... ok [INFO] [stdout] test hand::tests::shouminkan_upgrades_call_meta_to_shouminkan ... ok [INFO] [stdout] test meld_display::tests::daiminkan_rotated_index_full_table ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_shouminkan ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_shouminkan_passed_to_pon_or_daiminkan ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_when_uniform_meld_called_red ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_daiminkan ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_open_passed_to_shouminkan ... ok [INFO] [stdout] test meld_display::tests::err_called_tile_kind_mismatch_pon ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_none_passed_to_open ... ok [INFO] [stdout] test meld_display::tests::err_call_info_mismatch_when_open_info_passed_to_concealed ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_honor_is_kind_mismatch ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_not_in_sequence ... ok [INFO] [stdout] test meld_display::tests::pon_red_five_called_normal_remaining_one_red_one_normal ... ok [INFO] [stdout] test meld_display::tests::partial_layout_adjacent_and_kanchan_table ... ok [INFO] [stdout] test meld_display::tests::sou_helper_smoke ... ok [INFO] [stdout] test meld_display::tests::err_chi_called_wrong_suit_is_kind_mismatch ... ok [INFO] [stdout] test meld_display::tests::pair_layout_is_two_upright ... ok [INFO] [stdout] test noten::tests::one_tenpai_south ... ok [INFO] [stdout] test meld_display::tests::pair_layout_with_red_five_red_in_slot0 ... ok [INFO] [stdout] test noten::tests::three_tenpai_east_noten ... ok [INFO] [stdout] test meld_display::tests::shouminkan_red_five_three_red_distributions ... ok [INFO] [stdout] test meld_display::tests::pon_red_five_called_red_remaining_two_normal ... ok [INFO] [stdout] test noten::tests::three_tenpai_north_noten ... ok [INFO] [stdout] test noten::tests::four_tenpai_no_movement ... ok [INFO] [stdout] test noten::tests::one_tenpai_east ... ok [INFO] [stdout] test noten::tests::one_tenpai_north ... ok [INFO] [stdout] test noten::tests::all_patterns_are_zero_sum ... ok [INFO] [stdout] test noten::tests::two_tenpai_east_north ... ok [INFO] [stdout] test noten::tests::three_tenpai_west_noten ... ok [INFO] [stdout] test meld_display::tests::shouminkan_rotated_index_and_stacked_full_table ... ok [INFO] [stdout] test meld_display::tests::pon_rotated_index_full_table ... ok [INFO] [stdout] test noten::tests::one_tenpai_west ... ok [INFO] [stdout] test noten::tests::split_total_always_3000_when_movement_happens ... ok [INFO] [stdout] test noten::tests::two_tenpai_east_south ... ok [INFO] [stdout] test noten::tests::two_tenpai_east_west ... ok [INFO] [stdout] test noten::tests::three_tenpai_south_noten ... ok [INFO] [stdout] test pao::tests::non_yakuman_ron_runs_through_split_logic ... ok [INFO] [stdout] test noten::tests::two_tenpai_west_north ... ok [INFO] [stdout] test noten::tests::two_tenpai_south_north ... ok [INFO] [stdout] test pao::tests::error_dealer_tsumo_with_discarder ... ok [INFO] [stdout] test noten::tests::two_tenpai_south_west ... ok [INFO] [stdout] test pao::tests::ron_split_residual_absorbed_by_discarder_for_odd_total ... ok [INFO] [stdout] test pao::tests::yakuman_ron_dealer_pao_is_not_discarder ... ok [INFO] [stdout] test pao::tests::yakuman_ron_non_dealer_pao_is_not_discarder ... ok [INFO] [stdout] test pao::tests::yakuman_ron_pao_seat_equals_discarder_pays_full ... ok [INFO] [stdout] test pao::tests::yakuman_tsumo_non_dealer_pao_pays_full ... ok [INFO] [stdout] test pao::tests::ron_split_with_odd_hundreds_residual_goes_to_discarder ... ok [INFO] [stdout] test pao::tests::yakuman_tsumo_dealer_pao_pays_full ... ok [INFO] [stdout] test pao::tests::zero_sum_invariant_across_all_winner_pao_combinations_ron ... ok [INFO] [stdout] test round::tests::ankan_transitions_to_rinshan_draw ... ok [INFO] [stdout] test pao::tests::seat_indices_match_declaration_order ... ok [INFO] [stdout] test pao::tests::error_non_dealer_tsumo_with_discarder ... ok [INFO] [stdout] test round::tests::chi_from_non_kamicha_is_rejected ... ok [INFO] [stdout] test pao::tests::zero_sum_invariant_across_all_winner_pao_combinations_dealer_tsumo ... ok [INFO] [stdout] test pao::tests::error_pao_seat_is_winner ... ok [INFO] [stdout] test round::tests::enumerate_chi_pairs_no_pairs_for_honor_discard ... ok [INFO] [stdout] test round::tests::enumerate_ankan_sets_quad_present ... ok [INFO] [stdout] test round::tests::chi_only_from_kamicha ... ok [INFO] [stdout] test round::tests::enumerate_chi_pairs_around_5m_lists_red_five_variants ... ok [INFO] [stdout] test round::tests::daiminkan_advances_to_rinshan_draw ... ok [INFO] [stdout] test round::tests::discard_in_awaiting_calls_state_is_wrong_state ... ok [INFO] [stdout] test round::tests::forfeit_blocks_riichi ... ok [INFO] [stdout] test round::tests::forfeit_allows_discard_and_continues_normal_turn ... ok [INFO] [stdout] test round::tests::forfeit_blocks_tsumo ... ok [INFO] [stdout] test round::tests::enumerate_daiminkan_triples_basic ... ok [INFO] [stdout] test round::tests::draw_in_after_draw_state_is_wrong_state ... ok [INFO] [stdout] test round::tests::discard_then_all_pass_advances_to_shimocha_draw ... ok [INFO] [stdout] test round::tests::forfeit_blocks_ankan ... ok [INFO] [stdout] test round::tests::forfeit_blocks_kyuushu_kyuuhai ... ok [INFO] [stdout] test round::tests::forfeit_blocks_ron_in_resolve_calls ... ok [INFO] [stdout] test round::tests::forfeit_blocks_shouminkan ... ok [INFO] [stdout] test round::tests::enumerate_pon_pairs_red_five_mix ... ok [INFO] [stdout] test round::tests::forfeit_blocks_pon_in_resolve_calls ... ok [INFO] [stdout] test round::tests::last_agari_set_after_dealer_pinfu_tsumo ... ok [INFO] [stdout] test round::tests::last_agari_remains_none_after_ryuukyoku ... ok [INFO] [stdout] test round::tests::kyuushu_kyuuhai_after_call_is_rejected ... ok [INFO] [stdout] test round::tests::kan_seats_tracked_across_calls ... ok [INFO] [stdout] test round::tests::last_agari_ura_dora_indicators_non_empty_when_riichi ... ok [INFO] [stdout] test round::tests::new_round_dealer_east_is_after_draw_with_14_tiles ... ok [INFO] [stdout] test round::tests::pon_advances_to_caller_after_draw ... ok [INFO] [stdout] test round::tests::forfeit_independent_per_seat ... ok [INFO] [stdout] test round::tests::post_riichi_ankan_changes_wait_is_rejected ... ok [INFO] [stdout] test round::tests::full_first_go_around_no_call ... ok [INFO] [stdout] test round::tests::pon_takes_priority_over_chi ... ok [INFO] [stdout] test round::tests::invalid_tsumo_is_rejected ... ok [INFO] [stdout] test round::tests::kyuushu_kyuuhai_dealer_first_turn_aborts ... ok [INFO] [stdout] test round::tests::last_agari_is_none_on_fresh_round ... ok [INFO] [stdout] test round::tests::riichi_ippatsu_cancelled_by_own_next_discard ... ok [INFO] [stdout] test round::tests::riichi_with_called_meld_is_not_menzen ... ok [INFO] [stdout] test round::tests::new_round_dora_indicator_visible ... ok [INFO] [stdout] test round::tests::post_riichi_ankan_with_non_drawn_tile_is_rejected ... ok [INFO] [stdout] test round::tests::post_riichi_shouminkan_is_rejected ... ok [INFO] [stdout] test round::tests::new_round_initial_drawn_tile_is_index_52_of_input ... ok [INFO] [stdout] test round::tests::riichi_declaration_succeeds_and_records_double_riichi ... ok [INFO] [stdout] test round::tests::post_riichi_non_tsumogiri_is_rejected ... ok [INFO] [stdout] test round::tests::riichi_ippatsu_cancelled_by_pon_after_declaration ... ok [INFO] [stdout] test round::tests::post_riichi_ankan_with_drawn_tile_succeeds ... ok [INFO] [stdout] test round::tests::pre_riichi_ankan_skips_wait_preservation_check ... ok [INFO] [stdout] test hand::tests::pon_tiles_kind_mismatch ... ok [INFO] [stdout] test round::tests::riichi_noten_after_discard_is_rejected ... ok [INFO] [stdout] test round::tests::sanchahou_three_rons_abort ... ok [INFO] [stdout] test round::tests::same_turn_furiten_after_pass_locks_ron_until_next_draw ... ok [INFO] [stdout] test round::tests::tsumo_dealer_pinfu_wins ... ok [INFO] [stdout] test hand::tests::pon_with_red_five_in_concealed_makes_red_representative ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_forfeited_seat_only_discardable ... ok [INFO] [stdout] test round::tests::suufon_renda_aborts_on_fourth_east_discard ... ok [INFO] [stdout] test noten::tests::zero_tenpai_no_movement ... ok [INFO] [stdout] test pao::tests::error_ron_without_discarder ... ok [INFO] [stdout] test round::tests::ron_single_winner ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_lists_shouminkan_after_pon ... ok [INFO] [stdout] test round::tests::riichi_then_tsumo_emits_double_riichi_and_ippatsu ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_post_riichi_only_drawn_tile_is_discardable ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_initial_dealer_basic_shape ... ok [INFO] [stdout] test round::tests::valid_call_actions_chi_not_offered_to_kamicha_of_discarder ... ok [INFO] [stdout] test round::tests::riichi_with_insufficient_wall_is_rejected ... ok [INFO] [stdout] test round::tests::ryuukyoku_when_wall_runs_out ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_returns_none_in_other_states ... ok [INFO] [stdout] test round::tests::valid_call_actions_can_ron_when_winning_tile_discarded ... ok [INFO] [stdout] test round::tests::valid_after_draw_actions_lists_ankan_when_quad_present ... ok [INFO] [stdout] test round::tests::valid_call_actions_chi_only_for_shimocha ... ok [INFO] [stdout] test round::tests::ron_furiten_self_discard_rejected ... ok [INFO] [stdout] test scoring::tests::aka_dora_red_5m_adds_one_han ... ok [INFO] [stdout] test scoring::tests::chiitoitsu_5_han_collapses_to_mangan ... ok [INFO] [stdout] test round::tests::valid_call_actions_chi_not_offered_when_west_north_in_riichi ... ok [INFO] [stdout] test scoring::tests::ceil_to_100_examples ... ok [INFO] [stdout] test scoring::tests::chiitoitsu_is_25_fu ... ok [INFO] [stdout] test scoring::tests::doc_4_10_table_full_non_dealer_tsumo ... ok [INFO] [stdout] test scoring::tests::ceil_to_10_examples ... ok [INFO] [stdout] test scoring::tests::doc_4_11_table_full_dealer_ron ... ok [INFO] [stdout] test scoring::tests::aka_dora_no_red_in_shape_is_zero ... ok [INFO] [stdout] test round::tests::valid_call_actions_discarder_slot_only_passes ... ok [INFO] [stdout] test scoring::tests::dealer_ron_50fu_2han_is_4800 ... ok [INFO] [stdout] test scoring::tests::doc_4_10_table_full_non_dealer_ron ... ok [INFO] [stdout] test scoring::tests::doc_4_11_table_full_dealer_tsumo ... ok [INFO] [stdout] test scoring::tests::dora_breakdown_default_is_zero ... ok [INFO] [stdout] test round::tests::valid_call_actions_pon_enumerates_red_five_combinations ... ok [INFO] [stdout] test scoring::tests::dora_pushes_4han_to_mangan_at_5han ... ok [INFO] [stdout] test scoring::tests::dealer_tsumo_30fu_2han_is_1000_oll ... ok [INFO] [stdout] test scoring::tests::aka_dora_three_red_fives_each_count ... ok [INFO] [stdout] test scoring::tests::doc_4_04_tanyao_menzen_ron_ankou_kanchan_is_40_fu ... ok [INFO] [stdout] test scoring::tests::baiman_8_10_han ... ok [INFO] [stdout] test scoring::tests::mangan_boundary_3han_70fu_mangan ... ok [INFO] [stdout] test scoring::tests::mangan_boundary_4han_40fu_mangan ... ok [INFO] [stdout] test scoring::tests::dora_breakdown_total_sums_components ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_5z_haku_points_to_6z_hatsu ... ok [INFO] [stdout] test scoring::tests::mangan_boundary_5han_any_fu_mangan ... ok [INFO] [stdout] test scoring::tests::omote_dora_duplicate_indicators_double_count ... ok [INFO] [stdout] test scoring::tests::meld_fu_table_per_doc_4_05 ... ok [INFO] [stdout] test scoring::tests::non_dealer_tsumo_60fu_2han_is_1000_2000 ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_7z_chun_wraps_to_5z_haku ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_1m_adds_one_per_2m_in_shape ... ok [INFO] [stdout] test scoring::tests::dora_alone_yields_no_win ... ok [INFO] [stdout] test scoring::tests::dora_pushes_3han_plus_3dora_to_haneman ... ok [INFO] [stdout] test scoring::tests::kuipinfu_open_ron_all_seq_ryanmen_otakaze_pair_rounds_up_to_30_fu ... ok [INFO] [stdout] test scoring::tests::dora_pushes_to_kazoe_yakuman_at_13han ... ok [INFO] [stdout] test scoring::tests::pair_fu_table_per_doc_4_05 ... ok [INFO] [stdout] test scoring::tests::haneman_6_7_han ... ok [INFO] [stdout] test scoring::tests::kazoe_yakuman_13_plus_han ... ok [INFO] [stdout] test scoring::tests::payment_table_dealer_ron_30fu_4han ... ok [INFO] [stdout] test scoring::tests::non_dealer_ron_70fu_2han_is_4500 ... ok [INFO] [stdout] test scoring::tests::payment_table_dealer_tsumo_30fu_3han ... ok [INFO] [stdout] test scoring::tests::payment_table_non_dealer_tsumo_30fu_3han ... ok [INFO] [stdout] test scoring::tests::ura_dora_active_under_double_riichi ... ok [INFO] [stdout] test scoring::tests::ura_dora_active_under_riichi ... ok [INFO] [stdout] test scoring::tests::sanbaiman_11_12_han ... ok [INFO] [stdout] test scoring::tests::payment_table_non_dealer_tsumo_40fu_1han ... ok [INFO] [stdout] test scoring::tests::ura_dora_inactive_without_riichi ... ok [INFO] [stdout] test scoring::tests::wait_fu_kanchan_2_fu ... ok [INFO] [stdout] test scoring::tests::omote_dora_red_5_counts_as_kind_dora_too ... ok [INFO] [stdout] test scoring::tests::pinfu_riichi_tsumo_non_dealer_3han_20fu_is_700_1300 ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_4z_north_to_1z_east_in_yakuhai_hand ... ok [INFO] [stdout] test scoring::tests::omote_dora_two_distinct_indicators_each_hit_once_sums ... ok [INFO] [stdout] test scoring::tests::wait_fu_penchan_high_2_fu ... ok [INFO] [stdout] test scoring::tests::wait_fu_penchan_low_2_fu ... ok [INFO] [stdout] test scoring::tests::wait_fu_picks_higher_when_both_tanki_and_shanpon_match ... ok [INFO] [stdout] test scoring::tests::wait_fu_ryanmen_zero_fu ... ok [INFO] [stdout] test scoring::tests::payment_table_non_dealer_ron_30fu_3han ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_4z_wraps_to_1z_east ... ok [INFO] [stdout] test scoring::tests::mangan_boundary_4han_30fu_normal ... ok [INFO] [stdout] test scoring::tests::omote_dora_indicator_9m_wraps_to_1m ... ok [INFO] [stdout] test scoring::tests::pinfu_tsumo_is_20_fu ... ok [INFO] [stdout] test scoring::tests::yakuman_double_dai_suushii_plus_tsuuiisou_non_dealer_ron_is_64000 ... ok [INFO] [stdout] test scoring::tests::yakuman_double_dealer_ron_is_96000 ... ok [INFO] [stdout] test scoring::tests::yakuman_double_ignores_dora ... ok [INFO] [stdout] test scoring::tests::yakuman_kokushi_dealer_tsumo_is_16000_oll ... ok [INFO] [stdout] test scoring::tests::yakuman_kokushi_non_dealer_ron_is_32000 ... ok [INFO] [stdout] test scoring::tests::yakuman_with_aka_dora_records_aka_but_score_unchanged ... ok [INFO] [stdout] test tenpai::tests::called_triplet_plus_concealed_tanki ... ok [INFO] [stdout] test tenpai::tests::chiitoitsu_six_pairs_plus_one ... ok [INFO] [stdout] test scoring::tests::payment_table_non_dealer_ron_40fu_1han ... ok [INFO] [stdout] test tenpai::tests::kanchan_3s ... ok [INFO] [stdout] test tenpai::tests::kokushi_thirteen_way_wait ... ok [INFO] [stdout] test tenpai::tests::kokushi_with_simple_is_noten ... ok [INFO] [stdout] test scoring::tests::ura_dora_only_no_omote_indicators ... ok [INFO] [stdout] test scoring::tests::pinfu_ron_is_30_fu ... ok [INFO] [stdout] test tenpai::tests::multiwait_three_tanki_1_4_7m ... ok [INFO] [stdout] test tenpai::tests::one_concealed_kan_post_draw_waits ... ok [INFO] [stdout] test scoring::tests::wait_fu_shanpon_zero_fu ... ok [INFO] [stdout] test tenpai::tests::kokushi_single_wait ... ok [INFO] [stdout] test tenpai::tests::one_shouminkan_between_draws_waits ... ok [INFO] [stdout] test tenpai::tests::penchan_3m ... ok [INFO] [stdout] test tenpai::tests::red_five_in_hand_yields_non_red_in_result ... ok [INFO] [stdout] test tenpai::tests::ryanmen_simple_5s_or_8s ... ok [INFO] [stdout] test tenpai::tests::shanpon_1m_or_9m ... ok [INFO] [stdout] test tenpai::tests::tanki_1z ... ok [INFO] [stdout] test tenpai::tests::tile_kind_index_collapses_red_onto_normal_five ... ok [INFO] [stdout] test tenpai::tests::multiwait_four_of_a_kind_5_6_8_9m ... ok [INFO] [stdout] test tenpai::tests::two_kans_between_draws_waits ... ok [INFO] [stdout] test tenpai::tests::multiwait_three_of_a_kind_minimal_self_consistent ... ok [INFO] [stdout] test scoring::tests::yakuman_kokushi_ignores_dora_for_score_but_records_count ... ok [INFO] [stdout] test tenpai::tests::chiitoitsu_with_quad_kind_not_seven_pairs ... ok [INFO] [stdout] test scoring::tests::yakunashi_returns_none ... ok [INFO] [stdout] test tenpai::tests::dealer_count_discard_yields_waits ... ok [INFO] [stdout] test wall::tests::flip_kan_dora_progresses_through_slots_5_to_8 ... ok [INFO] [stdout] test wall::tests::empty_deck_rejected ... ok [INFO] [stdout] test tenpai::tests::noten_random_thirteen ... ok [INFO] [stdout] test tenpai::tests::yaochuhai_indices_are_exactly_thirteen ... ok [INFO] [stdout] test tenpai::tests::multiwait_two_ryanmen_overlap_3_6_9m ... ok [INFO] [stdout] test wall::tests::five_of_each_suit_no_red_rejected ... ok [INFO] [stdout] test wall::tests::flip_kan_ura_dora_progresses_through_slots_10_to_13 ... ok [INFO] [stdout] test wall::tests::full_live_wall_drain ... ok [INFO] [stdout] test tenpai::tests::one_open_kan_between_draws_waits ... ok [INFO] [stdout] test wall::tests::error_display_smoke ... ok [INFO] [stdout] test wall::tests::extra_one_man_short_nine_man_rejected ... ok [INFO] [stdout] test tenpai::tests::penchan_7s ... ok [INFO] [stdout] test wall::tests::first_draw_is_index_zero_of_input ... ok [INFO] [stdout] test tenpai::tests::tile_kind_index_round_trips_for_non_red ... ok [INFO] [stdout] test wall::tests::initial_ura_dora_indicator_is_dead_index_9 ... ok [INFO] [stdout] test wall::tests::initial_dora_indicator_is_dead_index_4 ... ok [INFO] [stdout] test wall::tests::live_remaining_decrements_each_draw ... ok [INFO] [stdout] test wall::tests::red_five_per_suit_required ... ok [INFO] [stdout] test wall::tests::wrong_tile_count_135 ... ok [INFO] [stdout] test wall::tests::wrong_tile_count_137 ... ok [INFO] [stdout] test yaku::tests::chankan_ron_with_flag_is_true ... ok [INFO] [stdout] test wall::tests::rinshan_and_kan_dora_are_independent ... ok [INFO] [stdout] test wall::tests::rinshan_four_then_exhausted ... ok [INFO] [stdout] test wall::tests::rinshan_consumes_one_live_tail_slot_per_draw ... ok [INFO] [stdout] test wall::tests::rinshan_drawn_without_flipping_kan_dora_keeps_dora_at_one ... ok [INFO] [stdout] test yaku::tests::chankan_ron_without_flag_is_false ... ok [INFO] [stdout] test wall::tests::haitei_imminent_false_at_start_and_with_many_left ... ok [INFO] [stdout] test wall::tests::haitei_imminent_only_at_one_remaining ... ok [INFO] [stdout] test wall::tests::missing_honor_rejected ... ok [INFO] [stdout] test wall::tests::standard_deck_is_accepted ... ok [INFO] [stdout] test yaku::tests::chanta_simple_triplet_is_none ... ok [INFO] [stdout] test yaku::tests::chanta_with_middle_sequence_low_four_is_none ... ok [INFO] [stdout] test yaku::tests::chanta_with_middle_sequence_low_two_is_none ... ok [INFO] [stdout] test yaku::tests::chiihou_open_is_false ... ok [INFO] [stdout] test yaku::tests::chiihou_dealer_is_false ... ok [INFO] [stdout] test yaku::tests::chiitoitsu_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::chanta_all_yaochuhai_concealed_returns_closed ... ok [INFO] [stdout] test yaku::tests::chanta_all_yaochuhai_with_chi_returns_open ... ok [INFO] [stdout] test yaku::tests::chiitoitsu_seven_distinct_pairs_is_true ... ok [INFO] [stdout] test yaku::tests::chiihou_child_tsumo_concealed_is_true ... ok [INFO] [stdout] test yaku::tests::chanta_kokushi_is_none ... ok [INFO] [stdout] test yaku::tests::chankan_tsumo_with_flag_is_false ... ok [INFO] [stdout] test yaku::tests::chiihou_chiitoitsu_shape_is_true ... ok [INFO] [stdout] test yaku::tests::chiitoitsu_standard_form_is_false ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_all_man_with_chi_is_open ... ok [INFO] [stdout] test yaku::tests::chanta_simple_pair_is_none ... ok [INFO] [stdout] test yaku::tests::chinitsu_chiitoitsu_all_man_is_closed ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_all_pin_concealed_is_closed ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_with_one_honor_is_none ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_man_pin_mixed_is_none ... ok [INFO] [stdout] test yaku::tests::chinroutou_with_simple_is_false ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_all_man_concealed_is_closed ... ok [INFO] [stdout] test yaku::tests::chanta_chiitoitsu_is_none ... ok [INFO] [stdout] test yaku::tests::chinitsu_standard_all_sou_concealed_is_closed ... ok [INFO] [stdout] test yaku::tests::chuuren_extra_one_makes_count_four_at_one_is_true ... ok [INFO] [stdout] test yaku::tests::chanta_honroutou_shape_predicate_still_fires ... ok [INFO] [stdout] test yaku::tests::chiihou_ron_is_false ... ok [INFO] [stdout] test yaku::tests::chuuren_with_other_suit_is_false ... ok [INFO] [stdout] test yaku::tests::chinitsu_chiitoitsu_with_honor_pair_is_none ... ok [INFO] [stdout] test yaku::tests::chinitsu_kokushi_is_none ... ok [INFO] [stdout] test yaku::tests::chinroutou_with_quad_is_true ... ok [INFO] [stdout] test yaku::tests::dai_suushii_three_winds_plus_pair_is_false ... ok [INFO] [stdout] test yaku::tests::chuuren_with_red_five_is_true ... ok [INFO] [stdout] test yaku::tests::chuuren_pin_shape_is_true ... ok [INFO] [stdout] test yaku::tests::dai_suushii_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::chuuren_with_honor_is_false ... ok [INFO] [stdout] test yaku::tests::dai_suushii_with_dragon_pair_is_true ... ok [INFO] [stdout] test yaku::tests::chinroutou_all_terminals_is_true ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chanta_without_honroutou_fires ... ok [INFO] [stdout] test yaku::tests::chuuren_canonical_man_shape_is_true ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chanta_with_honor_not_suppressed_by_junchan ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chuuren_suppresses_chinitsu ... ok [INFO] [stdout] test yaku::tests::daisangen_three_dragon_triplets_is_true ... ok [INFO] [stdout] test yaku::tests::chuuren_one_count_below_three_is_false ... ok [INFO] [stdout] test yaku::tests::chuuren_open_shape_is_false ... ok [INFO] [stdout] test yaku::tests::dai_suushii_four_wind_triplets_is_true ... ok [INFO] [stdout] test yaku::tests::daisangen_with_open_dragon_is_true ... ok [INFO] [stdout] test yaku::tests::daisangen_two_dragon_triplets_is_false ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chinroutou_suppresses_toitoi_honroutou ... ok [INFO] [stdout] test yaku::tests::detect_yaku_honitsu_does_not_emit_chinitsu ... ok [INFO] [stdout] test yaku::tests::detect_yaku_double_riichi_suppresses_riichi ... ok [INFO] [stdout] test yaku::tests::chinroutou_with_honor_is_false ... ok [INFO] [stdout] test yaku::tests::detect_yaku_haku_plus_tanyao_with_open_call ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chinitsu_does_not_emit_honitsu ... ok [INFO] [stdout] test yaku::tests::daisangen_with_dragon_quad_is_true ... ok [INFO] [stdout] test yaku::tests::detect_yaku_chiitoitsu_riichi_tanyao_combo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_round_and_seat_wind_same_meld_emits_both ... ok [INFO] [stdout] test yaku::tests::detect_yaku_iipeikou_pinfu_riichi_combo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_riichi_tsumo_pinfu_tanyao_combo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_honroutou_suppresses_chanta ... ok [INFO] [stdout] test yaku::tests::detect_yaku_kokushi_only_on_thirteen_orphans ... ok [INFO] [stdout] test yaku::tests::detect_yaku_junchan_suppresses_chanta ... ok [INFO] [stdout] test yaku::tests::detect_yaku_no_yaku_hand_is_empty ... ok [INFO] [stdout] test yaku::tests::detect_yaku_no_yaku_hand_with_all_situational_flags_off_is_empty ... ok [INFO] [stdout] test yaku::tests::detect_yaku_ryuuiisou_suppresses_yakuhai_hatsu ... ok [INFO] [stdout] test yaku::tests::detect_yaku_ittsuu_riichi_combo ... ok [INFO] [stdout] test yaku::tests::daisangen_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::detect_yaku_suuankou_suppresses_san_ankou_toitoi_yakuhai ... ok [INFO] [stdout] test yaku::tests::detect_yaku_san_shoku_doujun_with_open_call_is_open_only ... ok [INFO] [stdout] test yaku::tests::detect_yaku_tsuuiisou_suppresses_honroutou_honitsu_yakuhai ... ok [INFO] [stdout] test yaku::tests::detect_yaku_san_shoku_doujun_with_riichi_is_closed ... ok [INFO] [stdout] test yaku::tests::detect_yaku_iipeikou_form_does_not_emit_ryanpeikou ... ok [INFO] [stdout] test yaku::tests::detect_yaku_riichi_tsumo_rinshan_tanyao_combo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_yakuman_only_when_yakuman_fires ... ok [INFO] [stdout] test yaku::tests::double_riichi_independent_of_is_riichi ... ok [INFO] [stdout] test yaku::tests::detect_yaku_suukantsu_suppresses_san_kantsu_toitoi ... ok [INFO] [stdout] test yaku::tests::detect_yaku_toitoi_san_ankou_yakuhai_combo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_no_yakuman_falls_through_to_normal_logic ... ok [INFO] [stdout] test yaku::tests::detect_yaku_tenhou_only_when_dealer_initial_tsumo ... ok [INFO] [stdout] test yaku::tests::detect_yaku_regular_riichi_without_double_riichi_fires ... ok [INFO] [stdout] test yaku::tests::five_and_six_han_yaku_chinitsu ... ok [INFO] [stdout] test yaku::tests::detect_yaku_riichi_ippatsu_tsumo_pinfu_tanyao_emits_five_one_han ... ok [INFO] [stdout] test yaku::tests::detect_yaku_ryanpeikou_form_does_not_emit_iipeikou ... ok [INFO] [stdout] test yaku::tests::double_riichi_chiitoitsu_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::double_riichi_closed_standard_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::double_riichi_closed_standard_without_flag_is_false ... ok [INFO] [stdout] test yaku::tests::honitsu_chiitoitsu_with_honor_mix_is_closed ... ok [INFO] [stdout] test yaku::tests::double_riichi_open_standard_with_flag_is_false ... ok [INFO] [stdout] test yaku::tests::honitsu_kokushi_is_none ... ok [INFO] [stdout] test yaku::tests::haitei_tsumo_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::honitsu_standard_all_man_with_honor_open_is_open ... ok [INFO] [stdout] test yaku::tests::haitei_open_standard_tsumo_is_true ... ok [INFO] [stdout] test yaku::tests::honitsu_standard_all_man_no_honor_is_none ... ok [INFO] [stdout] test yaku::tests::honitsu_chiitoitsu_no_honor_is_none ... ok [INFO] [stdout] test yaku::tests::haitei_ron_with_flag_is_false ... ok [INFO] [stdout] test yaku::tests::honitsu_standard_all_man_with_honor_concealed_is_closed ... ok [INFO] [stdout] test yaku::tests::honitsu_standard_man_pin_mixed_is_none ... ok [INFO] [stdout] test yaku::tests::haitei_tsumo_without_flag_is_false ... ok [INFO] [stdout] test yaku::tests::honroutou_chiitoitsu_with_one_simple_pair_is_false ... ok [INFO] [stdout] test yaku::tests::honroutou_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::detect_yaku_two_yakuman_stacking_dai_suushii_plus_tsuuiisou ... ok [INFO] [stdout] test yaku::tests::double_riichi_kokushi_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::haitei_chiitoitsu_tsumo_is_true ... ok [INFO] [stdout] test yaku::tests::iipeikou_doc_example_4p_winning_decomposes_to_123p_and_234p_is_false ... ok [INFO] [stdout] test yaku::tests::honroutou_all_honors_is_true ... ok [INFO] [stdout] test yaku::tests::iipeikou_doc_example_1p_winning_decomposes_to_double_123p_is_true ... ok [INFO] [stdout] test yaku::tests::houtei_ron_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::honroutou_chiitoitsu_all_yaochu_is_true ... ok [INFO] [stdout] test yaku::tests::iipeikou_with_triplet_other_meld_is_true ... ok [INFO] [stdout] test yaku::tests::houtei_ron_without_flag_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_red_five_difference_is_ignored ... ok [INFO] [stdout] test yaku::tests::houtei_tsumo_with_flag_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_all_distinct_sequences_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_four_identical_sequences_is_false ... ok [INFO] [stdout] test yaku::tests::honroutou_with_simple_sequence_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::houtei_open_standard_ron_is_true ... ok [INFO] [stdout] test yaku::tests::detect_yaku_two_yakuman_stacking_daisangen_plus_suuankou ... ok [INFO] [stdout] test yaku::tests::ippatsu_predicate_concealed_with_flag_true ... ok [INFO] [stdout] test yaku::tests::haitei_kokushi_tsumo_is_true ... ok [INFO] [stdout] test yaku::tests::honroutou_terminals_and_honors_standard_is_true ... ok [INFO] [stdout] test yaku::tests::ittsuu_fourth_meld_is_extra_sequence_in_same_suit_is_closed ... ok [INFO] [stdout] test yaku::tests::iipeikou_three_identical_sequences_is_true ... ok [INFO] [stdout] test yaku::tests::iipeikou_two_identical_sequences_is_true ... ok [INFO] [stdout] test yaku::tests::ippatsu_predicate_flag_false_is_false ... ok [INFO] [stdout] test yaku::tests::ippatsu_predicate_open_hand_is_false ... ok [INFO] [stdout] test yaku::tests::ittsuu_chiitoitsu_is_none ... ok [INFO] [stdout] test yaku::tests::ittsuu_kokushi_is_none ... ok [INFO] [stdout] test yaku::tests::junchan_chiitoitsu_is_none ... ok [INFO] [stdout] test yaku::tests::ittsuu_runs_split_across_suits_is_none ... ok [INFO] [stdout] test yaku::tests::ittsuu_three_runs_in_man_concealed_returns_closed ... ok [INFO] [stdout] test yaku::tests::ittsuu_three_runs_in_man_with_chi_returns_open ... ok [INFO] [stdout] test yaku::tests::ittsuu_with_open_meld_in_other_slot_returns_open ... ok [INFO] [stdout] test yaku::tests::junchan_with_honor_triplet_is_none ... ok [INFO] [stdout] test yaku::tests::junchan_all_terminal_concealed_is_closed ... ok [INFO] [stdout] test yaku::tests::junchan_with_middle_sequence_is_none ... ok [INFO] [stdout] test yaku::tests::ittsuu_starts_at_two_not_one_is_none ... ok [INFO] [stdout] test yaku::tests::junchan_with_simple_pair_is_none ... ok [INFO] [stdout] test yaku::tests::iipeikou_with_open_chi_is_false ... ok [INFO] [stdout] test yaku::tests::kokushi_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::ittsuu_three_runs_in_pin_concealed_returns_closed ... ok [INFO] [stdout] test yaku::tests::label_known_variants_match_expected ... ok [INFO] [stdout] test yaku::tests::kokushi_standard_is_false ... ok [INFO] [stdout] test yaku::tests::iipeikou_two_distinct_pairs_is_false ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_closed_standard_tsumo_false_is_false ... ok [INFO] [stdout] test yaku::tests::kokushi_thirteen_orphans_is_true ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_closed_standard_tsumo_true_is_true ... ok [INFO] [stdout] test yaku::tests::junchan_all_terminal_with_chi_is_open ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_open_standard_tsumo_true_is_false ... ok [INFO] [stdout] test yaku::tests::non_yakuman_variants_are_not_yakuman ... ok [INFO] [stdout] test yaku::tests::pinfu_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_otakaze_pair_with_ryanmen_is_true ... ok [INFO] [stdout] test yaku::tests::junchan_implies_chanta_predicate_fires ... ok [INFO] [stdout] test yaku::tests::pinfu_penchan_low_winning_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_doc_example_456m_with_44m_pair_winning_6m_is_pinfu ... ok [INFO] [stdout] test yaku::tests::pinfu_round_wind_pair_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_ryanmen_winning_high_end_is_true ... ok [INFO] [stdout] test yaku::tests::label_all_variants_non_empty ... ok [INFO] [stdout] test yaku::tests::pinfu_tanki_pair_winning_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_three_seq_one_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_with_open_chi_is_false ... ok [INFO] [stdout] test yaku::tests::riichi_chiitoitsu_riichi_true_is_true ... ok [INFO] [stdout] test yaku::tests::junchan_with_honor_pair_is_none ... ok [INFO] [stdout] test yaku::tests::junchan_kokushi_is_none ... ok [INFO] [stdout] test yaku::tests::pinfu_dragon_pair_is_false ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_chiitoitsu_tsumo_true_is_true ... ok [INFO] [stdout] test yaku::tests::menzen_tsumo_kokushi_tsumo_true_is_true ... ok [INFO] [stdout] test yaku::tests::pinfu_kanchan_winning_is_false ... ok [INFO] [stdout] test yaku::tests::one_han_yaku_have_han_one ... ok [INFO] [stdout] test yaku::tests::pinfu_ryanmen_winning_low_end_is_true ... ok [INFO] [stdout] test yaku::tests::pinfu_seat_wind_pair_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_doc_example_345m_with_44m_pair_winning_3m_or_6m_is_pinfu ... ok [INFO] [stdout] test yaku::tests::pinfu_doc_example_4m_triplet_with_5m_attached_is_never_pinfu ... ok [INFO] [stdout] test yaku::tests::pinfu_penchan_high_winning_is_false ... ok [INFO] [stdout] test yaku::tests::riichi_closed_standard_riichi_true_is_true ... ok [INFO] [stdout] test yaku::tests::riichi_open_standard_riichi_true_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_all_green_is_true ... ok [INFO] [stdout] test yaku::tests::riichi_closed_standard_riichi_false_is_false ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_with_chi_is_false ... ok [INFO] [stdout] test yaku::tests::pinfu_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_three_identical_plus_one_other_is_false ... ok [INFO] [stdout] test yaku::tests::rinshan_ron_with_flag_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_contains_1s_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_with_haku_is_false ... ok [INFO] [stdout] test yaku::tests::san_ankou_three_concealed_triplets_tsumo_is_true ... ok [INFO] [stdout] test yaku::tests::san_ankou_three_concealed_with_open_triplet_is_true ... ok [INFO] [stdout] test yaku::tests::san_ankou_ankan_unaffected_by_ron_winning_tile ... ok [INFO] [stdout] test yaku::tests::riichi_kokushi_riichi_true_is_true ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_red_five_difference_ignored ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_with_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::san_ankou_tsumo_completing_third_triplet_is_true ... ok [INFO] [stdout] test yaku::tests::san_ankou_two_concealed_plus_ankan_is_true ... ok [INFO] [stdout] test yaku::tests::san_kantsu_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::san_kantsu_no_quads_is_false ... ok [INFO] [stdout] test yaku::tests::rinshan_tsumo_with_flag_is_true ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_two_distinct_pairs_concealed_is_true ... ok [INFO] [stdout] test yaku::tests::san_kantsu_two_concealed_one_open_is_true ... ok [INFO] [stdout] test yaku::tests::san_kantsu_four_quads_is_true ... ok [INFO] [stdout] test yaku::tests::rinshan_tsumo_without_flag_is_false ... ok [INFO] [stdout] test yaku::tests::san_kantsu_three_concealed_quads_is_true ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_contains_7s_via_678s_is_false ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_four_identical_sequences_is_true ... ok [INFO] [stdout] test yaku::tests::ryanpeikou_only_one_pair_is_false ... ok [INFO] [stdout] test yaku::tests::ryuuiisou_contains_5s_via_567s_is_false ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_duplicate_sequence_still_satisfies ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_only_two_suits_is_none ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_three_suits_concealed_returns_closed ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_different_numbers_is_false ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_open_triplet_is_true ... ok [INFO] [stdout] test yaku::tests::shou_sangen_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::san_ankou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::shou_sangen_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::san_ankou_ron_completing_third_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::shou_sangen_one_dragon_triplet_plus_dragon_pair_is_false ... ok [INFO] [stdout] test yaku::tests::san_ankou_two_concealed_one_open_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::shou_sangen_open_dragon_triplet_is_true ... ok [INFO] [stdout] test yaku::tests::shou_sangen_quad_plus_triplet_plus_dragon_pair_is_true ... ok [INFO] [stdout] test yaku::tests::shou_sangen_three_dragon_triplets_with_non_dragon_pair_is_false ... ok [INFO] [stdout] test yaku::tests::shou_sangen_two_dragon_triplets_plus_dragon_pair_is_true ... ok [INFO] [stdout] test yaku::tests::shou_suushii_with_open_wind_is_true ... ok [INFO] [stdout] test yaku::tests::suuankou_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::suuankou_four_ankan_is_true ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_open_triplet_in_other_meld_returns_open ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_different_lows_is_none ... ok [INFO] [stdout] test yaku::tests::shou_suushii_three_winds_with_non_wind_pair_is_false ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_red_five_difference_ignored ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_one_chi_among_three_returns_open ... ok [INFO] [stdout] test yaku::tests::suuankou_four_concealed_triplets_tsumo_is_true ... ok [INFO] [stdout] test yaku::tests::san_kantsu_two_quads_is_false ... ok [INFO] [stdout] test yaku::tests::suuankou_open_shape_is_false ... ok [INFO] [stdout] test yaku::tests::suuankou_three_concealed_one_open_is_false ... ok [INFO] [stdout] test yaku::tests::suukantsu_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::suukantsu_four_concealed_quads_is_true ... ok [INFO] [stdout] test yaku::tests::suukantsu_three_quads_one_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::tanyao_chiitoitsu_all_simples_is_true ... ok [INFO] [stdout] test yaku::tests::suuankou_ron_completing_pair_tanki_is_true ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_three_suits_same_number_is_true ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_with_honor_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::tenhou_flag_off_is_false ... ok [INFO] [stdout] test yaku::tests::tenhou_dealer_tsumo_concealed_is_true ... ok [INFO] [stdout] test yaku::tests::san_shoku_doujun_chiitoitsu_is_none ... ok [INFO] [stdout] test yaku::tests::san_shoku_doukou_with_quad_is_true ... ok [INFO] [stdout] test yaku::tests::shou_suushii_three_winds_plus_wind_pair_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_standard_with_one_man_is_false ... ok [INFO] [stdout] test yaku::tests::tanyao_standard_all_simples_is_true ... ok [INFO] [stdout] test yaku::tests::suukantsu_with_open_quad_is_true ... ok [INFO] [stdout] test yaku::tests::tenhou_ron_is_false ... ok [INFO] [stdout] test yaku::tests::tanyao_standard_with_nine_pin_is_false ... ok [INFO] [stdout] test yaku::tests::tenhou_open_is_false ... ok [INFO] [stdout] test yaku::tests::suuankou_ron_completing_triplet_is_false ... ok [INFO] [stdout] test yaku::tests::toitoi_one_sequence_breaks_is_false ... ok [INFO] [stdout] test yaku::tests::tanyao_kokushi_is_false_by_construction ... ok [INFO] [stdout] test yaku::tests::tsuuiisou_all_honors_standard_is_true ... ok [INFO] [stdout] test yaku::tests::tanyao_chiitoitsu_with_nine_is_false ... ok [INFO] [stdout] test yaku::tests::yakuhai_chiitoitsu_is_zero_entries ... ok [INFO] [stdout] test yaku::tests::two_han_yaku_have_han_two ... ok [INFO] [stdout] test yaku::tests::tanyao_standard_with_honor_pair_is_false ... ok [INFO] [stdout] test yaku::tests::toitoi_four_concealed_triplets_is_true ... ok [INFO] [stdout] test yaku::tests::shou_sangen_two_dragon_triplets_with_non_dragon_pair_is_false ... ok [INFO] [stdout] test yaku::tests::yakuhai_chun_plus_haku_two_entries_in_meld_order ... ok [INFO] [stdout] test yaku::tests::toitoi_chiitoitsu_is_false ... ok [INFO] [stdout] test yaku::tests::tenhou_kokushi_shape_is_true ... ok [INFO] [stdout] test yaku::tests::toitoi_three_triplets_one_quad_is_true ... ok [INFO] [stdout] test yaku::tests::yakuhai_haku_triplet_is_one_entry ... ok [INFO] [stdout] test yaku::tests::yakuhai_kokushi_is_zero_entries ... ok [INFO] [stdout] test yaku::tests::yakuhai_pair_of_round_wind_is_zero_entries ... ok [INFO] [stdout] test yaku::tests::yakuhai_suited_sequence_is_zero_entries ... ok [INFO] [stdout] test yaku::tests::toitoi_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::tsuuiisou_kokushi_is_false ... ok [INFO] [stdout] test yaku::tests::yakuhai_east_triplet_round_east_seat_south_is_round_only ... ok [INFO] [stdout] test yaku::tests::toitoi_open_triplet_among_concealed_is_true ... ok [INFO] [stdout] test yaku::tests::tsuuiisou_with_one_suited_tile_is_false ... ok [INFO] [stdout] test yaku::tests::tenhou_seat_south_is_false ... ok [INFO] [stdout] test yaku::tests::three_han_yaku_have_han_three ... ok [INFO] [stdout] test yaku::tests::shou_suushii_four_winds_is_false ... ok [INFO] [stdout] test yaku::tests::yakuhai_east_triplet_round_south_seat_east_is_seat_only ... ok [INFO] [stderr] Doc-tests mj_core [INFO] [stdout] test yaku::tests::yakuhai_east_triplet_otakaze_is_zero_entries ... ok [INFO] [stdout] test yaku::tests::yakuhai_east_triplet_round_east_seat_east_is_two_entries ... ok [INFO] [stdout] test yaku::tests::yakuhai_hatsu_quad_is_one_entry ... ok [INFO] [stdout] test yaku::tests::tsuuiisou_chiitoitsu_seven_honor_pairs_is_true ... ok [INFO] [stdout] test yaku::tests::yakuman_variants_have_han_thirteen ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 732 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [INFO] [stdout] [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 player [INFO] [stdout] [INFO] [stdout] running 2 tests [INFO] [stdout] test player/src/lib.rs - (line 27) ... ok [INFO] [stdout] test player/src/lib.rs - (line 15) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.25s [INFO] [stdout] [INFO] [stderr] Doc-tests player_wasm [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 sanma [INFO] [stdout] [INFO] [stdout] running 5 tests [INFO] [stdout] test sanma/src/yaku.rs - yaku::Yaku::label (line 399) ... ok [INFO] [stdout] test sanma/src/lib.rs - (line 128) ... ok [INFO] [stdout] test sanma/src/lib.rs - (line 103) ... ok [INFO] [stdout] test sanma/src/lib.rs - (line 89) ... ok [INFO] [stdout] test sanma/src/lib.rs - (line 67) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.36s [INFO] [stdout] [INFO] [stderr] Doc-tests yonma [INFO] [stdout] [INFO] [stdout] running 5 tests [INFO] [stdout] test yonma/src/lib.rs - (line 60) ... ok [INFO] [stdout] test yonma/src/yaku.rs - yaku::Yaku::label (line 371) ... ok [INFO] [stdout] test yonma/src/lib.rs - (line 102) ... ok [INFO] [stdout] test yonma/src/lib.rs - (line 73) ... ok [INFO] [stdout] test yonma/src/lib.rs - (line 126) ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.45s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754", kill_on_drop: false }` [INFO] [stdout] aaf98aa62dcb5e465d819527ad4d3b58d948d6ced4b2f863b09a16b6c0a47754