[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] testing mateuszkaczmarczyk999/cgfs_with_wgpu against 1.97.0-beta.6+cargoflags=--release for beta-1.98-release-3
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fmateuszkaczmarczyk999%2Fcgfs_with_wgpu" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-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-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/mateuszkaczmarczyk999/cgfs_with_wgpu on toolchain 1.97.0-beta.6
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.97.0-beta.6" "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" "+1.97.0-beta.6" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded pkg-config v0.3.28
[INFO] [stderr]   Downloaded once_cell v1.19.0
[INFO] [stderr]   Downloaded errno v0.3.8
[INFO] [stderr]   Downloaded hermit-abi v0.3.3
[INFO] [stderr]   Downloaded arrayvec v0.7.4
[INFO] [stderr]   Downloaded wasm-bindgen-macro v0.2.89
[INFO] [stderr]   Downloaded fdeflate v0.3.3
[INFO] [stderr]   Downloaded ab_glyph v0.2.23
[INFO] [stderr]   Downloaded libloading v0.8.1
[INFO] [stderr]   Downloaded pollster v0.3.0
[INFO] [stderr]   Downloaded foreign-types-macros v0.2.3
[INFO] [stderr]   Downloaded gpu-descriptor v0.2.4
[INFO] [stderr]   Downloaded gpu-descriptor-types v0.1.2
[INFO] [stderr]   Downloaded glutin_wgl_sys v0.5.0
[INFO] [stderr]   Downloaded is-terminal v0.4.10
[INFO] [stderr]   Downloaded profiling v1.0.13
[INFO] [stderr]   Downloaded wasm-bindgen-macro-support v0.2.89
[INFO] [stderr]   Downloaded winapi-util v0.1.6
[INFO] [stderr]   Downloaded renderdoc-sys v1.0.0
[INFO] [stderr]   Downloaded com-rs v0.2.1
[INFO] [stderr]   Downloaded xml-rs v0.8.19
[INFO] [stderr]   Downloaded windows-targets v0.52.0
[INFO] [stderr]   Downloaded range-alloc v0.1.3
[INFO] [stderr]   Downloaded libredox v0.0.2
[INFO] [stderr]   Downloaded arrayref v0.3.7
[INFO] [stderr]   Downloaded toml_datetime v0.6.3
[INFO] [stderr]   Downloaded xcursor v0.3.5
[INFO] [stderr]   Downloaded thiserror-impl v1.0.56
[INFO] [stderr]   Downloaded paste v1.0.14
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.39
[INFO] [stderr]   Downloaded gpu-alloc-types v0.3.0
[INFO] [stderr]   Downloaded wasm-bindgen-shared v0.2.89
[INFO] [stderr]   Downloaded thiserror v1.0.56
[INFO] [stderr]   Downloaded bytemuck_derive v1.5.0
[INFO] [stderr]   Downloaded jobserver v0.1.27
[INFO] [stderr]   Downloaded redox_syscall v0.4.1
[INFO] [stderr]   Downloaded khronos-egl v6.0.0
[INFO] [stderr]   Downloaded gpu-alloc v0.6.0
[INFO] [stderr]   Downloaded wasm-bindgen-backend v0.2.89
[INFO] [stderr]   Downloaded presser v0.3.1
[INFO] [stderr]   Downloaded d3d12 v0.7.0
[INFO] [stderr]   Downloaded rustix v0.38.28
[INFO] [stderr]   Downloaded parking_lot_core v0.9.9
[INFO] [stderr]   Downloaded termcolor v1.4.0
[INFO] [stderr]   Downloaded rustc-demangle v0.1.23
[INFO] [stderr]   Downloaded backtrace v0.3.69
[INFO] [stderr]   Downloaded lock_api v0.4.11
[INFO] [stderr]   Downloaded unicode-width v0.1.11
[INFO] [stderr]   Downloaded hassle-rs v0.10.0
[INFO] [stderr]   Downloaded env_logger v0.10.1
[INFO] [stderr]   Downloaded quote v1.0.35
[INFO] [stderr]   Downloaded bitflags v2.4.1
[INFO] [stderr]   Downloaded zerocopy-derive v0.7.32
[INFO] [stderr]   Downloaded addr2line v0.21.0
[INFO] [stderr]   Downloaded bytemuck v1.14.0
[INFO] [stderr]   Downloaded getrandom v0.2.11
[INFO] [stderr]   Downloaded log v0.4.20
[INFO] [stderr]   Downloaded allocator-api2 v0.2.16
[INFO] [stderr]   Downloaded ahash v0.8.7
[INFO] [stderr]   Downloaded core-foundation-sys v0.8.6
[INFO] [stderr]   Downloaded num-traits v0.2.17
[INFO] [stderr]   Downloaded gpu-allocator v0.23.0
[INFO] [stderr]   Downloaded widestring v1.0.2
[INFO] [stderr]   Downloaded smallvec v1.11.2
[INFO] [stderr]   Downloaded wasm-bindgen v0.2.89
[INFO] [stderr]   Downloaded indexmap v2.1.0
[INFO] [stderr]   Downloaded proc-macro2 v1.0.74
[INFO] [stderr]   Downloaded wgpu-types v0.18.0
[INFO] [stderr]   Downloaded js-sys v0.3.66
[INFO] [stderr]   Downloaded flate2 v1.0.28
[INFO] [stderr]   Downloaded memchr v2.7.1
[INFO] [stderr]   Downloaded cc v1.0.83
[INFO] [stderr]   Downloaded flume v0.11.0
[INFO] [stderr]   Downloaded bumpalo v3.14.0
[INFO] [stderr]   Downloaded png v0.17.10
[INFO] [stderr]   Downloaded owned_ttf_parser v0.20.0
[INFO] [stderr]   Downloaded wgpu v0.18.0
[INFO] [stderr]   Downloaded mio v0.8.10
[INFO] [stderr]   Downloaded hashbrown v0.14.3
[INFO] [stderr]   Downloaded zerocopy v0.7.32
[INFO] [stderr]   Downloaded glow v0.13.0
[INFO] [stderr]   Downloaded ttf-parser v0.20.0
[INFO] [stderr]   Downloaded winnow v0.5.32
[INFO] [stderr]   Downloaded aho-corasick v1.1.2
[INFO] [stderr]   Downloaded wgpu-core v0.18.1
[INFO] [stderr]   Downloaded syn v2.0.46
[INFO] [stderr]   Downloaded wgpu-hal v0.18.1
[INFO] [stderr]   Downloaded regex v1.10.2
[INFO] [stderr]   Downloaded windows_aarch64_msvc v0.52.0
[INFO] [stderr]   Downloaded object v0.32.2
[INFO] [stderr]   Downloaded gimli v0.28.1
[INFO] [stderr]   Downloaded regex-syntax v0.8.2
[INFO] [stderr]   Downloaded linux-raw-sys v0.4.12
[INFO] [stderr]   Downloaded windows_x86_64_gnullvm v0.52.0
[INFO] [stderr]   Downloaded windows_aarch64_gnullvm v0.52.0
[INFO] [stderr]   Downloaded ash v0.37.3+1.3.251
[INFO] [stderr]   Downloaded naga v0.14.2
[INFO] [stderr]   Downloaded web-sys v0.3.64
[INFO] [stderr]   Downloaded regex-automata v0.4.3
[INFO] [stderr]   Downloaded libc v0.2.151
[INFO] [stderr]   Downloaded windows_x86_64_msvc v0.52.0
[INFO] [stderr]   Downloaded windows_x86_64_gnu v0.52.0
[INFO] [stderr]   Downloaded windows_i686_msvc v0.52.0
[INFO] [stderr]   Downloaded windows_i686_gnu v0.52.0
[INFO] [stderr]   Downloaded orbclient v0.3.47
[INFO] [stderr]   Downloaded metal v0.27.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:00c5645b54fe3ce5dae1417175e3c7fb6a6646c021d554ecd63a097b8b9f3602" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2
[INFO] running `Command { std: "docker" "start" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", 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" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", 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" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "build" "--frozen" "--message-format=json" "--release", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.74
[INFO] [stderr]    Compiling autocfg v1.1.0
[INFO] [stderr]    Compiling libc v0.2.151
[INFO] [stderr]    Compiling version_check v0.9.4
[INFO] [stderr]    Compiling once_cell v1.19.0
[INFO] [stderr]    Compiling pkg-config v0.3.28
[INFO] [stderr]    Compiling libloading v0.8.1
[INFO] [stderr]    Compiling xml-rs v0.8.19
[INFO] [stderr]    Compiling bitflags v2.4.1
[INFO] [stderr]    Compiling smallvec v1.11.2
[INFO] [stderr]    Compiling log v0.4.20
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling thiserror v1.0.56
[INFO] [stderr]    Compiling ahash v0.8.7
[INFO] [stderr]    Compiling wayland-sys v0.29.5
[INFO] [stderr]    Compiling lock_api v0.4.11
[INFO] [stderr]    Compiling dlib v0.5.2
[INFO] [stderr]    Compiling lazy_static v1.4.0
[INFO] [stderr]    Compiling quote v1.0.35
[INFO] [stderr]    Compiling zerocopy v0.7.32
[INFO] [stderr]    Compiling num-traits v0.2.17
[INFO] [stderr]    Compiling allocator-api2 v0.2.16
[INFO] [stderr]    Compiling crc32fast v1.3.2
[INFO] [stderr]    Compiling syn v2.0.46
[INFO] [stderr]    Compiling wayland-scanner v0.29.5
[INFO] [stderr]    Compiling simd-adler32 v0.3.7
[INFO] [stderr]    Compiling slotmap v1.0.7
[INFO] [stderr]    Compiling hashbrown v0.14.3
[INFO] [stderr]    Compiling termcolor v1.4.0
[INFO] [stderr]    Compiling arrayvec v0.7.4
[INFO] [stderr]    Compiling scoped-tls v1.0.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.9
[INFO] [stderr]    Compiling adler v1.0.2
[INFO] [stderr]    Compiling downcast-rs v1.2.0
[INFO] [stderr]    Compiling miniz_oxide v0.7.1
[INFO] [stderr]    Compiling nix v0.24.3
[INFO] [stderr]    Compiling ash v0.37.3+1.3.251
[INFO] [stderr]    Compiling bit-vec v0.6.3
[INFO] [stderr]    Compiling wayland-client v0.29.5
[INFO] [stderr]    Compiling wayland-protocols v0.29.5
[INFO] [stderr]    Compiling khronos-egl v6.0.0
[INFO] [stderr]    Compiling unicode-width v0.1.11
[INFO] [stderr]    Compiling equivalent v1.0.1
[INFO] [stderr]    Compiling codespan-reporting v0.11.1
[INFO] [stderr]    Compiling indexmap v2.1.0
[INFO] [stderr]    Compiling spirv v0.2.0+1.5.4
[INFO] [stderr]    Compiling bit-set v0.5.3
[INFO] [stderr]    Compiling flate2 v1.0.28
[INFO] [stderr]    Compiling wayland-commons v0.29.5
[INFO] [stderr]    Compiling thiserror-impl v1.0.56
[INFO] [stderr]    Compiling bytemuck_derive v1.5.0
[INFO] [stderr]    Compiling nix v0.25.1
[INFO] [stderr]    Compiling fdeflate v0.3.3
[INFO] [stderr]    Compiling smithay-client-toolkit v0.16.1
[INFO] [stderr]    Compiling gpu-descriptor-types v0.1.2
[INFO] [stderr]    Compiling gpu-alloc-types v0.3.0
[INFO] [stderr]    Compiling libloading v0.7.4
[INFO] [stderr]    Compiling raw-window-handle v0.5.2
[INFO] [stderr]    Compiling bytemuck v1.14.0
[INFO] [stderr]    Compiling rustc-hash v1.1.0
[INFO] [stderr]    Compiling strict-num v0.1.1
[INFO] [stderr]    Compiling ttf-parser v0.20.0
[INFO] [stderr]    Compiling rustix v0.38.28
[INFO] [stderr]    Compiling vec_map v0.8.2
[INFO] [stderr]    Compiling hexf-parse v0.2.1
[INFO] [stderr]    Compiling unicode-xid v0.2.4
[INFO] [stderr]    Compiling xcursor v0.3.5
[INFO] [stderr]    Compiling arrayref v0.3.7
[INFO] [stderr]    Compiling memchr v2.7.1
[INFO] [stderr]    Compiling tiny-skia-path v0.8.4
[INFO] [stderr]    Compiling wayland-cursor v0.29.5
[INFO] [stderr]    Compiling aho-corasick v1.1.2
[INFO] [stderr]    Compiling calloop v0.10.6
[INFO] [stderr]    Compiling naga v0.14.2
[INFO] [stderr]    Compiling png v0.17.10
[INFO] [stderr]    Compiling owned_ttf_parser v0.20.0
[INFO] [stderr]    Compiling gpu-alloc v0.6.0
[INFO] [stderr]    Compiling gpu-descriptor v0.2.4
[INFO] [stderr]    Compiling parking_lot v0.12.1
[INFO] [stderr]    Compiling memmap2 v0.5.10
[INFO] [stderr]    Compiling getrandom v0.2.11
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]    Compiling wgpu-types v0.18.0
[INFO] [stderr]    Compiling ab_glyph_rasterizer v0.1.8
[INFO] [stderr]    Compiling cfg_aliases v0.1.1
[INFO] [stderr]    Compiling glow v0.13.0
[INFO] [stderr]    Compiling profiling v1.0.13
[INFO] [stderr]    Compiling regex-syntax v0.8.2
[INFO] [stderr]    Compiling renderdoc-sys v1.0.0
[INFO] [stderr]    Compiling linux-raw-sys v0.4.12
[INFO] [stderr]    Compiling regex-automata v0.4.3
[INFO] [stderr]    Compiling ab_glyph v0.2.23
[INFO] [stderr]    Compiling winit v0.28.7
[INFO] [stderr]    Compiling nanorand v0.7.0
[INFO] [stderr]    Compiling tiny-skia v0.8.4
[INFO] [stderr]    Compiling spin v0.9.8
[INFO] [stderr]    Compiling futures-sink v0.3.30
[INFO] [stderr]    Compiling futures-core v0.3.30
[INFO] [stderr]    Compiling flume v0.11.0
[INFO] [stderr]    Compiling is-terminal v0.4.10
[INFO] [stderr]    Compiling mio v0.8.10
[INFO] [stderr]    Compiling instant v0.1.12
[INFO] [stderr]    Compiling humantime v2.1.0
[INFO] [stderr]    Compiling regex v1.10.2
[INFO] [stderr]    Compiling wgpu-hal v0.18.1
[INFO] [stderr]    Compiling env_logger v0.10.1
[INFO] [stderr]    Compiling pollster v0.3.0
[INFO] [stderr]    Compiling wgpu-core v0.18.1
[INFO] [stderr]    Compiling sctk-adwaita v0.5.4
[INFO] [stderr]    Compiling wgpu v0.18.0
[INFO] [stderr]    Compiling 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: 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]   | ^
[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 `release` profile [optimized] target(s) in 38.66s
[INFO] running `Command { std: "docker" "inspect" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", 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" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--no-run" "--message-format=json" "--release", kill_on_drop: false }`
[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: 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]   | ^
[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] [stderr]    Compiling cgfs_with_wgpu v0.1.0 (/opt/rustwide/workdir)
[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: 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: 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]   | ^
[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 `release` profile [optimized] target(s) in 1.10s
[INFO] running `Command { std: "docker" "inspect" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", 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" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2" "/opt/rustwide/cargo-home/bin/cargo" "+1.97.0-beta.6" "test" "--frozen" "--release", kill_on_drop: false }`
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:64:22
[INFO] [stderr]    |
[INFO] [stderr] 64 |             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stderr]    |                      ^^                                        ^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 64 -             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stderr] 64 +             'x' => { -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2  },
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:65:22
[INFO] [stderr]    |
[INFO] [stderr] 65 |             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stderr]    |                      ^^                                        ^^
[INFO] [stderr]    |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 65 -             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stderr] 65 +             'y' => { -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2  },
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:66:20
[INFO] [stderr]    |
[INFO] [stderr] 66 |             _ => { ( -1 ..= 1 ) }
[INFO] [stderr]    |                    ^^        ^^
[INFO] [stderr]    |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 66 -             _ => { ( -1 ..= 1 ) }
[INFO] [stderr] 66 +             _ => { -1 ..= 1  }
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around method argument
[INFO] [stderr]    --> src/raytracer.rs:119:93
[INFO] [stderr]     |
[INFO] [stderr] 119 |                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stderr]     |                                                                                             ^             ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 119 -                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stderr] 119 +                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, 0.001 ..= 1.0 );
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around method argument
[INFO] [stderr]    --> src/raytracer.rs:129:99
[INFO] [stderr]     |
[INFO] [stderr] 129 |                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stderr]     |                                                                                                   ^                       ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 129 -                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stderr] 129 +                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, 0.001 ..= f32::INFINITY );
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/raytracer.rs:165:25
[INFO] [stderr]     |
[INFO] [stderr] 165 |         let ray_range = (t_min ..= t_max);
[INFO] [stderr]     |                         ^               ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 165 -         let ray_range = (t_min ..= t_max);
[INFO] [stderr] 165 +         let ray_range = t_min ..= t_max ;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `to_inverse_rotation_mat4` and `to_inverse_translation_mat4`
[INFO] [stderr]  --> src/rasterizer.rs:3:221
[INFO] [stderr]   |
[INFO] [stderr] 3 | ...t4, mat4_default, multiply_mat4_mat4, to_inverse_translation_mat4, to_inverse_rotation_mat4};
[INFO] [stderr]   |                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `interpolate`, `multiply_color`, `rotate_vector`, `to_rotation_mat4`, `to_scale_mat4`, `to_translation_mat4`, `vector_addition`, and `vector_multiplication`
[INFO] [stderr]  --> src/projection.rs:1:30
[INFO] [stderr]   |
[INFO] [stderr] 1 | ...s, interpolate, multiply_color, vector_multiplication, vector_addition, rotate_vector, to_translation_mat4, to_scale_mat4, to_rotation_mat4, m...
[INFO] [stderr]   |       ^^^^^^^^^^^  ^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Raytracer` and `init_raytracer`
[INFO] [stderr]   --> src/lib.rs:19:18
[INFO] [stderr]    |
[INFO] [stderr] 19 | use raytracer::{ Raytracer, init_raytracer };
[INFO] [stderr]    |                  ^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/rasterizer.rs:198:13
[INFO] [stderr]     |
[INFO] [stderr] 198 |         let mut shade: [f32; 3] = [10.0, 0.0, 100.0];
[INFO] [stderr]     |             ----^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/rasterizer.rs:203:13
[INFO] [stderr]     |
[INFO] [stderr] 203 |         let mut x_vals_b_to_c = interpolate(b[1], b[0] as f32, c[1], c[0] as f32);
[INFO] [stderr]     |             ----^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/rasterizer.rs:204:13
[INFO] [stderr]     |
[INFO] [stderr] 204 |         let mut shade_b_to_c = interpolate(b[1], shade[1], c[1], shade[2]);
[INFO] [stderr]     |             ----^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/rasterizer.rs:206:13
[INFO] [stderr]     |
[INFO] [stderr] 206 |         let mut x_vals_a_to_c = interpolate(a[1], a[0] as f32, c[1], c[0] as f32);
[INFO] [stderr]     |             ----^^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/rasterizer.rs:207:13
[INFO] [stderr]     |
[INFO] [stderr] 207 |         let mut shade_a_to_c = interpolate(a[1], shade[0], c[1], shade[2]);
[INFO] [stderr]     |             ----^^^^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr] 
[INFO] [stderr] warning: variants `X`, `Y`, and `Z` are never constructed
[INFO] [stderr]  --> src/utilities.rs:2:17
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub enum Axis { X, Y, Z }
[INFO] [stderr]   |          ----   ^  ^  ^
[INFO] [stderr]   |          |
[INFO] [stderr]   |          variants in this enum
[INFO] [stderr]   |
[INFO] [stderr]   = note: `Axis` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: function `dot_product` is never used
[INFO] [stderr]  --> src/utilities.rs:4:8
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub fn dot_product(v1: [f32; 3], v2: [f32; 3]) -> f32 {
[INFO] [stderr]   |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `vector_length` is never used
[INFO] [stderr]  --> src/utilities.rs:8:8
[INFO] [stderr]   |
[INFO] [stderr] 8 | pub fn vector_length(vector: [f32; 3]) -> f32 {
[INFO] [stderr]   |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `vector_subtraction` is never used
[INFO] [stderr]   --> src/utilities.rs:12:8
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub fn vector_subtraction(v1: [f32; 3], v2: [f32; 3]) -> [f32; 3] {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `scale_vector` is never used
[INFO] [stderr]   --> src/utilities.rs:24:8
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub fn scale_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `divide_vector` is never used
[INFO] [stderr]   --> src/utilities.rs:28:8
[INFO] [stderr]    |
[INFO] [stderr] 28 | pub fn divide_vector(v1: [f32; 3], scalar: f32) -> [f32; 3] {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `color_to_vector` is never used
[INFO] [stderr]   --> src/utilities.rs:32:8
[INFO] [stderr]    |
[INFO] [stderr] 32 | pub fn color_to_vector(color: [i32; 3]) -> [f32; 3] {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `reverse_vector` is never used
[INFO] [stderr]   --> src/utilities.rs:36:8
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub fn reverse_vector(v1: [f32; 3]) -> [f32; 3]  {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `multiply_color` is never used
[INFO] [stderr]   --> src/utilities.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn multiply_color(color: [f32; 3], factor: f32) -> [f32; 3] {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Raytracer` is never constructed
[INFO] [stderr]   --> src/raytracer.rs:17:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | pub struct Raytracer {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/raytracer.rs:23:15
[INFO] [stderr]     |
[INFO] [stderr]  22 | impl Raytracer {
[INFO] [stderr]     | -------------- associated items in this implementation
[INFO] [stderr]  23 |     pub const CANVAS: [i32; 2] = [ 1600, 1600 ];
[INFO] [stderr]     |               ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  26 |     const VIEWPORT: [f32; 3] = [1.0, 1.0, 1.0];
[INFO] [stderr]     |           ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  29 |     const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  32 |     const BACKGROUND_COLOR: [i32; 3] = [0, 0, 0];
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  35 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  38 |     pub fn put_pixel(&mut self, x: i32, y: i32, rgb: [f32; 3]) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  47 |     pub fn get_state(&mut self) -> &[Vertex] {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  50 |     pub fn get_canvas_size(&mut self) -> [i32; 2] {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  54 |     pub fn add_to_scene(&mut self, sphere: Sphere) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  58 |     pub fn add_light(&mut self, light: Light) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  62 |     fn get_canvas_range(&mut self, axis: char) -> RangeInclusive<i32> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  70 |     fn canvas_to_viewport(&mut self, x: i32, y: i32) -> [f32; 3] {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  77 |     fn diffuse_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3]) -> f32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  87 |     fn reflect_ray(&self, ray: [f32; 3], normal: [f32; 3]) -> [f32; 3] {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     fn specular_reflection(&self, light_intensity: f32, light_vec: [f32; 3], normal_vec: [f32; 3], bounce_vec: [f32; 3], specular_s...
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 104 |     fn add_reflection(&self, color: [f32; 3], reflection: [f32; 3], reflective: f32) -> [f32; 3] {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 110 |     fn compute_lighting(&self, position: [f32; 3], normal: [f32; 3], bounce: [f32; 3], specular: f32) -> f32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 143 |     fn closest_intersection(&self, origin: [f32; 3], direction: [f32; 3], ray_range: RangeInclusive<f32>) -> (Option<&Sphere>, f32) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     fn trace_ray(&self, origin: [f32; 3], direction: [f32; 3], t_min: f32, t_max: f32, depth: u32) -> [f32; 3] {
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 188 |     pub fn pass(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `init_raytracer` is never used
[INFO] [stderr]    --> src/raytracer.rs:199:8
[INFO] [stderr]     |
[INFO] [stderr] 199 | pub fn init_raytracer() -> Raytracer {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/geometry.rs:10:12
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub struct Vertex {
[INFO] [stderr]    |            ^^^^^^ field in this struct
[INFO] [stderr]    |
[INFO] [stderr]    = help: consider removing this field
[INFO] [stderr] 
[INFO] [stderr] warning: function `check` is never used
[INFO] [stderr]  --> src/geometry.rs:8:1
[INFO] [stderr]   |
[INFO] [stderr] 8 | #[repr(C)]
[INFO] [stderr]   | ^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `LightMode` is never used
[INFO] [stderr]   --> src/geometry.rs:36:10
[INFO] [stderr]    |
[INFO] [stderr] 36 | pub enum LightMode {
[INFO] [stderr]    |          ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Light` is never constructed
[INFO] [stderr]   --> src/geometry.rs:42:12
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub struct Light {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Sphere` is never constructed
[INFO] [stderr]   --> src/geometry.rs:49:12
[INFO] [stderr]    |
[INFO] [stderr] 49 | pub struct Sphere {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `intersect_ray` and `get_normal` are never used
[INFO] [stderr]   --> src/geometry.rs:58:12
[INFO] [stderr]    |
[INFO] [stderr] 57 | impl Sphere {
[INFO] [stderr]    | ----------- methods in this implementation
[INFO] [stderr] 58 |     pub fn intersect_ray(&self, camera_origin: [f32; 3], ray_direction: [f32; 3]) -> (f32, f32) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 76 |     pub fn get_normal(&self, position: [f32; 3]) -> [f32; 3] {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `viewport` and `projection` are never read
[INFO] [stderr]    --> src/rasterizer.rs:104:5
[INFO] [stderr]     |
[INFO] [stderr] 102 | pub struct Rasterizer {
[INFO] [stderr]     |            ---------- fields in this struct
[INFO] [stderr] 103 |     state: Vec<Vertex>,
[INFO] [stderr] 104 |     viewport: Viewport,
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] 105 |     camera: Camera,
[INFO] [stderr] 106 |     projection: PerspectiveProjection,
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `CAMERA_POSITION` and `draw_filled_triangle` are never used
[INFO] [stderr]    --> src/rasterizer.rs:112:15
[INFO] [stderr]     |
[INFO] [stderr] 109 | impl Rasterizer {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub const CAMERA_POSITION: [f32; 3] = [0.0, 0.0, 0.0];
[INFO] [stderr]     |               ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 189 |     pub fn draw_filled_triangle(&mut self, point_a: [i32; 2], point_b: [i32; 2], point_c: [i32; 2], rgb: [f32; 3]) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `field_of_view`, `aspect_ratio`, `near_clipping_plane`, and `far_clipping_plane` are never read
[INFO] [stderr]   --> src/projection.rs:32:5
[INFO] [stderr]    |
[INFO] [stderr] 31 | pub struct PerspectiveProjection {
[INFO] [stderr]    |            --------------------- fields in this struct
[INFO] [stderr] 32 |     field_of_view: f32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 33 |     aspect_ratio: f32,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 34 |     near_clipping_plane: f32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 35 |     far_clipping_plane: f32,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `get_projection_mat4` is never used
[INFO] [stderr]   --> src/projection.rs:43:12
[INFO] [stderr]    |
[INFO] [stderr] 38 | impl PerspectiveProjection {
[INFO] [stderr]    | -------------------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 43 |     pub fn get_projection_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `width` and `height` are never read
[INFO] [stderr]   --> src/projection.rs:60:5
[INFO] [stderr]    |
[INFO] [stderr] 59 | pub struct Viewport {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] 60 |     width: f32,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 61 |     height: f32,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `to_canvas_mat4` is never used
[INFO] [stderr]   --> src/projection.rs:68:12
[INFO] [stderr]    |
[INFO] [stderr] 64 | impl Viewport {
[INFO] [stderr]    | ------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub fn to_canvas_mat4(&self) -> [[f32; 4]; 4] {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `cgfs_with_wgpu` (lib) generated 38 warnings (run `cargo fix --lib -p cgfs_with_wgpu` to apply 14 suggestions)
[INFO] [stderr] warning: `cgfs_with_wgpu` (lib test) generated 38 warnings (38 duplicates)
[INFO] [stderr]     Finished `release` profile [optimized] target(s) in 0.10s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/release/deps/cgfs_with_wgpu-81080dc92fc2d785)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/release/deps/cgfs_with_wgpu-f8d5b22d389784b0)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests cgfs_with_wgpu
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:64:22
[INFO] [stderr]    |
[INFO] [stderr] 64 |             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stderr]    |                      ^^                                        ^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 64 -             'x' => { ( -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2 ) },
[INFO] [stderr] 64 +             'x' => { -Self::CANVAS[0]/2 ..= Self::CANVAS[0]/2  },
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:65:22
[INFO] [stderr]    |
[INFO] [stderr] 65 |             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stderr]    |                      ^^                                        ^^
[INFO] [stderr]    |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 65 -             'y' => { ( -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2 ) },
[INFO] [stderr] 65 +             'y' => { -Self::CANVAS[1]/2 ..= Self::CANVAS[1]/2  },
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around block return value
[INFO] [stderr]   --> src/raytracer.rs:66:20
[INFO] [stderr]    |
[INFO] [stderr] 66 |             _ => { ( -1 ..= 1 ) }
[INFO] [stderr]    |                    ^^        ^^
[INFO] [stderr]    |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]    |
[INFO] [stderr] 66 -             _ => { ( -1 ..= 1 ) }
[INFO] [stderr] 66 +             _ => { -1 ..= 1  }
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around method argument
[INFO] [stderr]    --> src/raytracer.rs:119:93
[INFO] [stderr]     |
[INFO] [stderr] 119 |                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stderr]     |                                                                                             ^             ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 119 -                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, (0.001 ..= 1.0));
[INFO] [stderr] 119 +                     let (shadow_sphere, _) = self.closest_intersection(position, light_vec, 0.001 ..= 1.0 );
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around method argument
[INFO] [stderr]    --> src/raytracer.rs:129:99
[INFO] [stderr]     |
[INFO] [stderr] 129 |                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stderr]     |                                                                                                   ^                       ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 129 -                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, (0.001 ..= f32::INFINITY));
[INFO] [stderr] 129 +                     let (shadow_sphere, _) = self.closest_intersection(position, light.direction, 0.001 ..= f32::INFINITY );
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: unnecessary parentheses around assigned value
[INFO] [stderr]    --> src/raytracer.rs:165:25
[INFO] [stderr]     |
[INFO] [stderr] 165 |         let ray_range = (t_min ..= t_max);
[INFO] [stderr]     |                         ^               ^
[INFO] [stderr]     |
[INFO] [stderr] help: remove these parentheses
[INFO] [stderr]     |
[INFO] [stderr] 165 -         let ray_range = (t_min ..= t_max);
[INFO] [stderr] 165 +         let ray_range = t_min ..= t_max ;
[INFO] [stderr]     |
[INFO] [stderr] 
[INFO] [stderr] warning: 6 warnings emitted
[INFO] [stderr] 
[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" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2", kill_on_drop: false }`
[INFO] [stdout] e6390031a86e11651339f64c240cd98967b1e9544005557f23de9558c760b8e2
