[INFO] fetching crate sci-cream 0.0.7...
[INFO] testing sci-cream-0.0.7 against 1.99.0-beta.8 for beta-1.100-2
[INFO] extracting crate sci-cream 0.0.7 into /workspace/builds/worker-1-tc1/source
[INFO] started tweaking crates.io crate sci-cream 0.0.7
[INFO] finished tweaking crates.io crate sci-cream 0.0.7
[INFO] tweaked toml for crates.io crate sci-cream 0.0.7 written to /workspace/builds/worker-1-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate sci-cream 0.0.7 on toolchain 1.99.0-beta.8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate sci-cream 0.0.7 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.99.0-beta.8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded struct_iterable_internal v0.1.1
[INFO] [stderr]   Downloaded struct_iterable_derive v0.1.0
[INFO] [stderr]   Downloaded polyfit-rs v0.2.2
[INFO] [stderr]   Downloaded struct_iterable v0.1.1
[INFO] [stderr]   Downloaded diesel_table_macro_syntax v0.3.0
[INFO] [stderr]   Downloaded more-asserts v0.3.1
[INFO] [stderr]   Downloaded nnls v0.4.0
[INFO] [stderr]   Downloaded enum-as-inner v0.7.0
[INFO] [stderr]   Downloaded dsl_auto_type v0.2.0
[INFO] [stderr]   Downloaded nalgebra-macros v0.3.0
[INFO] [stderr]   Downloaded all_asserts v2.3.3
[INFO] [stderr]   Downloaded noisy_float v0.2.1
[INFO] [stderr]   Downloaded pq-sys v0.7.5
[INFO] [stderr]   Downloaded ndarray-stats v0.6.0
[INFO] [stderr]   Downloaded simba v0.10.0
[INFO] [stderr]   Downloaded safe_arch v1.0.0
[INFO] [stderr]   Downloaded cc v1.2.64
[INFO] [stderr]   Downloaded diesel_derives v2.3.9
[INFO] [stderr]   Downloaded glam v0.19.0
[INFO] [stderr]   Downloaded glam v0.17.3
[INFO] [stderr]   Downloaded glam v0.15.2
[INFO] [stderr]   Downloaded glam v0.14.0
[INFO] [stderr]   Downloaded glam v0.18.0
[INFO] [stderr]   Downloaded glam v0.16.0
[INFO] [stderr]   Downloaded glam v0.20.5
[INFO] [stderr]   Downloaded wide v1.5.0
[INFO] [stderr]   Downloaded nalgebra v0.34.2
[INFO] [stderr]   Downloaded glam v0.23.0
[INFO] [stderr]   Downloaded glam v0.22.0
[INFO] [stderr]   Downloaded glam v0.21.3
[INFO] [stderr]   Downloaded glam v0.24.2
[INFO] [stderr]   Downloaded nalgebra v0.35.0
[INFO] [stderr]   Downloaded glam v0.28.0
[INFO] [stderr]   Downloaded diesel v2.3.10
[INFO] [stderr]   Downloaded glam v0.29.3
[INFO] [stderr]   Downloaded glam v0.30.10
[INFO] [stderr]   Downloaded glam v0.32.1
[INFO] [stderr]   Downloaded glam v0.31.1
[INFO] [stderr]   Downloaded glam v0.33.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-1-tc1/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:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70
[INFO] running `Command { std: "docker" "start" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", 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" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", 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" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.186
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling rawpointer v0.2.1
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling bytemuck v1.25.0
[INFO] [stderr]    Compiling either v1.16.0
[INFO] [stderr]    Compiling safe_arch v1.0.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling noisy_float v0.2.1
[INFO] [stderr]    Compiling wide v1.5.0
[INFO] [stderr]    Compiling struct_iterable_internal v0.1.1
[INFO] [stderr]    Compiling ndarray v0.16.1
[INFO] [stderr]    Compiling num-rational v0.4.2
[INFO] [stderr]    Compiling erased-serde v0.3.31
[INFO] [stderr]    Compiling serde_json v1.0.150
[INFO] [stderr]    Compiling strum v0.28.0
[INFO] [stderr]    Compiling getrandom v0.2.17
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling ndarray-stats v0.6.0
[INFO] [stderr]    Compiling struct_iterable_derive v0.1.0
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling nalgebra-macros v0.3.0
[INFO] [stderr]    Compiling enum-as-inner v0.7.0
[INFO] [stderr]    Compiling strum_macros v0.28.0
[INFO] [stderr]    Compiling struct_iterable v0.1.1
[INFO] [stderr]    Compiling nnls v0.4.0
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling simba v0.10.0
[INFO] [stderr]    Compiling nalgebra v0.35.0
[INFO] [stderr]    Compiling sci-cream v0.0.7 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 48.22s
[INFO] running `Command { std: "docker" "inspect" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", 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" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling zerocopy-derive v0.8.52
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling cc v1.2.64
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling safe_arch v0.7.4
[INFO] [stderr]    Compiling regex-syntax v0.8.11
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling wide v0.7.33
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling zerocopy v0.8.52
[INFO] [stderr]    Compiling alloca v0.4.0
[INFO] [stderr]    Compiling criterion-plot v0.8.2
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling simba v0.9.1
[INFO] [stderr]    Compiling regex v1.12.4
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling erased-serde v0.3.31
[INFO] [stderr]    Compiling page_size v0.6.0
[INFO] [stderr]    Compiling console v0.16.3
[INFO] [stderr]    Compiling more-asserts v0.3.1
[INFO] [stderr]    Compiling all_asserts v2.3.3
[INFO] [stderr]    Compiling insta v1.48.0
[INFO] [stderr]    Compiling struct_iterable_derive v0.1.0
[INFO] [stderr]    Compiling struct_iterable v0.1.1
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling rand v0.8.6
[INFO] [stderr]    Compiling nalgebra v0.34.2
[INFO] [stderr]    Compiling criterion v0.8.2
[INFO] [stderr]    Compiling ndarray-stats v0.6.0
[INFO] [stderr]    Compiling nnls v0.4.0
[INFO] [stderr]    Compiling sci-cream v0.0.7 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling polyfit-rs v0.2.2
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 20s
[INFO] running `Command { std: "docker" "inspect" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", 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" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70" "/opt/rustwide/cargo-home/bin/cargo" "+1.99.0-beta.8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.22s
[INFO] [stdout] 
[INFO] [stdout] running 948 tests
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/sci_cream-c8b014bb3bc8ee4d)
[INFO] [stdout] test balancing::tests::affected_keys_over_determined_names_no_key ... ok
[INFO] [stdout] test balancing::tests::affected_keys_ratio_infeasibility_multi_key_numerator_lists_all_keys ... ok
[INFO] [stdout] test balancing::tests::affected_keys_ratio_infeasibility_names_denominator_then_numerator ... ok
[INFO] [stdout] test balancing::tests::affected_keys_single_key_variants ... ok
[INFO] [stdout] test balancing::tests::affected_keys_grouped_dominance_names_greater_then_parts ... ok
[INFO] [stdout] test balancing::tests::affected_keys_dominance_names_greater_then_lesser ... ok
[INFO] [stdout] test balancing::tests::balance_abv_target_round_trip ... ok
[INFO] [stdout] test balancing::tests::balance_all_locked_returns_fixed_fractions ... ok
[INFO] [stdout] test balancing::tests::balance_boozy_abv_vs_pac ... ok
[INFO] [stdout] test balancing::tests::balance_boozy_abv_vs_pac_absolute_weighting ... ok
[INFO] [stdout] test balancing::tests::balance_chocolate_coupled_cocoa ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_nalgebra_dairy_trivial ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_accepts_ratio_key_target ... ok
[INFO] [stdout] test balancing::tests::balance_all_none_locks_matches_unlocked ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_nnls_dairy_trivial ... ok
[INFO] [stdout] test balancing::tests::abv_priority_rides_to_the_alcohol_row ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_proceeds_despite_warnings ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_recovers_feasible_targets ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_rejects_negative_target ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_rejects_duplicate_target ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_threads_priorities ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_rejects_negative_net_pac_target ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_rejects_non_finite_target ... ok
[INFO] [stdout] test balancing::tests::balance_dairy_zero_target_no_stabilizer ... ok
[INFO] [stdout] test balancing::tests::balance_dairy_disparate_targets ... ok
[INFO] [stdout] test balancing::tests::balance_dairy_high_msnf ... ok
[INFO] [stdout] test balancing::tests::balance_key_is_ratio_identifies_ratio_keys ... ok
[INFO] [stdout] test balancing::tests::balance_dairy_zero_target_with_stabilizer ... ok
[INFO] [stdout] test balancing::tests::balance_key_is_ratio_rejects_extensive_keys ... ok
[INFO] [stdout] test balancing::tests::balance_key_ratio_parts_maps_each_ratio_key_to_its_extensive_parts ... ok
[INFO] [stdout] test balancing::tests::balance_holds_locked_composition_fixed ... ok
[INFO] [stdout] test balancing::tests::balance_key_serde_fpd_untagged ... ok
[INFO] [stdout] test balancing::tests::balance_fpd_target_round_trip ... ok
[INFO] [stdout] test balancing::tests::balance_key_extent_and_proxy_classification ... ok
[INFO] [stdout] test balancing::tests::balance_hardness_target_round_trip ... ok
[INFO] [stdout] test balancing::tests::balance_light_premium_fat_vs_energy ... ok
[INFO] [stdout] test balancing::tests::balance_locked_fractions_exceeding_mix_is_error ... ok
[INFO] [stdout] test balancing::tests::balance_key_value_reads_fpd_keys ... ok
[INFO] [stdout] test balancing::tests::balance_locked_ratio_target_met_with_lock_held ... ok
[INFO] [stdout] test balancing::tests::balance_multi_sugar_needs_all_three_sugars ... ok
[INFO] [stdout] test balancing::tests::balance_negative_locked_fraction_is_error ... ok
[INFO] [stdout] test balancing::tests::balance_multi_sugar_pod_and_pac ... ok
[INFO] [stdout] test balancing::tests::balance_over_constrained_ratio_yields_valid_mix ... ok
[INFO] [stdout] test balancing::tests::balance_quality_chocolate_coupled_cocoa ... ok
[INFO] [stdout] test balancing::tests::balance_quality_dairy_disparate_targets ... ok
[INFO] [stdout] test balancing::tests::balance_quality_dairy_high_msnf ... ok
[INFO] [stdout] test balancing::tests::balance_quality_boozy_abv_vs_pac ... ok
[INFO] [stdout] test balancing::tests::balance_quality_light_premium_fat_vs_energy ... ok
[INFO] [stdout] test balancing::tests::balance_quality_priority_abs_pac ... ok
[INFO] [stdout] test balancing::tests::balance_quality_priority_pod_tradeoff ... ok
[INFO] [stdout] test balancing::tests::balance_quality_sorbet_abs_pac_vs_sweetness ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_net_pac_distinct_from_total_pac ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_abs_net_pac_ratio ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_stabilizers_per_water_ratio ... ok
[INFO] [stdout] test balancing::tests::balance_quality_sorbet_sweetness_vs_hardness ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_stabilizers_per_water_with_extensive_target ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_emulsifiers_per_fat_with_extensive_target ... ok
[INFO] [stdout] test balancing::tests::balance_sorbet_sweetness_vs_hardness_absolute_weighting ... ok
[INFO] [stdout] test balancing::tests::balance_underdetermined_system_hits_target ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_emulsifiers_per_fat_ratio ... ok
[INFO] [stdout] test balancing::tests::balance_sorbet_sweetness_vs_hardness ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_input_errors ... ok
[INFO] [stdout] test balancing::tests::balance_serving_temp_target_round_trip ... ok
[INFO] [stdout] test balancing::tests::balance_recovers_abs_pac_ratio ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_proxy_clashes ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_real_recipe_conflicting_targets ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_multiple_warnings ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_nnls_ref_recipes_all_targets ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_translated_fpd_targets ... ok
[INFO] [stdout] test balancing::tests::balancing_report_into_result_errors_on_error_severity ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_real_recipe_typical_self_targets ... ok
[INFO] [stdout] test balancing::tests::balancing_report_into_result_ok_on_warnings_only ... ok
[INFO] [stdout] test balancing::tests::balancing_report_partitions_errors_and_warnings ... ok
[INFO] [stdout] test balancing::tests::composition_balance_targets_reads_key_values ... ok
[INFO] [stdout] test balancing::tests::duplicate_intensive_target_is_a_duplicate_not_a_clash ... ok
[INFO] [stdout] test balancing::tests::empty_priorities_match_explicit_normal ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_rounded_self_targets ... ok
[INFO] [stdout] test balancing::tests::estimate_ratio_denominator_uses_denominator_target_exactly ... ok
[INFO] [stdout] test balancing::tests::get_balanceable_keys_includes_ratio_and_fpd_keys ... ok
[INFO] [stdout] test balancing::tests::get_native_balancing_keys_excludes_proxied_keys ... ok
[INFO] [stdout] test balancing::tests::estimate_ratio_denominator_falls_back_to_typical_mix_constants ... ok
[INFO] [stdout] test balancing::tests::estimate_ratio_denominator_infers_water_from_total_solids ... ok
[INFO] [stdout] test balancing::tests::estimate_ratio_denominator_returns_none_for_extensive_key ... ok
[INFO] [stdout] test balancing::tests::is_unaffectable_detects_zero_row ... ok
[INFO] [stdout] test balancing::tests::is_unaffectable_for_ratio_key_detects_unaffectable_parts ... ok
[INFO] [stdout] test balancing::tests::nalgebra_allows_negative_amounts_while_nnls_does_not ... ok
[INFO] [stdout] test balancing::tests::priority_error_decreases_monotonically_with_level ... ok
[INFO] [stdout] test balancing::tests::balance_compositions_nalgebra_ref_recipes_all_targets ... ok
[INFO] [stdout] test balancing::tests::priority_low_increases_error_on_low_priority_key ... ok
[INFO] [stdout] test balancing::tests::out_of_domain_target_values ... ok
[INFO] [stdout] test balancing::tests::priority_tightens_ratio_key ... ok
[INFO] [stdout] test balancing::tests::priority_weight_values_match_documented_constants ... ok
[INFO] [stdout] test balancing::tests::priority_weights_increase_with_level ... ok
[INFO] [stdout] test balancing::tests::priority_trades_off_competing_key ... ok
[INFO] [stdout] test balancing::tests::priority_reduces_error_on_prioritized_key ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_real_setup_with_ref_recipes_chocolate_no_ing ... ok
[INFO] [stdout] test balancing::tests::proxy_target_clash_matrix ... ok
[INFO] [stdout] test balancing::tests::ratio_band_is_none_when_denominator_never_positive ... ok
[INFO] [stdout] test balancing::tests::priority_mixed_levels_tighten_each_key ... ok
[INFO] [stdout] test balancing::tests::ratio_band_is_unbounded_above_with_zero_denominator_source ... ok
[INFO] [stdout] test balancing::tests::ratio_band_pins_a_single_source_ratio ... ok
[INFO] [stdout] test balancing::tests::ratio_reweighting_recovers_despite_off_seed ... ok
[INFO] [stdout] test balancing::tests::ratio_key_zero_denominator_ingredient_stays_finite ... ok
[INFO] [stdout] test balancing::tests::ratio_band_with_empty_denominator_is_the_value_range ... ok
[INFO] [stdout] test balancing::tests::ratio_key_target_nalgebra_does_not_panic ... ok
[INFO] [stdout] test balancing::tests::temperature_targets_admit_negative_values ... ok
[INFO] [stdout] test balancing::tests::ratio_tolerance_suppresses_pinned_ratio_off_by_rounding ... ok
[INFO] [stdout] test balancing::tests::relative_weighting_beats_absolute_on_disparate_targets ... ok
[INFO] [stdout] test balancing::tests::target_row_coeff_and_rhs_encode_ratio_as_homogeneous_row ... ok
[INFO] [stdout] test balancing::tests::validate_clean_targets_yield_empty_report ... ok
[INFO] [stdout] test balancing::tests::validate_defers_palette_warnings_under_evaporation ... ok
[INFO] [stdout] test balancing::tests::validate_defers_palette_warnings_when_locked ... ok
[INFO] [stdout] test balancing::tests::validate_does_not_flag_self_dominance_for_duplicate_target ... ignored, TODO: This currently documents an implementation gap, enable once fixed
[INFO] [stdout] test balancing::tests::validate_does_not_flag_ratio_key_target ... ok
[INFO] [stdout] test balancing::tests::validate_does_not_flag_unaffectable_for_zero_target ... ignored, TODO: This currently documents an implementation gap, enable once fixed
[INFO] [stdout] test balancing::tests::validate_does_not_flag_zero_target_as_negative ... ok
[INFO] [stdout] test balancing::tests::validate_flags_duplicate_target_as_error ... ok
[INFO] [stdout] test balancing::tests::validate_flags_multi_ratio_infeasibility_from_multiple_sources ... ok
[INFO] [stdout] test balancing::tests::structural_tolerance_suppresses_rollup_over_sum_off_by_rounding ... ok
[INFO] [stdout] test balancing::tests::validate_flags_multi_ratio_infeasibility_when_combined_exceeds_band_max ... ok
[INFO] [stdout] test balancing::tests::validate_does_not_double_flag_negative_target ... ok
[INFO] [stdout] test balancing::tests::validate_flags_negative_target_as_error ... ok
[INFO] [stdout] test balancing::tests::validate_flags_negative_ratio_target_as_error ... ok
[INFO] [stdout] test balancing::tests::validate_flags_non_finite_target_as_error ... ok
[INFO] [stdout] test balancing::tests::validate_flags_ratio_infeasibility_for_pinned_cocoa_ratio ... ok
[INFO] [stdout] test balancing::tests::validate_flags_over_determination_as_information ... ok
[INFO] [stdout] test balancing::tests::validate_flags_ratio_infeasibility_from_multiple_sources ... ok
[INFO] [stdout] test balancing::tests::validate_flags_palette_dominance_for_non_structural_pair ... ok
[INFO] [stdout] test balancing::tests::validate_flags_structural_dominance_for_sucrose_over_total_sugars ... ok
[INFO] [stdout] test balancing::tests::validate_flags_rollup_sum_mismatch_for_incomplete_milk_solids ... ok
[INFO] [stdout] test balancing::tests::validate_flags_ratio_key_with_unaffectable_denominator_as_warning ... ok
[INFO] [stdout] test balancing::tests::validate_flags_ratio_key_with_unaffectable_numerator_as_warning ... ok
[INFO] [stdout] test balancing::tests::validate_flags_structural_violation_for_sugar_group_over_total_sugars ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_real_setup_with_ref_recipes_chocolate_powder_only ... ok
[INFO] [stdout] test balancing::tests::validate_flags_transitive_part_over_distant_whole ... ok
[INFO] [stdout] test balancing::tests::validate_flags_unreachable_ratio_key_target ... ok
[INFO] [stdout] test balancing::tests::validate_flags_unreachable_target_as_warning ... ok
[INFO] [stdout] test balancing::tests::validate_flags_three_key_overshoot_that_no_pair_catches ... ok
[INFO] [stdout] test balancing::tests::validate_flags_unaffectable_target_as_warning ... ok
[INFO] [stdout] test balancing::tests::validate_no_multi_ratio_issue_when_combined_within_band ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_by_weight ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_empty ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_field_count ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_from_abv ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_scale ... ok
[INFO] [stdout] test balancing::tests::validate_flags_structural_violation_from_combined_non_exhaustive_children ... ok
[INFO] [stdout] test composition::alcohol::tests::validate_err_for_above_100 ... ok
[INFO] [stdout] test composition::alcohol::tests::validate_err_for_negative ... ok
[INFO] [stdout] test balancing::tests::validate_locked_fractions_exceeding_mix_reports_error ... ok
[INFO] [stdout] test composition::alcohol::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::alcohol::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweetener_field_count ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweetener_no_fields_missed ... ok
[INFO] [stdout] test composition::alcohol::tests::validate_ok ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_abs_diff_eq ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_empty ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_add ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_energy ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_scale ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_energy_error ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_field_update_methods ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_to_pod ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_to_pod_error ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_total ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_err_when_multiple_fields_sum_exceeds_100 ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_to_pac ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::artificial_sweeteners_to_pac_error ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::carbohydrates::tests::artificial_sweetener_no_fields_missed ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_ok ... ok
[INFO] [stdout] test composition::artificial_sweeteners::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_empty ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_energy ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_energy_error ... ok
[INFO] [stdout] test composition::carbohydrates::tests::artificial_sweeteners_abs_diff_eq ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_field_count ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_add ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_field_update_methods ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_others_from_total ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_scale ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_to_pac ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_others_from_total_override ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_to_pac_error ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_to_pod ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_to_pod_error ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_total ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_err_when_multiple_fields_sum_exceeds_100 ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::carbohydrates::tests::carbohydrates_others_from_total_error ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_abs_diff_eq ... ok
[INFO] [stdout] test composition::alcohol::tests::alcohol_add ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::composition::tests::composition_abs_diff_eq ... ok
[INFO] [stdout] test composition::composition::tests::composition_absolute_pac ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::composition::tests::composition_empty ... ok
[INFO] [stdout] test composition::composition::tests::composition_emulsifiers_per_fat ... ok
[INFO] [stdout] test composition::composition::tests::composition_2_percent_milk_get ... ok
[INFO] [stdout] test composition::composition::tests::composition_add ... ok
[INFO] [stdout] test composition::composition::tests::composition_field_update_methods ... ok
[INFO] [stdout] test composition::composition::tests::composition_from_combination_empty ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::carbohydrates::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::composition::tests::composition_from_combination_error ... ok
[INFO] [stdout] test composition::composition::tests::composition_from_combination_two_equal_weights ... ok
[INFO] [stdout] test composition::composition::tests::composition_from_combination_zero_total ... ok
[INFO] [stdout] test composition::composition::tests::composition_from_combination_single ... ok
[INFO] [stdout] test composition::composition::tests::composition_scale ... ok
[INFO] [stdout] test composition::composition::tests::composition_stabilizers_per_water ... ok
[INFO] [stdout] test composition::composition::tests::composition_water ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_keeps_water_ratios_consistent ... ok
[INFO] [stdout] test composition::composition::tests::composition_nan_values ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_rejects_negative_non_finite_and_over_100 ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_rejects_removing_more_than_available_water ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_to_exactly_available_water_is_dry ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_zero_is_identity ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_on_invalid_alcohol ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_on_invalid_micro ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_on_invalid_pac ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_on_invalid_solids ... ok
[INFO] [stdout] test composition::composition::tests::composition_no_fields_missed ... ok
[INFO] [stdout] test composition::composition::tests::evaporate_scales_extensive_fields_and_reduces_water ... ok
[INFO] [stdout] test balancing::tests::typical_balancing_keys_recover_full_reference_composition ... ok
[INFO] [stdout] test composition::composition::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_on_invalid_texture ... ok
[INFO] [stdout] test composition::composition::tests::validate_err_when_solids_plus_alcohol_exceeds_100 ... ok
[INFO] [stdout] test composition::composition::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_add ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_abs_diff_eq ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_field_count ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_empty ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_no_fields_missed ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_scale ... ok
[INFO] [stdout] test composition::emulsifiers::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::emulsifiers::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::composition::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::emulsifiers::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::emulsifiers::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::emulsifiers::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::fast::tests::comp_key_discriminants_are_contiguous ... ok
[INFO] [stdout] test composition::fast::tests::fast_get_matches_composition_for_every_comp_key ... ok
[INFO] [stdout] test composition::fast::tests::fast_get_ratio_matches_composition_for_every_ratio_key ... ok
[INFO] [stdout] test composition::composition::tests::composition_field_count ... ok
[INFO] [stdout] test composition::fats::tests::fats_abs_diff_eq ... ok
[INFO] [stdout] test composition::fats::tests::fats_add ... ok
[INFO] [stdout] test composition::composition::tests::composition_get_all_keys ... ok
[INFO] [stdout] test composition::emulsifiers::tests::emulsifiers_field_update_methods ... ok
[INFO] [stdout] test composition::fats::tests::fats_empty ... ok
[INFO] [stdout] test composition::fats::tests::fats_energy ... ok
[INFO] [stdout] test composition::fats::tests::fats_scale ... ok
[INFO] [stdout] test composition::fats::tests::fats_field_count ... ok
[INFO] [stdout] test composition::fats::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::fats::tests::validate_err_when_saturated_exceeds_total ... ok
[INFO] [stdout] test composition::composition::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::fats::tests::fats_field_update_methods ... ok
[INFO] [stdout] test composition::fats::tests::fats_no_fields_missed ... ok
[INFO] [stdout] test composition::fats::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::fats::tests::validate_err_when_trans_exceeds_total ... ok
[INFO] [stdout] test composition::fats::tests::validate_ok_when_subsets_equal_total ... ok
[INFO] [stdout] test composition::fats::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::fats::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::fats::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::fats::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_add ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_abs_diff_eq ... ok
[INFO] [stdout] test composition::fats::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_empty ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_field_count ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_field_update_methods ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_no_fields_missed ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_scale ... ok
[INFO] [stdout] test composition::fibers::tests::validate_err_when_multiple_fields_sum_exceeds_100 ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_total ... ok
[INFO] [stdout] test composition::fibers::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_energy ... ok
[INFO] [stdout] test composition::fibers::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::fibers::tests::fibers_to_pod ... ok
[INFO] [stdout] test composition::fibers::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::fibers::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::fibers::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::fibers::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::hierarchy::tests::children_are_unique_and_non_self ... ok
[INFO] [stdout] test composition::fibers::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::hierarchy::tests::is_part_of_is_transitive_and_strict ... ok
[INFO] [stdout] test composition::hierarchy::tests::milk_subcomponents_nest_under_milk_solids ... ok
[INFO] [stdout] test composition::hierarchy::tests::residual_free_rollups_are_rollups ... ok
[INFO] [stdout] test composition::hierarchy::tests::display_forest_contains_every_prop_key ... ok
[INFO] [stdout] test composition::hierarchy::tests::each_key_is_a_branch_at_most_once ... ok
[INFO] [stdout] test composition::hierarchy::tests::ordered_is_a_faithful_preorder ... ok
[INFO] [stdout] test composition::hierarchy::tests::shared_key_lists_all_its_parents ... ok
[INFO] [stdout] test balancing::tests::raw_solver_debug_asserts_on_unvalidated_target - should panic ... ok
[INFO] [stdout] test composition::micro::tests::micro_field_update_methods ... ok
[INFO] [stdout] test composition::micro::tests::micro_add ... ok
[INFO] [stdout] test composition::micro::tests::micro_no_fields_missed ... ok
[INFO] [stdout] test composition::micro::tests::micro_abs_diff_eq ... ok
[INFO] [stdout] test composition::micro::tests::micro_field_count ... ok
[INFO] [stdout] test composition::micro::tests::micro_scale ... ok
[INFO] [stdout] test composition::micro::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::micro::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::micro::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::micro::tests::micro_empty ... ok
[INFO] [stdout] test composition::pac::tests::pac_2_percent_milk ... ok
[INFO] [stdout] test composition::pac::tests::pac_abs_diff_eq ... ok
[INFO] [stdout] test composition::pac::tests::pac_add ... ok
[INFO] [stdout] test composition::micro::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::micro::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::pac::tests::pac_field_update_methods ... ok
[INFO] [stdout] test composition::pac::tests::pac_total ... ok
[INFO] [stdout] test composition::pac::tests::pac_total_excludes_hardness_factor ... ok
[INFO] [stdout] test composition::pac::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::pac::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::pac::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::pac::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_abs_diff_eq ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_add ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_empty ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_energy ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_energy_error ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_field_count ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_field_update_methods ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_no_fields_missed ... ok
[INFO] [stdout] test composition::pac::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_scale ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_to_pac ... ok
[INFO] [stdout] test composition::pac::tests::pac_no_fields_missed ... ok
[INFO] [stdout] test composition::pac::tests::pac_empty ... ok
[INFO] [stdout] test composition::pac::tests::pac_field_count ... ok
[INFO] [stdout] test composition::pac::tests::pac_scale ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_to_pac_error ... ok
[INFO] [stdout] test composition::polyols::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_to_pod ... ok
[INFO] [stdout] test composition::polyols::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::polyols::tests::validate_err_when_multiple_fields_sum_exceeds_100 ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_to_pod_error ... ok
[INFO] [stdout] test composition::polyols::tests::polyols_total ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_abs_diff_eq ... ok
[INFO] [stdout] test composition::polyols::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_field_count ... ok
[INFO] [stdout] test composition::polyols::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::polyols::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_empty_and_default ... ok
[INFO] [stdout] test composition::polyols::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::polyols::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_field_update_and_total ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_scale_and_add ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_abs_diff_eq ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_validate ... ok
[INFO] [stdout] test composition::proteins::tests::simple_proteins_empty_and_from_total ... ok
[INFO] [stdout] test composition::proteins::tests::simple_proteins_field_count ... ok
[INFO] [stdout] test composition::proteins::tests::simple_proteins_scale_add_abs_diff_eq ... ok
[INFO] [stdout] test composition::proteins::tests::simple_proteins_validate ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_scale_and_add ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_empty_and_default ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_field_count ... ok
[INFO] [stdout] test composition::solids::tests::solids_empty ... ok
[INFO] [stdout] test composition::solids::tests::solids_add ... ok
[INFO] [stdout] test composition::solids::tests::solids_abs_diff_eq ... ok
[INFO] [stdout] test composition::solids::tests::solids_all ... ok
[INFO] [stdout] test composition::solids::tests::solids_scale ... ok
[INFO] [stdout] test composition::proteins::tests::egg_proteins_validate ... ok
[INFO] [stdout] test composition::proteins::tests::milk_proteins_field_update_and_total ... ok
[INFO] [stdout] test composition::solids::tests::solids_total ... ok
[INFO] [stdout] test composition::solids::tests::solids_total_equals_all_total ... ok
[INFO] [stdout] test composition::solids::tests::validate_err_on_invalid_nested_breakdown ... ok
[INFO] [stdout] test composition::solids::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::solids::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::solids::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::solids::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::field_modifiers_cover_every_field ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_abs_diff_eq ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_add ... ok
[INFO] [stdout] test composition::solids::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::solids::tests::solids_field_count ... ok
[INFO] [stdout] test composition::solids::tests::solids_field_update_methods ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_empty ... ok
[INFO] [stdout] test composition::solids::tests::solids_no_fields_missed ... ok
[INFO] [stdout] test composition::solids::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_energy ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_scale ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_snf ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_snfs ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_to_simple ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_energy_error ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_field_update_methods ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_others_from_total ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_others_from_total_override ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_others_from_total_error ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::solids_breakdown_total ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_abs_diff_eq ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_add ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_empty ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_field_count ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_field_update_methods ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_no_fields_missed ... ok
[INFO] [stdout] test composition::stabilizers::tests::stabilizers_scale ... ok
[INFO] [stdout] test composition::stabilizers::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::stabilizers::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::stabilizers::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::stabilizers::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::stabilizers::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_abs_diff_eq ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_add ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_energy ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_field_count ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_field_update_methods ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_no_fields_missed ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_scale ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_to_pac ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_empty ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_to_pac_error ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_total ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::solids_breakdown::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::sugars::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_to_pod ... ok
[INFO] [stdout] test composition::sugars::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::sugars::tests::sugars_to_pod_error ... ok
[INFO] [stdout] test composition::sugars::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::sugars::tests::validate_ok_when_total_is_exactly_100 ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_add ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_empty ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_field_update_methods ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_scale ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_to_pac ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_to_pac_error ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_to_pod ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_total ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::sugars::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::sugars::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::sugars::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_abs_diff_eq ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::sweeteners::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::texture::tests::texture_abs_diff_eq ... ok
[INFO] [stdout] test composition::texture::tests::texture_add ... ok
[INFO] [stdout] test composition::texture::tests::texture_field_count ... ok
[INFO] [stdout] test composition::texture::tests::texture_empty ... ok
[INFO] [stdout] test composition::texture::tests::texture_field_update_methods ... ok
[INFO] [stdout] test composition::texture::tests::texture_scale ... ok
[INFO] [stdout] test composition::texture::tests::texture_no_fields_missed ... ok
[INFO] [stdout] test composition::texture::tests::validate_err_for_each_negative_field ... ok
[INFO] [stdout] test composition::texture::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test composition::texture::tests::validate_ok_for_empty ... ok
[INFO] [stdout] test constants::composition::tests::cocoa_constants ... ok
[INFO] [stdout] test composition::texture::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test composition::texture::tests::validate_ok_for_valid_values ... ok
[INFO] [stdout] test constants::density::tests::abv_to_abw_inverts_abw_to_abv ... ok
[INFO] [stdout] test constants::density::tests::abv_to_abw_matches_external_values ... ok
[INFO] [stdout] test constants::density::tests::abw_to_abv ... ok
[INFO] [stdout] test composition::sweeteners::tests::sweeteners_to_pod_error ... ok
[INFO] [stdout] test constants::density::tests::abw_to_abv_matches_external_values ... ok
[INFO] [stdout] test constants::composition::tests::egg_protein_in_solids_consistency ... ok
[INFO] [stdout] test constants::composition::tests::egg_split_constants ... ok
[INFO] [stdout] test constants::density::tests::abv_to_abw ... ok
[INFO] [stdout] test constants::density::tests::dairy_density_volume_additive_matches_table ... ok
[INFO] [stdout] test constants::density::tests::dairy_milliliters_to_grams ... ok
[INFO] [stdout] test constants::density::tests::dairy_serving_fixed_point_converges_well_within_cap ... ok
[INFO] [stdout] test constants::density::tests::ethanol_solution_density ... ok
[INFO] [stdout] test constants::density::tests::fast_and_slow_interpolation_agree_on_density_table ... ok
[INFO] [stdout] test constants::density::tests::fresh_dairy_densities_by_fat_supports_interpolation ... ok
[INFO] [stdout] test constants::density::tests::fresh_dairy_density_polynomial_fit_coeffs ... ok
[INFO] [stdout] test constants::density::tests::fresh_dairy_density_polynomial_fit_max_error ... ok
[INFO] [stdout] test constants::density::tests::abw_to_solution_density_table_supports_interpolation_via_implied_abv ... ok
[INFO] [stdout] test constants::density::tests::abw_to_solution_density_table_supports_fast_interpolation ... ok
[INFO] [stdout] test constants::density::tests::dairy_density_linear_max_error ... ok
[INFO] [stdout] test constants::density::tests::mixture_density ... ok
[INFO] [stdout] test constants::fpd::tests::corvitto_pac_to_serving_temp_table_supports_interpolation ... ok
[INFO] [stdout] test constants::density::tests::dairy_density_msnf_density_fit ... ok
[INFO] [stdout] test constants::fpd::tests::pac_to_fpd_table_supports_inverse_interpolation ... ok
[INFO] [stdout] test constants::fpd::tests::interpolate_pairs_recovers_pac_to_fpd_table ... ok
[INFO] [stdout] test constants::fpd::tests::pac_to_fpd_table_supports_fast_interpolation ... ok
[INFO] [stdout] test constants::density::tests::dairy_density_linear_fit_coeffs ... ok
[INFO] [stdout] test constants::pac::tests::pac_from_molar_mass ... ok
[INFO] [stdout] test data::ingredients::tests::get_all_independent_ingredient_specs ... ok
[INFO] [stdout] test constants::fpd::tests::interpolate_pairs_recovers_corvitto_pac_to_serving_temp_table ... ok
[INFO] [stdout] test data::ingredients::tests::get_independent_ingredient_spec_by_name_alias ... ok
[INFO] [stdout] test data::ingredients::tests::get_all_spec_entries ... ok
[INFO] [stdout] test data::ingredients::tests::get_independent_ingredient_spec_by_name_composite ... ok
[INFO] [stdout] test data::ingredients::tests::get_all_spec_entry_names_matches_spec_entries ... ok
[INFO] [stdout] test data::ingredients::tests::get_independent_ingredient_spec_by_name ... ok
[INFO] [stdout] test data::ingredients::tests::embedded_spec_entries ... ok
[INFO] [stdout] test data::ingredients::tests::get_independent_ingredient_spec_by_name_not_found ... ok
[INFO] [stdout] test data::ingredients::tests::get_spec_entry_by_name ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_alias_name_method ... ok
[INFO] [stdout] test data::ingredients::tests::get_spec_entry_by_name_not_found ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_includes_composite_entries ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_includes_alias_entries ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_error_falls_back_to_index_without_name ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_error_names_failing_entry ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_mixed_alias_and_composite ... ok
[INFO] [stdout] test data::ingredients::tests::spec_entry_names_are_unique ... ok
[INFO] [stdout] test data::recipes::tests::all_recipe_ingredients_are_known ... ok
[INFO] [stdout] test data::recipes::tests::embedded_chocolate_evaporated_composition_matches_hand_balanced_fixture ... ok
[INFO] [stdout] test data::recipes::tests::embedded_recipe_entries ... ok
[INFO] [stdout] test data::recipes::tests::gen_id_with_author ... ok
[INFO] [stdout] test data::recipes::tests::gen_id_without_author ... ok
[INFO] [stdout] test data::recipes::tests::get_all_recipe_entry_ids_contains_expected ... ok
[INFO] [stdout] test data::recipes::tests::get_recipe_entry_by_id_no_author_when_author_expected_returns_none ... ok
[INFO] [stdout] test data::recipes::tests::get_recipe_entry_by_id_unknown_name_returns_none ... ok
[INFO] [stdout] test data::recipes::tests::get_recipe_entry_by_id_with_author_found ... ok
[INFO] [stdout] test data::recipes::tests::get_recipe_entry_by_id_wrong_author_returns_none ... ok
[INFO] [stdout] test data::recipes::tests::parse_invalid_json_returns_error ... ok
[INFO] [stdout] test data::recipes::tests::parse_valid_json_with_author ... ok
[INFO] [stdout] test data::recipes::tests::parse_valid_json_without_author ... ok
[INFO] [stdout] test data::recipes::tests::underbelly_standard_base_matches_asset ... ok
[INFO] [stdout] test database::tests::ingredient_database_empty ... ok
[INFO] [stdout] test data::recipes::tests::embedded_chocolate_entry_carries_150g_evaporation ... ok
[INFO] [stdout] test database::tests::ingredient_database_get_ingredient_by_name_not_found ... ok
[INFO] [stdout] test constants::fpd::tests::fast_interpolate_pairs_recovers_pac_to_fpd_table ... ok
[INFO] [stdout] test data::recipes::tests::embedded_chocolate_deevaporates_to_hand_balanced_yield ... ok
[INFO] [stdout] test data::ingredients::tests::parse_spec_entries_from_json_string ... ok
[INFO] [stdout] test database::tests::ingredient_database_seed ... ok
[INFO] [stdout] test database::tests::ingredient_database_has_ingredient ... ok
[INFO] [stdout] test database::tests::ingredient_database_get_ingredients_by_category ... ok
[INFO] [stdout] test database::tests::ingredient_database_seed_overwrite_replaces_existing ... ok
[INFO] [stdout] test database::tests::ingredient_database_seed_reject_errors_on_duplicate ... ok
[INFO] [stdout] test composition::hierarchy::tests::compositions_satisfy_structural_invariants ... ok
[INFO] [stdout] test database::tests::ingredient_database_seed_from_embedded_data_seeds_baseline ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_dominance_violation ... ok
[INFO] [stdout] test database::tests::ingredient_database_new_seeded ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_out_of_domain_target ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_grouped_dominance_violation ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_ratio_infeasibility ... ok
[INFO] [stdout] test database::tests::ingredient_database_new_seeded_from_specs ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_over_determined ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_ratio_infeasibility_multi_key_numerator ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_structural_dominance_violation ... ok
[INFO] [stdout] test display::tests::balancing_report_display_labels_information ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_rollup_sum_mismatch ... ok
[INFO] [stdout] test display::tests::comp_keys_all_str_non_empty ... ok
[INFO] [stdout] test display::tests::balancing_report_display_lists_issues ... ok
[INFO] [stdout] test display::tests::balancing_issue_display_message_ratio_infeasibility_infinite_upper ... ok
[INFO] [stdout] test display::tests::comp_keys_as_long_str ... ok
[INFO] [stdout] test display::tests::comp_keys_as_short_str ... ok
[INFO] [stdout] test display::tests::comp_keys_as_med_str ... ok
[INFO] [stdout] test display::tests::fpd_keys_as_long_str ... ok
[INFO] [stdout] test display::tests::composition_value_as_quantity ... ok
[INFO] [stdout] test display::tests::composition_value_as_percentage ... ok
[INFO] [stdout] test display::tests::fpd_keys_as_short_str ... ok
[INFO] [stdout] test display::tests::prop_keys_as_long_str ... ok
[INFO] [stdout] test display::tests::fpd_keys_as_med_str ... ok
[INFO] [stdout] test display::tests::prop_keys_as_short_str ... ok
[INFO] [stdout] test display::tests::ratio_keys_as_med_str ... ok
[INFO] [stdout] test display::tests::ratio_keys_as_long_str ... ok
[INFO] [stdout] test display::tests::prop_keys_as_med_str ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_goff_hartel_interpolation ... ok
[INFO] [stdout] test display::tests::ratio_keys_as_short_str ... ok
[INFO] [stdout] test display::tests::round2_drops_trailing_zeros_and_handles_infinity ... ok
[INFO] [stdout] test database::tests::ingredient_database_seed_from_specs ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_goff_hartel_polynomial ... ok
[INFO] [stdout] test database::tests::ingredient_database_seeded_from_embedded_data ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_modified_goff_hartel_corvitto_polynomial ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_modified_goff_hartel_corvitto_polynomial_with_alcohol ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_modified_goff_hartel_corvitto_polynomial_with_hf ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_goff_hartel_polynomial_with_alcohol ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_domain ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_goff_hartel_unsupported ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_inverts_forward_points ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_modified_goff_hartel_corvitto_polynomial_corvitto_ref ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_modified_goff_hartel_corvitto_polynomial_with_neg_pac_due_to_hf ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_inverts_fpd_reading ... ok
[INFO] [stdout] test fpd::tests::corvitto_pac_to_serving_temp_vs_goff_hartel_fpd_at_70_frozen_water ... ok
[INFO] [stdout] test fpd::tests::corvitto_pac_to_serving_temp_vs_modified_goff_hartel_corvitto_fpd_at_70_frozen_water ... ok
[INFO] [stdout] test fpd::tests::compute_fpd_curve_point_matches_curves ... ok
[INFO] [stdout] test fpd::tests::fpd_compute_from_empty_composition ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_inverts_hardness_reading ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_interpolation ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_modified_goff_hartel_corvitto_polynomial ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_polynomial ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_interpolation_combine_pac_vs_fpd ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_polynomial_combine_pac_vs_fpd ... ok
[INFO] [stdout] test fpd::tests::get_fpd_from_pac_polynomial_vs_interpolation ... ok
[INFO] [stdout] test fpd::tests::get_pac_from_fpd_interpolation ... ok
[INFO] [stdout] test fpd::tests::get_pac_from_fpd_interpolation_positive_fpd ... ok
[INFO] [stdout] test fpd::tests::get_serving_temp_from_pac_corvitto ... ok
[INFO] [stdout] test fpd::tests::get_x_axis_at_fpd ... ok
[INFO] [stdout] test fpd::tests::pac_msnf_ws_salts ... ok
[INFO] [stdout] test fpd::tests::validate_corvitto_reference_compositions ... ok
[INFO] [stdout] test fpd::tests::validate_reference_compositions ... ok
[INFO] [stdout] test ingredient::tests::category_equality ... ok
[INFO] [stdout] test ingredient::tests::category_serde_roundtrip ... ok
[INFO] [stdout] test fpd::tests::get_pac_from_fpd_polynomial ... ok
[INFO] [stdout] test ingredient::tests::category_display ... ok
[INFO] [stdout] test ingredient::tests::ingredient_abs_diff_eq_outside_epsilon ... ok
[INFO] [stdout] test ingredient::tests::ingredient_clone_is_equal ... ok
[INFO] [stdout] test ingredient::tests::ingredient_inequality_different_category ... ok
[INFO] [stdout] test ingredient::tests::ingredient_abs_diff_eq_within_epsilon ... ok
[INFO] [stdout] test ingredient::tests::ingredient_equality_same ... ok
[INFO] [stdout] test ingredient::tests::ingredient_inequality_different_composition ... ok
[INFO] [stdout] test ingredient::tests::ingredient_inequality_different_name ... ok
[INFO] [stdout] test ingredient::tests::ingredient_new_stores_fields ... ok
[INFO] [stdout] test properties::tests::mix_properties_default_matches_empty ... ok
[INFO] [stdout] test properties::tests::mix_properties_empty_comp_keys_return_zero ... ok
[INFO] [stdout] test properties::tests::mix_properties_empty_fpd_is_zero ... ok
[INFO] [stdout] test properties::tests::mix_properties_empty_hardness_at_14c_is_nan ... ok
[INFO] [stdout] test properties::tests::mix_properties_empty_total_amount_is_zero ... ok
[INFO] [stdout] test database::tests::ingredient_database_thread_safety ... ok
[INFO] [stdout] test ingredient::tests::ingredient_serde_roundtrip ... ok
[INFO] [stdout] test properties::tests::prop_key_equality_same_variant ... ok
[INFO] [stdout] test properties::tests::mix_properties_empty_water_is_100 ... ok
[INFO] [stdout] test properties::tests::mix_properties_new_matches_empty ... ok
[INFO] [stdout] test properties::tests::prop_key_from_comp_key ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_inverts_serving_temp_reading ... ok
[INFO] [stdout] test properties::tests::prop_key_inequality_different_inner_key ... ok
[INFO] [stdout] test properties::tests::prop_key_inequality_different_outer_variant ... ok
[INFO] [stdout] test properties::tests::prop_key_from_fpd_key ... ok
[INFO] [stdout] test properties::tests::prop_key_from_ratio_key ... ok
[INFO] [stdout] test recipe::tests::floating_point_edge_case_zero_water_near_epsilon ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_lock_amount_under_evaporation_holds_grams ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_locked_fraction_scales_with_total ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_holds_locked_line_amount ... ok
[INFO] [stdout] test data::ingredients::tests::sweeteners_by_ratio ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_preserves_none_name ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_with_evaporation_hits_post_evaporation_targets ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_locked_line_exceeding_total_errors ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_zero_total_with_evaporation_is_error ... ok
[INFO] [stdout] test recipe::tests::recipe_calculate_composition ... ok
[INFO] [stdout] test recipe::tests::recipe_calculate_mix_properties_with_hf ... ok
[INFO] [stdout] test recipe::tests::recipe_deevaporate_reproduces_post_evaporation_composition ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_forwards_inputs_to_balance_compositions ... ok
[INFO] [stdout] test recipe::tests::recipe_from_light_recipe ... ok
[INFO] [stdout] test recipe::tests::recipe_deevaporate_without_evaporation_is_error ... ok
[INFO] [stdout] test recipe::tests::recipe_evaporated_composition_matches_manual_evaporate ... ok
[INFO] [stdout] test recipe::tests::recipe_mix_properties_total_amount_is_post_evaporation ... ok
[INFO] [stdout] test specs::alcohol::tests::json_field_null_same_as_missing ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_alcohol_spec_almond_extract ... ok
[INFO] [stdout] test recipe::tests::recipe_into_owned_light_recipe ... ok
[INFO] [stdout] test recipe::tests::recipe_zero_evaporation_matches_no_evaporation ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_locked_zero_amount_pins_line_out ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_alcohol_spec_40_abv_spirit ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_alcohol_spec_baileys_irish_cream ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_err_on_negative_field ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_err_when_alcohol_plus_solids_exceeds_100 ... ok
[INFO] [stdout] test specs::alcohol::tests::to_composition_err_when_sugars_plus_fat_exceeds_solids ... ok
[INFO] [stdout] test specs::alias::tests::resolve_alias_spec_composition ... ok
[INFO] [stdout] test specs::alias::tests::resolve_alias_spec_into_ingredient ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_100_dark_chocolate ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_70_dark_chocolate ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_95_dark_chocolate ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_ghirardelli_100_cocoa_powder ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_lindt_100_dark_chocolate ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_err_on_negative_field ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_err_when_cocoa_butter_exceeds_cacao_solids ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_err_when_components_do_not_sum_to_100 ... ok
[INFO] [stdout] test specs::composite::tests::parse_composite_spec_from_json_by_parts ... ok
[INFO] [stdout] test specs::composite::tests::parse_composite_spec_from_json_empty ... ok
[INFO] [stdout] test specs::composite::tests::parse_ingredient_spec_composite_by_parts_from_json ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_lindt_70_dark_chocolate ... ok
[INFO] [stdout] test specs::composite::tests::parse_ingredient_spec_composite_from_json ... ok
[INFO] [stdout] test specs::composite::tests::parse_ingredient_spec_composite_inline_from_json ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_by_parts ... ok
[INFO] [stdout] test specs::alcohol::tests::zero_abv_alcohol_spec_is_equivalent_to_fruit_spec ... ok
[INFO] [stdout] test specs::alias::tests::deserialize_alias_spec ... ok
[INFO] [stdout] test recipe::tests::recipe_balance_explicit_total_amount ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_by_parts_err_negative_weight ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_err_inline_nested_composite ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_err_inline_spec_invalid ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_by_parts_does_not_require_sum_to_100 ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_err_when_component_not_found ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_by_parts_err_component_not_found ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_mixed_named_and_inline ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composition_composite_spec_underbelly_gp_sb ... ok
[INFO] [stdout] test specs::composite::tests::serialize_composite_spec_to_json_by_parts ... ok
[INFO] [stdout] test specs::composite::tests::serialize_composite_spec_to_json_empty ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_err_negative_percentage ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_err_percentage_not_100 ... ok
[INFO] [stdout] test specs::chocolate::tests::to_composition_chocolate_spec_lindt_95_dark_chocolate_other_solids ... ok
[INFO] [stdout] test specs::composite::tests::serialize_ingredient_spec_composite_inline_to_json ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_label_spec_err_on_negative_field ... ok
[INFO] [stdout] test specs::composite::tests::resolve_composite_spec_inline_only_needs_no_lookup ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_label_spec_err_when_trans_fat_exceeds_total_fat ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_label_spec_err_when_fat_plus_sugars_plus_protein_exceeds_serving_size ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_label_spec_err_on_unsupported_unit ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_label_spec_err_when_saturated_fat_exceeds_total_fat ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_simple_spec_err_on_negative_field ... ok
[INFO] [stdout] test specs::dairy::tests::dairy_simple_spec_err_when_fat_plus_msnf_plus_sucrose_exceeds_100 ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_2_evaporated_milk_carnation ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_3_25_milk_sealtest ... ok
[INFO] [stdout] test specs::composite::tests::serialize_ingredient_spec_composite_to_json ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_gold_standard_casein_optimum_nutrition ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_gold_standard_whey_optimum_nutrition ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_2_evaporated_milk_usda ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_skim_milk_powder_medallion ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_skim_milk_powder_theland ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_whole_milk_powder_medallion ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_whole_milk_usda ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_0_milk ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_2_milk ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_2_milk_lactose_free ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_3_25_milk ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_sweetened_condensed_milk_eagle_brand ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_sweetened_condensed_milk_usda ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_skim_milk_goff_hartel ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_skimmed_powder ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_whole_ultra_filtered_lactose_free ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_40_cream ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_simple_spec_whole_powder ... ok
[INFO] [stdout] test specs::composite::tests::serialize_ingredient_spec_composite_by_parts_to_json ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_whey_isolate ... ok
[INFO] [stdout] test specs::dairy::tests::to_composition_dairy_label_spec_whole_milk_powder_theland ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_egg_spec_whole_egg_splits_protein ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_egg_spec_egg_white_is_all_white ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_egg_spec_egg_yolk ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_err_when_lecithin_exceeds_fat ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_err_on_negative_field ... ok
[INFO] [stdout] test specs::egg::tests::to_composition_err_when_water_plus_fat_plus_protein_exceeds_100 ... ok
[INFO] [stdout] test specs::emulsifier::tests::to_composition_emulsifier_soy_lecithin ... ok
[INFO] [stdout] test specs::entry::tests::from_json_value_surfaces_field_level_error ... ok
[INFO] [stdout] test specs::entry::tests::from_json_value_dispatches_to_variant ... ok
[INFO] [stdout] test specs::entry::tests::deserialize_spec_entry ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_err_on_negative_field ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_err_when_fiber_plus_sugars_exceeds_carbohydrate ... ok
[INFO] [stdout] test specs::entry::tests::spec_entry_name_method ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_err_when_sugars_has_other ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_err_on_negative_energy ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_fruit_spec_navel_orange_auto_energy ... ok
[INFO] [stdout] test specs::full::tests::to_composition_err_when_pac_cannot_be_computed ... ok
[INFO] [stdout] test specs::full::tests::to_composition_err_when_pod_cannot_be_computed ... ok
[INFO] [stdout] test specs::full::tests::to_composition_err_when_total_solids_plus_alcohol_exceeds_100 ... ok
[INFO] [stdout] test specs::full::tests::to_composition_full_spec_water ... ok
[INFO] [stdout] test specs::fruit::tests::to_composition_fruit_spec_strawberry ... ok
[INFO] [stdout] test specs::full::tests::to_composition_err_when_energy_cannot_be_computed ... ok
[INFO] [stdout] test specs::entry::tests::resolve_spec_entry_into_ingredient ... ok
[INFO] [stdout] test specs::ingredient::tests::deserialize_ingredient_spec ... ok
[INFO] [stdout] test specs::ingredient::tests::ingredient_spec_database_matches_assets ... ok
[INFO] [stdout] test specs::micro::tests::to_composition_micro_spec_salt ... ok
[INFO] [stdout] test specs::nut::tests::to_composition_err_when_fiber_plus_sugars_exceeds_carbohydrate ... ok
[INFO] [stdout] test specs::nut::tests::to_composition_err_when_saturated_fat_exceeds_fat ... ok
[INFO] [stdout] test specs::nut::tests::to_composition_nut_spec_almond ... ok
[INFO] [stdout] test specs::emulsifier::tests::to_composition_err_on_negative_strength ... ok
[INFO] [stdout] test specs::stabilizer::tests::to_composition_stabilizer_locust_bean_gum ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_by_dry_weight_when_components_exceed_100 ... ok
[INFO] [stdout] test specs::nut::tests::to_composition_err_on_negative_field ... ok
[INFO] [stdout] test specs::nut::tests::to_composition_err_when_total_exceeds_100 ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_by_total_weight_when_components_do_not_sum_to_100 ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_on_negative_other_fields ... ok
[INFO] [stdout] test specs::stabilizer::tests::to_composition_err_on_negative_strength ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_by_dry_weight_when_solids_exceed_100 ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_when_pac_cannot_be_computed ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_when_pod_cannot_be_computed ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_dextrose ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_fancy_molasses ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_on_unsupported_pac_unit ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_err_when_energy_cannot_be_computed ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_fructose ... ok
[INFO] [stdout] test specs::ingredient::tests::ingredient_spec_to_composition_matches_assets ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_glucose_syrup_42_de ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_hfcs42 ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_hp_inulin_powder ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_erythritol ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_glucose_powder_25_de ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_inulin_powder ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_glucose_powder_42_de ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_honey ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_invert_sugar ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_maple_syrup ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_maltodextrin_10_de ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_lactose ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_splenda_monk_fruit ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_splenda_stevia ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_maltose ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_oligofructose_powder ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_stevia_in_the_raw_packets ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_stevia_in_the_raw_bakers_bag ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_stevia_in_the_raw_bakers_bag_manual_vs_calculated_pod ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_splenda_sucralose ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_splenda_sucralose_manual_vs_calculated_pod_and_pac ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_sucrose ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_sugar_twin_manual_vs_calculated_pod ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_stevia_in_the_raw_packets_manual_vs_calculated_pod ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_sugar_twin ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_sweetleaf_stevia ... ok
[INFO] [stdout] test specs::sweetener::tests::to_composition_sweetener_spec_trehalose ... ok
[INFO] [stdout] test tests::assets::tests::main_recipe ... ok
[INFO] [stdout] test tests::assets::tests::chocolate_evaporation_fixtures_have_expected_totals ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_chocolate_100 ... ok
[INFO] [stdout] test tests::assets::tests::ref_a_recipe ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_chocolate_85 ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_chocolate_65 ... ok
[INFO] [stdout] test tests::assets::tests::chocolate_post_evaporation_rehydrates_to_pre ... ok
[INFO] [stdout] test specs::ingredient::tests::ingredient_spec_resolve_composition_matches_assets ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_chocolate_70 ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_chocolate_95 ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_cocoa_powder_17_fat ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_18_cream ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_2_milk ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_2_evaporated_milk ... ok
[INFO] [stdout] test tests::assets::tests::ref_b_recipe ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_casein ... ok
[INFO] [stdout] test tests::embedded::compare_specs::chocolate::compare_specs_cocoa_powder_13_fat ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_5_cream ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_double_cream ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_half_and_half ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_skim_milk ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_clotted_cream ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_skim_evaporated_milk ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whipping_cream ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whole_evaporated_milk ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whey_protein ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_skim_milk_powder ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whey_isolate ... ok
[INFO] [stdout] test tests::embedded::reconciliation::flavourings::nielsen_massey_extracts_reconcile ... ok
[INFO] [stdout] test tests::embedded::compare_specs::egg::compare_specs_egg_yolk ... ok
[INFO] [stdout] test tests::embedded::reconciliation::flavourings::nielsen_massey_vanilla_powder_reconciles ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whole_milk_powder ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_whole_milk ... ok
[INFO] [stdout] test tests::embedded::reconciliation::util::tests::fda_rounding_buckets ... ok
[INFO] [stdout] test tests::util::tests::assert_comp_eq_percent_passes_within_tolerance ... ok
[INFO] [stdout] test tests::util::tests::assert_compositions_consistent_honors_per_key_override ... ok
[INFO] [stdout] test tests::embedded::compare_specs::dairy::compare_specs_sweetened_condensed_milk ... ok
[INFO] [stdout] test tests::util::tests::assert_comp_eq_percent_panics_outside_tolerance - should panic ... ok
[INFO] [stdout] test tests::util::tests::assert_compositions_consistent_passes_for_three_sources ... ok
[INFO] [stdout] test tests::util::tests::assert_compositions_consistent_checks_non_adjacent_pairs - should panic ... ok
[INFO] [stdout] test tests::util::tests::assert_f64_fields_eq_zero_panics_on_nonzero_field - should panic ... ok
[INFO] [stdout] test tests::util::tests::assert_f64_fields_ne_zero_panics_on_zero_field - should panic ... ok
[INFO] [stdout] test tests::util::tests::assert_f64_fields_ne_zero_passes_when_all_fields_nonzero ... ok
[INFO] [stdout] test tests::util::tests::assert_f64_fields_eq_zero_passes_when_all_fields_zero ... ok
[INFO] [stdout] test tests::util::tests::compare_compositions_annotates_pair_when_values_differ ... ok
[INFO] [stdout] test tests::util::tests::assert_compositions_consistent_panics_above_ceiling - should panic ... ok
[INFO] [stdout] test tests::util::tests::compare_compositions_lists_every_source_pair ... ok
[INFO] [stdout] test tests::util::tests::assert_compositions_consistent_passes_within_ceiling ... ok
[INFO] [stdout] test tests::util::tests::compare_compositions_lists_pair_even_when_values_match ... ok
[INFO] [stdout] test tests::util::tests::key_ceiling_override_applies_only_to_its_key ... ok
[INFO] [stdout] test tests::util::tests::key_ceiling_returns_default_for_unoverridden_key ... ok
[INFO] [stdout] test tests::util::tests::relative_diff_percent_is_independent_of_argument_order ... ok
[INFO] [stdout] test tests::util::tests::relative_diff_percent_is_zero_for_equal_values ... ok
[INFO] [stdout] test tests::util::tests::compare_compositions_lists_header_and_every_key ... ok
[INFO] [stdout] test tests::util::tests::relative_diff_percent_treats_two_zeroes_as_zero ... ok
[INFO] [stdout] test tests::util::tests::root_mean_square_combines_squares ... ok
[INFO] [stdout] test tests::util::tests::root_mean_square_ignores_sign ... ok
[INFO] [stdout] test tests::util::tests::root_mean_square_of_equal_values_is_that_value ... ok
[INFO] [stdout] test tests::util::tests::relative_diff_percent_uses_larger_magnitude_as_denominator ... ok
[INFO] [stdout] test tests::util::tests::relative_diff_percent_is_100_when_one_side_is_zero ... ok
[INFO] [stdout] test tests::util::tests::root_mean_square_of_single_value_is_its_magnitude ... ok
[INFO] [stdout] test tests::util::tests::root_mean_square_of_empty_is_zero ... ok
[INFO] [stdout] test tests::util::tests::solids_fraction_diff_pp_is_independent_of_argument_order ... ok
[INFO] [stdout] test tests::util::tests::solids_fraction_diff_pp_is_zero_for_equal_fractions ... ok
[INFO] [stdout] test tests::util::tests::solids_fraction_diff_pp_tames_near_zero_degeneracy ... ok
[INFO] [stdout] test tests::util::tests::solids_fraction_diff_pp_reports_fraction_gap_times_100 ... ok
[INFO] [stdout] test util::tests::add_option ... ok
[INFO] [stdout] test tests::util::tests::solids_fraction_diff_pp_treats_zero_ts_as_zero_fraction ... ok
[INFO] [stdout] test util::tests::abs_diff_eq_option ... ok
[INFO] [stdout] test util::tests::collect_fields_copied_as_count_matches_field_count ... ok
[INFO] [stdout] test util::tests::collect_fields_copied_as_returns_all_values ... ok
[INFO] [stdout] test util::tests::collect_fields_copied_as_returns_owned_copies ... ok
[INFO] [stdout] test util::tests::fast_interpolate_pairs_u32_table ... ok
[INFO] [stdout] test util::tests::extrapolate_pairs_out_of_bounds ... ok
[INFO] [stdout] test util::tests::interpolate_pairs_f64_table ... ok
[INFO] [stdout] test util::tests::fast_interpolate_pairs_matches_interpolate_pairs ... ok
[INFO] [stdout] test util::tests::interpolate_pairs_reversed_columns ... ok
[INFO] [stdout] test util::tests::interpolate_pairs_u32_table ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_all_fields_differ ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_equal_structs ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_one_field_differs ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_option_both_some_equal ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_option_mixed_none_and_some_ne ... ok
[INFO] [stdout] test util::tests::fast_interpolate_pairs_out_of_bounds ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_option_one_field_differs ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_option_both_none ... ok
[INFO] [stdout] test util::tests::iter_fields_as_count_matches_field_count ... ok
[INFO] [stdout] test util::tests::iter_fields_as_returns_all_values ... ok
[INFO] [stdout] test util::tests::round_to_decimals ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_within_epsilon ... ok
[INFO] [stdout] test util::tests::table_supports_fast_interpolation ... ok
[INFO] [stdout] test util::tests::table_supports_interpolation ... ok
[INFO] [stdout] test validate::tests::are_equal_false_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::are_equal_false_for_clearly_different_values ... ok
[INFO] [stdout] test validate::tests::are_equal_rel_tolerates_proportional_gap ... ok
[INFO] [stdout] test validate::tests::are_equal_true_for_both_zero ... ok
[INFO] [stdout] test validate::tests::are_equal_true_for_equal_values ... ok
[INFO] [stdout] test validate::tests::is_positive_false_for_clearly_negative_value ... ok
[INFO] [stdout] test validate::tests::is_positive_false_for_negative_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::is_positive_true_for_positive_value ... ok
[INFO] [stdout] test validate::tests::is_positive_true_for_tiny_negative_within_epsilon ... ok
[INFO] [stdout] test validate::tests::is_positive_true_for_zero ... ok
[INFO] [stdout] test validate::tests::is_subset_false_when_exceeds_superset_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::is_subset_false_when_greater_than_superset ... ok
[INFO] [stdout] test validate::tests::is_subset_rel_tolerates_proportional_overshoot ... ok
[INFO] [stdout] test validate::tests::is_subset_true_when_equal_to_superset ... ok
[INFO] [stdout] test validate::tests::is_subset_true_when_exceeds_superset_within_epsilon ... ok
[INFO] [stdout] test validate::tests::is_subset_true_when_less_than_superset ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_false_for_above_100 ... ok
[INFO] [stdout] test validate::tests::are_equal_true_within_epsilon ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_false_for_negative ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_true_for_100 ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_true_for_midpoint ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_true_for_slightly_above_100_within_epsilon ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_true_for_tiny_negative_within_epsilon ... ok
[INFO] [stdout] test validate::tests::is_within_100_percent_true_for_zero ... ok
[INFO] [stdout] test validate::tests::is_within_range_false_below_min ... ok
[INFO] [stdout] test validate::tests::is_within_range_false_above_max ... ok
[INFO] [stdout] test validate::tests::is_within_range_false_just_outside_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::is_within_range_rel_tolerates_pinned_band_drift ... ok
[INFO] [stdout] test util::tests::iter_all_abs_diff_eq_option_mixed_none_and_some_eq ... ok
[INFO] [stdout] test validate::tests::is_within_range_true_for_value_inside ... ok
[INFO] [stdout] test validate::tests::is_within_range_true_just_outside_within_epsilon ... ok
[INFO] [stdout] test validate::tests::must_use_functionality ... ok
[INFO] [stdout] test validate::tests::validate_into_returns_err_when_invalid ... ok
[INFO] [stdout] test validate::tests::is_within_range_true_at_bounds ... ok
[INFO] [stdout] test validate::tests::validate_into_returns_self_when_valid ... ok
[INFO] [stdout] test validate::tests::verify_are_equal_err_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_are_equal_err_message_contains_description_and_values ... ok
[INFO] [stdout] test validate::tests::verify_are_equal_err_when_not_equal ... ok
[INFO] [stdout] test validate::tests::verify_are_equal_ok_within_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_err_stops_at_first_negative ... ok
[INFO] [stdout] test validate::tests::verify_are_equal_ok_for_equal_values ... ok
[INFO] [stdout] test validate::tests::rel_variants_match_strict_at_zero_tolerance ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_err_with_negative_value ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_ok_with_empty_slice ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_ok_with_tiny_negative_within_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_is_100_percent_err_for_beyond_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_is_100_percent_err_for_close_but_not_equal ... ok
[INFO] [stdout] test validate::tests::verify_is_100_percent_err_for_zero ... ok
[INFO] [stdout] test validate::tests::verify_is_100_percent_ok_for_exact ... ok
[INFO] [stdout] test validate::tests::verify_is_100_percent_ok_within_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_err_message_contains_description ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_err_message_contains_values ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_err_when_greater_than_superset ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_ok_when_equal_to_superset ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_ok_when_exceeds_superset_within_epsilon ... ok
[INFO] [stdout] test validate::tests::verify_is_subset_ok_when_less_than_superset ... ok
[INFO] [stdout] test validate::tests::verify_is_within_100_percent_err_for_above_100 ... ok
[INFO] [stdout] test validate::tests::verify_is_within_100_percent_err_for_negative ... ok
[INFO] [stdout] test validate::tests::verify_is_within_100_percent_ok_for_valid_values ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_ok_with_all_positive ... ok
[INFO] [stdout] test validate::tests::verify_are_positive_err_with_negative_beyond_epsilon ... ok
[INFO] [stdout] test util::tests::collect_fields_copied_as_panics_on_wrong_type - should panic ... ok
[INFO] [stdout] test util::tests::iter_fields_as_panics_on_wrong_type - should panic ... ok
[INFO] [stdout] test tests::embedded::integrity::embedded_specs_are_well_formed ... ok
[INFO] [stdout] test fpd::tests::compute_pac_from_fpd_curve_point_integer_hardness_round_trip ... ok
[INFO] [stdout] test balancing::tests::balancing_issues_report_rounded_self_targets_all_keys ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 946 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 6.77s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests sci_cream
[INFO] [stdout] 
[INFO] [stdout] running 22 tests
[INFO] [stdout] test src/display.rs - display::composition_value_as_quantity (line 498) ... ok
[INFO] [stdout] test src/composition/mod.rs - composition (line 31) ... ok
[INFO] [stdout] test src/lib.rs - (line 266) ... ok
[INFO] [stdout] test src/display.rs - display::composition_value_as_percentage (line 521) ... ok
[INFO] [stdout] test src/lib.rs - (line 199) ... ok
[INFO] [stdout] test src/specs/alcohol.rs - specs::alcohol::AlcoholSpec (line 64) ... ok
[INFO] [stdout] test src/properties.rs - properties::PropKey (line 27) ... ok
[INFO] [stdout] test src/specs/alcohol.rs - specs::alcohol::AlcoholSpec (line 37) ... ok
[INFO] [stdout] test src/specs/chocolate.rs - specs::chocolate::ChocolateSpec (line 77) ... ok
[INFO] [stdout] test src/specs/chocolate.rs - specs::chocolate::ChocolateSpec (line 47) ... ok
[INFO] [stdout] test src/specs/fruit.rs - specs::fruit::FruitSpec (line 39) ... ok
[INFO] [stdout] test src/specs/sweetener.rs - specs::sweetener::SweetenerSpec (line 106) ... ok
[INFO] [stdout] test src/specs/egg.rs - specs::egg::EggSpec (line 50) ... ok
[INFO] [stdout] test src/specs/nut.rs - specs::nut::NutSpec (line 41) ... ok
[INFO] [stdout] test src/specs/sweetener.rs - specs::sweetener::SweetenerSpec (line 68) ... ok
[INFO] [stdout] test src/validate.rs - validate (line 10) ... ok
[INFO] [stdout] test src/specs/sweetener.rs - specs::sweetener::SweetenerSpec (line 150) ... ok
[INFO] [stdout] test src/lib.rs - (line 360) ... ok
[INFO] [stdout] test src/lib.rs - (line 32) ... ok
[INFO] [stdout] test src/lib.rs - (line 117) ... ok
[INFO] [stdout] test src/lib.rs - (line 446) ... ok
[INFO] [stdout] test src/lib.rs - (line 69) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 22 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 1.30s; merged doctests compilation took 1.09s
[INFO] running `Command { std: "docker" "inspect" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70", kill_on_drop: false }`
[INFO] [stdout] b0b484b72f4938fd05ff60d7bf85813c9560c05d4a93eaace829cd5f74fdfd70
