[INFO] cloning repository https://github.com/gatewaytofredom/differential_projection_voxel_renderer
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/gatewaytofredom/differential_projection_voxel_renderer" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgatewaytofredom%2Fdifferential_projection_voxel_renderer", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgatewaytofredom%2Fdifferential_projection_voxel_renderer'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 62ea8dc9d196082dd5946f583cb4cb80de6a1920
[INFO] checking gatewaytofredom/differential_projection_voxel_renderer against 24e1a22664233bce1f9b5dc6eee7c1f74327e28c for pr-159343-retry
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fgatewaytofredom%2Fdifferential_projection_voxel_renderer" "/workspace/builds/worker-5-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/gatewaytofredom/differential_projection_voxel_renderer
[INFO] finished tweaking git repo https://github.com/gatewaytofredom/differential_projection_voxel_renderer
[INFO] tweaked toml for git repo https://github.com/gatewaytofredom/differential_projection_voxel_renderer written to /workspace/builds/worker-5-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/gatewaytofredom/differential_projection_voxel_renderer on toolchain 24e1a22664233bce1f9b5dc6eee7c1f74327e28c
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/gatewaytofredom/differential_projection_voxel_renderer 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" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3d5ced03c013a94a2f102a4510f48a6e9184255caf5fd8244f58017bde7f5210" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd
[INFO] running `Command { std: "docker" "start" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd", 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" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd" "/opt/rustwide/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd", 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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-w" "/opt/rustwide/workdir" "--user" "0:0" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd" "/opt/rustwide/cargo-home/bin/cargo" "+24e1a22664233bce1f9b5dc6eee7c1f74327e28c" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stderr]     Checking bitflags v2.10.0
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]     Checking linux-raw-sys v0.11.0
[INFO] [stderr]     Checking log v0.4.28
[INFO] [stderr]    Compiling zerocopy v0.8.27
[INFO] [stderr]     Checking smallvec v1.15.1
[INFO] [stderr]    Compiling cc v1.2.46
[INFO] [stderr]     Checking libloading v0.8.9
[INFO] [stderr]    Compiling wayland-sys v0.31.7
[INFO] [stderr]    Compiling quick-xml v0.37.5
[INFO] [stderr]    Compiling wayland-client v0.31.11
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]     Checking linux-raw-sys v0.4.15
[INFO] [stderr]    Compiling syn v2.0.110
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking dlib v0.5.2
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling drm-sys v0.7.0
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking memmap2 v0.9.9
[INFO] [stderr]     Checking as-raw-xcb-connection v1.0.1
[INFO] [stderr]     Checking strict-num v0.1.1
[INFO] [stderr]     Checking linux-raw-sys v0.6.5
[INFO] [stderr]     Checking xkeysym v0.2.1
[INFO] [stderr]    Compiling drm-fourcc v2.2.0
[INFO] [stderr]     Checking arrayref v0.3.9
[INFO] [stderr]     Checking either v1.15.0
[INFO] [stderr]     Checking cursor-icon v1.2.0
[INFO] [stderr]     Checking xcursor v0.3.10
[INFO] [stderr]    Compiling smithay-client-toolkit v0.18.1
[INFO] [stderr]     Checking ttf-parser v0.25.1
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]    Compiling tiny-xlib v0.2.4
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]     Checking ab_glyph_rasterizer v0.1.10
[INFO] [stderr]     Checking x11rb-protocol v0.13.2
[INFO] [stderr]     Checking arrayvec v0.7.6
[INFO] [stderr]     Checking memchr v2.7.6
[INFO] [stderr]     Checking clap_lex v0.7.6
[INFO] [stderr]     Checking regex-syntax v0.8.8
[INFO] [stderr]    Compiling cfg_aliases v0.1.1
[INFO] [stderr]     Checking ciborium-io v0.2.2
[INFO] [stderr]     Checking plotters-backend v0.3.7
[INFO] [stderr]     Checking tracing-core v0.1.34
[INFO] [stderr]    Compiling winit v0.29.15
[INFO] [stderr]     Checking clap_builder v4.5.52
[INFO] [stderr]    Compiling wayland-scanner v0.31.7
[INFO] [stderr]     Checking itertools v0.10.5
[INFO] [stderr]     Checking plotters-svg v0.3.7
[INFO] [stderr]    Compiling softbuffer v0.4.6
[INFO] [stderr]     Checking tracing v0.1.41
[INFO] [stderr]     Checking serde_json v1.0.145
[INFO] [stderr]     Checking cast v0.3.0
[INFO] [stderr]     Checking raw-window-handle v0.6.2
[INFO] [stderr]     Checking ctor-lite v0.1.0
[INFO] [stderr]     Checking walkdir v2.5.0
[INFO] [stderr]     Checking plotters v0.3.7
[INFO] [stderr]     Checking rayon v1.11.0
[INFO] [stderr]     Checking xkbcommon-dl v0.4.2
[INFO] [stderr]     Checking rand_xorshift v0.3.0
[INFO] [stderr]     Checking is-terminal v0.4.17
[INFO] [stderr]     Checking clap v4.5.52
[INFO] [stderr]     Checking anes v0.1.6
[INFO] [stderr]     Checking smol_str v0.2.2
[INFO] [stderr]     Checking oorandom v11.1.5
[INFO] [stderr]     Checking glam v0.25.0
[INFO] [stderr]    Compiling wayland-backend v0.3.11
[INFO] [stderr]    Compiling libmimalloc-sys v0.1.44
[INFO] [stderr]     Checking criterion-plot v0.5.0
[INFO] [stderr]     Checking regex-automata v0.4.13
[INFO] [stderr]     Checking owned_ttf_parser v0.25.1
[INFO] [stderr]     Checking ab_glyph v0.2.32
[INFO] [stderr]     Checking mimalloc v0.1.48
[INFO] [stderr]    Compiling zerocopy-derive v0.8.27
[INFO] [stderr]    Compiling bytemuck_derive v1.10.2
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]     Checking regex v1.12.2
[INFO] [stderr]     Checking bytemuck v1.24.0
[INFO] [stderr]     Checking tiny-skia-path v0.11.4
[INFO] [stderr]     Checking thiserror v1.0.69
[INFO] [stderr]     Checking drm-ffi v0.8.0
[INFO] [stderr]     Checking drm v0.12.0
[INFO] [stderr]     Checking tiny-skia v0.11.4
[INFO] [stderr]     Checking polling v3.11.0
[INFO] [stderr]     Checking gethostname v1.1.0
[INFO] [stderr]     Checking calloop v0.12.4
[INFO] [stderr]     Checking tinytemplate v1.2.1
[INFO] [stderr]     Checking wayland-csd-frame v0.3.0
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking half v2.7.1
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking ciborium-ll v0.2.2
[INFO] [stderr]     Checking ciborium v0.2.2
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking wayland-protocols v0.31.2
[INFO] [stderr]     Checking calloop-wayland-source v0.2.0
[INFO] [stderr]     Checking wayland-cursor v0.31.11
[INFO] [stderr]     Checking noise v0.9.0
[INFO] [stderr]     Checking criterion v0.5.1
[INFO] [stderr]     Checking wayland-protocols-wlr v0.2.0
[INFO] [stderr]     Checking wayland-protocols-plasma v0.2.0
[INFO] [stderr]     Checking x11rb v0.13.2
[INFO] [stderr]     Checking sctk-adwaita v0.8.3
[INFO] [stderr]     Checking voxel_engine v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::perf::FUNCTION_COUNTERS`
[INFO] [stdout]  --> src/meshing/binary_greedy.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::perf::FUNCTION_COUNTERS;
[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 import: `crate::count_call`
[INFO] [stdout]  --> src/rendering/framebuffer.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::count_call;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::perf::FUNCTION_COUNTERS`
[INFO] [stdout]  --> src/rendering/rasterizer.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::perf::FUNCTION_COUNTERS;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Mat4` and `Vec3`
[INFO] [stdout]   --> src/rendering/macrotile.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | use glam::{Mat4, Vec3};
[INFO] [stdout]    |            ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/rendering/macrotile.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::perf::FUNCTION_COUNTERS`
[INFO] [stdout]  --> src/meshing/binary_greedy.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::perf::FUNCTION_COUNTERS;
[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 import: `crate::voxel::BlockType`
[INFO] [stdout]    --> src/meshing/mesh.rs:758:13
[INFO] [stdout]     |
[INFO] [stdout] 758 |         use crate::voxel::BlockType;
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::count_call`
[INFO] [stdout]  --> src/rendering/framebuffer.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use crate::count_call;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::perf::FUNCTION_COUNTERS`
[INFO] [stdout]  --> src/rendering/rasterizer.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::perf::FUNCTION_COUNTERS;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Mat4` and `Vec3`
[INFO] [stdout]   --> src/rendering/macrotile.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 15 | use glam::{Mat4, Vec3};
[INFO] [stdout]    |            ^^^^  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::sync::Arc`
[INFO] [stdout]   --> src/rendering/macrotile.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 16 | use std::sync::Arc;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |             vertices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:451:13
[INFO] [stdout]     |
[INFO] [stdout] 451 |             indices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:476:13
[INFO] [stdout]     |
[INFO] [stdout] 476 |             vertices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:477:13
[INFO] [stdout]     |
[INFO] [stdout] 477 |             indices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:582:9
[INFO] [stdout]     |
[INFO] [stdout] 582 |         self.vertices.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:583:9
[INFO] [stdout]     |
[INFO] [stdout] 583 |         self.indices.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:450:13
[INFO] [stdout]     |
[INFO] [stdout] 450 |             vertices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:451:13
[INFO] [stdout]     |
[INFO] [stdout] 451 |             indices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:476:13
[INFO] [stdout]     |
[INFO] [stdout] 476 |             vertices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:477:13
[INFO] [stdout]     |
[INFO] [stdout] 477 |             indices: Vec::new(),
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::vertices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:582:9
[INFO] [stdout]     |
[INFO] [stdout] 582 |         self.vertices.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `meshing::mesh::ChunkMesh::indices`: Use faces array instead
[INFO] [stdout]    --> src/meshing/mesh.rs:583:9
[INFO] [stdout]     |
[INFO] [stdout] 583 |         self.indices.clear();
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rendering/rasterizer.rs:813:17
[INFO] [stdout]     |
[INFO] [stdout] 813 |             let mut min_local = face_list.min;
[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/rendering/rasterizer.rs:814:17
[INFO] [stdout]     |
[INFO] [stdout] 814 |             let mut max_local = face_list.max;
[INFO] [stdout]     |                 ----^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `row_offset`
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2051:21
[INFO] [stdout]      |
[INFO] [stdout] 2051 |                 let row_offset = y as usize * target.width();
[INFO] [stdout]      |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_row_offset`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2376:56
[INFO] [stdout]      |
[INFO] [stdout] 2290 |                     unsafe {
[INFO] [stdout]      |                     ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 2376 |                                     if let Some(idx) = unsafe {
[INFO] [stdout]      |                                                        ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2419:52
[INFO] [stdout]      |
[INFO] [stdout] 2290 |                     unsafe {
[INFO] [stdout]      |                     ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 2419 |                                 if let Some(idx) = unsafe {
[INFO] [stdout]      |                                                    ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `remainder`
[INFO] [stdout]    --> src/rendering/differential_projection.rs:102:13
[INFO] [stdout]     |
[INFO] [stdout] 102 |         let remainder = count % 8;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remainder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `quad_local_positions` is never used
[INFO] [stdout]    --> src/meshing/mesh.rs:527:8
[INFO] [stdout]     |
[INFO] [stdout] 438 | impl ChunkMesh {
[INFO] [stdout]     | -------------- associated function in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 527 |     fn quad_local_positions(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_POLY_VERTS` is never used
[INFO] [stdout]   --> src/rendering/rasterizer.rs:17:7
[INFO] [stdout]    |
[INFO] [stdout] 17 | const MAX_POLY_VERTS: usize = 8;
[INFO] [stdout]    |       ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProjectedPoint` is never constructed
[INFO] [stdout]    --> src/rendering/rasterizer.rs:309:8
[INFO] [stdout]     |
[INFO] [stdout] 309 | struct ProjectedPoint {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]     --> src/rendering/rasterizer.rs:434:8
[INFO] [stdout]      |
[INFO] [stdout]  350 | impl Rasterizer {
[INFO] [stdout]      | --------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  434 |     fn render_mesh_into_tile_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  494 |     fn render_tiny_quad_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  706 |     fn clip_polygon_near(input: &[Vec4], output: &mut [Vec4; MAX_POLY_VERTS]) -> usize {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  747 |     fn render_convex_polygon<T: PixelTarget>(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1471 |     fn render_triangle_from_clip<T: PixelTarget>(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1643 |     fn render_triangle_textured_tile_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2562 |     fn intersect_near_vec4(a: Vec4, b: Vec4, threshold: f32) -> Vec4 {
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 2571 |     fn clip_triangle_near_points(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rendering/rasterizer.rs:813:17
[INFO] [stdout]     |
[INFO] [stdout] 813 |             let mut min_local = face_list.min;
[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/rendering/rasterizer.rs:814:17
[INFO] [stdout]     |
[INFO] [stdout] 814 |             let mut max_local = face_list.max;
[INFO] [stdout]     |                 ----^^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `row_offset`
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2051:21
[INFO] [stdout]      |
[INFO] [stdout] 2051 |                 let row_offset = y as usize * target.width();
[INFO] [stdout]      |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_row_offset`
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2376:56
[INFO] [stdout]      |
[INFO] [stdout] 2290 |                     unsafe {
[INFO] [stdout]      |                     ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 2376 |                                     if let Some(idx) = unsafe {
[INFO] [stdout]      |                                                        ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]      |
[INFO] [stdout]      = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]     --> src/rendering/rasterizer.rs:2419:52
[INFO] [stdout]      |
[INFO] [stdout] 2290 |                     unsafe {
[INFO] [stdout]      |                     ------ because it's nested under this `unsafe` block
[INFO] [stdout] ...
[INFO] [stdout] 2419 |                                 if let Some(idx) = unsafe {
[INFO] [stdout]      |                                                    ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> tests/horizon_culling_pipeline_movement_tests.rs:227:13
[INFO] [stdout]     |
[INFO] [stdout] 227 |         let mut camera = Camera::new(*pos, aspect);
[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: unused import: `Mat4`
[INFO] [stdout]  --> benches/rendering.rs:4:19
[INFO] [stdout]   |
[INFO] [stdout] 4 | use glam::{IVec3, Mat4, Vec3, Vec4};
[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 import: `ShadingConfig`
[INFO] [stdout]  --> benches/rendering.rs:6:76
[INFO] [stdout]   |
[INFO] [stdout] 6 |     BinaryGreedyMesher, Camera, Chunk, ChunkMesh, Framebuffer, Rasterizer, ShadingConfig,
[INFO] [stdout]   |                                                                            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around function argument
[INFO] [stdout]   --> benches/rendering.rs:81:17
[INFO] [stdout]    |
[INFO] [stdout] 81 |                 (CHUNK_SIZE as f32),
[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] 81 -                 (CHUNK_SIZE as f32),
[INFO] [stdout] 81 +                 CHUNK_SIZE as f32,
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vec2`
[INFO] [stdout]  --> src/main.rs:3:19
[INFO] [stdout]   |
[INFO] [stdout] 3 | use glam::{IVec3, Vec2, Vec3};
[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 variable: `remainder`
[INFO] [stdout]    --> src/rendering/differential_projection.rs:102:13
[INFO] [stdout]     |
[INFO] [stdout] 102 |         let remainder = count % 8;
[INFO] [stdout]     |             ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_remainder`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `glam::Vec3`
[INFO] [stdout]  --> tests/shading_tests.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use glam::Vec3;
[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 import: `ve::meshing::mesh::F32x3`
[INFO] [stdout]  --> tests/shading_tests.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use ve::meshing::mesh::F32x3;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rendering/packet_pipeline.rs:395:13
[INFO] [stdout]     |
[INFO] [stdout] 395 |         let mut pipeline = PacketPipeline::new();
[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/rendering/packet_pipeline.rs:415:13
[INFO] [stdout]     |
[INFO] [stdout] 415 |         let mut pipeline = PacketPipeline::new();
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `camera::Camera`
[INFO] [stdout]  --> tests/horizon_culling_same_height_tests.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     camera::Camera,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rendering/packet_pipeline.rs:435:13
[INFO] [stdout]     |
[INFO] [stdout] 435 |         let mut pipeline = PacketPipeline::new();
[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/rendering/packet_pipeline.rs:471:13
[INFO] [stdout]     |
[INFO] [stdout] 471 |         let mut pipeline = PacketPipeline::new();
[INFO] [stdout]     |             ----^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Chunk`
[INFO] [stdout]  --> tests/horizon_culling_extended_tests.rs:7:13
[INFO] [stdout]   |
[INFO] [stdout] 7 |     voxel::{Chunk, CHUNK_SIZE},
[INFO] [stdout]   |             ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:172:48
[INFO] [stdout]     |
[INFO] [stdout] 172 |             let height = if z < 4 { 0 } else { (z - 3) };
[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] 172 -             let height = if z < 4 { 0 } else { (z - 3) };
[INFO] [stdout] 172 +             let height = if z < 4 { 0 } else { z - 3 };
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BenchmarkId`
[INFO] [stdout]  --> benches/differential_projection.rs:1:72
[INFO] [stdout]   |
[INFO] [stdout] 1 | use criterion::{black_box, criterion_group, criterion_main, Criterion, BenchmarkId};
[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 import: `face_packets::FacePacket32`
[INFO] [stdout]  --> benches/differential_projection.rs:3:64
[INFO] [stdout]   |
[INFO] [stdout] 3 | use voxel_engine::meshing::{BinaryGreedyMesher, mesh::FaceDir, face_packets::FacePacket32, face_packets::ChunkFacePackets};
[INFO] [stdout]   |                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Vec2`
[INFO] [stdout]  --> src/main.rs:3:19
[INFO] [stdout]   |
[INFO] [stdout] 3 | use glam::{IVec3, Vec2, Vec3};
[INFO] [stdout]   |                   ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/rendering/macrotile.rs:392:13
[INFO] [stdout]     |
[INFO] [stdout] 392 |         let mut bins = MacroTileBins::new(1280, 720);
[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]    --> tests/horizon_culling_tests.rs:168:9
[INFO] [stdout]     |
[INFO] [stdout] 168 |     let mut camera = Camera::new(camera_pos, SCREEN_WIDTH as f32 / SCREEN_HEIGHT as f32);
[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]    --> tests/horizon_culling_tests.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |     let mut camera = Camera::new(camera_pos, SCREEN_WIDTH as f32 / SCREEN_HEIGHT as f32); // Looking along +Z
[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]    --> tests/horizon_culling_tests.rs:207:9
[INFO] [stdout]     |
[INFO] [stdout] 207 |     let mut chunks = vec![
[INFO] [stdout]     |         ----^^^^^^
[INFO] [stdout]     |         |
[INFO] [stdout]     |         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `camera`
[INFO] [stdout]    --> tests/horizon_culling_tests.rs:205:9
[INFO] [stdout]     |
[INFO] [stdout] 205 |     let mut camera = Camera::new(camera_pos, SCREEN_WIDTH as f32 / SCREEN_HEIGHT as f32); // Looking along +Z
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_camera`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `position` and `should_be_visible` are never read
[INFO] [stdout]   --> tests/horizon_culling_tests.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 20 | struct TestChunk {
[INFO] [stdout]    |        --------- fields in this struct
[INFO] [stdout] 21 |     position: Vec3,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 24 |     should_be_visible: Option<bool>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestChunk` has derived impls for the traits `Clone` and `Debug`, but these are 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: variable `camera` is assigned to, but never used
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:224:9
[INFO] [stdout]     |
[INFO] [stdout] 224 |     let mut camera = Camera::new(camera_pos, SCREEN_WIDTH as f32 / SCREEN_HEIGHT as f32);
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_camera` instead
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `camera` is never read
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:225:5
[INFO] [stdout]     |
[INFO] [stdout] 225 |     camera.pitch = -0.5; // Looking down ~28 degrees
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout]     = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ProjectedPoint` is never constructed
[INFO] [stdout]    --> src/rendering/rasterizer.rs:309:8
[INFO] [stdout]     |
[INFO] [stdout] 309 | struct ProjectedPoint {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `camera_pos`
[INFO] [stdout]    --> tests/horizon_movement_analysis.rs:148:9
[INFO] [stdout]     |
[INFO] [stdout] 148 |     let camera_pos = Vec3::new(0.0, camera_y, 0.0);
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_camera_pos`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `terrain_y`
[INFO] [stdout]    --> tests/horizon_movement_analysis.rs:196:9
[INFO] [stdout]     |
[INFO] [stdout] 196 |     let terrain_y = 0;
[INFO] [stdout]     |         ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_terrain_y`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `render_mesh_into_tile_optimized`, `render_tiny_quad_optimized`, and `render_triangle_textured_tile_optimized` are never used
[INFO] [stdout]     --> src/rendering/rasterizer.rs:434:8
[INFO] [stdout]      |
[INFO] [stdout]  350 | impl Rasterizer {
[INFO] [stdout]      | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  434 |     fn render_mesh_into_tile_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  494 |     fn render_tiny_quad_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 1643 |     fn render_triangle_textured_tile_optimized(
[INFO] [stdout]      |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bin`
[INFO] [stdout]    --> tests/horizon_movement_analysis.rs:252:23
[INFO] [stdout]     |
[INFO] [stdout] 252 |     for (i, (visible, bin, slope, horizon, _)) in results1.iter().enumerate() {
[INFO] [stdout]     |                       ^^^ help: if this is intentional, prefix it with an underscore: `_bin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `bin`
[INFO] [stdout]    --> tests/horizon_movement_analysis.rs:264:23
[INFO] [stdout]     |
[INFO] [stdout] 264 |     for (i, (visible, bin, slope, horizon, _)) in results2.iter().enumerate() {
[INFO] [stdout]     |                       ^^^ help: if this is intentional, prefix it with an underscore: `_bin`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `chunk_center_y`
[INFO] [stdout]    --> tests/horizon_culling_same_height_tests.rs:221:9
[INFO] [stdout]     |
[INFO] [stdout] 221 |     let chunk_center_y = 16.0; // Center of Y=0 chunk
[INFO] [stdout]     |         ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chunk_center_y`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `camera` is assigned to, but never used
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:505:9
[INFO] [stdout]     |
[INFO] [stdout] 505 |     let mut camera = Camera::new(camera_pos, SCREEN_WIDTH as f32 / SCREEN_HEIGHT as f32);
[INFO] [stdout]     |         ^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: consider using `_camera` instead
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `camera` is never read
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:506:5
[INFO] [stdout]     |
[INFO] [stdout] 506 |     camera.pitch = -0.2; // Slightly downward
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: value assigned to `camera` is never read
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:507:5
[INFO] [stdout]     |
[INFO] [stdout] 507 |     camera.yaw = 0.0;
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = help: maybe it is overwritten before being read?
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `position` is never read
[INFO] [stdout]   --> tests/horizon_culling_extended_tests.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | struct TestChunk {
[INFO] [stdout]    |        --------- field in this struct
[INFO] [stdout] 15 |     position: Vec3,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TestChunk` has derived impls for the traits `Clone` and `Debug`, but these are 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: field `chunk_coords` is never read
[INFO] [stdout]    --> tests/horizon_culling_extended_tests.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | struct HorizonDiagnostic {
[INFO] [stdout]     |        ----------------- field in this struct
[INFO] [stdout] 109 |     chunk_coords: (i32, i32, i32),
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `HorizonDiagnostic` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCREEN_WIDTH` is never used
[INFO] [stdout]   --> tests/horizon_culling_same_height_tests.rs:10:7
[INFO] [stdout]    |
[INFO] [stdout] 10 | const SCREEN_WIDTH: usize = 1280;
[INFO] [stdout]    |       ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SCREEN_HEIGHT` is never used
[INFO] [stdout]   --> tests/horizon_culling_same_height_tests.rs:11:7
[INFO] [stdout]    |
[INFO] [stdout] 11 | const SCREEN_HEIGHT: usize = 720;
[INFO] [stdout]    |       ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 45.34s
[INFO] running `Command { std: "docker" "inspect" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd", kill_on_drop: false }`
[INFO] [stdout] c31e064d9510713057c93cca423b75f4ec346ad914c93157a9ac4fd2c6414afd
