[INFO] fetching crate pxsmith-core 0.1.0...
[INFO] testing pxsmith-core-0.1.0 against 1.100.0-beta.1 for beta-1.100-2
[INFO] extracting crate pxsmith-core 0.1.0 into /workspace/builds/worker-0-tc2/source
[INFO] started tweaking crates.io crate pxsmith-core 0.1.0
[INFO] finished tweaking crates.io crate pxsmith-core 0.1.0
[INFO] tweaked toml for crates.io crate pxsmith-core 0.1.0 written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of crates.io crate pxsmith-core 0.1.0 on toolchain 1.100.0-beta.1
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate pxsmith-core 0.1.0 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.100.0-beta.1" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3111399a4047eeb3a02b7a90e478d715f38a8c6669b5c4b49d30a17385265909" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b
[INFO] running `Command { std: "docker" "start" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", 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" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", 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" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling radium v0.7.0
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling phf_shared v0.13.1
[INFO] [stderr]    Compiling serde_core v1.0.229
[INFO] [stderr]    Compiling ref-cast v1.0.26
[INFO] [stderr]    Compiling syn v3.0.3
[INFO] [stderr]    Compiling syn v2.0.119
[INFO] [stderr]    Compiling by_address v1.2.1
[INFO] [stderr]    Compiling tap v1.0.1
[INFO] [stderr]    Compiling wyz v0.5.1
[INFO] [stderr]    Compiling palette_math v0.7.7
[INFO] [stderr]    Compiling phf v0.13.1
[INFO] [stderr]    Compiling funty v2.0.0
[INFO] [stderr]    Compiling serde_json v1.0.151
[INFO] [stderr]    Compiling thiserror v2.0.20
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling rand v0.10.2
[INFO] [stderr]    Compiling bitvec v1.1.1
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling ordered-float v5.3.0
[INFO] [stderr]    Compiling rand_xoshiro v0.8.1
[INFO] [stderr]    Compiling aseprite-io v0.2.0
[INFO] [stderr]    Compiling bytemuck_derive v1.12.0
[INFO] [stderr]    Compiling ref-cast-impl v1.0.26
[INFO] [stderr]    Compiling thiserror-impl v2.0.20
[INFO] [stderr]    Compiling serde_derive v1.0.229
[INFO] [stderr]    Compiling palette_derive v0.7.7
[INFO] [stderr]    Compiling bytemuck v1.25.2
[INFO] [stderr]    Compiling safe_arch v1.1.0
[INFO] [stderr]    Compiling palette v0.7.7
[INFO] [stderr]    Compiling wide v1.6.1
[INFO] [stderr]    Compiling serde v1.0.229
[INFO] [stderr]    Compiling quantette v0.6.0
[INFO] [stderr]    Compiling pxsmith-core v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 50.08s
[INFO] running `Command { std: "docker" "inspect" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", 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" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]    Compiling pxsmith-core v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 13.55s
[INFO] running `Command { std: "docker" "inspect" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", 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" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b" "/opt/rustwide/cargo-home/bin/cargo" "+1.100.0-beta.1" "test" "--frozen", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.05s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/build/pxsmith-core/93af96cc5d338ea3/out/pxsmith_core-93af96cc5d338ea3)
[INFO] [stdout] 
[INFO] [stdout] running 467 tests
[INFO] [stdout] test aa::tests::the_curvature_sign_decides_which_side_the_aa_leans_to ... ok
[INFO] [stdout] test aa::tests::two_nearly_identical_colours_get_no_antialiasing ... ok
[INFO] [stdout] test afterimage::tests::a_still_sequence_reports_that_nothing_is_visible ... ok
[INFO] [stdout] test aa::tests::a_shallow_staircase_gets_intermediate_pixels_at_its_corners ... ok
[INFO] [stdout] test aa::tests::a_forty_five_degree_edge_is_left_alone ... ok
[INFO] [stdout] test aa::tests::an_existing_intermediate_colour_is_reused ... ok
[INFO] [stdout] test aa::tests::what_this_adds_can_be_removed_again ... ok
[INFO] [stdout] test afterimage::tests::a_single_frame_or_a_zero_trail_is_an_error ... ok
[INFO] [stdout] test aa::tests::adding_antialiasing_twice_paints_nothing_new ... ok
[INFO] [stdout] test afterimage::tests::the_newest_trail_wins_where_two_of_them_overlap ... ok
[INFO] [stdout] test afterimage::tests::a_trail_that_runs_off_the_ramp_is_counted_instead_of_invented ... ok
[INFO] [stdout] test afterimage::tests::the_first_frame_has_no_trail_unless_the_sequence_is_declared_a_loop ... ok
[INFO] [stdout] test afterimage::tests::the_trail_never_touches_the_current_drawing ... ok
[INFO] [stdout] test anim::tests::a_sine_cycle_of_two_frames_cannot_move_at_all ... ok
[INFO] [stdout] test anim::tests::easing_takes_one_hold_for_all_frames_or_exactly_one_each ... ok
[INFO] [stdout] test anim::tests::modulating_a_ramp_needs_the_ramp_to_be_declared ... ok
[INFO] [stdout] test anim::tests::modulation_never_invents_a_colour ... ok
[INFO] [stdout] test anim::tests::the_seed_actually_changes_the_random_waves ... ok
[INFO] [stdout] test anim::tests::sixty_fps_rounds_to_seventeen_because_the_error_of_sixteen_accumulates ... ok
[INFO] [stdout] test anim::tests::rotate_is_refused_instead_of_guessed ... ok
[INFO] [stdout] test anim::tests::the_reverse_leaves_out_both_ends ... ok
[INFO] [stdout] test anim::tests::shrinking_treats_the_outside_of_the_canvas_as_transparent ... ok
[INFO] [stdout] test atmos::tests::a_colour_on_the_line_moves_towards_the_sky ... ok
[INFO] [stdout] test anim::tests::all_twelve_written_combinations_reproduce_with_the_same_seed ... ok
[INFO] [stdout] test aa::tests::the_outer_silhouette_is_not_touched_by_default ... ok
[INFO] [stdout] test anim::tests::the_timing_table_of_the_design_comes_out_of_the_formula ... ok
[INFO] [stdout] test atmos::tests::a_colour_with_nothing_on_the_line_is_left_alone_and_counted ... ok
[INFO] [stdout] test atmos::tests::a_scroll_document_from_another_version_is_an_error ... ok
[INFO] [stdout] test atmos::tests::an_unknown_depth_in_the_meta_is_an_error ... ok
[INFO] [stdout] test atmos::tests::asking_for_no_haze_is_not_the_same_as_the_palette_having_no_step ... ok
[INFO] [stdout] test atmos::tests::a_table_that_gets_clearer_with_distance_is_rejected ... ok
[INFO] [stdout] test atmos::tests::an_undeclared_speed_is_absent_rather_than_zero ... ok
[INFO] [stdout] test autotile::tests::a_diagonal_survives_only_when_both_neighbouring_edges_are_set ... ok
[INFO] [stdout] test atmos::tests::colours_that_land_on_the_same_index_are_counted_as_collapsed ... ok
[INFO] [stdout] test autotile::tests::a_corner_has_exactly_five_states ... ok
[INFO] [stdout] test autotile::tests::a_partly_specified_quadrant_group_is_an_error ... ok
[INFO] [stdout] test autotile::tests::an_unknown_state_name_is_an_error_naming_the_known_ones ... ok
[INFO] [stdout] test atmos::tests::hazing_never_widens_the_lightness_spread ... ok
[INFO] [stdout] test atmos::tests::atmos_never_creates_a_colour ... ok
[INFO] [stdout] test atmos::tests::the_foreground_is_the_reference_and_does_not_move ... ok
[INFO] [stdout] test atmos::tests::the_declared_transparent_index_is_never_hazed ... ok
[INFO] [stdout] test autotile::tests::auto_mirroring_a_dithered_quadrant_doubles_the_stripe_at_the_seam ... ok
[INFO] [stdout] test autotile::tests::a_sheet_that_does_not_decompose_into_quadrants_is_an_error ... ok
[INFO] [stdout] test autotile::tests::an_odd_tile_size_is_an_error ... ok
[INFO] [stdout] test autotile::tests::five_frames_expand_to_all_four_quadrants_by_mirroring ... ok
[INFO] [stdout] test autotile::tests::explicitly_drawn_quadrants_can_keep_the_dither_phase ... ok
[INFO] [stdout] test autotile::tests::each_quadrant_lands_in_its_own_corner ... ok
[INFO] [stdout] test autotile::tests::five_unspecified_frames_use_the_auto_mirror_and_say_so ... ok
[INFO] [stdout] test autotile::tests::missing_quadrant_art_is_reported_all_at_once ... ok
[INFO] [stdout] test autotile::tests::repeating_an_even_width_dithered_tile_does_not_connect_the_dots ... ok
[INFO] [stdout] test autotile::tests::specified_quadrants_must_cover_all_four ... ok
[INFO] [stdout] test autotile::tests::quadrant_art_must_be_half_the_tile ... ok
[INFO] [stdout] test autotile::tests::solid_quadrants_report_no_seam_damage ... ok
[INFO] [stdout] test autotile::tests::fully_specified_quadrants_do_not_trigger_the_auto_mirror ... ok
[INFO] [stdout] test autotile::tests::the_blob_reduction_gives_exactly_forty_seven_masks ... ok
[INFO] [stdout] test autotile::tests::the_five_piece_layout_reports_that_it_mirrored ... ok
[INFO] [stdout] test canvas::tests::from_pixels_rejects_length_mismatch ... ok
[INFO] [stdout] test canvas::tests::opaque_bbox_excludes_transparent_border ... ok
[INFO] [stdout] test canvas::tests::opaque_bbox_is_none_when_fully_transparent ... ok
[INFO] [stdout] test canvas::tests::blit_can_skip_transparent_source_pixels ... ok
[INFO] [stdout] test autotile::tests::mirroring_actually_flips_the_quadrant_art ... ok
[INFO] [stdout] test canvas::tests::get_returns_none_outside ... ok
[INFO] [stdout] test autotile::tests::the_layout_decides_how_many_pieces_are_required ... ok
[INFO] [stdout] test canvas::tests::remap_also_moves_transparent_index ... ok
[INFO] [stdout] test autotile::tests::importing_our_own_forty_seven_tiles_reproduces_the_quadrants ... ok
[INFO] [stdout] test clean::tests::a_bayer_pattern_is_not_noise ... ok
[INFO] [stdout] test clean::tests::denoise_roughly_preserves_the_density ... ok
[INFO] [stdout] test clean::tests::denoise_replaces_noise_with_a_regular_pattern ... ok
[INFO] [stdout] test clean::tests::a_regular_checkerboard_is_not_noise ... ok
[INFO] [stdout] test clean::tests::isolated_pixels_are_dissolved_into_the_surrounding_colour ... ok
[INFO] [stdout] test clean::tests::low_area_intermediate_colours_are_removed ... ok
[INFO] [stdout] test clean::tests::pixel_perfect_drops_l_corners ... ok
[INFO] [stdout] test clean::tests::large_regions_are_kept ... ok
[INFO] [stdout] test clean::tests::locked_colours_are_never_removed ... ok
[INFO] [stdout] test clean::tests::denoise_is_deterministic ... ok
[INFO] [stdout] test clean::tests::denoise_leaves_flat_areas_alone ... ok
[INFO] [stdout] test clean::tests::pixel_perfect_keeps_the_endpoints ... ok
[INFO] [stdout] test clean::tests::random_dither_is_detected ... ok
[INFO] [stdout] test clean::tests::transparent_holes_are_not_filled ... ok
[INFO] [stdout] test clean::tests::pixel_perfect_keeps_straight_runs ... ok
[INFO] [stdout] test clean::tests::pixel_perfect_on_a_bresenham_line_stays_connected ... ok
[INFO] [stdout] test cleanedge::tests::sampling_outside_the_canvas_is_none ... ok
[INFO] [stdout] test canvas::tests::blit_clips_at_edges ... ok
[INFO] [stdout] test canvas::tests::crop_round_trips_through_blit ... ok
[INFO] [stdout] test clean::tests::remove_isolated_is_deterministic ... ok
[INFO] [stdout] test color::tests::hex_rejects_malformed ... ok
[INFO] [stdout] test cleanedge::tests::sampling_a_flat_area_at_its_centre_returns_that_colour ... ok
[INFO] [stdout] test color::tests::weight_scales_lightness_term_only ... ok
[INFO] [stdout] test color::tests::hex_round_trip ... ok
[INFO] [stdout] test color::tests::oklab_lightness_is_monotone_on_grays ... ok
[INFO] [stdout] test compose::tests::a_fully_hidden_part_is_reported_as_covered ... ok
[INFO] [stdout] test compose::tests::a_missing_anchor_is_an_error_not_a_silent_origin_align ... ok
[INFO] [stdout] test compose::tests::an_anchored_part_grows_the_canvas_instead_of_being_clipped ... ok
[INFO] [stdout] test compose::tests::an_index_outside_the_palette_is_an_error ... ok
[INFO] [stdout] test compose::tests::an_unclosed_template_is_an_error ... ok
[INFO] [stdout] test cleanedge::tests::every_sample_is_an_index_that_was_in_the_source ... ok
[INFO] [stdout] test clean::tests::pixel_perfect_keeps_the_result_eight_connected ... ok
[INFO] [stdout] test clean::tests::widely_used_intermediate_colours_are_kept ... ok
[INFO] [stdout] test compose::tests::origin_aligned_parts_do_not_move_the_canvas ... ok
[INFO] [stdout] test color::tests::gray_has_no_chroma ... ok
[INFO] [stdout] test compose::tests::variants_expand_in_declaration_order ... ok
[INFO] [stdout] test compose::tests::palettes_are_merged_and_indices_are_remapped ... ok
[INFO] [stdout] test compose::tests::unused_palette_entries_do_not_break_the_merge ... ok
[INFO] [stdout] test deform::tests::the_bottom_anchor_keeps_the_feet_on_the_ground ... ok
[INFO] [stdout] test deform::tests::an_empty_canvas_is_an_error ... ok
[INFO] [stdout] test deform::tests::scaling_never_invents_an_index ... ok
[INFO] [stdout] test deform::tests::clipping_and_resampling_are_counted_separately ... ok
[INFO] [stdout] test direction::tests::a_drawn_direction_is_never_overwritten_by_a_mirror ... ok
[INFO] [stdout] test direction::tests::a_light_from_straight_above_is_not_checkable_by_mirroring ... ok
[INFO] [stdout] test direction::tests::expanding_nothing_is_an_error ... ok
[INFO] [stdout] test direction::tests::north_and_south_have_no_mirror_partner ... ok
[INFO] [stdout] test edit::tests::draw_stroke_round_trips ... ok
[INFO] [stdout] test edit::tests::empty_stroke_is_a_noop_patch ... ok
[INFO] [stdout] test edit::tests::flood_fill_respects_barriers ... ok
[INFO] [stdout] test deform::tests::the_two_volumes_do_not_move_together ... ok
[INFO] [stdout] test edit::tests::flood_fill_round_trips ... ok
[INFO] [stdout] test edit::tests::non_contiguous_fill_reaches_across_barriers ... ok
[INFO] [stdout] test direction::tests::mirroring_moves_pixels_without_touching_colours ... ok
[INFO] [stdout] test edit::tests::out_of_range_ids_are_errors ... ok
[INFO] [stdout] test edit::tests::patch_apply_detects_stale_target ... ok
[INFO] [stdout] test edit::tests::pattern_ink_round_trips ... ok
[INFO] [stdout] test edit::tests::set_palette_round_trips ... ok
[INFO] [stdout] test edit::tests::stamp_ink_leaving_holes_still_round_trips ... ok
[INFO] [stdout] test edit::tests::stroke_is_eight_connected_and_clipped ... ok
[INFO] [stdout] test export::tests::a_cell_becomes_a_gid_with_the_flip_bits_of_the_spec ... ok
[INFO] [stdout] test export::tests::the_map_is_written_row_by_row ... ok
[INFO] [stdout] test export::tests::a_sheet_whose_cells_do_not_match_the_tile_size_is_an_error ... ok
[INFO] [stdout] test deform::tests::the_derived_rule_keeps_the_bbox_volume_within_the_rounding ... ok
[INFO] [stdout] test export::tests::a_document_without_a_map_cannot_become_a_tmx ... ok
[INFO] [stdout] test direction::tests::five_drawn_directions_fill_eight_and_three_drawn_do_not ... ok
[INFO] [stdout] test export::tests::the_tsx_takes_its_layout_from_the_pack_instead_of_computing_it ... ok
[INFO] [stdout] test frame::tests::frame_kind_string_round_trip ... ok
[INFO] [stdout] test frame::tests::keyframe_scope_excludes_inbetween ... ok
[INFO] [stdout] test geom::contour::tests::a_hole_produces_a_second_contour ... ok
[INFO] [stdout] test geom::contour::tests::colour_boundaries_are_traced_per_index ... ok
[INFO] [stdout] test frame::tests::layer_lookup_by_name ... ok
[INFO] [stdout] test frame::tests::layer_out_of_range_is_an_error_not_a_panic ... ok
[INFO] [stdout] test compose::tests::clipping_reports_how_many_pixels_it_threw_away ... ok
[INFO] [stdout] test compose::tests::hold_repeats_the_first_frame_and_wrap_takes_it_from_the_end ... ok
[INFO] [stdout] test frame::tests::tile_grid_rejects_size_mismatch ... ok
[INFO] [stdout] test geom::contour::tests::horizontal_chains_are_detected ... ok
[INFO] [stdout] test geom::contour::tests::outer_and_hole_contours_wind_in_opposite_directions ... ok
[INFO] [stdout] test geom::contour::tests::split_monotone_breaks_at_direction_reversals ... ok
[INFO] [stdout] test geom::contour::tests::separate_components_get_separate_contours ... ok
[INFO] [stdout] test geom::contour::tests::single_pixel_has_a_one_point_contour ... ok
[INFO] [stdout] test geom::contour::tests::square_contour_visits_every_edge_pixel_once ... ok
[INFO] [stdout] test geom::contour::tests::traced_contours_are_consistent_closed_curves ... ok
[INFO] [stdout] test frame::tests::effective_opacity_folds_group_chain ... ok
[INFO] [stdout] test geom::contour::tests::tangent_points_along_the_chain ... ok
[INFO] [stdout] test geom::distance::tests::boundary_pixels_are_about_one_from_the_outside ... ok
[INFO] [stdout] test geom::distance::tests::convex_shapes_have_positive_curvature ... ok
[INFO] [stdout] test geom::distance::tests::chamfer_approximates_euclidean_distance ... ok
[INFO] [stdout] test geom::distance::tests::a_shape_touching_the_edge_is_not_infinitely_far ... ok
[INFO] [stdout] test geom::distance::tests::an_empty_mask_is_negative_everywhere ... ok
[INFO] [stdout] test geom::distance::tests::distance_grows_towards_the_centre ... ok
[INFO] [stdout] test geom::distance::tests::concave_corners_have_negative_curvature ... ok
[INFO] [stdout] test geom::distance::tests::inside_is_positive_and_outside_is_negative ... ok
[INFO] [stdout] test geom::distance::tests::curvature_field_covers_every_pixel ... ok
[INFO] [stdout] test geom::distance::tests::the_normal_points_towards_the_inside ... ok
[INFO] [stdout] test geom::distance::tests::the_ridge_of_a_thin_bar_is_detected ... ok
[INFO] [stdout] test geom::jaggy::tests::an_even_staircase_has_no_jaggies ... ok
[INFO] [stdout] test geom::jaggy::tests::the_report_counts_what_it_looked_at ... ok
[INFO] [stdout] test geom::jaggy::tests::colour_boundaries_are_scanned_not_just_the_silhouette ... ok
[INFO] [stdout] test geom::jaggy::tests::the_transparent_index_is_skipped ... ok
[INFO] [stdout] test geom::mask::tests::bits_survive_a_size_that_is_not_a_multiple_of_64 ... ok
[INFO] [stdout] test geom::mask::tests::count_and_bbox ... ok
[INFO] [stdout] test geom::mask::tests::field_get_is_bounds_checked ... ok
[INFO] [stdout] test geom::mask::tests::field_rejects_length_mismatch ... ok
[INFO] [stdout] test geom::mask::tests::first_set_scans_row_major ... ok
[INFO] [stdout] test geom::mask::tests::inversion_is_an_involution ... ok
[INFO] [stdout] test geom::mask::tests::mask_of_projects_a_single_index ... ok
[INFO] [stdout] test geom::mask::tests::interior_pixels_are_not_boundary ... ok
[INFO] [stdout] test geom::mask::tests::out_of_bounds_reads_as_background ... ok
[INFO] [stdout] test geom::distance::tests::the_image_edge_does_not_create_fake_curvature ... ok
[INFO] [stdout] test geom::mask::tests::shape_touching_the_edge_is_still_boundary ... ok
[INFO] [stdout] test geom::mask::tests::the_arms_of_a_plus_are_boundary_but_the_centre_is_not ... ok
[INFO] [stdout] test geom::jaggy::tests::a_short_step_is_reported ... ok
[INFO] [stdout] test geom::regions::probe::regions_that_share_an_edge_are_not_tangent ... ok
[INFO] [stdout] test geom::regions::probe::same_index_neighbours_are_found_through_the_diagonal ... ok
[INFO] [stdout] test geom::regions::tests::a_checkerboard_is_diagonally_adjacent_and_must_be_excluded_by_area ... ok
[INFO] [stdout] test geom::regions::tests::at_returns_the_region_under_a_point ... ok
[INFO] [stdout] test geom::regions::tests::compactness_is_lowest_for_a_square ... ok
[INFO] [stdout] test geom::mask::tests::silhouette_excludes_the_transparent_index ... ok
[INFO] [stdout] test geom::regions::tests::by_area_desc_is_deterministic ... ok
[INFO] [stdout] test geom::regions::tests::four_connectivity_keeps_a_checkerboard_apart ... ok
[INFO] [stdout] test geom::regions::tests::different_colours_split_into_separate_regions ... ok
[INFO] [stdout] test geom::regions::tests::mask_component_starts_at_the_topmost_leftmost_pixel ... ok
[INFO] [stdout] test geom::jaggy::tests::a_circle_has_no_jaggies ... ok
[INFO] [stdout] test geom::regions::tests::side_by_side_same_colour_regions_are_reported ... ok
[INFO] [stdout] test geom::jaggy::tests::a_large_gap_is_reported_but_not_fixable ... ok
[INFO] [stdout] test geom::jaggy::tests::a_rectangle_has_no_jaggies ... ok
[INFO] [stdout] test geom::regions::tests::perimeter_counts_the_image_edge ... ok
[INFO] [stdout] test geom::runs::tests::a_curvature_turn_is_still_excluded ... ok
[INFO] [stdout] test geom::regions::tests::the_same_colour_in_two_places_is_two_regions ... ok
[INFO] [stdout] test geom::regions::tests::uniform_canvas_is_one_region ... ok
[INFO] [stdout] test geom::runs::tests::a_lone_dip_in_a_flat_run_is_still_a_jaggy ... ok
[INFO] [stdout] test geom::runs::tests::a_lone_valley_is_a_jaggy_when_the_curvature_does_not_reverse ... ok
[INFO] [stdout] test geom::regions::tests::mask_components_respect_connectivity ... ok
[INFO] [stdout] test geom::regions::tests::neighbours_are_symmetric ... ok
[INFO] [stdout] test geom::runs::tests::a_valley_with_a_slope_on_only_one_side_is_still_a_jaggy ... ok
[INFO] [stdout] test geom::runs::tests::a_valley_at_a_curvature_reversal_is_excused ... ok
[INFO] [stdout] test geom::runs::tests::a_window_with_nothing_left_after_trimming_is_not_a_line ... ok
[INFO] [stdout] test geom::runs::tests::ends_are_never_valleys ... ok
[INFO] [stdout] test geom::runs::tests::a_shifted_step_breaks_straightness ... ok
[INFO] [stdout] test geom::runs::tests::every_ideal_staircase_reads_as_a_straight_line ... ok
[INFO] [stdout] test geom::runs::tests::a_straight_run_of_equal_lengths_is_unimodal ... ok
[INFO] [stdout] test geom::runs::tests::a_single_dip_is_not_a_straight_line ... ok
[INFO] [stdout] test geom::runs::tests::banding_finds_repeated_equal_runs ... ok
[INFO] [stdout] test geom::runs::tests::banding_is_empty_for_an_empty_input ... ok
[INFO] [stdout] test geom::runs::tests::run_lengths_sum_to_the_chain_length ... ok
[INFO] [stdout] test geom::runs::tests::run_pixels_agree_with_run_lengths ... ok
[INFO] [stdout] test geom::runs::tests::truncated_end_runs_do_not_break_straightness ... ok
[INFO] [stdout] test geom::topology::tests::a_ring_has_one_component_and_one_hole ... ok
[INFO] [stdout] test geom::runs::tests::only_the_listed_turns_are_excused ... ok
[INFO] [stdout] test grid::tests::a_band_measures_its_phase_from_the_image_origin ... ok
[INFO] [stdout] test grid::tests::a_candidate_too_thin_to_measure_is_rejected ... ok
[INFO] [stdout] test geom::runs::tests::run_lengths_of_a_horizontal_edge ... ok
[INFO] [stdout] test geom::runs::tests::run_lengths_of_a_staircase ... ok
[INFO] [stdout] test geom::runs::tests::the_bottom_of_an_ideal_single_valley_is_not_a_jaggy ... ok
[INFO] [stdout] test grid::tests::a_divisor_still_fits_the_line ... ok
[INFO] [stdout] test geom::runs::tests::valleys_need_both_sides_to_be_longer ... ok
[INFO] [stdout] test geom::topology::tests::a_checkerboard_does_not_break_the_characteristic ... ok
[INFO] [stdout] test grid::tests::a_doubled_pattern_pins_the_grid_at_two ... ok
[INFO] [stdout] test geom::topology::tests::the_outside_is_not_a_hole ... ok
[INFO] [stdout] test grid::tests::a_flat_profile_has_no_echo ... ok
[INFO] [stdout] test grid::tests::a_flat_window_says_nothing_rather_than_voting_for_one ... ok
[INFO] [stdout] test grid::tests::a_lopsided_valley_moves_toward_the_lower_side ... ok
[INFO] [stdout] test grid::tests::a_flat_image_has_no_boundaries ... ok
[INFO] [stdout] test grid::tests::a_native_resolution_pattern_pins_the_grid_at_one ... ok
[INFO] [stdout] test grid::tests::a_non_integer_period_shows_up_as_a_spacing_error ... ok
[INFO] [stdout] test grid::tests::a_symmetric_blur_keeps_the_peak_in_place ... ok
[INFO] [stdout] test grid::tests::a_doubled_candidate_repeats_the_folded_profile ... ok
[INFO] [stdout] test grid::tests::a_clean_upscale_is_confident ... ok
[INFO] [stdout] test grid::tests::a_symmetric_valley_keeps_the_integer_phase ... ok
[INFO] [stdout] test grid::tests::a_true_grid_agrees_across_bands_in_subpixel_too ... ok
[INFO] [stdout] test grid::tests::a_run_of_flat_cells_has_no_grid_to_break ... ok
[INFO] [stdout] test grid::tests::a_widened_peak_is_counted_once ... ok
[INFO] [stdout] test grid::tests::candidate_scales_include_the_true_scale ... ok
[INFO] [stdout] test grid::tests::a_true_grid_is_explained_by_one_shared_phase ... ok
[INFO] [stdout] test grid::tests::confidence_is_positive_for_a_clear_grid ... ok
[INFO] [stdout] test grid::tests::downscale_modal_is_deterministic ... ok
[INFO] [stdout] test grid::tests::downscale_modal_recovers_the_original_pattern ... ok
[INFO] [stdout] test grid::tests::a_non_integer_period_fails_the_phase_check ... ok
[INFO] [stdout] test grid::tests::a_non_integer_period_has_no_shared_phase ... ok
[INFO] [stdout] test grid::tests::folding_counts_every_defined_sample_once ... ok
[INFO] [stdout] test grid::tests::a_true_grid_breaks_when_the_phase_is_shifted_half_a_cell ... ok
[INFO] [stdout] test grid::tests::native_art_with_a_doubled_patch_shows_two_cell_sizes ... ok
[INFO] [stdout] test grid::tests::one_stray_peak_breaks_the_indexing_and_only_folding_survives ... ok
[INFO] [stdout] test grid::tests::phase_ties_are_broken_lexicographically ... ok
[INFO] [stdout] test grid::tests::noise_beyond_epsilon_is_not_accepted_as_a_grid ... ok
[INFO] [stdout] test grid::tests::confidence_is_zero_for_a_flat_image ... ok
[INFO] [stdout] test grid::tests::phases_wrap_around_the_scale ... ok
[INFO] [stdout] test grid::tests::reconstruction_check_rejects_overestimation ... ok
[INFO] [stdout] test grid::tests::a_true_grid_fits_the_same_phase_in_every_band ... ok
[INFO] [stdout] test grid::tests::a_flat_image_is_rejected_when_a_minimum_confidence_is_set ... ok
[INFO] [stdout] test grid::tests::splitting_a_cell_explains_a_doubled_candidate_but_not_a_true_one ... ok
[INFO] [stdout] test grid::tests::subpixel_phases_wrap_around_the_scale ... ok
[INFO] [stdout] test grid::tests::the_cell_phase_comes_from_the_image_not_the_window ... ok
[INFO] [stdout] test grid::tests::recovers_the_phase_when_the_image_is_cropped ... ok
[INFO] [stdout] test grid::tests::the_curve_check_is_what_rejects_when_the_drift_tolerance_is_loose ... ok
[INFO] [stdout] test grid::tests::shifting_half_a_cell_breaks_a_true_grid_but_not_a_doubled_one ... ok
[INFO] [stdout] test grid::tests::the_fitted_spacing_matches_a_real_grid ... ok
[INFO] [stdout] test grid::tests::the_folded_profile_puts_the_boundary_in_the_first_band ... ok
[INFO] [stdout] test grid::tests::the_folded_spread_needs_no_indexing ... ok
[INFO] [stdout] test grid::tests::picks_the_largest_scale_not_a_divisor ... ok
[INFO] [stdout] test grid::tests::the_control_group_is_larger_non_multiples_only ... ok
[INFO] [stdout] test grid::tests::local_grid_agrees_with_the_global_estimate_on_a_uniform_image ... ok
[INFO] [stdout] test grid::tests::tiny_images_are_rejected ... ok
[INFO] [stdout] test grid::tests::two_cell_sizes_without_native_art_are_not_a_mixel ... ok
[INFO] [stdout] test grid::tests::uniformity_is_none_without_any_estimate ... ok
[INFO] [stdout] test grid::tests::thin_bands_are_measured_with_fewer_bands_instead_of_being_skipped ... ok
[INFO] [stdout] test guide::tests::a_zero_cell_or_size_is_an_error ... ok
[INFO] [stdout] test cleanedge::tests::the_staircase_edge_is_actually_reshaped ... ok
[INFO] [stdout] test grid::tests::the_phase_check_can_be_turned_off ... ok
[INFO] [stdout] test guide::tests::the_guide_follows_the_same_axes_as_the_projection ... ok
[INFO] [stdout] test guide::tests::the_lattice_step_is_an_integer_pair ... ok
[INFO] [stdout] test guide::tests::an_iso_cell_spans_exactly_two_or_four_square_tiles ... ok
[INFO] [stdout] test ink::tests::bayer_classic_4x4_top_left_quadrant ... ok
[INFO] [stdout] test ink::tests::bayer_matrix_is_a_permutation_of_0_to_n2 ... ok
[INFO] [stdout] test ink::tests::brush_offsets_are_deterministic ... ok
[INFO] [stdout] test ink::tests::brush_offsets_have_expected_counts ... ok
[INFO] [stdout] test ink::tests::checker_alternates ... ok
[INFO] [stdout] test ink::tests::checker_handles_negative_coordinates ... ok
[INFO] [stdout] test ink::tests::ink_index_always_writes ... ok
[INFO] [stdout] test ink::tests::stamp_skips_transparent_pixels ... ok
[INFO] [stdout] test math::tests::clip_pair_does_not_overflow ... ok
[INFO] [stdout] test guide::tests::a_guide_actually_draws_lines ... ok
[INFO] [stdout] test math::tests::clip_pair_full_overlap ... ok
[INFO] [stdout] test math::tests::clip_pair_negative_origin ... ok
[INFO] [stdout] test math::tests::clip_pair_no_overlap ... ok
[INFO] [stdout] test guide::tests::without_the_checkerboard_only_lines_are_drawn ... ok
[INFO] [stdout] test math::tests::clip_pair_partially_past_far_edge ... ok
[INFO] [stdout] test math::tests::clip_pair_rect_sizes_always_match ... ok
[INFO] [stdout] test grid::tests::recovers_the_scale_of_a_clean_upscale ... ok
[INFO] [stdout] test math::tests::line_is_eight_connected ... ok
[INFO] [stdout] test math::tests::unit_step_quantizes_diagonal_tangent ... ok
[INFO] [stdout] test outline::tests::an_edge_to_edge_picture_reports_that_there_is_no_room_outside ... ok
[INFO] [stdout] test outline::tests::drawing_the_outline_twice_changes_nothing ... ok
[INFO] [stdout] test outline::tests::every_border_pixel_is_painted_and_the_inside_is_left_alone ... ok
[INFO] [stdout] test outline::tests::every_style_has_a_name ... ok
[INFO] [stdout] test outline::tests::the_default_draws_inside_and_never_moves_the_silhouette ... ok
[INFO] [stdout] test outline::tests::the_none_style_takes_the_outline_off_again ... ok
[INFO] [stdout] test outline::tests::the_selective_outline_leaves_the_lit_side_bare ... ok
[INFO] [stdout] test palette::tests::accepts_both_binary_alphas ... ok
[INFO] [stdout] test palette::tests::denormalize_requires_normalized_palette ... ok
[INFO] [stdout] test palette::tests::lab_stays_in_sync_with_entries ... ok
[INFO] [stdout] test outline::tests::the_outer_outline_grows_the_silhouette_but_stays_in_the_canvas ... ok
[INFO] [stdout] test palette::tests::normalization_preserves_resolved_colors ... ok
[INFO] [stdout] test palette::tests::nearest_skips_transparent_entries_and_breaks_ties_by_index ... ok
[INFO] [stdout] test palette::tests::normalization_moves_locked_flags_with_their_colors ... ok
[INFO] [stdout] test outline::tests::the_contrast_style_follows_the_assumed_background ... ok
[INFO] [stdout] test palette::tests::normalization_remaps_ramp_entries ... ok
[INFO] [stdout] test palette::tests::normalize_is_rejected_twice ... ok
[INFO] [stdout] test palette::tests::normalize_denormalize_round_trip_restores_palette_and_canvas ... ok
[INFO] [stdout] test palette::tests::normalize_orders_by_perceptual_lightness ... ok
[INFO] [stdout] test palette::tests::rejects_partial_alpha ... ok
[INFO] [stdout] test palreport::tests::a_single_main_colour_has_no_pair_to_compare ... ok
[INFO] [stdout] test palreport::tests::colours_come_back_in_order_of_area ... ok
[INFO] [stdout] test palreport::tests::contrast_reports_lightness_apart_from_overall_colour_distance ... ok
[INFO] [stdout] test palreport::tests::a_scattered_colour_has_a_large_area_but_a_tiny_largest_region ... ok
[INFO] [stdout] test palreport::tests::the_transparent_index_is_not_a_colour ... ok
[INFO] [stdout] test palette::tests::ramp_step_saturates_at_both_ends ... ok
[INFO] [stdout] test palette::tests::ties_in_lightness_keep_original_order ... ok
[INFO] [stdout] test palreport::tests::unused_palette_entries_are_not_counted_as_used ... ok
[INFO] [stdout] test project::tests::a_step_must_be_two_positive_integers ... ok
[INFO] [stdout] test project::tests::an_oblique_projection_preserves_area ... ok
[INFO] [stdout] test project::tests::an_oblique_top_view_reports_the_angle_of_the_axis_that_actually_recedes ... ok
[INFO] [stdout] test project::tests::facing_flips_the_direction_of_the_shear ... ok
[INFO] [stdout] test project::tests::only_an_oblique_projection_lets_you_choose_the_step ... ok
[INFO] [stdout] test project::tests::projecting_a_side_view_keeps_vertical_lines_vertical ... ok
[INFO] [stdout] test project::tests::projecting_a_top_view_tilts_both_axes ... ok
[INFO] [stdout] test project::tests::projecting_never_creates_an_index_that_was_not_there ... ok
[INFO] [stdout] test project::tests::projecting_grows_the_canvas_so_nothing_is_clipped ... ok
[INFO] [stdout] test project::tests::iso_recedes_at_two_to_one ... ok
[INFO] [stdout] test quantize::tests::apply_palette_uses_only_palette_colours ... ok
[INFO] [stdout] test project::tests::the_two_procedures_in_the_design_are_not_the_same_transform ... ok
[INFO] [stdout] test quantize::tests::apply_palette_picks_the_nearest_colour ... ok
[INFO] [stdout] test grid::tests::flat_windows_do_not_vote ... ok
[INFO] [stdout] test palreport::tests::covering_counts_say_how_many_colours_carry_the_picture ... ok
[INFO] [stdout] test quantize::tests::bayer_unit_covers_the_whole_range ... ok
[INFO] [stdout] test quantize::tests::ordered_dither_is_position_dependent_not_random ... ok
[INFO] [stdout] test quantize::tests::error_diffusion_is_opt_in_and_deterministic ... ok
[INFO] [stdout] test quantize::tests::ordered_dither_mixes_two_neighbouring_colours ... ok
[INFO] [stdout] test quantize::tests::quantize_ignores_fully_transparent_pixels ... ok
[INFO] [stdout] test quantize::tests::locked_colours_survive_reduction ... ok
[INFO] [stdout] test quantize::tests::reduce_never_maps_outside_the_new_palette ... ok
[INFO] [stdout] test quantize::tests::reduce_drops_low_area_colours_first ... ok
[INFO] [stdout] test quantize::tests::reduce_keeps_the_picture_readable ... ok
[INFO] [stdout] test quantize::tests::transparent_pixels_keep_the_transparent_index ... ok
[INFO] [stdout] test quantize::tests::the_lightness_weight_changes_which_colour_is_picked ... ok
[INFO] [stdout] test ramp::tests::a_ramp_has_the_requested_number_of_steps ... ok
[INFO] [stdout] test ramp::tests::every_preset_builds_a_usable_lighting_model ... ok
[INFO] [stdout] test ramp::tests::hue_shifts_towards_yellow_when_light_and_purple_when_dark ... ok
[INFO] [stdout] test ramp::tests::a_ramp_is_monotone_in_lightness ... ok
[INFO] [stdout] test ramp::tests::night_uses_a_point_light ... ok
[INFO] [stdout] test ramp::tests::overcast_has_the_smallest_lightness_range ... ok
[INFO] [stdout] test ramp::tests::preset_names_round_trip ... ok
[INFO] [stdout] test ramp::tests::pure_black_can_be_allowed_explicitly ... ok
[INFO] [stdout] test ramp::tests::gamut_clipping_preserves_hue ... ok
[INFO] [stdout] test ramp::tests::pure_black_is_avoided ... ok
[INFO] [stdout] test ramp::tests::shadow_hue_differs_from_key_hue ... ok
[INFO] [stdout] test ramp::tests::shadow_heavy_and_light_heavy_are_opposites ... ok
[INFO] [stdout] test ramp::tests::rotate_towards_takes_the_short_arc ... ok
[INFO] [stdout] test ramp::tests::the_default_chroma_curve_is_not_monotone ... ok
[INFO] [stdout] test ramp::tests::uniform_curve_keeps_the_chroma_factor_flat ... ok
[INFO] [stdout] test resample::tests::a_bad_angle_or_factor_is_an_error ... ok
[INFO] [stdout] test resample::tests::a_quarter_turn_is_exact ... ok
[INFO] [stdout] test resample::tests::an_integer_upscale_is_exact ... ok
[INFO] [stdout] test resample::tests::four_quarter_turns_return_the_original ... ok
[INFO] [stdout] test resample::tests::growing_a_canvas_with_no_transparent_index_says_it_filled_with_a_real_colour ... ok
[INFO] [stdout] test resample::tests::refusing_to_grow_clips_and_says_so ... ok
[INFO] [stdout] test resample::tests::resampling_never_creates_an_index_that_was_not_there ... ok
[INFO] [stdout] test resample::tests::rotation_grows_the_canvas_so_nothing_is_clipped ... ok
[INFO] [stdout] test resample::tests::the_centre_maps_to_the_centre ... ok
[INFO] [stdout] test shade::tests::a_face_turned_to_the_light_reaches_the_end_of_the_key_ramp ... ok
[INFO] [stdout] test ramp::tests::single_accent_lifts_exactly_one_step ... ok
[INFO] [stdout] test shade::tests::a_point_light_falls_off_with_the_square_of_the_distance ... ok
[INFO] [stdout] test shade::tests::ambient_light_has_no_direction_and_sits_in_the_middle ... ok
[INFO] [stdout] test ramp::tests::uniform_curve_is_flat_within_the_srgb_gamut ... ok
[INFO] [stdout] test shade::tests::a_line_light_grows_with_the_angle_it_spans ... ok
[INFO] [stdout] test shade::tests::ambient_occlusion_does_not_frame_a_full_bleed_tile ... ok
[INFO] [stdout] test shade::tests::every_pixel_inside_the_silhouette_gets_a_colour ... ok
[INFO] [stdout] test shade::tests::only_a_shadowed_pixel_near_a_bouncing_surface_uses_the_bounce_ramp ... ok
[INFO] [stdout] test shade::tests::only_pixels_above_the_silhouette_edge_can_bounce ... ok
[INFO] [stdout] test shade::tests::the_bounce_ramp_is_brightest_next_to_the_bouncing_surface ... ok
[INFO] [stdout] test shade::tests::the_index_spans_the_whole_ramp ... ok
[INFO] [stdout] test shade::tests::the_lit_side_and_the_shadow_side_use_different_colours ... ok
[INFO] [stdout] test shade::tests::curvature_separates_a_convex_disc_from_a_notched_shape ... ok
[INFO] [stdout] test guide::tests::a_side_view_guide_keeps_one_family_of_lines_vertical ... ok
[INFO] [stdout] test shade::tests::the_ridge_does_not_fall_through_to_the_ambient_colour ... ok
[INFO] [stdout] test shade::tests::the_shadow_branch_is_remapped_so_the_whole_ramp_is_reachable ... ok
[INFO] [stdout] test quantize::tests::quantize_is_deterministic ... ok
[INFO] [stdout] test shade::tests::ambient_occlusion_only_darkens_concave_places ... ok
[INFO] [stdout] test sheet::tests::packing_nothing_is_an_error ... ok
[INFO] [stdout] test sheet::tests::cells_are_sized_to_the_largest_picture_and_the_waste_is_reported ... ok
[INFO] [stdout] test sheet::tests::the_column_count_is_the_one_that_leaves_the_fewest_empty_cells ... ok
[INFO] [stdout] test sheet::tests::a_document_whose_size_does_not_match_its_layout_is_an_error ... ok
[INFO] [stdout] test sheet::tests::indices_are_remapped_into_the_merged_palette ... ok
[INFO] [stdout] test sheet::tests::padding_and_margin_grow_the_sheet_by_exactly_what_was_asked ... ok
[INFO] [stdout] test sheet::tests::the_sheet_size_follows_from_the_layout ... ok
[INFO] [stdout] test grid::tests::the_diagnostic_view_agrees_with_the_estimator ... ok
[INFO] [stdout] test smear::tests::a_still_pair_still_takes_one_step ... ok
[INFO] [stdout] test smooth::tests::a_circle_is_left_alone ... ok
[INFO] [stdout] test smooth::tests::a_colour_boundary_inside_a_square_is_smoothed_too ... ok
[INFO] [stdout] test smooth::tests::a_deep_valley_is_reported_but_not_touched ... ok
[INFO] [stdout] test quantize::tests::quantize_returns_at_most_the_requested_colours ... ok
[INFO] [stdout] test smooth::tests::a_lone_dip_is_not_excused_as_geometry ... ok
[INFO] [stdout] test smooth::tests::a_lone_short_step_is_lengthened_until_the_valley_is_gone ... ok
[INFO] [stdout] test smooth::tests::an_even_staircase_is_left_alone ... ok
[INFO] [stdout] test smear::tests::zero_samples_is_an_error_rather_than_a_silent_pair ... ok
[INFO] [stdout] test smooth::tests::an_ideal_single_valley_is_left_alone ... ok
[INFO] [stdout] test smooth::tests::raising_the_limit_lets_the_deep_valley_be_fixed ... ok
[INFO] [stdout] test smooth::tests::an_ideal_slope_is_left_alone ... ok
[INFO] [stdout] test smooth::tests::smoothing_does_not_open_a_new_valley_next_door ... ok
[INFO] [stdout] test smooth::tests::smoothing_does_not_split_the_shape ... ok
[INFO] [stdout] test subpixel::tests::a_fraction_outside_the_unit_interval_is_an_error ... ok
[INFO] [stdout] test subpixel::tests::a_moved_silhouette_is_counted_so_the_caller_can_see_it ... ok
[INFO] [stdout] test subpixel::tests::a_pair_without_an_intermediate_is_reported_rather_than_invented ... ok
[INFO] [stdout] test smooth::tests::smoothing_twice_changes_nothing_the_second_time ... ok
[INFO] [stdout] test smooth::tests::the_area_changes_by_at_most_one_pixel_per_move ... ok
[INFO] [stdout] test subpixel::tests::a_single_dot_in_a_fresh_column_is_put_back ... ok
[INFO] [stdout] test subpixel::tests::rounding_the_offset_collapses_the_fraction_into_two_values ... ok
[INFO] [stdout] test subpixel::tests::the_exclusion_mask_is_never_touched ... ok
[INFO] [stdout] test subpixel::tests::one_pouring_rule_reproduces_the_four_rows_of_the_table ... ok
[INFO] [stdout] test subpixel::tests::neither_method_leaves_the_palette ... ok
[INFO] [stdout] test subpixel::tests::the_fast_method_stays_inside_the_palette_because_of_the_forcing_step ... ok
[INFO] [stdout] test subpixel::tests::the_silhouette_is_counted_after_the_isolated_columns_are_fixed ... ok
[INFO] [stdout] test tilejson::tests::a_document_from_another_format_version_is_an_error ... ok
[INFO] [stdout] test tilejson::tests::a_tile_id_beyond_the_count_is_an_error ... ok
[INFO] [stdout] test tilejson::tests::flags_that_are_not_set_are_left_out ... ok
[INFO] [stdout] test tilejson::tests::the_canonical_document_round_trips ... ok
[INFO] [stdout] test tileset::tests::a_size_that_is_not_a_multiple_of_the_tile_is_an_error ... ok
[INFO] [stdout] test tileset::tests::a_symmetric_tile_always_picks_the_smallest_transform_id ... ok
[INFO] [stdout] test tileset::tests::a_tile_that_appears_once_is_not_counted_as_mirror_reliant ... ok
[INFO] [stdout] test tileset::tests::every_transform_has_an_inverse_inside_the_set ... ok
[INFO] [stdout] test tileset::tests::rebuilding_reproduces_the_picture_in_every_mode ... ok
[INFO] [stdout] test tileset::tests::rotation_only_merges_under_flip_rotate ... ok
[INFO] [stdout] test tileset::tests::the_default_mode_does_not_merge_a_mirrored_tile ... ok
[INFO] [stdout] test tileset::tests::the_eight_transforms_are_all_distinct_on_an_asymmetric_tile ... ok
[INFO] [stdout] test tilejson::tests::a_map_whose_cells_do_not_fill_the_grid_is_an_error ... ok
[INFO] [stdout] test tween::tests::a_ring_has_one_hole_and_a_disc_has_none ... ok
[INFO] [stdout] test tween::tests::t_outside_the_unit_interval_is_an_error ... ok
[INFO] [stdout] test guide::tests::the_checkerboard_never_puts_the_same_colour_side_by_side ... ok
[INFO] [stdout] test tween::tests::the_ends_reproduce_the_key_frames_exactly ... ok
[INFO] [stdout] test tween::tests::the_margin_does_not_move_the_zero_contour ... ok
[INFO] [stdout] test tween::tests::the_centroid_shift_gets_the_room_it_needs_even_with_no_margin ... ok
[INFO] [stdout] test tween::tests::translating_a_shape_lands_on_the_true_middle_when_the_centroid_is_taken_out ... ok
[INFO] [stdout] test tween::tests::the_series_leaves_out_both_ends ... ok
[INFO] [stdout] test tween::tests::two_canvases_of_different_size_are_padded_not_truncated ... ok
[INFO] [stdout] test tween::tests::the_plain_field_thins_across_the_motion_and_vanishes_at_twice_the_radius ... ok
[INFO] [stdout] test validate::tests::a_conforming_sprite_passes ... ok
[INFO] [stdout] test validate::tests::a_partial_tile_at_the_edge_is_still_counted ... ok
[INFO] [stdout] test validate::tests::a_rounded_duration_is_not_a_violation ... ok
[INFO] [stdout] test validate::tests::a_size_that_is_not_a_multiple_of_the_tile_is_a_violation ... ok
[INFO] [stdout] test validate::tests::a_transparent_colour_away_from_index_zero_is_a_violation ... ok
[INFO] [stdout] test validate::tests::an_empty_target_checks_nothing_but_says_so ... ok
[INFO] [stdout] test validate::tests::a_duration_that_is_not_a_multiple_of_the_frame_period_is_a_violation ... ok
[INFO] [stdout] test validate::tests::every_builtin_target_can_be_looked_up ... ok
[INFO] [stdout] test validate::tests::the_report_serialises_to_json ... ok
[INFO] [stdout] test validate::tests::too_many_colours_in_one_tile_is_a_violation ... ok
[INFO] [stdout] test validate::tests::too_many_colours_in_the_palette_is_a_violation ... ok
[INFO] [stdout] test validate::tests::a_canvas_larger_than_the_screen_is_a_violation ... ok
[INFO] [stdout] test tween::tests::the_result_lies_between_the_intersection_and_the_union ... ok
[INFO] [stdout] test smear::tests::the_sweep_contains_both_ends_because_it_takes_the_upper_envelope ... ok
[INFO] [stdout] test smear::tests::a_fast_move_only_connects_once_the_centroid_is_taken_out ... ok
[INFO] [stdout] test smear::tests::the_plain_sweep_is_exactly_the_union_it_was_supposed_to_beat ... ok
[INFO] [stderr]    Doc-tests pxsmith_core
[INFO] [stdout] test smear::tests::too_few_samples_break_the_sweep_into_beads ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 467 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 6.27s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b", kill_on_drop: false }`
[INFO] [stdout] 779fd3f9c7ef4351de329ce47f012eec955aea149d11e7136a5066095447ad9b
