[INFO] cloning repository https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmateuszkaczmarczyk999%2Fcgfs_with_wgpu", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmateuszkaczmarczyk999%2Fcgfs_with_wgpu'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 54286704cb3d4f6441f3b4735c64671a79b67ade
[INFO] checking mateuszkaczmarczyk999/cgfs_with_wgpu against master#bca37a20bd376ce3fd138e7cdee7fe704e0f8814 for pr-139493-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmateuszkaczmarczyk999%2Fcgfs_with_wgpu" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu
[INFO] finished tweaking git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu
[INFO] tweaked toml for git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu on toolchain bca37a20bd376ce3fd138e7cdee7fe704e0f8814
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu 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" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded gpu-allocator v0.23.0
[INFO] [stderr]   Downloaded wgpu-types v0.18.0
[INFO] [stderr]   Downloaded wgpu v0.18.0
[INFO] [stderr]   Downloaded wgpu-hal v0.18.1
[INFO] [stderr]   Downloaded wgpu-core v0.18.1
[INFO] [stderr]   Downloaded naga v0.14.2
[INFO] [stderr]   Downloaded windows v0.51.1
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] a7a75b61e8ee76bef3db07dc5bcf672ae57eae60996341abcefbd72929cc37a8
[INFO] running `Command { std: "docker" "start" "-a" "a7a75b61e8ee76bef3db07dc5bcf672ae57eae60996341abcefbd72929cc37a8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "a7a75b61e8ee76bef3db07dc5bcf672ae57eae60996341abcefbd72929cc37a8", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a7a75b61e8ee76bef3db07dc5bcf672ae57eae60996341abcefbd72929cc37a8", kill_on_drop: false }`
[INFO] [stdout] a7a75b61e8ee76bef3db07dc5bcf672ae57eae60996341abcefbd72929cc37a8
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-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" "-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:aa71247004a7fa38d13ec170f48f06cdedf5bc50b2a8645e56ed7e992e6fa513" "/opt/rustwide/cargo-home/bin/cargo" "+bca37a20bd376ce3fd138e7cdee7fe704e0f8814" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b845116003eee5575546df1def782f5a90539117e11d88df48a63497da1f1291
[INFO] running `Command { std: "docker" "start" "-a" "b845116003eee5575546df1def782f5a90539117e11d88df48a63497da1f1291", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.74
[INFO] [stderr]    Compiling libc v0.2.151
[INFO] [stderr]    Compiling pkg-config v0.3.28
[INFO] [stderr]     Checking libloading v0.8.1
[INFO] [stderr]    Compiling xml-rs v0.8.19
[INFO] [stderr]     Checking smallvec v1.11.2
[INFO] [stderr]    Compiling thiserror v1.0.56
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling ahash v0.8.7
[INFO] [stderr]    Compiling num-traits v0.2.17
[INFO] [stderr]     Checking termcolor v1.4.0
[INFO] [stderr]     Checking miniz_oxide v0.7.1
[INFO] [stderr]    Compiling ash v0.37.3+1.3.251
[INFO] [stderr]    Compiling khronos-egl v6.0.0
[INFO] [stderr]     Checking bit-vec v0.6.3
[INFO] [stderr]     Checking fdeflate v0.3.3
[INFO] [stderr]     Checking gpu-descriptor-types v0.1.2
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]     Checking gpu-alloc-types v0.3.0
[INFO] [stderr]     Checking hexf-parse v0.2.1
[INFO] [stderr]    Compiling rustix v0.38.28
[INFO] [stderr]     Checking flate2 v1.0.28
[INFO] [stderr]     Checking aho-corasick v1.1.2
[INFO] [stderr]     Checking gpu-alloc v0.6.0
[INFO] [stderr]     Checking bit-set v0.5.3
[INFO] [stderr]     Checking wgpu-types v0.18.0
[INFO] [stderr]     Checking renderdoc-sys v1.0.0
[INFO] [stderr]     Checking profiling v1.0.13
[INFO] [stderr]     Checking glow v0.13.0
[INFO] [stderr]     Checking codespan-reporting v0.11.1
[INFO] [stderr]     Checking linux-raw-sys v0.4.12
[INFO] [stderr]     Checking spin v0.9.8
[INFO] [stderr]     Checking hashbrown v0.14.3
[INFO] [stderr]     Checking futures-sink v0.3.30
[INFO] [stderr]     Checking futures-core v0.3.30
[INFO] [stderr]     Checking png v0.17.10
[INFO] [stderr]     Checking pollster v0.3.0
[INFO] [stderr]    Compiling wayland-sys v0.29.5
[INFO] [stderr]    Compiling smithay-client-toolkit v0.16.1
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]     Checking indexmap v2.1.0
[INFO] [stderr]     Checking gpu-descriptor v0.2.4
[INFO] [stderr]    Compiling syn v2.0.46
[INFO] [stderr]    Compiling wayland-scanner v0.29.5
[INFO] [stderr]     Checking nix v0.24.3
[INFO] [stderr]     Checking nix v0.25.1
[INFO] [stderr]     Checking parking_lot_core v0.9.9
[INFO] [stderr]     Checking getrandom v0.2.11
[INFO] [stderr]     Checking memmap2 v0.5.10
[INFO] [stderr]     Checking mio v0.8.10
[INFO] [stderr]     Checking spirv v0.2.0+1.5.4
[INFO] [stderr]     Checking nanorand v0.7.0
[INFO] [stderr]     Checking flume v0.11.0
[INFO] [stderr]     Checking parking_lot v0.12.1
[INFO] [stderr]     Checking regex-automata v0.4.3
[INFO] [stderr]     Checking is-terminal v0.4.10
[INFO] [stderr]    Compiling wayland-client v0.29.5
[INFO] [stderr]    Compiling wayland-protocols v0.29.5
[INFO] [stderr]    Compiling winit v0.28.7
[INFO] [stderr]     Checking wayland-commons v0.29.5
[INFO] [stderr]    Compiling thiserror-impl v1.0.56
[INFO] [stderr]    Compiling bytemuck_derive v1.5.0
[INFO] [stderr]     Checking bytemuck v1.14.0
[INFO] [stderr]     Checking regex v1.10.2
[INFO] [stderr]     Checking naga v0.14.2
[INFO] [stderr]     Checking calloop v0.10.6
[INFO] [stderr]     Checking env_logger v0.10.1
[INFO] [stderr]     Checking tiny-skia-path v0.8.4
[INFO] [stderr]     Checking tiny-skia v0.8.4
[INFO] [stderr]     Checking wayland-cursor v0.29.5
[INFO] [stderr]     Checking wgpu-hal v0.18.1
[INFO] [stderr]     Checking wgpu-core v0.18.1
[INFO] [stderr]     Checking wgpu v0.18.0
[INFO] [stderr]     Checking sctk-adwaita v0.5.4
[INFO] [stderr]     Checking cgfs_with_wgpu v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:64:22
[INFO] [stdout]    |
[INFO] [stdout] 64 |             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stdout]    |                      ^^                                        ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 64 -             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stdout] 64 +             'x' => { -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2  },
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:65:22
[INFO] [stdout]    |
[INFO] [stdout] 65 |             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stdout]    |                      ^^                                        ^^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 65 -             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stdout] 65 +             'y' => { -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2  },
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:66:20
[INFO] [stdout]    |
[INFO] [stdout] 66 |             _ => { ( -1 ..= 1 ) }
[INFO] [stdout]    |                    ^^        ^^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 66 -             _ => { ( -1 ..= 1 ) }
[INFO] [stdout] 66 +             _ => { -1 ..= 1  }
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/raytracer.rs:119:93
[INFO] [stdout]     |
[INFO] [stdout] 119 |                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stdout]     |                                                                                             ^             ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 119 -                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stdout] 119 +                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, 0.001 ..= 1.0 );
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/raytracer.rs:129:99
[INFO] [stdout]     |
[INFO] [stdout] 129 |                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stdout]     |                                                                                                   ^                       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 129 -                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stdout] 129 +                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, 0.001 ..= f32::INFINITY );
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/raytracer.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |         let ray_range = (t_min ..= t_max);
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 165 -         let ray_range = (t_min ..= t_max);
[INFO] [stdout] 165 +         let ray_range = t_min ..= t_max ;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `to_inverse_rotation_mat4` and `to_inverse_translation_mat4`
[INFO] [stdout]  --> src/rasterizer.rs:3:221
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...t4, mat4_default, multiply_mat4_mat4, to_inverse_translation_mat4, to_inverse_rotation_mat4};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `interpolate`, `multiply_color`, `rotate_vector`, `to_rotation_mat4`, `to_scale_mat4`, `to_translation_mat4`, `vector_addition`, and `vector_multiplication`
[INFO] [stdout]  --> src/projection.rs:1:30
[INFO] [stdout]   |
[INFO] [stdout] 1 | ...s, interpolate, multiply_color, vector_multiplication, vector_addition, rotate_vector, to_translation_mat4, to_scale_mat4, to_rotation_mat4, m...
[INFO] [stdout]   |       ^^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Raytracer` and `init_raytracer`
[INFO] [stdout]   --> src/lib.rs:19:18
[INFO] [stdout]    |
[INFO] [stdout] 19 | use raytracer::{ Raytracer, init_raytracer };
[INFO] [stdout]    |                  ^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:64:22
[INFO] [stdout]    |
[INFO] [stdout] 64 |             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stdout]    |                      ^^                                        ^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 64 -             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stdout] 64 +             'x' => { -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2  },
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:65:22
[INFO] [stdout]    |
[INFO] [stdout] 65 |             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stdout]    |                      ^^                                        ^^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 65 -             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stdout] 65 +             'y' => { -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2  },
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/raytracer.rs:66:20
[INFO] [stdout]    |
[INFO] [stdout] 66 |             _ => { ( -1 ..= 1 ) }
[INFO] [stdout]    |                    ^^        ^^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 66 -             _ => { ( -1 ..= 1 ) }
[INFO] [stdout] 66 +             _ => { -1 ..= 1  }
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/raytracer.rs:119:93
[INFO] [stdout]     |
[INFO] [stdout] 119 |                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stdout]     |                                                                                             ^             ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 119 -                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stdout] 119 +                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, 0.001 ..= 1.0 );
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around method argument
[INFO] [stdout]    --> src/raytracer.rs:129:99
[INFO] [stdout]     |
[INFO] [stdout] 129 |                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stdout]     |                                                                                                   ^                       ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 129 -                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stdout] 129 +                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, 0.001 ..= f32::INFINITY );
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/raytracer.rs:165:25
[INFO] [stdout]     |
[INFO] [stdout] 165 |         let ray_range = (t_min ..= t_max);
[INFO] [stdout]     |                         ^               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 165 -         let ray_range = (t_min ..= t_max);
[INFO] [stdout] 165 +         let ray_range = t_min ..= t_max ;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `to_inverse_rotation_mat4` and `to_inverse_translation_mat4`
[INFO] [stdout]  --> src/rasterizer.rs:3:221
[INFO] [stdout]   |
[INFO] [stdout] 3 | ...t4, mat4_default, multiply_mat4_mat4, to_inverse_translation_mat4, to_inverse_rotation_mat4};
[INFO] [stdout]   |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `interpolate`, `multiply_color`, `rotate_vector`, `to_rotation_mat4`, `to_scale_mat4`, `to_translation_mat4`, `vector_addition`, and `vector_multiplication`
[INFO] [stdout]  --> src/projection.rs:1:30
[INFO] [stdout]   |
[INFO] [stdout] 1 | ...s, interpolate, multiply_color, vector_multiplication, vector_addition, rotate_vector, to_translation_mat4, to_scale_mat4, to_rotation_mat4, m...
[INFO] [stdout]   |       ^^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Raytracer` and `init_raytracer`
[INFO] [stdout]   --> src/lib.rs:19:18
[INFO] [stdout]    |
[INFO] [stdout] 19 | use raytracer::{ Raytracer, init_raytracer };
[INFO] [stdout]    |                  ^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:198:13
[INFO] [stdout]     |
[INFO] [stdout] 198 |         let mut shade: [f32; 3] = [10.0, 0.0, 100.0];
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let mut x_vals_b_to_c = interpolate(b[1], b[0] as f32, c[1], c[0] as f32);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |         let mut shade_b_to_c = interpolate(b[1], shade[1], c[1], shade[2]);
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:206:13
[INFO] [stdout]     |
[INFO] [stdout] 206 |         let mut x_vals_a_to_c = interpolate(a[1], a[0] as f32, c[1], c[0] as f32);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:207:13
[INFO] [stdout]     |
[INFO] [stdout] 207 |         let mut shade_a_to_c = interpolate(a[1], shade[0], c[1], shade[2]);
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:198:13
[INFO] [stdout]     |
[INFO] [stdout] 198 |         let mut shade: [f32; 3] = [10.0, 0.0, 100.0];
[INFO] [stdout]     |             ----^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:203:13
[INFO] [stdout]     |
[INFO] [stdout] 203 |         let mut x_vals_b_to_c = interpolate(b[1], b[0] as f32, c[1], c[0] as f32);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:204:13
[INFO] [stdout]     |
[INFO] [stdout] 204 |         let mut shade_b_to_c = interpolate(b[1], shade[1], c[1], shade[2]);
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:206:13
[INFO] [stdout]     |
[INFO] [stdout] 206 |         let mut x_vals_a_to_c = interpolate(a[1], a[0] as f32, c[1], c[0] as f32);
[INFO] [stdout]     |             ----^^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rasterizer.rs:207:13
[INFO] [stdout]     |
[INFO] [stdout] 207 |         let mut shade_a_to_c = interpolate(a[1], shade[0], c[1], shade[2]);
[INFO] [stdout]     |             ----^^^^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `X`, `Y`, and `Z` are never constructed
[INFO] [stdout]  --> src/utilities.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum Axis { X, Y, Z }
[INFO] [stdout]   |          ----   ^  ^  ^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Axis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dot_product` is never used
[INFO] [stdout]  --> src/utilities.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn dot_product(v1: [f32; 3], v2: [f32; 3]) -> f32 {
[INFO] [stdout]   |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `vector_length` is never used
[INFO] [stdout]  --> src/utilities.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub fn vector_length(vector: [f32; 3]) -> f32 {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `vector_subtraction` is never used
[INFO] [stdout]   --> src/utilities.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn vector_subtraction(v1: [f32; 3], v2: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scale_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn scale_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `divide_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn divide_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `color_to_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn color_to_vector(color: [i32; 3]) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn reverse_vector(v1: [f32; 3]) -> [f32; 3]  {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiply_color` is never used
[INFO] [stdout]   --> src/utilities.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn multiply_color(color: [f32; 3], factor: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Raytracer` is never constructed
[INFO] [stdout]   --> src/raytracer.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Raytracer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/raytracer.rs:23:15
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl Raytracer {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  23 |     pub const CANVAS: [i32; 2] = [ 1600, 1600 ];
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     const VIEWPORT: [f32; 3] = [1.0, 1.0, 1.0];
[INFO] [stdout]     |           ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     const BACKGROUND_COLOR: [i32; 3] = [0, 0, 0];
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  38 |     pub fn put_pixel(&mut self, x: i32, y: i32, rgb: [f32; 3]) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub fn get_state(&mut self) -> &[Vertex] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn get_canvas_size(&mut self) -> [i32; 2] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn add_to_scene(&mut self, sphere: Sphere) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn add_light(&mut self, light: Light) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     fn get_canvas_range(&mut self, axis: char) -> RangeInclusive<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     fn canvas_to_viewport(&mut self, x: i32, y: i32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     fn diffuse_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     fn reflect_ray(&self, ray: [f32; 3], normal: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     fn specular_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3], bounce_vec: [f32; 3], specular_s...
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     fn add_reflection(&self, color: [f32; 3], reflection: [f32; 3], reflective: f32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     fn compute_lighting(&self, position: [f32; 3], normal: [f32; 3], bounce: [f32; 3], specular: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     fn closest_intersection(&self, origin: [f32; 3], direction: [f32; 3], ray_range: RangeInclusive<f32>) -> (Option<&Sphere>, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn trace_ray(&self, origin: [f32; 3], direction: [f32; 3], t_min: f32, t_max: f32, depth: u32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn pass(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_raytracer` is never used
[INFO] [stdout]    --> src/raytracer.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn init_raytracer() -> Raytracer {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/geometry.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Vertex {
[INFO] [stdout]    |            ^^^^^^ field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check` is never used
[INFO] [stdout]   --> src/geometry.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / #[repr(C)]
[INFO] [stdout]  9 | | #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
[INFO] [stdout] 10 | | pub struct Vertex {
[INFO] [stdout] 11 | |     pub position: [f32; 3],
[INFO] [stdout] 12 | |     pub color: [f32; 3],
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LightMode` is never used
[INFO] [stdout]   --> src/geometry.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum LightMode {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Light` is never constructed
[INFO] [stdout]   --> src/geometry.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Light {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Sphere` is never constructed
[INFO] [stdout]   --> src/geometry.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct Sphere {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `intersect_ray` and `get_normal` are never used
[INFO] [stdout]   --> src/geometry.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl Sphere {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] 58 |     pub fn intersect_ray(&self, camera_origin: [f32; 3], ray_direction: [f32; 3]) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn get_normal(&self, position: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `viewport` and `projection` are never read
[INFO] [stdout]    --> src/rasterizer.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub struct Rasterizer {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] 103 |     state: Vec<Vertex>,
[INFO] [stdout] 104 |     viewport: Viewport,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 105 |     camera: Camera,
[INFO] [stdout] 106 |     projection: PerspectiveProjection,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `CAMERA_POSITION` and `draw_filled_triangle` are never used
[INFO] [stdout]    --> src/rasterizer.rs:112:15
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl Rasterizer {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn draw_filled_triangle(&mut self, point_a: [i32; 2], point_b: [i32; 2], point_c: [i32; 2], rgb: [f32; 3]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field_of_view`, `aspect_ratio`, `near_clipping_plane`, and `far_clipping_plane` are never read
[INFO] [stdout]   --> src/projection.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct PerspectiveProjection {
[INFO] [stdout]    |            --------------------- fields in this struct
[INFO] [stdout] 32 |     field_of_view: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 33 |     aspect_ratio: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 34 |     near_clipping_plane: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     far_clipping_plane: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_projection_mat4` is never used
[INFO] [stdout]   --> src/projection.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl PerspectiveProjection {
[INFO] [stdout]    | -------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn get_projection_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> src/projection.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Viewport {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 60 |     width: f32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 61 |     height: f32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_canvas_mat4` is never used
[INFO] [stdout]   --> src/projection.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | impl Viewport {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn to_canvas_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `X`, `Y`, and `Z` are never constructed
[INFO] [stdout]  --> src/utilities.rs:2:17
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum Axis { X, Y, Z }
[INFO] [stdout]   |          ----   ^  ^  ^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Axis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `dot_product` is never used
[INFO] [stdout]  --> src/utilities.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn dot_product(v1: [f32; 3], v2: [f32; 3]) -> f32 {
[INFO] [stdout]   |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `vector_length` is never used
[INFO] [stdout]  --> src/utilities.rs:8:8
[INFO] [stdout]   |
[INFO] [stdout] 8 | pub fn vector_length(vector: [f32; 3]) -> f32 {
[INFO] [stdout]   |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `vector_subtraction` is never used
[INFO] [stdout]   --> src/utilities.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn vector_subtraction(v1: [f32; 3], v2: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `scale_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn scale_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `divide_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:28:8
[INFO] [stdout]    |
[INFO] [stdout] 28 | pub fn divide_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `color_to_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:32:8
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub fn color_to_vector(color: [i32; 3]) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `reverse_vector` is never used
[INFO] [stdout]   --> src/utilities.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn reverse_vector(v1: [f32; 3]) -> [f32; 3]  {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `multiply_color` is never used
[INFO] [stdout]   --> src/utilities.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn multiply_color(color: [f32; 3], factor: f32) -> [f32; 3] {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Raytracer` is never constructed
[INFO] [stdout]   --> src/raytracer.rs:17:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct Raytracer {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/raytracer.rs:23:15
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl Raytracer {
[INFO] [stdout]     | -------------- associated items in this implementation
[INFO] [stdout]  23 |     pub const CANVAS: [i32; 2] = [ 1600, 1600 ];
[INFO] [stdout]     |               ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     const VIEWPORT: [f32; 3] = [1.0, 1.0, 1.0];
[INFO] [stdout]     |           ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  29 |     const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  32 |     const BACKGROUND_COLOR: [i32; 3] = [0, 0, 0];
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  35 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  38 |     pub fn put_pixel(&mut self, x: i32, y: i32, rgb: [f32; 3]) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  47 |     pub fn get_state(&mut self) -> &[Vertex] {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     pub fn get_canvas_size(&mut self) -> [i32; 2] {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  54 |     pub fn add_to_scene(&mut self, sphere: Sphere) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn add_light(&mut self, light: Light) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     fn get_canvas_range(&mut self, axis: char) -> RangeInclusive<i32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  70 |     fn canvas_to_viewport(&mut self, x: i32, y: i32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  77 |     fn diffuse_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3]) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     fn reflect_ray(&self, ray: [f32; 3], normal: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     fn specular_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3], bounce_vec: [f32; 3], specular_s...
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 104 |     fn add_reflection(&self, color: [f32; 3], reflection: [f32; 3], reflective: f32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 110 |     fn compute_lighting(&self, position: [f32; 3], normal: [f32; 3], bounce: [f32; 3], specular: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 143 |     fn closest_intersection(&self, origin: [f32; 3], direction: [f32; 3], ray_range: RangeInclusive<f32>) -> (Option<&Sphere>, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     fn trace_ray(&self, origin: [f32; 3], direction: [f32; 3], t_min: f32, t_max: f32, depth: u32) -> [f32; 3] {
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 188 |     pub fn pass(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_raytracer` is never used
[INFO] [stdout]    --> src/raytracer.rs:199:8
[INFO] [stdout]     |
[INFO] [stdout] 199 | pub fn init_raytracer() -> Raytracer {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/geometry.rs:10:12
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub struct Vertex {
[INFO] [stdout]    |            ^^^^^^ field in this struct
[INFO] [stdout]    |
[INFO] [stdout]    = help: consider removing this field
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `check` is never used
[INFO] [stdout]   --> src/geometry.rs:8:1
[INFO] [stdout]    |
[INFO] [stdout]  8 | / #[repr(C)]
[INFO] [stdout]  9 | | #[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
[INFO] [stdout] 10 | | pub struct Vertex {
[INFO] [stdout] 11 | |     pub position: [f32; 3],
[INFO] [stdout] 12 | |     pub color: [f32; 3],
[INFO] [stdout] 13 | | }
[INFO] [stdout]    | |_^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LightMode` is never used
[INFO] [stdout]   --> src/geometry.rs:36:10
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub enum LightMode {
[INFO] [stdout]    |          ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Light` is never constructed
[INFO] [stdout]   --> src/geometry.rs:42:12
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub struct Light {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Sphere` is never constructed
[INFO] [stdout]   --> src/geometry.rs:49:12
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub struct Sphere {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `intersect_ray` and `get_normal` are never used
[INFO] [stdout]   --> src/geometry.rs:58:12
[INFO] [stdout]    |
[INFO] [stdout] 57 | impl Sphere {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] 58 |     pub fn intersect_ray(&self, camera_origin: [f32; 3], ray_direction: [f32; 3]) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     pub fn get_normal(&self, position: [f32; 3]) -> [f32; 3] {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `viewport` and `projection` are never read
[INFO] [stdout]    --> src/rasterizer.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub struct Rasterizer {
[INFO] [stdout]     |            ---------- fields in this struct
[INFO] [stdout] 103 |     state: Vec<Vertex>,
[INFO] [stdout] 104 |     viewport: Viewport,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 105 |     camera: Camera,
[INFO] [stdout] 106 |     projection: PerspectiveProjection,
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `CAMERA_POSITION` and `draw_filled_triangle` are never used
[INFO] [stdout]    --> src/rasterizer.rs:112:15
[INFO] [stdout]     |
[INFO] [stdout] 109 | impl Rasterizer {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     pub fn draw_filled_triangle(&mut self, point_a: [i32; 2], point_b: [i32; 2], point_c: [i32; 2], rgb: [f32; 3]) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field_of_view`, `aspect_ratio`, `near_clipping_plane`, and `far_clipping_plane` are never read
[INFO] [stdout]   --> src/projection.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | pub struct PerspectiveProjection {
[INFO] [stdout]    |            --------------------- fields in this struct
[INFO] [stdout] 32 |     field_of_view: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 33 |     aspect_ratio: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 34 |     near_clipping_plane: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 35 |     far_clipping_plane: f32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_projection_mat4` is never used
[INFO] [stdout]   --> src/projection.rs:43:12
[INFO] [stdout]    |
[INFO] [stdout] 38 | impl PerspectiveProjection {
[INFO] [stdout]    | -------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 43 |     pub fn get_projection_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `width` and `height` are never read
[INFO] [stdout]   --> src/projection.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub struct Viewport {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 60 |     width: f32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 61 |     height: f32,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `to_canvas_mat4` is never used
[INFO] [stdout]   --> src/projection.rs:68:12
[INFO] [stdout]    |
[INFO] [stdout] 64 | impl Viewport {
[INFO] [stdout]    | ------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn to_canvas_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 49.30s
[INFO] running `Command { std: "docker" "inspect" "b845116003eee5575546df1def782f5a90539117e11d88df48a63497da1f1291", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b845116003eee5575546df1def782f5a90539117e11d88df48a63497da1f1291", kill_on_drop: false }`
[INFO] [stdout] b845116003eee5575546df1def782f5a90539117e11d88df48a63497da1f1291
