[INFO] cloning repository https://github.com/mcarolan/rusty-ray
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mcarolan/rusty-ray" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmcarolan%2Frusty-ray", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmcarolan%2Frusty-ray'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] fe5bd58d6ae69effdb61acb18b7f69d8abbda3cf
[INFO] testing mcarolan/rusty-ray against master#d98a5da813da67eb189387b8ccfb73cf481275d8+rustflags=-Copt-level=3 for pr-138759-retry
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmcarolan%2Frusty-ray" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/mcarolan/rusty-ray
[INFO] finished tweaking git repo https://github.com/mcarolan/rusty-ray
[INFO] tweaked toml for git repo https://github.com/mcarolan/rusty-ray written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/mcarolan/rusty-ray on toolchain d98a5da813da67eb189387b8ccfb73cf481275d8
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/mcarolan/rusty-ray 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" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] c35dcf6d1e7d7208a6320239d93b4c2ebfe8a83d3c7194398904f8443b9d5848
[INFO] running `Command { std: "docker" "start" "-a" "c35dcf6d1e7d7208a6320239d93b4c2ebfe8a83d3c7194398904f8443b9d5848", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c35dcf6d1e7d7208a6320239d93b4c2ebfe8a83d3c7194398904f8443b9d5848", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c35dcf6d1e7d7208a6320239d93b4c2ebfe8a83d3c7194398904f8443b9d5848", kill_on_drop: false }`
[INFO] [stdout] c35dcf6d1e7d7208a6320239d93b4c2ebfe8a83d3c7194398904f8443b9d5848
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Copt-level=3" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 0b1904803082ee835c891f1d72e4341092253a6d118d9e00a2c1705e2d2aa27a
[INFO] running `Command { std: "docker" "start" "-a" "0b1904803082ee835c891f1d72e4341092253a6d118d9e00a2c1705e2d2aa27a", kill_on_drop: false }`
[INFO] [stderr]    Compiling autocfg v1.1.0
[INFO] [stderr]    Compiling lazy_static v1.4.0
[INFO] [stderr]    Compiling num-traits v0.2.15
[INFO] [stderr]    Compiling approx v0.5.1
[INFO] [stderr]    Compiling rusty-ray v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: associated constants `DEFAULT_SPECULAR`, `DEFAULT_DIFFUSE`, and `DEFAULT` are never used
[INFO] [stdout]   --> src/lighting.rs:20:15
[INFO] [stdout]    |
[INFO] [stdout] 18 | impl Material {
[INFO] [stdout]    | ------------- associated constants in this implementation
[INFO] [stdout] 19 |     pub const DEFAULT_AMBIENT: f64 = 0.1;
[INFO] [stdout] 20 |     pub const DEFAULT_SPECULAR: f64 = 0.9;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^
[INFO] [stdout] 21 |     pub const DEFAULT_DIFFUSE: f64 = 0.9;
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     pub const DEFAULT: Material = Material {
[INFO] [stdout]    |               ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated constants `SPHERE` and `PLANE` are never used
[INFO] [stdout]   --> src/object.rs:20:15
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Object {
[INFO] [stdout]    | ----------- associated constants in this implementation
[INFO] [stdout] 20 |     pub const SPHERE: Object = Object {
[INFO] [stdout]    |               ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub const PLANE: Object = Object {
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated constant `WHITE` is never used
[INFO] [stdout]   --> src/pattern.rs:31:15
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl Pattern {
[INFO] [stdout]    | ------------ associated constant in this implementation
[INFO] [stdout] 31 |     pub const WHITE: Pattern =  Pattern::Constant { value: Color::WHITE };
[INFO] [stdout]    |               ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `objects` is never used
[INFO] [stdout]   --> src/world.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl World {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn objects(&self, objects: Vec<Object>) -> World {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/object.rs:49:29
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections {
[INFO] [stdout]    |                             ^^^^^                            ------------------------- the lifetime gets resolved as `'_`
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections<'_> {
[INFO] [stdout]    |                                                                                       ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/ray.rs:56:16
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn hit(&self) -> Option<&Intersection> {
[INFO] [stdout]    |                ^^^^^            -------------
[INFO] [stdout]    |                |                ||
[INFO] [stdout]    |                |                |the lifetimes get resolved as `'_`
[INFO] [stdout]    |                |                the lifetimes get resolved as `'_`
[INFO] [stdout]    |                this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn hit(&self) -> Option<&Intersection<'_>> {
[INFO] [stdout]    |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/world.rs:39:22
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections {
[INFO] [stdout]    |                      ^^^^^                ------------- the lifetime gets resolved as `'_`
[INFO] [stdout]    |                      |
[INFO] [stdout]    |                      this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections<'_> {
[INFO] [stdout]    |                                                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.75s
[INFO] running `Command { std: "docker" "inspect" "0b1904803082ee835c891f1d72e4341092253a6d118d9e00a2c1705e2d2aa27a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0b1904803082ee835c891f1d72e4341092253a6d118d9e00a2c1705e2d2aa27a", kill_on_drop: false }`
[INFO] [stdout] 0b1904803082ee835c891f1d72e4341092253a6d118d9e00a2c1705e2d2aa27a
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Copt-level=3" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] cc3a9c64db68f1ae948ddf66b7bff8add2af8707090dd0ce4b788da6ff2c5ca9
[INFO] running `Command { std: "docker" "start" "-a" "cc3a9c64db68f1ae948ddf66b7bff8add2af8707090dd0ce4b788da6ff2c5ca9", kill_on_drop: false }`
[INFO] [stderr]    Compiling rusty-ray v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: method `objects` is never used
[INFO] [stdout]   --> src/world.rs:32:12
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl World {
[INFO] [stdout]    | ---------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 32 |     pub fn objects(&self, objects: Vec<Object>) -> World {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/object.rs:49:29
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections {
[INFO] [stdout]    |                             ^^^^^                            ------------------------- the lifetime gets resolved as `'_`
[INFO] [stdout]    |                             |
[INFO] [stdout]    |                             this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections<'_> {
[INFO] [stdout]    |                                                                                       ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/ray.rs:56:16
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn hit(&self) -> Option<&Intersection> {
[INFO] [stdout]    |                ^^^^^            -------------
[INFO] [stdout]    |                |                ||
[INFO] [stdout]    |                |                |the lifetimes get resolved as `'_`
[INFO] [stdout]    |                |                the lifetimes get resolved as `'_`
[INFO] [stdout]    |                this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub fn hit(&self) -> Option<&Intersection<'_>> {
[INFO] [stdout]    |                                              ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stdout]   --> src/world.rs:39:22
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections {
[INFO] [stdout]    |                      ^^^^^                ------------- the lifetime gets resolved as `'_`
[INFO] [stdout]    |                      |
[INFO] [stdout]    |                      this lifetime flows to the output
[INFO] [stdout]    |
[INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections<'_> {
[INFO] [stdout]    |                                                        ++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.72s
[INFO] running `Command { std: "docker" "inspect" "cc3a9c64db68f1ae948ddf66b7bff8add2af8707090dd0ce4b788da6ff2c5ca9", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "cc3a9c64db68f1ae948ddf66b7bff8add2af8707090dd0ce4b788da6ff2c5ca9", kill_on_drop: false }`
[INFO] [stdout] cc3a9c64db68f1ae948ddf66b7bff8add2af8707090dd0ce4b788da6ff2c5ca9
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid -Copt-level=3" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+d98a5da813da67eb189387b8ccfb73cf481275d8" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] efb3d62ab028d773463551482231424423168862658b8c57580b5cdb0a584ed5
[INFO] running `Command { std: "docker" "start" "-a" "efb3d62ab028d773463551482231424423168862658b8c57580b5cdb0a584ed5", kill_on_drop: false }`
[INFO] [stderr] warning: method `objects` is never used
[INFO] [stderr]   --> src/world.rs:32:12
[INFO] [stderr]    |
[INFO] [stderr] 25 | impl World {
[INFO] [stderr]    | ---------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 32 |     pub fn objects(&self, objects: Vec<Object>) -> World {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stderr]   --> src/object.rs:49:29
[INFO] [stderr]    |
[INFO] [stderr] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections {
[INFO] [stderr]    |                             ^^^^^                            ------------------------- the lifetime gets resolved as `'_`
[INFO] [stderr]    |                             |
[INFO] [stderr]    |                             this lifetime flows to the output
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stderr] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stderr]    |
[INFO] [stderr] 49 |     pub fn object_intersect(&self, ray: &crate::ray::Ray) -> crate::ray::Intersections<'_> {
[INFO] [stderr]    |                                                                                       ++++
[INFO] [stderr] 
[INFO] [stderr] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stderr]   --> src/ray.rs:56:16
[INFO] [stderr]    |
[INFO] [stderr] 56 |     pub fn hit(&self) -> Option<&Intersection> {
[INFO] [stderr]    |                ^^^^^            -------------
[INFO] [stderr]    |                |                ||
[INFO] [stderr]    |                |                |the lifetimes get resolved as `'_`
[INFO] [stderr]    |                |                the lifetimes get resolved as `'_`
[INFO] [stderr]    |                this lifetime flows to the output
[INFO] [stderr]    |
[INFO] [stderr] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stderr]    |
[INFO] [stderr] 56 |     pub fn hit(&self) -> Option<&Intersection<'_>> {
[INFO] [stderr]    |                                              ++++
[INFO] [stderr] 
[INFO] [stderr] warning: lifetime flowing from input to output with different syntax can be confusing
[INFO] [stderr]   --> src/world.rs:39:22
[INFO] [stderr]    |
[INFO] [stderr] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections {
[INFO] [stderr]    |                      ^^^^^                ------------- the lifetime gets resolved as `'_`
[INFO] [stderr]    |                      |
[INFO] [stderr]    |                      this lifetime flows to the output
[INFO] [stderr]    |
[INFO] [stderr] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths
[INFO] [stderr]    |
[INFO] [stderr] 39 |     pub fn intersect(&self, ray: &Ray) -> Intersections<'_> {
[INFO] [stderr]    |                                                        ++++
[INFO] [stderr] 
[INFO] [stderr] warning: `rusty-ray` (bin "rusty-ray" test) generated 4 warnings
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.03s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/rusty_ray-abe0207d68148ae1)
[INFO] [stdout] 
[INFO] [stdout] running 115 tests
[INFO] [stdout] test color::tests::test_canvas_generate_ppm_ends_with_newline ... ok
[INFO] [stdout] test color::tests::test_canvas_generate_ppm_header ... ok
[INFO] [stdout] test color::tests::test_canvas_generate_ppm_simple ... ok
[INFO] [stdout] test color::tests::test_canvas_generate_ppm_long_lines ... ok
[INFO] [stdout] test color::tests::test_canvas_write_pixel ... ok
[INFO] [stdout] test color::tests::test_canvas_new ... ok
[INFO] [stdout] test color::tests::test_color_operations ... ok
[INFO] [stdout] test color::tests::test_new ... ok
[INFO] [stdout] test color::tests::test_color_multiply ... ok
[INFO] [stdout] test lighting::tests::lighting_eye_between_light_surface ... ok
[INFO] [stdout] test lighting::tests::lighting_eye_between_light_surface_shadow ... ok
[INFO] [stdout] test lighting::tests::lighting_eye_in_reflection_path ... ok
[INFO] [stdout] test matrix2::tests::matrix_construct_inspect ... ok
[INFO] [stdout] test matrix3::tests::matrix3_cofactor ... ok
[INFO] [stdout] test matrix2::tests::matrix_determinant ... ok
[INFO] [stdout] test matrix3::tests::matrix3_determinant ... ok
[INFO] [stdout] test matrix3::tests::matrix3_sub_matrix ... ok
[INFO] [stdout] test matrix3::tests::matrix_construct_inspect ... ok
[INFO] [stdout] test matrix4::tests::matrix_inverse_3 ... ok
[INFO] [stdout] test matrix4::tests::matrix_is_invertible ... ok
[INFO] [stdout] test matrix4::tests::matrix_is_not_invertible ... ok
[INFO] [stdout] test matrix4::tests::matrix4_determinant ... ok
[INFO] [stdout] test lighting::tests::lighting_eye_between_light_surface_eye_offset_45_deg ... ok
[INFO] [stdout] test matrix4::tests::matrix4_sub_matrix ... ok
[INFO] [stdout] test matrix4::tests::matrix_construct_inspect ... ok
[INFO] [stdout] test matrix4::tests::matrix_equality ... ok
[INFO] [stdout] test matrix4::tests::matrix_inequality ... ok
[INFO] [stdout] test matrix4::tests::matrix_inverse ... ok
[INFO] [stdout] test lighting::tests::lighting_eye_opposite_light_surface_eye_offset_45_deg ... ok
[INFO] [stdout] test matrix4::tests::matrix_multiplication ... ok
[INFO] [stdout] test lighting::tests::lighting_pattern ... ok
[INFO] [stdout] test matrix4::tests::matrix_multiplication_identity ... ok
[INFO] [stdout] test matrix4::tests::matrix_multiply_by_inverse ... ok
[INFO] [stdout] test matrix4::tests::matrix_tuple_multiplication ... ok
[INFO] [stdout] test matrix4::tests::matrix_transpose_identity ... ok
[INFO] [stdout] test matrix4::tests::matrix_transpose ... ok
[INFO] [stdout] test matrix4::tests::matrix_tuple_multiplication_identity ... ok
[INFO] [stdout] test pattern::tests::checker_pattern ... ok
[INFO] [stdout] test pattern::tests::gradient_pattern ... ok
[INFO] [stdout] test pattern::tests::ring_pattern ... ok
[INFO] [stdout] test pattern::tests::stripe_alternates_x ... ok
[INFO] [stdout] test pattern::tests::stripe_constant_y ... ok
[INFO] [stdout] test pattern::tests::stripe_constant_z ... ok
[INFO] [stdout] test pattern::tests::stripe_object_pattern_transform ... ok
[INFO] [stdout] test pattern::tests::stripe_object_transform ... ok
[INFO] [stdout] test pattern::tests::stripe_pattern_transform ... ok
[INFO] [stdout] test plane::tests::normal_constant_everywhere ... ok
[INFO] [stdout] test plane::tests::plane_intersections ... ok
[INFO] [stdout] test plane::tests::plane_no_intersection ... ok
[INFO] [stdout] test ray::tests::intersections_all_negative ... ok
[INFO] [stdout] test ray::tests::intersections_all_positive ... ok
[INFO] [stdout] test ray::tests::intersections_negative ... ok
[INFO] [stdout] test ray::tests::ray_point_distance ... ok
[INFO] [stdout] test ray::tests::intersections_smallest_non_negative ... ok
[INFO] [stdout] test ray::tests::ray_sphere_scaled ... ok
[INFO] [stdout] test ray::tests::sphere_intersect_inside ... ok
[INFO] [stdout] test ray::tests::sphere_intersect_miss ... ok
[INFO] [stdout] test ray::tests::sphere_intersect_behind ... ok
[INFO] [stdout] test ray::tests::sphere_intersect_one_point ... ok
[INFO] [stdout] test ray::tests::ray_transform ... ok
[INFO] [stdout] test sphere::tests::ray_sphere_normal_at ... ok
[INFO] [stdout] test ray::tests::sphere_intersect_two_points ... ok
[INFO] [stdout] test sphere::tests::ray_sphere_normal_at_transformed ... ok
[INFO] [stdout] test transform::tests::transform_chain ... ok
[INFO] [stdout] test transform::tests::transform_rotate_x ... ok
[INFO] [stdout] test transform::tests::transform_rotate_y ... ok
[INFO] [stdout] test transform::tests::transform_scale_point ... ok
[INFO] [stdout] test transform::tests::transform_shearing ... ok
[INFO] [stdout] test transform::tests::transform_scale_vector ... ok
[INFO] [stdout] test ray::tests::ray_sphere_translated ... ok
[INFO] [stdout] test transform::tests::transform_inverse_scale ... ok
[INFO] [stdout] test transform::tests::transform_translate_vector ... ok
[INFO] [stdout] test transform::tests::view_transform_moves_world ... ok
[INFO] [stdout] test transform::tests::view_transform_default ... ok
[INFO] [stdout] test transform::tests::view_transform_pos_z ... ok
[INFO] [stdout] test transform::tests::transform_reflection ... ok
[INFO] [stdout] test tuple::tests::test_add_tuples ... ok
[INFO] [stdout] test transform::tests::transform_rotate_z ... ok
[INFO] [stdout] test transform::tests::transform_translate ... ok
[INFO] [stdout] test transform::tests::view_transform_arb ... ok
[INFO] [stdout] test tuple::tests::test_cross ... ok
[INFO] [stdout] test tuple::tests::test_point_tuple ... ok
[INFO] [stdout] test tuple::tests::test_reflect_45_deg ... ok
[INFO] [stdout] test tuple::tests::test_scalar_mul ... ok
[INFO] [stdout] test tuple::tests::test_scalar_div ... ok
[INFO] [stdout] test tuple::tests::test_subtract_two_points ... ok
[INFO] [stdout] test tuple::tests::test_normalize ... ok
[INFO] [stdout] test tuple::tests::test_subtract_vector_from_zero_vector ... ok
[INFO] [stdout] test tuple::tests::test_subtract_two_vectors ... ok
[INFO] [stdout] test tuple::tests::test_dot ... ok
[INFO] [stdout] test tuple::tests::test_subtract_vector_point ... ok
[INFO] [stdout] test tuple::tests::test_vector_tuple ... ok
[INFO] [stdout] test tuple::tests::test_magnitude ... ok
[INFO] [stdout] test tuple::tests::test_reflect_45_slanted ... ok
[INFO] [stdout] test tuple::tests::test_negate ... ok
[INFO] [stdout] test world::tests::camera_pixel_size ... ok
[INFO] [stdout] test world::tests::camera_ray_for_pixel_center ... ok
[INFO] [stdout] test world::tests::camera_ray_for_pixel_corner ... ok
[INFO] [stdout] test world::tests::camera_ray_for_pixel_transformed ... ok
[INFO] [stdout] test world::tests::hit_offset_point ... ok
[INFO] [stdout] test world::tests::is_shadowed ... ok
[INFO] [stdout] test world::tests::precompute_intersection ... ok
[INFO] [stdout] test world::tests::camera_render ... ok
[INFO] [stdout] test world::tests::precompute_intersection_inside ... ok
[INFO] [stdout] test world::tests::shade_intersection ... ok
[INFO] [stdout] test world::tests::shade_intersection_inside ... ok
[INFO] [stdout] test world::tests::shade_intersection_shadow ... ok
[INFO] [stdout] test world::tests::world_color_at_no_intersection ... ok
[INFO] [stdout] test world::tests::world_color_hit ... ok
[INFO] [stdout] test world::tests::world_color_intersection_behind_ray ... ok
[INFO] [stdout] test world::tests::world_intersect ... ok
[INFO] [stdout] test matrix3::tests::matrix3_minor ... ok
[INFO] [stdout] test matrix4::tests::matrix_inverse_2 ... ok
[INFO] [stdout] test lighting::tests::lighting_behind_surface ... ok
[INFO] [stdout] test transform::tests::transform_inverse_translate ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 115 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "efb3d62ab028d773463551482231424423168862658b8c57580b5cdb0a584ed5", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "efb3d62ab028d773463551482231424423168862658b8c57580b5cdb0a584ed5", kill_on_drop: false }`
[INFO] [stdout] efb3d62ab028d773463551482231424423168862658b8c57580b5cdb0a584ed5
