[INFO] cloning repository https://github.com/joanix2/OSCARv2
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/joanix2/OSCARv2" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjoanix2%2FOSCARv2", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjoanix2%2FOSCARv2'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8453a327857b2a67774565492599de9d97568f02
[INFO] testing joanix2/OSCARv2 against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjoanix2%2FOSCARv2" "/workspace/builds/worker-0-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/joanix2/OSCARv2
[INFO] finished tweaking git repo https://github.com/joanix2/OSCARv2
[INFO] tweaked toml for git repo https://github.com/joanix2/OSCARv2 written to /workspace/builds/worker-0-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/joanix2/OSCARv2 on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/joanix2/OSCARv2 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" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded serde_derive v1.0.227
[INFO] [stderr]   Downloaded serde_core v1.0.227
[INFO] [stderr]   Downloaded serde v1.0.227
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 2baa911ac0f2e21c8a2e191f90ac508654177e6adcd2187780b2ddaa238af8db
[INFO] running `Command { std: "docker" "start" "-a" "2baa911ac0f2e21c8a2e191f90ac508654177e6adcd2187780b2ddaa238af8db", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "2baa911ac0f2e21c8a2e191f90ac508654177e6adcd2187780b2ddaa238af8db", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2baa911ac0f2e21c8a2e191f90ac508654177e6adcd2187780b2ddaa238af8db", kill_on_drop: false }`
[INFO] [stdout] 2baa911ac0f2e21c8a2e191f90ac508654177e6adcd2187780b2ddaa238af8db
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] f47f34fc21622f5f47d1cc2bc2988dd87e4ff22a5d93a47933089f7a9d490b07
[INFO] running `Command { std: "docker" "start" "-a" "f47f34fc21622f5f47d1cc2bc2988dd87e4ff22a5d93a47933089f7a9d490b07", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.176
[INFO] [stderr]    Compiling xml-rs v0.8.27
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling memoffset v0.6.5
[INFO] [stderr]    Compiling wayland-sys v0.29.5
[INFO] [stderr]    Compiling libloading v0.8.9
[INFO] [stderr]    Compiling cc v1.2.38
[INFO] [stderr]    Compiling x11-dl v2.21.0
[INFO] [stderr]    Compiling dlib v0.5.2
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]    Compiling xcursor v0.3.10
[INFO] [stderr]    Compiling cty v0.2.2
[INFO] [stderr]    Compiling raw-window-handle v0.4.3
[INFO] [stderr]    Compiling minifb v0.24.0
[INFO] [stderr]    Compiling wayland-scanner v0.29.5
[INFO] [stderr]    Compiling wayland-client v0.29.5
[INFO] [stderr]    Compiling wayland-protocols v0.29.5
[INFO] [stderr]    Compiling nix v0.24.3
[INFO] [stderr]    Compiling rand_core v0.9.3
[INFO] [stderr]    Compiling rand_chacha v0.9.0
[INFO] [stderr]    Compiling tempfile v3.23.0
[INFO] [stderr]    Compiling rand v0.9.2
[INFO] [stderr]    Compiling wayland-commons v0.29.5
[INFO] [stderr]    Compiling clap_derive v4.5.47
[INFO] [stderr]    Compiling wayland-cursor v0.29.5
[INFO] [stderr]    Compiling clap v4.5.48
[INFO] [stderr]    Compiling OSCARv2 v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: crate `OSCARv2` should have a snake case name
[INFO] [stdout]   |
[INFO] [stdout]   = help: convert the identifier to snake case: `oscarv2`
[INFO] [stdout]   = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::Engine`
[INFO] [stdout]  --> src/engine/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use engine::Engine;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `color` is never read
[INFO] [stdout]  --> src/dsl/ast.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct World {
[INFO] [stdout]   |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 5 |     pub color: String,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `World` has a derived impl for the trait `Debug`, 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: fields `name`, `init_value`, and `timestep` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct VarDef {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 17 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 18 |     pub init_value: Value,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 19 |     pub timestep: i32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VarDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/dsl/ast.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout]    |     --- ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 24 -     Int(i32),
[INFO] [stdout] 24 +     Int(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Str` is never constructed
[INFO] [stdout]   --> src/dsl/ast.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum Value {
[INFO] [stdout]    |          ----- variant in this enum
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout] 25 |     Str(String),
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `new_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct StatusRule {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 30 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 31 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 32 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 33 |     pub new_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StatusRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `child_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct BirthRule {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 38 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 39 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 40 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 41 |     pub child_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BirthRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `step` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub struct FieldDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 46 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 47 |     pub step: i32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FieldDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field` and `sensitivity` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct SensorField {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 52 |     pub field: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 53 |     pub sensitivity: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorField` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `fields` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct SensorDef {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 58 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 59 |     pub fields: Vec<SensorField>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `name`, `color`, `births`, `fields`, and `sensors` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Species {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 64 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 65 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 66 |     pub color: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub births: Vec<BirthRule>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 70 |     pub fields: Vec<FieldDef>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 71 |     pub sensors: Vec<SensorDef>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Species` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `species_pattern` and `positions` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct AgentDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 76 |     pub species_pattern: String,  // ex: "(void,tree,void,tree)" ou "rock" ou "fire"
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub positions: Vec<String>,   // ex: ["(0:64,0:64)", "(5,5)", "(60,60)", "(30,15)"]
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Mineral`, `Vegetal`, and `Animal` are never constructed
[INFO] [stdout]   --> src/model/agent.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum SpeciesKind {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout]  9 |     Mineral,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 10 |     Vegetal,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 11 |     Animal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/model/agent.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Agent {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     pub id: AgentId,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 18 |     pub pos: Position,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 19 |     pub species: SpeciesKind,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 20 |     pub species_id: usize,    // index dans la liste des espèces
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 21 |     pub status: String,       // nom du statut courant (ex: "alive", "dead")
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 22 |     pub color: u32,           // couleur (ARGB ou RGB packed)
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 23 |     pub vars: Vec<i32>,       // variables numériques
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Agent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_var`, `set_var`, `inc_var`, and `kill` are never used
[INFO] [stdout]   --> src/model/agent.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Agent {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_var(&self, idx: usize) -> i32 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_var(&mut self, idx: usize, val: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn inc_var(&mut self, idx: usize, delta: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn kill(&mut self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `to_index`, and `neighbors8` are never used
[INFO] [stdout]   --> src/model/position.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  7 | impl Position {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout]  8 |     #[inline]
[INFO] [stdout]  9 |     pub fn new(row: usize, col: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn to_index(&self, cols: usize) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn neighbors8(&self, rows: usize, cols: usize) -> Vec<Position> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `agent` and `trace` are never read
[INFO] [stdout]  --> src/model/world.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Cell {
[INFO] [stdout]   |            ---- fields in this struct
[INFO] [stdout] 7 |     pub agent: Option<usize>, // référence vers un agent (index dans Vec<Agent>)
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 8 |     pub trace: bool,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Cell` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `grid` is never read
[INFO] [stdout]   --> src/model/world.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct World {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub grid: Vec<Cell>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `World` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/model/world.rs:37:8
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl World {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub fn in_bounds(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn get(&self, pos: Position) -> Option<&Cell> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn get_mut(&mut self, pos: Position) -> Option<&mut Cell> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn set_agent(&mut self, pos: Position, agent_id: Option<usize>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn kill_agent(&mut self, agent_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn set_trace(&mut self, pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn spawn_agent(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_position_free(&self, pos: &Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn move_agent(&mut self, agent_id: usize, new_pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorldBuilder` is never constructed
[INFO] [stdout]  --> src/model/builder.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct WorldBuilder {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SpeciesInfo` is never constructed
[INFO] [stdout]   --> src/model/builder.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct SpeciesInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/model/builder.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl WorldBuilder {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  26 |     /// Crée un nouveau WorldBuilder à partir de la configuration AST
[INFO] [stdout]  27 |     pub fn from_config(config: &ConfigAst) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn add_agent(&mut self, species_name: &str, pos: Position) -> Result<AgentId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn add_agents_pattern(&mut self, species_name: &str, pattern: &str, bounds: (usize, usize, usize, usize)) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn place_agents(&mut self, config: &ConfigAst) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn parse_and_place_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_single_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     fn parse_range_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     fn parse_range_part(&self, range_str: &str) -> Result<(usize, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     fn should_place_at_position(&self, species_pattern: &str, _pos: Position) -> Result<bool> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     fn resolve_species_from_pattern(&self, species_pattern: &str) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn build(self) -> (World, Vec<Agent>) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/model/builder.rs:236:4
[INFO] [stdout]     |
[INFO] [stdout] 236 | fn parse_color(color_str: &str) -> Result<u32> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `color`, `num_vars`, `status_rules`, `birth_rules`, and `sensors` are never read
[INFO] [stdout]   --> src/engine/engine.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SpeciesDef {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 10 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 11 |     pub color: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub num_vars: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 13 |     pub status_rules: Vec<crate::engine::rules::StatusRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub birth_rules: Vec<crate::engine::rules::BirthRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 15 |     pub field_defs: Vec<crate::engine::field::FieldDef>, // définitions des champs
[INFO] [stdout] 16 |     pub sensors: Vec<SensorDef>,      // capteurs liés aux agents de cette espèce
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `species_defs` is never read
[INFO] [stdout]   --> src/engine/engine.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Engine {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 21 |     pub world: World,
[INFO] [stdout] 22 |     pub species_defs: Vec<SpeciesDef>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `step` is never read
[INFO] [stdout]  --> src/engine/field.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct FieldDef {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout] 7 |     pub step: i32, // DistanceStepValue
[INFO] [stdout]   |         ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `FieldDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `def`, `rows`, and `cols` are never read
[INFO] [stdout]   --> src/engine/field.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Field {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 13 |     pub def: FieldDef,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 14 |     pub values: Vec<i32>, // taille = rows * cols
[INFO] [stdout] 15 |     pub rows: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 16 |     pub cols: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Field` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `idx`, `add_source`, and `get` are never used
[INFO] [stdout]   --> src/engine/field.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Field {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 30 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn add_source(&mut self, pos: Position, var_value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn get(&self, pos: Position) -> i32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_status_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn apply_status_rules(agent: &mut Agent, rules: &[StatusRule], _world: &World) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_birth_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn apply_birth_rules(parent: &Agent, rules: &[BirthRule], world: &mut World) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `target_var`, and `terms` are never read
[INFO] [stdout]  --> src/engine/sensor.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct SensorDef {
[INFO] [stdout]   |            --------- fields in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout] 7 |     pub target_var: usize, // index de la variable à mettre à jour
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 8 |     pub terms: Vec<SensorTerm>,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `SensorDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field_name` and `weight` are never read
[INFO] [stdout]   --> src/engine/sensor.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct SensorTerm {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 13 |     pub field_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 14 |     pub weight: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorTerm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]   --> src/engine/sensor.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl SensorDef {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn evaluate(
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `argb_to_rgb` is never used
[INFO] [stdout]  --> src/utils/color.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn argb_to_rgb(argb: u32) -> u32 {
[INFO] [stdout]   |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hex_to_rgb` is never used
[INFO] [stdout]   --> src/utils/color.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub fn hex_to_rgb(hex: &str) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `named_color_to_rgb` is never used
[INFO] [stdout]   --> src/utils/color.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn named_color_to_rgb(name: &str) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]   --> src/utils/color.rs:51:11
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub const WHITE: u32 = 0xFFFFFF;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]   --> src/utils/color.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub const BLACK: u32 = 0x000000;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RED` is never used
[INFO] [stdout]   --> src/utils/color.rs:53:11
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub const RED: u32 = 0xFF0000;
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GREEN` is never used
[INFO] [stdout]   --> src/utils/color.rs:54:11
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub const GREEN: u32 = 0x00FF00;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLUE` is never used
[INFO] [stdout]   --> src/utils/color.rs:55:11
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub const BLUE: u32 = 0x0000FF;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `YELLOW` is never used
[INFO] [stdout]   --> src/utils/color.rs:56:11
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const YELLOW: u32 = 0xFFFF00;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CYAN` is never used
[INFO] [stdout]   --> src/utils/color.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub const CYAN: u32 = 0x00FFFF;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAGENTA` is never used
[INFO] [stdout]   --> src/utils/color.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub const MAGENTA: u32 = 0xFF00FF;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:59:11
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub const GRAY: u32 = 0x808080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:60:11
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub const LIGHT_GRAY: u32 = 0xC0C0C0;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARK_GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:61:11
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub const DARK_GRAY: u32 = 0x404040;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ORANGE` is never used
[INFO] [stdout]   --> src/utils/color.rs:62:11
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub const ORANGE: u32 = 0xFFA500;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PINK` is never used
[INFO] [stdout]   --> src/utils/color.rs:63:11
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub const PINK: u32 = 0xFFC0CB;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PURPLE` is never used
[INFO] [stdout]   --> src/utils/color.rs:64:11
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub const PURPLE: u32 = 0x800080;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BROWN` is never used
[INFO] [stdout]   --> src/utils/color.rs:65:11
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub const BROWN: u32 = 0x8B4513;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIME` is never used
[INFO] [stdout]   --> src/utils/color.rs:66:11
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub const LIME: u32 = 0x00FF00;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAVY` is never used
[INFO] [stdout]   --> src/utils/color.rs:67:11
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub const NAVY: u32 = 0x000080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OLIVE` is never used
[INFO] [stdout]   --> src/utils/color.rs:68:11
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub const OLIVE: u32 = 0x808000;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEAL` is never used
[INFO] [stdout]   --> src/utils/color.rs:69:11
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub const TEAL: u32 = 0x008080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SILVER` is never used
[INFO] [stdout]   --> src/utils/color.rs:70:11
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub const SILVER: u32 = 0xC0C0C0;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAROON` is never used
[INFO] [stdout]   --> src/utils/color.rs:71:11
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub const MAROON: u32 = 0x800000;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRACE_COLOR` is never used
[INFO] [stdout]   --> src/utils/color.rs:74:11
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub const TRACE_COLOR: u32 = RED;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_colors` is never used
[INFO] [stdout]   --> src/utils/color.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn blend_colors(color1: u32, color2: u32, ratio: f32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `darken_color` is never used
[INFO] [stdout]   --> src/utils/color.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn darken_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lighten_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub fn lighten_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:107:8
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub fn random_color() -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rgb_to_hsv` is never used
[INFO] [stdout]    --> src/utils/color.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn rgb_to_hsv(rgb: u32) -> (f32, f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hsv_to_rgb` is never used
[INFO] [stdout]    --> src/utils/color.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_harmony_palette` is never used
[INFO] [stdout]    --> src/utils/color.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn generate_harmony_palette(base_color: u32, count: usize) -> Vec<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LogLevel` is never used
[INFO] [stdout]   --> src/utils/log.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum LogLevel {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `emoji` and `color_code` are never used
[INFO] [stdout]   --> src/utils/log.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl LogLevel {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 34 |     /// Retourne le symbole emoji associé au niveau
[INFO] [stdout] 35 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn color_code(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logger` is never constructed
[INFO] [stdout]   --> src/utils/log.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct Logger {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/utils/log.rs:76:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl Logger {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  75 |     /// Crée un nouveau logger avec configuration par défaut
[INFO] [stdout]  76 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn with_level(mut self, level: LogLevel) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn with_colors(mut self, colors: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn with_emojis(mut self, emojis: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn with_timestamp(mut self, timestamp: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn log(&self, level: LogLevel, message: &str) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn format_message(&self, level: LogLevel, message: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `GLOBAL_LOGGER` is never used
[INFO] [stdout]    --> src/utils/log.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | static mut GLOBAL_LOGGER: Option<Logger> = None;
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn init_logger(logger: Logger) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:158:4
[INFO] [stdout]     |
[INFO] [stdout] 158 | fn get_logger() -> &'static Logger {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `debug` is never used
[INFO] [stdout]    --> src/utils/log.rs:165:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub fn debug(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info` is never used
[INFO] [stdout]    --> src/utils/log.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn info(message: &str) {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `warning` is never used
[INFO] [stdout]    --> src/utils/log.rs:173:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub fn warning(message: &str) {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `error` is never used
[INFO] [stdout]    --> src/utils/log.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub fn error(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]    --> src/utils/log.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub fn start(world_size: (usize, usize), agent_count: usize) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stats` is never used
[INFO] [stdout]    --> src/utils/log.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub fn stats(tick: u64, agents_alive: usize, fps: f32) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `end` is never used
[INFO] [stdout]    --> src/utils/log.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 202 |     pub fn end(total_ticks: u64, final_agent_count: usize) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]    --> src/utils/log.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub fn parse_error(file: &str, err_msg: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_state_change` is never used
[INFO] [stdout]    --> src/utils/log.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 215 |     pub fn agent_state_change(agent_id: usize, old_state: &str, new_state: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_interaction` is never used
[INFO] [stdout]    --> src/utils/log.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 |     pub fn agent_interaction(agent1: usize, agent2: usize, interaction_type: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `time_function` is never used
[INFO] [stdout]    --> src/utils/log.rs:237:12
[INFO] [stdout]     |
[INFO] [stdout] 237 |     pub fn time_function<F, R>(name: &str, func: F) -> R
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `memory_usage` is never used
[INFO] [stdout]    --> src/utils/log.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 254 |     pub fn memory_usage(description: &str, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 59.59s
[INFO] running `Command { std: "docker" "inspect" "f47f34fc21622f5f47d1cc2bc2988dd87e4ff22a5d93a47933089f7a9d490b07", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f47f34fc21622f5f47d1cc2bc2988dd87e4ff22a5d93a47933089f7a9d490b07", kill_on_drop: false }`
[INFO] [stdout] f47f34fc21622f5f47d1cc2bc2988dd87e4ff22a5d93a47933089f7a9d490b07
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 59662af792a0c3a06722d9bec5ab1eaf3aa7b7ba42b1f58e47f54da17403b940
[INFO] running `Command { std: "docker" "start" "-a" "59662af792a0c3a06722d9bec5ab1eaf3aa7b7ba42b1f58e47f54da17403b940", kill_on_drop: false }`
[INFO] [stdout] warning: crate `OSCARv2` should have a snake case name
[INFO] [stdout]   |
[INFO] [stdout]   = help: convert the identifier to snake case: `oscarv2`
[INFO] [stdout]   = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling OSCARv2 v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `Token`
[INFO] [stdout]  --> tests/tokenizer_test.rs:2:27
[INFO] [stdout]   |
[INFO] [stdout] 2 | use OSCARv2::dsl::token::{Token, TokenKind};
[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: `anyhow::Result`
[INFO] [stdout]  --> tests/error_handling_tests.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use anyhow::Result;
[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: `engine::Engine`
[INFO] [stdout]  --> src/engine/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use engine::Engine;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `color` is never read
[INFO] [stdout]  --> src/dsl/ast.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct World {
[INFO] [stdout]   |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 5 |     pub color: String,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `World` has a derived impl for the trait `Debug`, 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: fields `name`, `init_value`, and `timestep` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct VarDef {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 17 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 18 |     pub init_value: Value,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 19 |     pub timestep: i32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VarDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/dsl/ast.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout]    |     --- ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 24 -     Int(i32),
[INFO] [stdout] 24 +     Int(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Str` is never constructed
[INFO] [stdout]   --> src/dsl/ast.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum Value {
[INFO] [stdout]    |          ----- variant in this enum
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout] 25 |     Str(String),
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `new_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct StatusRule {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 30 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 31 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 32 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 33 |     pub new_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StatusRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `child_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct BirthRule {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 38 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 39 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 40 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 41 |     pub child_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BirthRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `step` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub struct FieldDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 46 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 47 |     pub step: i32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FieldDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field` and `sensitivity` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct SensorField {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 52 |     pub field: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 53 |     pub sensitivity: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorField` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `fields` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct SensorDef {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 58 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 59 |     pub fields: Vec<SensorField>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `name`, `color`, `births`, `fields`, and `sensors` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Species {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 64 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 65 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 66 |     pub color: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub births: Vec<BirthRule>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 70 |     pub fields: Vec<FieldDef>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 71 |     pub sensors: Vec<SensorDef>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Species` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `species_pattern` and `positions` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct AgentDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 76 |     pub species_pattern: String,  // ex: "(void,tree,void,tree)" ou "rock" ou "fire"
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub positions: Vec<String>,   // ex: ["(0:64,0:64)", "(5,5)", "(60,60)", "(30,15)"]
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Mineral`, `Vegetal`, and `Animal` are never constructed
[INFO] [stdout]   --> src/model/agent.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum SpeciesKind {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout]  9 |     Mineral,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 10 |     Vegetal,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 11 |     Animal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/model/agent.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Agent {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     pub id: AgentId,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 18 |     pub pos: Position,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 19 |     pub species: SpeciesKind,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 20 |     pub species_id: usize,    // index dans la liste des espèces
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 21 |     pub status: String,       // nom du statut courant (ex: "alive", "dead")
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 22 |     pub color: u32,           // couleur (ARGB ou RGB packed)
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 23 |     pub vars: Vec<i32>,       // variables numériques
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Agent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_var`, `set_var`, `inc_var`, and `kill` are never used
[INFO] [stdout]   --> src/model/agent.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Agent {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_var(&self, idx: usize) -> i32 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_var(&mut self, idx: usize, val: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn inc_var(&mut self, idx: usize, delta: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn kill(&mut self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `to_index`, and `neighbors8` are never used
[INFO] [stdout]   --> src/model/position.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  7 | impl Position {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout]  8 |     #[inline]
[INFO] [stdout]  9 |     pub fn new(row: usize, col: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn to_index(&self, cols: usize) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn neighbors8(&self, rows: usize, cols: usize) -> Vec<Position> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `agent` and `trace` are never read
[INFO] [stdout]  --> src/model/world.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Cell {
[INFO] [stdout]   |            ---- fields in this struct
[INFO] [stdout] 7 |     pub agent: Option<usize>, // référence vers un agent (index dans Vec<Agent>)
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 8 |     pub trace: bool,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Cell` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `grid` is never read
[INFO] [stdout]   --> src/model/world.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct World {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub grid: Vec<Cell>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `World` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/model/world.rs:37:8
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl World {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub fn in_bounds(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn get(&self, pos: Position) -> Option<&Cell> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn get_mut(&mut self, pos: Position) -> Option<&mut Cell> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn set_agent(&mut self, pos: Position, agent_id: Option<usize>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn kill_agent(&mut self, agent_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn set_trace(&mut self, pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn spawn_agent(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_position_free(&self, pos: &Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn move_agent(&mut self, agent_id: usize, new_pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorldBuilder` is never constructed
[INFO] [stdout]  --> src/model/builder.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct WorldBuilder {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SpeciesInfo` is never constructed
[INFO] [stdout]   --> src/model/builder.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct SpeciesInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/model/builder.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl WorldBuilder {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  26 |     /// Crée un nouveau WorldBuilder à partir de la configuration AST
[INFO] [stdout]  27 |     pub fn from_config(config: &ConfigAst) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn add_agent(&mut self, species_name: &str, pos: Position) -> Result<AgentId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn add_agents_pattern(&mut self, species_name: &str, pattern: &str, bounds: (usize, usize, usize, usize)) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn place_agents(&mut self, config: &ConfigAst) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn parse_and_place_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_single_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     fn parse_range_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     fn parse_range_part(&self, range_str: &str) -> Result<(usize, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     fn should_place_at_position(&self, species_pattern: &str, _pos: Position) -> Result<bool> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     fn resolve_species_from_pattern(&self, species_pattern: &str) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn build(self) -> (World, Vec<Agent>) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_color` is never used
[INFO] [stdout]    --> src/model/builder.rs:236:4
[INFO] [stdout]     |
[INFO] [stdout] 236 | fn parse_color(color_str: &str) -> Result<u32> {
[INFO] [stdout]     |    ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `color`, `num_vars`, `status_rules`, `birth_rules`, and `sensors` are never read
[INFO] [stdout]   --> src/engine/engine.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SpeciesDef {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 10 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 11 |     pub color: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub num_vars: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 13 |     pub status_rules: Vec<crate::engine::rules::StatusRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub birth_rules: Vec<crate::engine::rules::BirthRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 15 |     pub field_defs: Vec<crate::engine::field::FieldDef>, // définitions des champs
[INFO] [stdout] 16 |     pub sensors: Vec<SensorDef>,      // capteurs liés aux agents de cette espèce
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `species_defs` is never read
[INFO] [stdout]   --> src/engine/engine.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Engine {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 21 |     pub world: World,
[INFO] [stdout] 22 |     pub species_defs: Vec<SpeciesDef>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `step` is never read
[INFO] [stdout]  --> src/engine/field.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct FieldDef {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout] 7 |     pub step: i32, // DistanceStepValue
[INFO] [stdout]   |         ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `FieldDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `def`, `rows`, and `cols` are never read
[INFO] [stdout]   --> src/engine/field.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Field {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 13 |     pub def: FieldDef,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 14 |     pub values: Vec<i32>, // taille = rows * cols
[INFO] [stdout] 15 |     pub rows: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 16 |     pub cols: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Field` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `idx`, `add_source`, and `get` are never used
[INFO] [stdout]   --> src/engine/field.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Field {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 30 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn add_source(&mut self, pos: Position, var_value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn get(&self, pos: Position) -> i32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_status_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn apply_status_rules(agent: &mut Agent, rules: &[StatusRule], _world: &World) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_birth_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn apply_birth_rules(parent: &Agent, rules: &[BirthRule], world: &mut World) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `target_var`, and `terms` are never read
[INFO] [stdout]  --> src/engine/sensor.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct SensorDef {
[INFO] [stdout]   |            --------- fields in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout] 7 |     pub target_var: usize, // index de la variable à mettre à jour
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 8 |     pub terms: Vec<SensorTerm>,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `SensorDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field_name` and `weight` are never read
[INFO] [stdout]   --> src/engine/sensor.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct SensorTerm {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 13 |     pub field_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 14 |     pub weight: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorTerm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]   --> src/engine/sensor.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl SensorDef {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn evaluate(
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `argb_to_rgb` is never used
[INFO] [stdout]  --> src/utils/color.rs:9:8
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub fn argb_to_rgb(argb: u32) -> u32 {
[INFO] [stdout]   |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hex_to_rgb` is never used
[INFO] [stdout]   --> src/utils/color.rs:14:8
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub fn hex_to_rgb(hex: &str) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `named_color_to_rgb` is never used
[INFO] [stdout]   --> src/utils/color.rs:23:8
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub fn named_color_to_rgb(name: &str) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `WHITE` is never used
[INFO] [stdout]   --> src/utils/color.rs:51:11
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub const WHITE: u32 = 0xFFFFFF;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLACK` is never used
[INFO] [stdout]   --> src/utils/color.rs:52:11
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub const BLACK: u32 = 0x000000;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `RED` is never used
[INFO] [stdout]   --> src/utils/color.rs:53:11
[INFO] [stdout]    |
[INFO] [stdout] 53 | pub const RED: u32 = 0xFF0000;
[INFO] [stdout]    |           ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GREEN` is never used
[INFO] [stdout]   --> src/utils/color.rs:54:11
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub const GREEN: u32 = 0x00FF00;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BLUE` is never used
[INFO] [stdout]   --> src/utils/color.rs:55:11
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub const BLUE: u32 = 0x0000FF;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `YELLOW` is never used
[INFO] [stdout]   --> src/utils/color.rs:56:11
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const YELLOW: u32 = 0xFFFF00;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `CYAN` is never used
[INFO] [stdout]   --> src/utils/color.rs:57:11
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub const CYAN: u32 = 0x00FFFF;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAGENTA` is never used
[INFO] [stdout]   --> src/utils/color.rs:58:11
[INFO] [stdout]    |
[INFO] [stdout] 58 | pub const MAGENTA: u32 = 0xFF00FF;
[INFO] [stdout]    |           ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:59:11
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub const GRAY: u32 = 0x808080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIGHT_GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:60:11
[INFO] [stdout]    |
[INFO] [stdout] 60 | pub const LIGHT_GRAY: u32 = 0xC0C0C0;
[INFO] [stdout]    |           ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DARK_GRAY` is never used
[INFO] [stdout]   --> src/utils/color.rs:61:11
[INFO] [stdout]    |
[INFO] [stdout] 61 | pub const DARK_GRAY: u32 = 0x404040;
[INFO] [stdout]    |           ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `ORANGE` is never used
[INFO] [stdout]   --> src/utils/color.rs:62:11
[INFO] [stdout]    |
[INFO] [stdout] 62 | pub const ORANGE: u32 = 0xFFA500;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PINK` is never used
[INFO] [stdout]   --> src/utils/color.rs:63:11
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub const PINK: u32 = 0xFFC0CB;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PURPLE` is never used
[INFO] [stdout]   --> src/utils/color.rs:64:11
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub const PURPLE: u32 = 0x800080;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `BROWN` is never used
[INFO] [stdout]   --> src/utils/color.rs:65:11
[INFO] [stdout]    |
[INFO] [stdout] 65 | pub const BROWN: u32 = 0x8B4513;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `LIME` is never used
[INFO] [stdout]   --> src/utils/color.rs:66:11
[INFO] [stdout]    |
[INFO] [stdout] 66 | pub const LIME: u32 = 0x00FF00;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `NAVY` is never used
[INFO] [stdout]   --> src/utils/color.rs:67:11
[INFO] [stdout]    |
[INFO] [stdout] 67 | pub const NAVY: u32 = 0x000080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `OLIVE` is never used
[INFO] [stdout]   --> src/utils/color.rs:68:11
[INFO] [stdout]    |
[INFO] [stdout] 68 | pub const OLIVE: u32 = 0x808000;
[INFO] [stdout]    |           ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TEAL` is never used
[INFO] [stdout]   --> src/utils/color.rs:69:11
[INFO] [stdout]    |
[INFO] [stdout] 69 | pub const TEAL: u32 = 0x008080;
[INFO] [stdout]    |           ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SILVER` is never used
[INFO] [stdout]   --> src/utils/color.rs:70:11
[INFO] [stdout]    |
[INFO] [stdout] 70 | pub const SILVER: u32 = 0xC0C0C0;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAROON` is never used
[INFO] [stdout]   --> src/utils/color.rs:71:11
[INFO] [stdout]    |
[INFO] [stdout] 71 | pub const MAROON: u32 = 0x800000;
[INFO] [stdout]    |           ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRACE_COLOR` is never used
[INFO] [stdout]   --> src/utils/color.rs:74:11
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub const TRACE_COLOR: u32 = RED;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `blend_colors` is never used
[INFO] [stdout]   --> src/utils/color.rs:77:8
[INFO] [stdout]    |
[INFO] [stdout] 77 | pub fn blend_colors(color1: u32, color2: u32, ratio: f32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `darken_color` is never used
[INFO] [stdout]   --> src/utils/color.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn darken_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lighten_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub fn lighten_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:107:8
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub fn random_color() -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rgb_to_hsv` is never used
[INFO] [stdout]    --> src/utils/color.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn rgb_to_hsv(rgb: u32) -> (f32, f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hsv_to_rgb` is never used
[INFO] [stdout]    --> src/utils/color.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_harmony_palette` is never used
[INFO] [stdout]    --> src/utils/color.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn generate_harmony_palette(base_color: u32, count: usize) -> Vec<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `LogLevel` is never used
[INFO] [stdout]   --> src/utils/log.rs:14:10
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub enum LogLevel {
[INFO] [stdout]    |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `emoji` and `color_code` are never used
[INFO] [stdout]   --> src/utils/log.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 33 | impl LogLevel {
[INFO] [stdout]    | ------------- methods in this implementation
[INFO] [stdout] 34 |     /// Retourne le symbole emoji associé au niveau
[INFO] [stdout] 35 |     pub fn emoji(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 45 |     pub fn color_code(&self) -> &'static str {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Logger` is never constructed
[INFO] [stdout]   --> src/utils/log.rs:56:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub struct Logger {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/utils/log.rs:76:12
[INFO] [stdout]     |
[INFO] [stdout]  74 | impl Logger {
[INFO] [stdout]     | ----------- associated items in this implementation
[INFO] [stdout]  75 |     /// Crée un nouveau logger avec configuration par défaut
[INFO] [stdout]  76 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  81 |     pub fn with_level(mut self, level: LogLevel) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     pub fn with_colors(mut self, colors: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     pub fn with_emojis(mut self, emojis: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  99 |     pub fn with_timestamp(mut self, timestamp: bool) -> Self {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 105 |     pub fn log(&self, level: LogLevel, message: &str) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     fn format_message(&self, level: LogLevel, message: &str) -> String {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `GLOBAL_LOGGER` is never used
[INFO] [stdout]    --> src/utils/log.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | static mut GLOBAL_LOGGER: Option<Logger> = None;
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn init_logger(logger: Logger) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:158:4
[INFO] [stdout]     |
[INFO] [stdout] 158 | fn get_logger() -> &'static Logger {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `debug` is never used
[INFO] [stdout]    --> src/utils/log.rs:165:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub fn debug(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info` is never used
[INFO] [stdout]    --> src/utils/log.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn info(message: &str) {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `warning` is never used
[INFO] [stdout]    --> src/utils/log.rs:173:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub fn warning(message: &str) {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `error` is never used
[INFO] [stdout]    --> src/utils/log.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub fn error(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]    --> src/utils/log.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub fn start(world_size: (usize, usize), agent_count: usize) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stats` is never used
[INFO] [stdout]    --> src/utils/log.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub fn stats(tick: u64, agents_alive: usize, fps: f32) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `end` is never used
[INFO] [stdout]    --> src/utils/log.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 202 |     pub fn end(total_ticks: u64, final_agent_count: usize) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]    --> src/utils/log.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub fn parse_error(file: &str, err_msg: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_state_change` is never used
[INFO] [stdout]    --> src/utils/log.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 215 |     pub fn agent_state_change(agent_id: usize, old_state: &str, new_state: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_interaction` is never used
[INFO] [stdout]    --> src/utils/log.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 |     pub fn agent_interaction(agent1: usize, agent2: usize, interaction_type: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `time_function` is never used
[INFO] [stdout]    --> src/utils/log.rs:237:12
[INFO] [stdout]     |
[INFO] [stdout] 237 |     pub fn time_function<F, R>(name: &str, func: F) -> R
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `memory_usage` is never used
[INFO] [stdout]    --> src/utils/log.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 254 |     pub fn memory_usage(description: &str, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `engine::Engine`
[INFO] [stdout]  --> src/engine/mod.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub use engine::Engine;
[INFO] [stdout]   |         ^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `color` is never read
[INFO] [stdout]  --> src/dsl/ast.rs:5:9
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub struct World {
[INFO] [stdout]   |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 5 |     pub color: String,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `World` has a derived impl for the trait `Debug`, 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: fields `name`, `init_value`, and `timestep` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct VarDef {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] 17 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 18 |     pub init_value: Value,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 19 |     pub timestep: i32,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `VarDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `0` is never read
[INFO] [stdout]   --> src/dsl/ast.rs:24:9
[INFO] [stdout]    |
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout]    |     --- ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stdout]    |
[INFO] [stdout] 24 -     Int(i32),
[INFO] [stdout] 24 +     Int(()),
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variant `Str` is never constructed
[INFO] [stdout]   --> src/dsl/ast.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub enum Value {
[INFO] [stdout]    |          ----- variant in this enum
[INFO] [stdout] 24 |     Int(i32),
[INFO] [stdout] 25 |     Str(String),
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `new_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:30:9
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub struct StatusRule {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 30 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 31 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 32 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 33 |     pub new_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `StatusRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `variable`, `less_than`, `threshold`, and `child_status` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:38:9
[INFO] [stdout]    |
[INFO] [stdout] 37 | pub struct BirthRule {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 38 |     pub variable: Option<String>,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 39 |     pub less_than: Option<bool>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 40 |     pub threshold: Option<i32>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 41 |     pub child_status: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `BirthRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `step` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:46:9
[INFO] [stdout]    |
[INFO] [stdout] 45 | pub struct FieldDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 46 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 47 |     pub step: i32,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FieldDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field` and `sensitivity` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:52:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct SensorField {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] 52 |     pub field: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 53 |     pub sensitivity: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorField` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name` and `fields` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:58:9
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub struct SensorDef {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout] 58 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 59 |     pub fields: Vec<SensorField>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `name`, `color`, `births`, `fields`, and `sensors` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:64:9
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Species {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 64 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 65 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 66 |     pub color: String,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub births: Vec<BirthRule>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 70 |     pub fields: Vec<FieldDef>,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 71 |     pub sensors: Vec<SensorDef>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Species` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `species_pattern` and `positions` are never read
[INFO] [stdout]   --> src/dsl/ast.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 75 | pub struct AgentDef {
[INFO] [stdout]    |            -------- fields in this struct
[INFO] [stdout] 76 |     pub species_pattern: String,  // ex: "(void,tree,void,tree)" ou "rock" ou "fire"
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 77 |     pub positions: Vec<String>,   // ex: ["(0:64,0:64)", "(5,5)", "(60,60)", "(30,15)"]
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AgentDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Mineral`, `Vegetal`, and `Animal` are never constructed
[INFO] [stdout]   --> src/model/agent.rs:9:5
[INFO] [stdout]    |
[INFO] [stdout]  8 | pub enum SpeciesKind {
[INFO] [stdout]    |          ----------- variants in this enum
[INFO] [stdout]  9 |     Mineral,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 10 |     Vegetal,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout] 11 |     Animal,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/model/agent.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct Agent {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 17 |     pub id: AgentId,
[INFO] [stdout]    |         ^^
[INFO] [stdout] 18 |     pub pos: Position,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 19 |     pub species: SpeciesKind,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 20 |     pub species_id: usize,    // index dans la liste des espèces
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 21 |     pub status: String,       // nom du statut courant (ex: "alive", "dead")
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout] 22 |     pub color: u32,           // couleur (ARGB ou RGB packed)
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 23 |     pub vars: Vec<i32>,       // variables numériques
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Agent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `get_var`, `set_var`, `inc_var`, and `kill` are never used
[INFO] [stdout]   --> src/model/agent.rs:28:12
[INFO] [stdout]    |
[INFO] [stdout] 27 | impl Agent {
[INFO] [stdout]    | ---------- associated items in this implementation
[INFO] [stdout] 28 |     pub fn new(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn get_var(&self, idx: usize) -> i32 {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn set_var(&mut self, idx: usize, val: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn inc_var(&mut self, idx: usize, delta: i32) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn kill(&mut self) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `to_index`, and `neighbors8` are never used
[INFO] [stdout]   --> src/model/position.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  7 | impl Position {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout]  8 |     #[inline]
[INFO] [stdout]  9 |     pub fn new(row: usize, col: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 15 |     pub fn to_index(&self, cols: usize) -> usize {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 20 |     pub fn neighbors8(&self, rows: usize, cols: usize) -> Vec<Position> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `agent` and `trace` are never read
[INFO] [stdout]  --> src/model/world.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub struct Cell {
[INFO] [stdout]   |            ---- fields in this struct
[INFO] [stdout] 7 |     pub agent: Option<usize>, // référence vers un agent (index dans Vec<Agent>)
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout] 8 |     pub trace: bool,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `Cell` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `grid` is never read
[INFO] [stdout]   --> src/model/world.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct World {
[INFO] [stdout]    |            ----- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub grid: Vec<Cell>,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `World` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/model/world.rs:37:8
[INFO] [stdout]     |
[INFO] [stdout]  26 | impl World {
[INFO] [stdout]     | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  37 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]     |        ^^^
[INFO] [stdout] ...
[INFO] [stdout]  41 |     pub fn in_bounds(&self, pos: Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  45 |     pub fn get(&self, pos: Position) -> Option<&Cell> {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  53 |     pub fn get_mut(&mut self, pos: Position) -> Option<&mut Cell> {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  62 |     pub fn set_agent(&mut self, pos: Position, agent_id: Option<usize>) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     pub fn kill_agent(&mut self, agent_id: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn set_trace(&mut self, pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  86 |     pub fn spawn_agent(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     pub fn is_position_free(&self, pos: &Position) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 112 |     pub fn move_agent(&mut self, agent_id: usize, new_pos: Position) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WorldBuilder` is never constructed
[INFO] [stdout]  --> src/model/builder.rs:9:12
[INFO] [stdout]   |
[INFO] [stdout] 9 | pub struct WorldBuilder {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `SpeciesInfo` is never constructed
[INFO] [stdout]   --> src/model/builder.rs:18:12
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub struct SpeciesInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/model/builder.rs:27:12
[INFO] [stdout]     |
[INFO] [stdout]  25 | impl WorldBuilder {
[INFO] [stdout]     | ----------------- associated items in this implementation
[INFO] [stdout]  26 |     /// Crée un nouveau WorldBuilder à partir de la configuration AST
[INFO] [stdout]  27 |     pub fn from_config(config: &ConfigAst) -> Result<Self> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  65 |     pub fn add_agent(&mut self, species_name: &str, pos: Position) -> Result<AgentId> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  91 |     pub fn add_agents_pattern(&mut self, species_name: &str, pattern: &str, bounds: (usize, usize, usize, usize)) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 113 |     pub fn place_agents(&mut self, config: &ConfigAst) -> Result<()> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     fn parse_and_place_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     fn parse_single_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 160 |     fn parse_range_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 189 |     fn parse_range_part(&self, range_str: &str) -> Result<(usize, usize)> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 201 |     fn should_place_at_position(&self, species_pattern: &str, _pos: Position) -> Result<bool> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 213 |     fn resolve_species_from_pattern(&self, species_pattern: &str) -> Result<String> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 230 |     pub fn build(self) -> (World, Vec<Agent>) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `kind`, `color`, `num_vars`, `status_rules`, `birth_rules`, and `sensors` are never read
[INFO] [stdout]   --> src/engine/engine.rs:10:9
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct SpeciesDef {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 10 |     pub kind: SpeciesKind,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 11 |     pub color: u32,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout] 12 |     pub num_vars: usize,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 13 |     pub status_rules: Vec<crate::engine::rules::StatusRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub birth_rules: Vec<crate::engine::rules::BirthRule>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 15 |     pub field_defs: Vec<crate::engine::field::FieldDef>, // définitions des champs
[INFO] [stdout] 16 |     pub sensors: Vec<SensorDef>,      // capteurs liés aux agents de cette espèce
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SpeciesDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `species_defs` is never read
[INFO] [stdout]   --> src/engine/engine.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct Engine {
[INFO] [stdout]    |            ------ field in this struct
[INFO] [stdout] 21 |     pub world: World,
[INFO] [stdout] 22 |     pub species_defs: Vec<SpeciesDef>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `step` is never read
[INFO] [stdout]  --> src/engine/field.rs:7:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct FieldDef {
[INFO] [stdout]   |            -------- field in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout] 7 |     pub step: i32, // DistanceStepValue
[INFO] [stdout]   |         ^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `FieldDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `def`, `rows`, and `cols` are never read
[INFO] [stdout]   --> src/engine/field.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct Field {
[INFO] [stdout]    |            ----- fields in this struct
[INFO] [stdout] 13 |     pub def: FieldDef,
[INFO] [stdout]    |         ^^^
[INFO] [stdout] 14 |     pub values: Vec<i32>, // taille = rows * cols
[INFO] [stdout] 15 |     pub rows: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 16 |     pub cols: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Field` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `idx`, `add_source`, and `get` are never used
[INFO] [stdout]   --> src/engine/field.rs:30:8
[INFO] [stdout]    |
[INFO] [stdout] 19 | impl Field {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 30 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] ...
[INFO] [stdout] 40 |     pub fn add_source(&mut self, pos: Position, var_value: i32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 67 |     pub fn get(&self, pos: Position) -> i32 {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_status_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn apply_status_rules(agent: &mut Agent, rules: &[StatusRule], _world: &World) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `apply_birth_rules` is never used
[INFO] [stdout]   --> src/engine/rules.rs:41:8
[INFO] [stdout]    |
[INFO] [stdout] 41 | pub fn apply_birth_rules(parent: &Agent, rules: &[BirthRule], world: &mut World) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `name`, `target_var`, and `terms` are never read
[INFO] [stdout]  --> src/engine/sensor.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct SensorDef {
[INFO] [stdout]   |            --------- fields in this struct
[INFO] [stdout] 6 |     pub name: String,
[INFO] [stdout]   |         ^^^^
[INFO] [stdout] 7 |     pub target_var: usize, // index de la variable à mettre à jour
[INFO] [stdout]   |         ^^^^^^^^^^
[INFO] [stdout] 8 |     pub terms: Vec<SensorTerm>,
[INFO] [stdout]   |         ^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `SensorDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `field_name` and `weight` are never read
[INFO] [stdout]   --> src/engine/sensor.rs:13:9
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct SensorTerm {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 13 |     pub field_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 14 |     pub weight: f32,
[INFO] [stdout]    |         ^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `SensorTerm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `evaluate` is never used
[INFO] [stdout]   --> src/engine/sensor.rs:22:12
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl SensorDef {
[INFO] [stdout]    | -------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub fn evaluate(
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TRACE_COLOR` is never used
[INFO] [stdout]   --> src/utils/color.rs:74:11
[INFO] [stdout]    |
[INFO] [stdout] 74 | pub const TRACE_COLOR: u32 = RED;
[INFO] [stdout]    |           ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `darken_color` is never used
[INFO] [stdout]   --> src/utils/color.rs:97:8
[INFO] [stdout]    |
[INFO] [stdout] 97 | pub fn darken_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `lighten_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:102:8
[INFO] [stdout]     |
[INFO] [stdout] 102 | pub fn lighten_color(color: u32, factor: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `random_color` is never used
[INFO] [stdout]    --> src/utils/color.rs:107:8
[INFO] [stdout]     |
[INFO] [stdout] 107 | pub fn random_color() -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rgb_to_hsv` is never used
[INFO] [stdout]    --> src/utils/color.rs:117:8
[INFO] [stdout]     |
[INFO] [stdout] 117 | pub fn rgb_to_hsv(rgb: u32) -> (f32, f32, f32) {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `hsv_to_rgb` is never used
[INFO] [stdout]    --> src/utils/color.rs:147:8
[INFO] [stdout]     |
[INFO] [stdout] 147 | pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_harmony_palette` is never used
[INFO] [stdout]    --> src/utils/color.rs:170:8
[INFO] [stdout]     |
[INFO] [stdout] 170 | pub fn generate_harmony_palette(base_color: u32, count: usize) -> Vec<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: static `GLOBAL_LOGGER` is never used
[INFO] [stdout]    --> src/utils/log.rs:148:12
[INFO] [stdout]     |
[INFO] [stdout] 148 | static mut GLOBAL_LOGGER: Option<Logger> = None;
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `init_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn init_logger(logger: Logger) {
[INFO] [stdout]     |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_logger` is never used
[INFO] [stdout]    --> src/utils/log.rs:158:4
[INFO] [stdout]     |
[INFO] [stdout] 158 | fn get_logger() -> &'static Logger {
[INFO] [stdout]     |    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `debug` is never used
[INFO] [stdout]    --> src/utils/log.rs:165:8
[INFO] [stdout]     |
[INFO] [stdout] 165 | pub fn debug(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `info` is never used
[INFO] [stdout]    --> src/utils/log.rs:169:8
[INFO] [stdout]     |
[INFO] [stdout] 169 | pub fn info(message: &str) {
[INFO] [stdout]     |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `warning` is never used
[INFO] [stdout]    --> src/utils/log.rs:173:8
[INFO] [stdout]     |
[INFO] [stdout] 173 | pub fn warning(message: &str) {
[INFO] [stdout]     |        ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `error` is never used
[INFO] [stdout]    --> src/utils/log.rs:177:8
[INFO] [stdout]     |
[INFO] [stdout] 177 | pub fn error(message: &str) {
[INFO] [stdout]     |        ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `start` is never used
[INFO] [stdout]    --> src/utils/log.rs:186:12
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub fn start(world_size: (usize, usize), agent_count: usize) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `stats` is never used
[INFO] [stdout]    --> src/utils/log.rs:194:12
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub fn stats(tick: u64, agents_alive: usize, fps: f32) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `end` is never used
[INFO] [stdout]    --> src/utils/log.rs:202:12
[INFO] [stdout]     |
[INFO] [stdout] 202 |     pub fn end(total_ticks: u64, final_agent_count: usize) {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `parse_error` is never used
[INFO] [stdout]    --> src/utils/log.rs:210:12
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub fn parse_error(file: &str, err_msg: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_state_change` is never used
[INFO] [stdout]    --> src/utils/log.rs:215:12
[INFO] [stdout]     |
[INFO] [stdout] 215 |     pub fn agent_state_change(agent_id: usize, old_state: &str, new_state: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `agent_interaction` is never used
[INFO] [stdout]    --> src/utils/log.rs:223:12
[INFO] [stdout]     |
[INFO] [stdout] 223 |     pub fn agent_interaction(agent1: usize, agent2: usize, interaction_type: &str) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `time_function` is never used
[INFO] [stdout]    --> src/utils/log.rs:237:12
[INFO] [stdout]     |
[INFO] [stdout] 237 |     pub fn time_function<F, R>(name: &str, func: F) -> R
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `memory_usage` is never used
[INFO] [stdout]    --> src/utils/log.rs:254:12
[INFO] [stdout]     |
[INFO] [stdout] 254 |     pub fn memory_usage(description: &str, bytes: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: creating a mutable reference to mutable static
[INFO] [stdout]    --> src/utils/log.rs:160:9
[INFO] [stdout]     |
[INFO] [stdout] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stdout]     |
[INFO] [stdout]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stdout]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 5.58s
[INFO] running `Command { std: "docker" "inspect" "59662af792a0c3a06722d9bec5ab1eaf3aa7b7ba42b1f58e47f54da17403b940", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "59662af792a0c3a06722d9bec5ab1eaf3aa7b7ba42b1f58e47f54da17403b940", kill_on_drop: false }`
[INFO] [stdout] 59662af792a0c3a06722d9bec5ab1eaf3aa7b7ba42b1f58e47f54da17403b940
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 9263b108f96a868b731bf6bb821fda724360fcda66cd2ad77d684d320249287e
[INFO] running `Command { std: "docker" "start" "-a" "9263b108f96a868b731bf6bb821fda724360fcda66cd2ad77d684d320249287e", kill_on_drop: false }`
[INFO] [stderr] warning: crate `OSCARv2` should have a snake case name
[INFO] [stderr]   |
[INFO] [stderr]   = help: convert the identifier to snake case: `oscarv2`
[INFO] [stderr]   = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: creating a mutable reference to mutable static
[INFO] [stderr]    --> src/utils/log.rs:160:9
[INFO] [stderr]     |
[INFO] [stderr] 160 |         GLOBAL_LOGGER.get_or_insert_with(Logger::default)
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mutable reference to mutable static
[INFO] [stderr]     |
[INFO] [stderr]     = note: mutable references to mutable statics are dangerous; it's undefined behavior if any other pointer to the static is used or if any other reference is created for the static while the mutable reference lives
[INFO] [stderr]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/static-mut-references.html>
[INFO] [stderr]     = note: `#[warn(static_mut_refs)]` (part of `#[warn(rust_2024_compatibility)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `OSCARv2` (lib) generated 2 warnings
[INFO] [stderr] warning: unused import: `anyhow::Result`
[INFO] [stderr]  --> tests/error_handling_tests.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use anyhow::Result;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `OSCARv2` (test "error_handling_tests") generated 1 warning (run `cargo fix --test "error_handling_tests" -p OSCARv2` to apply 1 suggestion)
[INFO] [stderr] warning: unused import: `engine::Engine`
[INFO] [stderr]  --> src/engine/mod.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub use engine::Engine;
[INFO] [stderr]   |         ^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `color` is never read
[INFO] [stderr]  --> src/dsl/ast.rs:5:9
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub struct World {
[INFO] [stderr]   |            ----- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 5 |     pub color: String,
[INFO] [stderr]   |         ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `World` has a derived impl for the trait `Debug`, 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: fields `name`, `init_value`, and `timestep` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:17:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct VarDef {
[INFO] [stderr]    |            ------ fields in this struct
[INFO] [stderr] 17 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 18 |     pub init_value: Value,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 19 |     pub timestep: i32,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `VarDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `0` is never read
[INFO] [stderr]   --> src/dsl/ast.rs:24:9
[INFO] [stderr]    |
[INFO] [stderr] 24 |     Int(i32),
[INFO] [stderr]    |     --- ^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field
[INFO] [stderr]    |
[INFO] [stderr] 24 -     Int(i32),
[INFO] [stderr] 24 +     Int(()),
[INFO] [stderr]    |
[INFO] [stderr] 
[INFO] [stderr] warning: variant `Str` is never constructed
[INFO] [stderr]   --> src/dsl/ast.rs:25:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub enum Value {
[INFO] [stderr]    |          ----- variant in this enum
[INFO] [stderr] 24 |     Int(i32),
[INFO] [stderr] 25 |     Str(String),
[INFO] [stderr]    |     ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Value` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `variable`, `less_than`, `threshold`, and `new_status` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:30:9
[INFO] [stderr]    |
[INFO] [stderr] 29 | pub struct StatusRule {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 30 |     pub variable: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 31 |     pub less_than: Option<bool>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 32 |     pub threshold: Option<i32>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 33 |     pub new_status: String,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `StatusRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `variable`, `less_than`, `threshold`, and `child_status` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:38:9
[INFO] [stderr]    |
[INFO] [stderr] 37 | pub struct BirthRule {
[INFO] [stderr]    |            --------- fields in this struct
[INFO] [stderr] 38 |     pub variable: Option<String>,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 39 |     pub less_than: Option<bool>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 40 |     pub threshold: Option<i32>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 41 |     pub child_status: String,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `BirthRule` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `name` and `step` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:46:9
[INFO] [stderr]    |
[INFO] [stderr] 45 | pub struct FieldDef {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] 46 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 47 |     pub step: i32,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FieldDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `field` and `sensitivity` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:52:9
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub struct SensorField {
[INFO] [stderr]    |            ----------- fields in this struct
[INFO] [stderr] 52 |     pub field: String,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 53 |     pub sensitivity: f32,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SensorField` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `name` and `fields` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:58:9
[INFO] [stderr]    |
[INFO] [stderr] 57 | pub struct SensorDef {
[INFO] [stderr]    |            --------- fields in this struct
[INFO] [stderr] 58 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 59 |     pub fields: Vec<SensorField>,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SensorDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `kind`, `name`, `color`, `births`, `fields`, and `sensors` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:64:9
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct Species {
[INFO] [stderr]    |            ------- fields in this struct
[INFO] [stderr] 64 |     pub kind: SpeciesKind,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 65 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 66 |     pub color: String,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub births: Vec<BirthRule>,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 70 |     pub fields: Vec<FieldDef>,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 71 |     pub sensors: Vec<SensorDef>,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Species` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `species_pattern` and `positions` are never read
[INFO] [stderr]   --> src/dsl/ast.rs:76:9
[INFO] [stderr]    |
[INFO] [stderr] 75 | pub struct AgentDef {
[INFO] [stderr]    |            -------- fields in this struct
[INFO] [stderr] 76 |     pub species_pattern: String,  // ex: "(void,tree,void,tree)" ou "rock" ou "fire"
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 77 |     pub positions: Vec<String>,   // ex: ["(0:64,0:64)", "(5,5)", "(60,60)", "(30,15)"]
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AgentDef` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Mineral`, `Vegetal`, and `Animal` are never constructed
[INFO] [stderr]   --> src/model/agent.rs:9:5
[INFO] [stderr]    |
[INFO] [stderr]  8 | pub enum SpeciesKind {
[INFO] [stderr]    |          ----------- variants in this enum
[INFO] [stderr]  9 |     Mineral,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 10 |     Vegetal,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr] 11 |     Animal,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SpeciesKind` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple fields are never read
[INFO] [stderr]   --> src/model/agent.rs:17:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct Agent {
[INFO] [stderr]    |            ----- fields in this struct
[INFO] [stderr] 17 |     pub id: AgentId,
[INFO] [stderr]    |         ^^
[INFO] [stderr] 18 |     pub pos: Position,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 19 |     pub species: SpeciesKind,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 20 |     pub species_id: usize,    // index dans la liste des espèces
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 21 |     pub status: String,       // nom du statut courant (ex: "alive", "dead")
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr] 22 |     pub color: u32,           // couleur (ARGB ou RGB packed)
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 23 |     pub vars: Vec<i32>,       // variables numériques
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Agent` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `get_var`, `set_var`, `inc_var`, and `kill` are never used
[INFO] [stderr]   --> src/model/agent.rs:28:12
[INFO] [stderr]    |
[INFO] [stderr] 27 | impl Agent {
[INFO] [stderr]    | ---------- associated items in this implementation
[INFO] [stderr] 28 |     pub fn new(
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub fn get_var(&self, idx: usize) -> i32 {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 55 |     pub fn set_var(&mut self, idx: usize, val: i32) {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 62 |     pub fn inc_var(&mut self, idx: usize, delta: i32) {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn kill(&mut self) {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `to_index`, and `neighbors8` are never used
[INFO] [stderr]   --> src/model/position.rs:9:12
[INFO] [stderr]    |
[INFO] [stderr]  7 | impl Position {
[INFO] [stderr]    | ------------- associated items in this implementation
[INFO] [stderr]  8 |     #[inline]
[INFO] [stderr]  9 |     pub fn new(row: usize, col: usize) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 15 |     pub fn to_index(&self, cols: usize) -> usize {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 20 |     pub fn neighbors8(&self, rows: usize, cols: usize) -> Vec<Position> {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `agent` and `trace` are never read
[INFO] [stderr]  --> src/model/world.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub struct Cell {
[INFO] [stderr]   |            ---- fields in this struct
[INFO] [stderr] 7 |     pub agent: Option<usize>, // référence vers un agent (index dans Vec<Agent>)
[INFO] [stderr]   |         ^^^^^
[INFO] [stderr] 8 |     pub trace: bool,
[INFO] [stderr]   |         ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `Cell` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `grid` is never read
[INFO] [stderr]   --> src/model/world.rs:22:9
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct World {
[INFO] [stderr]    |            ----- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 22 |     pub grid: Vec<Cell>,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `World` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/model/world.rs:37:8
[INFO] [stderr]     |
[INFO] [stderr]  26 | impl World {
[INFO] [stderr]     | ---------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  37 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stderr]     |        ^^^
[INFO] [stderr] ...
[INFO] [stderr]  41 |     pub fn in_bounds(&self, pos: Position) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  45 |     pub fn get(&self, pos: Position) -> Option<&Cell> {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  53 |     pub fn get_mut(&mut self, pos: Position) -> Option<&mut Cell> {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  62 |     pub fn set_agent(&mut self, pos: Position, agent_id: Option<usize>) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  69 |     pub fn kill_agent(&mut self, agent_id: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  79 |     pub fn set_trace(&mut self, pos: Position) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  86 |     pub fn spawn_agent(
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     pub fn is_position_free(&self, pos: &Position) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 112 |     pub fn move_agent(&mut self, agent_id: usize, new_pos: Position) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `WorldBuilder` is never constructed
[INFO] [stderr]  --> src/model/builder.rs:9:12
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub struct WorldBuilder {
[INFO] [stderr]   |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `SpeciesInfo` is never constructed
[INFO] [stderr]   --> src/model/builder.rs:18:12
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub struct SpeciesInfo {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/model/builder.rs:27:12
[INFO] [stderr]     |
[INFO] [stderr]  25 | impl WorldBuilder {
[INFO] [stderr]     | ----------------- associated items in this implementation
[INFO] [stderr]  26 |     /// Crée un nouveau WorldBuilder à partir de la configuration AST
[INFO] [stderr]  27 |     pub fn from_config(config: &ConfigAst) -> Result<Self> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  65 |     pub fn add_agent(&mut self, species_name: &str, pos: Position) -> Result<AgentId> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  91 |     pub fn add_agents_pattern(&mut self, species_name: &str, pattern: &str, bounds: (usize, usize, usize, usize)) -> Result<()> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     pub fn place_agents(&mut self, config: &ConfigAst) -> Result<()> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     fn parse_and_place_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     fn parse_single_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 160 |     fn parse_range_position(&mut self, species_pattern: &str, position_expr: &str) -> Result<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 189 |     fn parse_range_part(&self, range_str: &str) -> Result<(usize, usize)> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 201 |     fn should_place_at_position(&self, species_pattern: &str, _pos: Position) -> Result<bool> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 213 |     fn resolve_species_from_pattern(&self, species_pattern: &str) -> Result<String> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 230 |     pub fn build(self) -> (World, Vec<Agent>) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `kind`, `color`, `num_vars`, `status_rules`, `birth_rules`, and `sensors` are never read
[INFO] [stderr]   --> src/engine/engine.rs:10:9
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub struct SpeciesDef {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 10 |     pub kind: SpeciesKind,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 11 |     pub color: u32,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr] 12 |     pub num_vars: usize,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 13 |     pub status_rules: Vec<crate::engine::rules::StatusRule>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 14 |     pub birth_rules: Vec<crate::engine::rules::BirthRule>,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 15 |     pub field_defs: Vec<crate::engine::field::FieldDef>, // définitions des champs
[INFO] [stderr] 16 |     pub sensors: Vec<SensorDef>,      // capteurs liés aux agents de cette espèce
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SpeciesDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `species_defs` is never read
[INFO] [stderr]   --> src/engine/engine.rs:22:9
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub struct Engine {
[INFO] [stderr]    |            ------ field in this struct
[INFO] [stderr] 21 |     pub world: World,
[INFO] [stderr] 22 |     pub species_defs: Vec<SpeciesDef>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `step` is never read
[INFO] [stderr]  --> src/engine/field.rs:7:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct FieldDef {
[INFO] [stderr]   |            -------- field in this struct
[INFO] [stderr] 6 |     pub name: String,
[INFO] [stderr] 7 |     pub step: i32, // DistanceStepValue
[INFO] [stderr]   |         ^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `FieldDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `def`, `rows`, and `cols` are never read
[INFO] [stderr]   --> src/engine/field.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct Field {
[INFO] [stderr]    |            ----- fields in this struct
[INFO] [stderr] 13 |     pub def: FieldDef,
[INFO] [stderr]    |         ^^^
[INFO] [stderr] 14 |     pub values: Vec<i32>, // taille = rows * cols
[INFO] [stderr] 15 |     pub rows: usize,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 16 |     pub cols: usize,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Field` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `idx`, `add_source`, and `get` are never used
[INFO] [stderr]   --> src/engine/field.rs:30:8
[INFO] [stderr]    |
[INFO] [stderr] 19 | impl Field {
[INFO] [stderr]    | ---------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 30 |     fn idx(&self, pos: Position) -> usize {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] ...
[INFO] [stderr] 40 |     pub fn add_source(&mut self, pos: Position, var_value: i32) {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 67 |     pub fn get(&self, pos: Position) -> i32 {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `apply_status_rules` is never used
[INFO] [stderr]   --> src/engine/rules.rs:10:8
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub fn apply_status_rules(agent: &mut Agent, rules: &[StatusRule], _world: &World) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `apply_birth_rules` is never used
[INFO] [stderr]   --> src/engine/rules.rs:41:8
[INFO] [stderr]    |
[INFO] [stderr] 41 | pub fn apply_birth_rules(parent: &Agent, rules: &[BirthRule], world: &mut World) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `name`, `target_var`, and `terms` are never read
[INFO] [stderr]  --> src/engine/sensor.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct SensorDef {
[INFO] [stderr]   |            --------- fields in this struct
[INFO] [stderr] 6 |     pub name: String,
[INFO] [stderr]   |         ^^^^
[INFO] [stderr] 7 |     pub target_var: usize, // index de la variable à mettre à jour
[INFO] [stderr]   |         ^^^^^^^^^^
[INFO] [stderr] 8 |     pub terms: Vec<SensorTerm>,
[INFO] [stderr]   |         ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `SensorDef` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `field_name` and `weight` are never read
[INFO] [stderr]   --> src/engine/sensor.rs:13:9
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct SensorTerm {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 13 |     pub field_name: String,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 14 |     pub weight: f32,
[INFO] [stderr]    |         ^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `SensorTerm` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `evaluate` is never used
[INFO] [stderr]   --> src/engine/sensor.rs:22:12
[INFO] [stderr]    |
[INFO] [stderr] 17 | impl SensorDef {
[INFO] [stderr]    | -------------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 22 |     pub fn evaluate(
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TRACE_COLOR` is never used
[INFO] [stderr]   --> src/utils/color.rs:74:11
[INFO] [stderr]    |
[INFO] [stderr] 74 | pub const TRACE_COLOR: u32 = RED;
[INFO] [stderr]    |           ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `darken_color` is never used
[INFO] [stderr]   --> src/utils/color.rs:97:8
[INFO] [stderr]    |
[INFO] [stderr] 97 | pub fn darken_color(color: u32, factor: f32) -> u32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `lighten_color` is never used
[INFO] [stderr]    --> src/utils/color.rs:102:8
[INFO] [stderr]     |
[INFO] [stderr] 102 | pub fn lighten_color(color: u32, factor: f32) -> u32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `random_color` is never used
[INFO] [stderr]    --> src/utils/color.rs:107:8
[INFO] [stderr]     |
[INFO] [stderr] 107 | pub fn random_color() -> u32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `rgb_to_hsv` is never used
[INFO] [stderr]    --> src/utils/color.rs:117:8
[INFO] [stderr]     |
[INFO] [stderr] 117 | pub fn rgb_to_hsv(rgb: u32) -> (f32, f32, f32) {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `hsv_to_rgb` is never used
[INFO] [stderr]    --> src/utils/color.rs:147:8
[INFO] [stderr]     |
[INFO] [stderr] 147 | pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> u32 {
[INFO] [stderr]     |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `generate_harmony_palette` is never used
[INFO] [stderr]    --> src/utils/color.rs:170:8
[INFO] [stderr]     |
[INFO] [stderr] 170 | pub fn generate_harmony_palette(base_color: u32, count: usize) -> Vec<u32> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: static `GLOBAL_LOGGER` is never used
[INFO] [stderr]    --> src/utils/log.rs:148:12
[INFO] [stderr]     |
[INFO] [stderr] 148 | static mut GLOBAL_LOGGER: Option<Logger> = None;
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `init_logger` is never used
[INFO] [stderr]    --> src/utils/log.rs:151:8
[INFO] [stderr]     |
[INFO] [stderr] 151 | pub fn init_logger(logger: Logger) {
[INFO] [stderr]     |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_logger` is never used
[INFO] [stderr]    --> src/utils/log.rs:158:4
[INFO] [stderr]     |
[INFO] [stderr] 158 | fn get_logger() -> &'static Logger {
[INFO] [stderr]     |    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `debug` is never used
[INFO] [stderr]    --> src/utils/log.rs:165:8
[INFO] [stderr]     |
[INFO] [stderr] 165 | pub fn debug(message: &str) {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `info` is never used
[INFO] [stderr]    --> src/utils/log.rs:169:8
[INFO] [stderr]     |
[INFO] [stderr] 169 | pub fn info(message: &str) {
[INFO] [stderr]     |        ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `warning` is never used
[INFO] [stderr]    --> src/utils/log.rs:173:8
[INFO] [stderr]     |
[INFO] [stderr] 173 | pub fn warning(message: &str) {
[INFO] [stderr]     |        ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `error` is never used
[INFO] [stderr]    --> src/utils/log.rs:177:8
[INFO] [stderr]     |
[INFO] [stderr] 177 | pub fn error(message: &str) {
[INFO] [stderr]     |        ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `start` is never used
[INFO] [stderr]    --> src/utils/log.rs:186:12
[INFO] [stderr]     |
[INFO] [stderr] 186 |     pub fn start(world_size: (usize, usize), agent_count: usize) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `stats` is never used
[INFO] [stderr]    --> src/utils/log.rs:194:12
[INFO] [stderr]     |
[INFO] [stderr] 194 |     pub fn stats(tick: u64, agents_alive: usize, fps: f32) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `end` is never used
[INFO] [stderr]    --> src/utils/log.rs:202:12
[INFO] [stderr]     |
[INFO] [stderr] 202 |     pub fn end(total_ticks: u64, final_agent_count: usize) {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `parse_error` is never used
[INFO] [stderr]    --> src/utils/log.rs:210:12
[INFO] [stderr]     |
[INFO] [stderr] 210 |     pub fn parse_error(file: &str, err_msg: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `agent_state_change` is never used
[INFO] [stderr]    --> src/utils/log.rs:215:12
[INFO] [stderr]     |
[INFO] [stderr] 215 |     pub fn agent_state_change(agent_id: usize, old_state: &str, new_state: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `agent_interaction` is never used
[INFO] [stderr]    --> src/utils/log.rs:223:12
[INFO] [stderr]     |
[INFO] [stderr] 223 |     pub fn agent_interaction(agent1: usize, agent2: usize, interaction_type: &str) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `time_function` is never used
[INFO] [stderr]    --> src/utils/log.rs:237:12
[INFO] [stderr]     |
[INFO] [stderr] 237 |     pub fn time_function<F, R>(name: &str, func: F) -> R
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `memory_usage` is never used
[INFO] [stderr]    --> src/utils/log.rs:254:12
[INFO] [stderr]     |
[INFO] [stderr] 254 |     pub fn memory_usage(description: &str, bytes: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `OSCARv2` (bin "OSCARv2" test) generated 55 warnings (1 duplicate) (run `cargo fix --bin "OSCARv2" -p OSCARv2 --tests` to apply 1 suggestion)
[INFO] [stderr] warning: unused import: `Token`
[INFO] [stderr]  --> tests/tokenizer_test.rs:2:27
[INFO] [stderr]   |
[INFO] [stderr] 2 | use OSCARv2::dsl::token::{Token, TokenKind};
[INFO] [stderr]   |                           ^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `OSCARv2` (test "tokenizer_test") generated 1 warning (run `cargo fix --test "tokenizer_test" -p OSCARv2` to apply 1 suggestion)
[INFO] [stderr] warning: function `parse_color` is never used
[INFO] [stderr]    --> src/model/builder.rs:236:4
[INFO] [stderr]     |
[INFO] [stderr] 236 | fn parse_color(color_str: &str) -> Result<u32> {
[INFO] [stderr]     |    ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `argb_to_rgb` is never used
[INFO] [stderr]  --> src/utils/color.rs:9:8
[INFO] [stderr]   |
[INFO] [stderr] 9 | pub fn argb_to_rgb(argb: u32) -> u32 {
[INFO] [stderr]   |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `hex_to_rgb` is never used
[INFO] [stderr]   --> src/utils/color.rs:14:8
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub fn hex_to_rgb(hex: &str) -> u32 {
[INFO] [stderr]    |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `named_color_to_rgb` is never used
[INFO] [stderr]   --> src/utils/color.rs:23:8
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub fn named_color_to_rgb(name: &str) -> u32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `WHITE` is never used
[INFO] [stderr]   --> src/utils/color.rs:51:11
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub const WHITE: u32 = 0xFFFFFF;
[INFO] [stderr]    |           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `BLACK` is never used
[INFO] [stderr]   --> src/utils/color.rs:52:11
[INFO] [stderr]    |
[INFO] [stderr] 52 | pub const BLACK: u32 = 0x000000;
[INFO] [stderr]    |           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `RED` is never used
[INFO] [stderr]   --> src/utils/color.rs:53:11
[INFO] [stderr]    |
[INFO] [stderr] 53 | pub const RED: u32 = 0xFF0000;
[INFO] [stderr]    |           ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `GREEN` is never used
[INFO] [stderr]   --> src/utils/color.rs:54:11
[INFO] [stderr]    |
[INFO] [stderr] 54 | pub const GREEN: u32 = 0x00FF00;
[INFO] [stderr]    |           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `BLUE` is never used
[INFO] [stderr]   --> src/utils/color.rs:55:11
[INFO] [stderr]    |
[INFO] [stderr] 55 | pub const BLUE: u32 = 0x0000FF;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `YELLOW` is never used
[INFO] [stderr]   --> src/utils/color.rs:56:11
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub const YELLOW: u32 = 0xFFFF00;
[INFO] [stderr]    |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `CYAN` is never used
[INFO] [stderr]   --> src/utils/color.rs:57:11
[INFO] [stderr]    |
[INFO] [stderr] 57 | pub const CYAN: u32 = 0x00FFFF;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAGENTA` is never used
[INFO] [stderr]   --> src/utils/color.rs:58:11
[INFO] [stderr]    |
[INFO] [stderr] 58 | pub const MAGENTA: u32 = 0xFF00FF;
[INFO] [stderr]    |           ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `GRAY` is never used
[INFO] [stderr]   --> src/utils/color.rs:59:11
[INFO] [stderr]    |
[INFO] [stderr] 59 | pub const GRAY: u32 = 0x808080;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `LIGHT_GRAY` is never used
[INFO] [stderr]   --> src/utils/color.rs:60:11
[INFO] [stderr]    |
[INFO] [stderr] 60 | pub const LIGHT_GRAY: u32 = 0xC0C0C0;
[INFO] [stderr]    |           ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DARK_GRAY` is never used
[INFO] [stderr]   --> src/utils/color.rs:61:11
[INFO] [stderr]    |
[INFO] [stderr] 61 | pub const DARK_GRAY: u32 = 0x404040;
[INFO] [stderr]    |           ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `ORANGE` is never used
[INFO] [stderr]   --> src/utils/color.rs:62:11
[INFO] [stderr]    |
[INFO] [stderr] 62 | pub const ORANGE: u32 = 0xFFA500;
[INFO] [stderr]    |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PINK` is never used
[INFO] [stderr]   --> src/utils/color.rs:63:11
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub const PINK: u32 = 0xFFC0CB;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PURPLE` is never used
[INFO] [stderr]   --> src/utils/color.rs:64:11
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub const PURPLE: u32 = 0x800080;
[INFO] [stderr]    |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `BROWN` is never used
[INFO] [stderr]   --> src/utils/color.rs:65:11
[INFO] [stderr]    |
[INFO] [stderr] 65 | pub const BROWN: u32 = 0x8B4513;
[INFO] [stderr]    |           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `LIME` is never used
[INFO] [stderr]   --> src/utils/color.rs:66:11
[INFO] [stderr]    |
[INFO] [stderr] 66 | pub const LIME: u32 = 0x00FF00;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `NAVY` is never used
[INFO] [stderr]   --> src/utils/color.rs:67:11
[INFO] [stderr]    |
[INFO] [stderr] 67 | pub const NAVY: u32 = 0x000080;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `OLIVE` is never used
[INFO] [stderr]   --> src/utils/color.rs:68:11
[INFO] [stderr]    |
[INFO] [stderr] 68 | pub const OLIVE: u32 = 0x808000;
[INFO] [stderr]    |           ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TEAL` is never used
[INFO] [stderr]   --> src/utils/color.rs:69:11
[INFO] [stderr]    |
[INFO] [stderr] 69 | pub const TEAL: u32 = 0x008080;
[INFO] [stderr]    |           ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SILVER` is never used
[INFO] [stderr]   --> src/utils/color.rs:70:11
[INFO] [stderr]    |
[INFO] [stderr] 70 | pub const SILVER: u32 = 0xC0C0C0;
[INFO] [stderr]    |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAROON` is never used
[INFO] [stderr]   --> src/utils/color.rs:71:11
[INFO] [stderr]    |
[INFO] [stderr] 71 | pub const MAROON: u32 = 0x800000;
[INFO] [stderr]    |           ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `blend_colors` is never used
[INFO] [stderr]   --> src/utils/color.rs:77:8
[INFO] [stderr]    |
[INFO] [stderr] 77 | pub fn blend_colors(color1: u32, color2: u32, ratio: f32) -> u32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `LogLevel` is never used
[INFO] [stderr]   --> src/utils/log.rs:14:10
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub enum LogLevel {
[INFO] [stderr]    |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `emoji` and `color_code` are never used
[INFO] [stderr]   --> src/utils/log.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 33 | impl LogLevel {
[INFO] [stderr]    | ------------- methods in this implementation
[INFO] [stderr] 34 |     /// Retourne le symbole emoji associé au niveau
[INFO] [stderr] 35 |     pub fn emoji(&self) -> &'static str {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 45 |     pub fn color_code(&self) -> &'static str {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Logger` is never constructed
[INFO] [stderr]   --> src/utils/log.rs:56:12
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub struct Logger {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/utils/log.rs:76:12
[INFO] [stderr]     |
[INFO] [stderr]  74 | impl Logger {
[INFO] [stderr]     | ----------- associated items in this implementation
[INFO] [stderr]  75 |     /// Crée un nouveau logger avec configuration par défaut
[INFO] [stderr]  76 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  81 |     pub fn with_level(mut self, level: LogLevel) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  87 |     pub fn with_colors(mut self, colors: bool) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     pub fn with_emojis(mut self, emojis: bool) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  99 |     pub fn with_timestamp(mut self, timestamp: bool) -> Self {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 105 |     pub fn log(&self, level: LogLevel, message: &str) {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 113 |     fn format_message(&self, level: LogLevel, message: &str) -> String {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `OSCARv2` (bin "OSCARv2") generated 85 warnings (55 duplicates)
[INFO] [stderr] warning: `OSCARv2` (lib test) generated 1 warning (1 duplicate)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.26s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/OSCARv2-1decc486e2c82409)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test utils::color::tests::test_blend_colors ... ok
[INFO] [stdout] test model::builder::tests::test_parse_color ... ok
[INFO] [stdout] test utils::log::tests::test_log_levels ... ok
[INFO] [stdout] test utils::color::tests::test_argb_to_rgb ... ok
[INFO] [stdout] test utils::color::tests::test_hex_to_rgb ... ok
[INFO] [stdout] test utils::log::tests::test_format_message ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.22s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/OSCARv2-0203df4d44225906)
[INFO] [stdout] 
[INFO] [stdout] running 6 tests
[INFO] [stdout] test model::builder::tests::test_parse_color ... ok
[INFO] [stdout] test utils::color::tests::test_argb_to_rgb ... ok
[INFO] [stdout] test utils::color::tests::test_blend_colors ... ok
[INFO] [stdout] test utils::color::tests::test_hex_to_rgb ... ok
[INFO] [stderr]      Running tests/error_handling_tests.rs (/opt/rustwide/target/debug/deps/error_handling_tests-3cf78d7724da28fd)
[INFO] [stdout] test utils::log::tests::test_format_message ... ok
[INFO] [stdout] test utils::log::tests::test_log_levels ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 20 tests
[INFO] [stdout] test test_parse_comments_only_file ... ok
[INFO] [stdout] test test_parse_empty_lines_and_whitespace ... ok
[INFO] [stdout] test test_parse_large_numbers ... ok
[INFO] [stdout] test test_parse_field_without_species ... ok
[INFO] [stdout] test test_parse_negative_numbers ... ok
[INFO] [stdout] test test_parse_numeric_color_as_string ... ok
[INFO] [stdout] test test_parse_mixed_valid_invalid ... ok
[INFO] [stdout] test test_parse_species_with_duplicate_names ... ok
[INFO] [stdout] test test_parse_unknown_species_type ... ok
[INFO] [stdout] test test_parse_multiple_worlds ... FAILED
[INFO] [stdout] test test_parse_invalid_world_syntax ... ok
[INFO] [stdout] test test_parse_sensor_without_species ... ok
[INFO] [stdout] test test_parse_var_without_species ... ok
[INFO] [stdout] test test_parse_world_with_non_numeric_dimensions ... ok
[INFO] [stdout] test test_parse_status_without_name ... ok
[INFO] [stdout] test test_parse_species_without_name ... FAILED
[INFO] [stdout] test test_parse_species_without_color ... ok
[INFO] [stdout] test test_parse_var_without_name ... ok
[INFO] [stdout] test test_parse_status_without_species ... ok
[INFO] [stdout] test test_tokenizer_error_handling ... ok
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- test_parse_multiple_worlds stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'test_parse_multiple_worlds' (37) panicked at tests/error_handling_tests.rs:238:5:
[INFO] [stdout] assertion `left == right` failed
[INFO] [stdout]   left: "0"
[INFO] [stdout]  right: "000"
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5b181b3602ea - std[f92b4c606f291077]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5b181b3602ea - std[f92b4c606f291077]::backtrace_rs::backtrace::trace_unsynchronized::<std[f92b4c606f291077]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5b181b3602ea - std[f92b4c606f291077]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5b181b3602ea - <<std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[786f478f706679df]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5b181b375a6a - <core[786f478f706679df]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5b181b375a6a - core[786f478f706679df]::fmt::write
[INFO] [stdout]    6:     0x5b181b365042 - std[f92b4c606f291077]::io::default_write_fmt::<alloc[64763625b5a07cdb]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5b181b365042 - <alloc[64763625b5a07cdb]::vec::Vec<u8> as std[f92b4c606f291077]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5b181b33f0ff - <std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5b181b33f0ff - std[f92b4c606f291077]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5b181b358889 - std[f92b4c606f291077]::panicking::default_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5b181b2d947c - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5b181b2d947c - test[20e1f0ae6cad7a17]::test_main_with_exit_callback::<test[20e1f0ae6cad7a17]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5b181b358a42 - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5b181b358a42 - std[f92b4c606f291077]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5b181b33f1b8 - std[f92b4c606f291077]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:698:13
[INFO] [stdout]   16:     0x5b181b3365f9 - std[f92b4c606f291077]::sys::backtrace::__rust_end_short_backtrace::<std[f92b4c606f291077]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5b181b33ffbd - __rustc[8241495c18a89d70]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5b181b3761fc - core[786f478f706679df]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5b181b3760b3 - core[786f478f706679df]::panicking::assert_failed_inner
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:439:17
[INFO] [stdout]   20:     0x5b181b2c611e - core[786f478f706679df]::panicking::assert_failed::<alloc[64763625b5a07cdb]::string::String, &str>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:394:5
[INFO] [stdout]   21:     0x5b181b2c6d8f - error_handling_tests[1069b89770318cf9]::test_parse_multiple_worlds
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/error_handling_tests.rs:238:5
[INFO] [stdout]   22:     0x5b181b2c61f7 - error_handling_tests[1069b89770318cf9]::test_parse_multiple_worlds::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/error_handling_tests.rs:223:32
[INFO] [stdout]   23:     0x5b181b2cd036 - <error_handling_tests[1069b89770318cf9]::test_parse_multiple_worlds::{closure#0} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5b181b2cd55b - <fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x5b181b2cd55b - test[20e1f0ae6cad7a17]::__rust_begin_short_backtrace::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x5b181b2d9f4b - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   28:     0x5b181b2d9f4b - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   29:     0x5b181b2d9f4b - std[f92b4c606f291077]::panicking::catch_unwind::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   30:     0x5b181b2d9f4b - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test_in_process
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x5b181b2d5664 - test[20e1f0ae6cad7a17]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x5b181b2d5664 - std[f92b4c606f291077]::sys::backtrace::__rust_begin_short_backtrace::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   35:     0x5b181b2dcb52 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   36:     0x5b181b2dcb52 - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   37:     0x5b181b2dcb52 - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   38:     0x5b181b2dcb52 - std[f92b4c606f291077]::panicking::catch_unwind::<(), core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   39:     0x5b181b2dcb52 - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x5b181b2dcb52 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   41:     0x5b181b2dcb52 - <std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x5b181b35fbff - <alloc[64763625b5a07cdb]::boxed::Box<dyn core[786f478f706679df]::ops::function::FnOnce<(), Output = ()> + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   43:     0x5b181b35fbff - <std[f92b4c606f291077]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   44:     0x7ebe95113aa4 - <unknown>
[INFO] [stdout]   45:     0x7ebe951a0a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] ---- test_parse_species_without_name stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'test_parse_species_without_name' (43) panicked at tests/error_handling_tests.rs:31:5:
[INFO] [stdout] assertion failed: error_msg.contains("Expected name after species")
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x5b181b3602ea - std[f92b4c606f291077]::backtrace_rs::backtrace::libunwind::trace
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x5b181b3602ea - std[f92b4c606f291077]::backtrace_rs::backtrace::trace_unsynchronized::<std[f92b4c606f291077]::sys::backtrace::_print_fmt::{closure#1}>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x5b181b3602ea - std[f92b4c606f291077]::sys::backtrace::_print_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:74:9
[INFO] [stdout]    3:     0x5b181b3602ea - <<std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print::DisplayBacktrace as core[786f478f706679df]::fmt::Display>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:44:26
[INFO] [stdout]    4:     0x5b181b375a6a - <core[786f478f706679df]::fmt::rt::Argument>::fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/fmt/rt.rs:152:76
[INFO] [stdout]    5:     0x5b181b375a6a - core[786f478f706679df]::fmt::write
[INFO] [stdout]    6:     0x5b181b365042 - std[f92b4c606f291077]::io::default_write_fmt::<alloc[64763625b5a07cdb]::vec::Vec<u8>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x5b181b365042 - <alloc[64763625b5a07cdb]::vec::Vec<u8> as std[f92b4c606f291077]::io::Write>::write_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/io/mod.rs:1994:13
[INFO] [stdout]    8:     0x5b181b33f0ff - <std[f92b4c606f291077]::sys::backtrace::BacktraceLock>::print
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:47:9
[INFO] [stdout]    9:     0x5b181b33f0ff - std[f92b4c606f291077]::panicking::default_hook::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:292:27
[INFO] [stdout]   10:     0x5b181b358889 - std[f92b4c606f291077]::panicking::default_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:316:9
[INFO] [stdout]   11:     0x5b181b2d947c - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   12:     0x5b181b2d947c - test[20e1f0ae6cad7a17]::test_main_with_exit_callback::<test[20e1f0ae6cad7a17]::test_main::{closure#0}>::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x5b181b358a42 - <alloc[64763625b5a07cdb]::boxed::Box<dyn for<'a, 'b> core[786f478f706679df]::ops::function::Fn<(&'a std[f92b4c606f291077]::panic::PanicHookInfo<'b>,), Output = ()> + core[786f478f706679df]::marker::Sync + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::Fn<(&std[f92b4c606f291077]::panic::PanicHookInfo,)>>::call
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2254:9
[INFO] [stdout]   14:     0x5b181b358a42 - std[f92b4c606f291077]::panicking::panic_with_hook
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:833:13
[INFO] [stdout]   15:     0x5b181b33f1ea - std[f92b4c606f291077]::panicking::panic_handler::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:691:13
[INFO] [stdout]   16:     0x5b181b3365f9 - std[f92b4c606f291077]::sys::backtrace::__rust_end_short_backtrace::<std[f92b4c606f291077]::panicking::panic_handler::{closure#0}, !>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:182:18
[INFO] [stdout]   17:     0x5b181b33ffbd - __rustc[8241495c18a89d70]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:689:5
[INFO] [stdout]   18:     0x5b181b3761fc - core[786f478f706679df]::panicking::panic_fmt
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x5b181b3761c2 - core[786f478f706679df]::panicking::panic
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panicking.rs:150:5
[INFO] [stdout]   20:     0x5b181b2c8a34 - error_handling_tests[1069b89770318cf9]::test_parse_species_without_name
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/error_handling_tests.rs:31:5
[INFO] [stdout]   21:     0x5b181b2c63a7 - error_handling_tests[1069b89770318cf9]::test_parse_species_without_name::{closure#0}
[INFO] [stdout]                                at /opt/rustwide/workdir/tests/error_handling_tests.rs:25:37
[INFO] [stdout]   22:     0x5b181b2cd276 - <error_handling_tests[1069b89770318cf9]::test_parse_species_without_name::{closure#0} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   23:     0x5b181b2cd55b - <fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x5b181b2cd55b - test[20e1f0ae6cad7a17]::__rust_begin_short_backtrace::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, fn() -> core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:663:18
[INFO] [stdout]   25:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:74
[INFO] [stdout]   26:     0x5b181b2d9f4b - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   27:     0x5b181b2d9f4b - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   28:     0x5b181b2d9f4b - std[f92b4c606f291077]::panicking::catch_unwind::<core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>, core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   29:     0x5b181b2d9f4b - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<test[20e1f0ae6cad7a17]::run_test_in_process::{closure#0}>, core[786f478f706679df]::result::Result<(), alloc[64763625b5a07cdb]::string::String>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   30:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test_in_process
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:686:27
[INFO] [stdout]   31:     0x5b181b2d9f4b - test[20e1f0ae6cad7a17]::run_test::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:607:43
[INFO] [stdout]   32:     0x5b181b2d5664 - test[20e1f0ae6cad7a17]::run_test::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/test/src/lib.rs:637:41
[INFO] [stdout]   33:     0x5b181b2d5664 - std[f92b4c606f291077]::sys::backtrace::__rust_begin_short_backtrace::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/backtrace.rs:166:18
[INFO] [stdout]   34:     0x5b181b2dcb52 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:91:13
[INFO] [stdout]   35:     0x5b181b2dcb52 - <core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/panic/unwind_safe.rs:275:9
[INFO] [stdout]   36:     0x5b181b2dcb52 - std[f92b4c606f291077]::panicking::catch_unwind::do_call::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:581:40
[INFO] [stdout]   37:     0x5b181b2dcb52 - std[f92b4c606f291077]::panicking::catch_unwind::<(), core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panicking.rs:544:19
[INFO] [stdout]   38:     0x5b181b2dcb52 - std[f92b4c606f291077]::panic::catch_unwind::<core[786f478f706679df]::panic::unwind_safe::AssertUnwindSafe<std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}::{closure#0}>, ()>
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/panic.rs:359:14
[INFO] [stdout]   39:     0x5b181b2dcb52 - std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked::<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/thread/lifecycle.rs:89:26
[INFO] [stdout]   40:     0x5b181b2dcb52 - <std[f92b4c606f291077]::thread::lifecycle::spawn_unchecked<test[20e1f0ae6cad7a17]::run_test::{closure#1}, ()>::{closure#1} as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   41:     0x5b181b35fbff - <alloc[64763625b5a07cdb]::boxed::Box<dyn core[786f478f706679df]::ops::function::FnOnce<(), Output = ()> + core[786f478f706679df]::marker::Send> as core[786f478f706679df]::ops::function::FnOnce<()>>::call_once
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/alloc/src/boxed.rs:2240:9
[INFO] [stdout]   42:     0x5b181b35fbff - <std[f92b4c606f291077]::sys::thread::unix::Thread>::new::thread_start
[INFO] [stdout]                                at /rustc/1f7f8ea0721a3b1eb73e6c6d25cccb371434b320/library/std/src/sys/thread/unix.rs:118:17
[INFO] [stdout]   43:     0x7ebe95113aa4 - <unknown>
[INFO] [stdout]   44:     0x7ebe951a0a64 - clone
[INFO] [stdout]   45:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     test_parse_multiple_worlds
[INFO] [stdout]     test_parse_species_without_name
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 18 passed; 2 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--test error_handling_tests`
[INFO] running `Command { std: "docker" "inspect" "9263b108f96a868b731bf6bb821fda724360fcda66cd2ad77d684d320249287e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "9263b108f96a868b731bf6bb821fda724360fcda66cd2ad77d684d320249287e", kill_on_drop: false }`
[INFO] [stdout] 9263b108f96a868b731bf6bb821fda724360fcda66cd2ad77d684d320249287e
