[INFO] cloning repository https://github.com/kkismd/block-down [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/kkismd/block-down" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkkismd%2Fblock-down", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkkismd%2Fblock-down'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 251a859a57d574e98b0f68a618a6f84c99c63fee [INFO] testing kkismd/block-down against master#c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38 for pr-146098-7 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fkkismd%2Fblock-down" "/workspace/builds/worker-2-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/kkismd/block-down [INFO] finished tweaking git repo https://github.com/kkismd/block-down [INFO] tweaked toml for git repo https://github.com/kkismd/block-down written to /workspace/builds/worker-2-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/kkismd/block-down on toolchain c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/kkismd/block-down 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" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded minicov v0.3.7 [INFO] [stderr] Downloaded wasm-bindgen-test v0.3.54 [INFO] [stderr] Downloaded wasm-bindgen-test-macro v0.3.54 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 0de9392619f6c77f3ef4a552fccd6214bd573cc9e34d009cd5a66426f089b98b [INFO] running `Command { std: "docker" "start" "-a" "0de9392619f6c77f3ef4a552fccd6214bd573cc9e34d009cd5a66426f089b98b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "0de9392619f6c77f3ef4a552fccd6214bd573cc9e34d009cd5a66426f089b98b", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "0de9392619f6c77f3ef4a552fccd6214bd573cc9e34d009cd5a66426f089b98b", kill_on_drop: false }` [INFO] [stdout] 0de9392619f6c77f3ef4a552fccd6214bd573cc9e34d009cd5a66426f089b98b [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "build" "--frozen" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f42c5e614c1b916e170cbc3259d3e45a49df8974707116bcc39ffbdd3728c0d5 [INFO] running `Command { std: "docker" "start" "-a" "f42c5e614c1b916e170cbc3259d3e45a49df8974707116bcc39ffbdd3728c0d5", kill_on_drop: false }` [INFO] [stderr] Compiling log v0.4.28 [INFO] [stderr] Compiling bitflags v2.9.4 [INFO] [stderr] Compiling getrandom v0.2.16 [INFO] [stderr] Compiling parking_lot_core v0.9.11 [INFO] [stderr] Compiling mio v0.8.11 [INFO] [stderr] Compiling rand_core v0.6.4 [INFO] [stderr] Compiling parking_lot v0.12.4 [INFO] [stderr] Compiling rand_chacha v0.3.1 [INFO] [stderr] Compiling signal-hook-mio v0.2.4 [INFO] [stderr] Compiling rand v0.8.5 [INFO] [stderr] Compiling crossterm v0.27.0 [INFO] [stderr] Compiling thud-and-tile v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unused imports: `HashSet` and `VecDeque` [INFO] [stdout] --> src/lib.rs:6:24 [INFO] [stdout] | [INFO] [stdout] 6 | use std::collections::{HashSet, VecDeque}; [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 macro definition: `console_log` [INFO] [stdout] --> src/lib.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | macro_rules! console_log { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Animation`, `calculate_line_clear_score`, and `process_line_clear` [INFO] [stdout] --> src/lib.rs:122:17 [INFO] [stdout] | [INFO] [stdout] 122 | use animation::{calculate_line_clear_score, process_line_clear, Animation}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `cell::Cell` [INFO] [stdout] --> src/lib.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | use cell::Cell; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `game_input::GameInput` [INFO] [stdout] --> src/lib.rs:126:5 [INFO] [stdout] | [INFO] [stdout] 126 | use game_input::GameInput; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `scoring::CustomScoreSystem` [INFO] [stdout] --> src/lib.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | use scoring::CustomScoreSystem; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `get_srs_wall_kick_offsets_by_shape` [INFO] [stdout] --> src/lib.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | use tetromino::{get_srs_wall_kick_offsets_by_shape, Tetromino}; // CLI版のSRS関数とTetrominoをimport [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `count` [INFO] [stdout] --> src/animation.rs:57:17 [INFO] [stdout] | [INFO] [stdout] 57 | count, [INFO] [stdout] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Animation` is never used [INFO] [stdout] --> src/animation.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum Animation { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnimationResult` is never constructed [INFO] [stdout] --> src/animation.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct AnimationResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/animation.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl AnimationResult { [INFO] [stdout] | -------------------- associated function in this implementation [INFO] [stdout] 35 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_animations` is never used [INFO] [stdout] --> src/animation.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn update_animations( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_push_down_step` is never used [INFO] [stdout] --> src/animation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn process_push_down_step( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PushDownStepResult` is never used [INFO] [stdout] --> src/animation.rs:138:10 [INFO] [stdout] | [INFO] [stdout] 138 | pub enum PushDownStepResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_line_clear_score` is never used [INFO] [stdout] --> src/animation.rs:144:8 [INFO] [stdout] | [INFO] [stdout] 144 | pub fn calculate_line_clear_score( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_line_clear` is never used [INFO] [stdout] --> src/animation.rs:171:8 [INFO] [stdout] | [INFO] [stdout] 171 | pub fn process_line_clear( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Point` is never used [INFO] [stdout] --> src/board_logic.rs:6:10 [INFO] [stdout] | [INFO] [stdout] 6 | pub type Point = (usize, usize); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `find_and_connect_adjacent_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | pub fn find_and_connect_adjacent_blocks(board: &mut Board, lines_to_clear: &[usize]) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `count_connected_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn count_connected_blocks(board: &Board, cleared_line_y: usize) -> Vec<(Point, u32)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_isolated_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:138:8 [INFO] [stdout] | [INFO] [stdout] 138 | pub fn remove_isolated_blocks(board: &mut Board, cleared_line_y: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_chain_bonus` is never used [INFO] [stdout] --> src/board_logic.rs:192:8 [INFO] [stdout] | [INFO] [stdout] 192 | pub fn calculate_chain_bonus(board: &Board) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Cell` is never used [INFO] [stdout] --> src/cell.rs:4:10 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Cell { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Board` is never used [INFO] [stdout] --> src/cell.rs:22:10 [INFO] [stdout] | [INFO] [stdout] 22 | pub type Board = Vec>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BOARD_HEIGHT` is never used [INFO] [stdout] --> src/config.rs:5:11 [INFO] [stdout] | [INFO] [stdout] 5 | pub const BOARD_HEIGHT: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FALL_SPEED_START` is never used [INFO] [stdout] --> src/config.rs:6:11 [INFO] [stdout] | [INFO] [stdout] 6 | pub const FALL_SPEED_START: std::time::Duration = std::time::Duration::from_millis(800); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `COLOR_PALETTE` is never used [INFO] [stdout] --> src/config.rs:8:11 [INFO] [stdout] | [INFO] [stdout] 8 | pub const COLOR_PALETTE: [GameColor; 3] = [GameColor::Cyan, GameColor::Magenta, GameColor::Yellow]; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_ANIMATION_STEP` is never used [INFO] [stdout] --> src/config.rs:9:11 [INFO] [stdout] | [INFO] [stdout] 9 | pub const BLINK_ANIMATION_STEP: std::time::Duration = std::time::Duration::from_millis(120); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_COUNT_MAX` is never used [INFO] [stdout] --> src/config.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const BLINK_COUNT_MAX: usize = 6; // 3 blinks: on-off-on-off-on-off [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PUSH_DOWN_STEP_DURATION` is never used [INFO] [stdout] --> src/config.rs:11:11 [INFO] [stdout] | [INFO] [stdout] 11 | pub const PUSH_DOWN_STEP_DURATION: std::time::Duration = std::time::Duration::from_millis(50); // 100ms → 50ms に高速化 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `GameInput` is never used [INFO] [stdout] --> src/game_input.rs:7:10 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum GameInput { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `InputProvider` is never used [INFO] [stdout] --> src/game_input.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait InputProvider { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CrosstermInputProvider` is never constructed [INFO] [stdout] --> src/game_input.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 41 | pub struct CrosstermInputProvider; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/game_input.rs:45:12 [INFO] [stdout] | [INFO] [stdout] 44 | impl CrosstermInputProvider { [INFO] [stdout] | --------------------------- associated function in this implementation [INFO] [stdout] 45 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `is_movement`, `is_rotation`, `is_control`, and `description` are never used [INFO] [stdout] --> src/game_input.rs:149:12 [INFO] [stdout] | [INFO] [stdout] 147 | impl GameInput { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] 148 | /// 移動系の入力かどうか [INFO] [stdout] 149 | pub fn is_movement(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn is_rotation(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 165 | pub fn is_control(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub fn description(&self) -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `choose`, `gen_bool`, and `gen_f64` are never used [INFO] [stdout] --> src/random.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 35 | pub trait RandomProvider: Send + Sync { [INFO] [stdout] | -------------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 40 | fn choose<'a, T>(&mut self, slice: &'a [T]) -> Option<&'a T>; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | fn gen_bool(&mut self) -> bool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | fn gen_f64(&mut self) -> f64; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `with_seed` is never used [INFO] [stdout] --> src/random.rs:75:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl NativeRandomProvider { [INFO] [stdout] | ------------------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 75 | pub fn with_seed(seed: u64) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Deterministic` is never constructed [INFO] [stdout] --> src/random.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 222 | pub enum RandomProviderImpl { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 227 | Deterministic(DeterministicRandomProvider), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/random.rs:289:12 [INFO] [stdout] | [INFO] [stdout] 288 | impl DeterministicRandomProvider { [INFO] [stdout] | -------------------------------- associated function in this implementation [INFO] [stdout] 289 | pub fn new(values: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Scheduler` is never used [INFO] [stdout] --> src/scheduler.rs:9:11 [INFO] [stdout] | [INFO] [stdout] 9 | pub trait Scheduler { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NativeScheduler` is never constructed [INFO] [stdout] --> src/scheduler.rs:22:12 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct NativeScheduler; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/scheduler.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl NativeScheduler { [INFO] [stdout] | -------------------- associated function in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DeterministicScheduler` is never constructed [INFO] [stdout] --> src/scheduler.rs:80:12 [INFO] [stdout] | [INFO] [stdout] 80 | pub struct DeterministicScheduler { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_sleep_count`, and `reset_sleep_count` are never used [INFO] [stdout] --> src/scheduler.rs:85:12 [INFO] [stdout] | [INFO] [stdout] 84 | impl DeterministicScheduler { [INFO] [stdout] | --------------------------- associated items in this implementation [INFO] [stdout] 85 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub fn get_sleep_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn reset_sleep_count(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SchedulerImpl` is never used [INFO] [stdout] --> src/scheduler.rs:108:10 [INFO] [stdout] | [INFO] [stdout] 108 | pub enum SchedulerImpl { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_default_scheduler` is never used [INFO] [stdout] --> src/scheduler.rs:127:8 [INFO] [stdout] | [INFO] [stdout] 127 | pub fn create_default_scheduler() -> SchedulerImpl { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TotalScore` is never constructed [INFO] [stdout] --> src/scoring.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct TotalScore { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add`, and `total` are never used [INFO] [stdout] --> src/scoring.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl TotalScore { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 11 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | pub fn add(&mut self, points: u32) { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub fn total(&self) -> u32 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ColorMaxChains` is never constructed [INFO] [stdout] --> src/scoring.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct ColorMaxChains { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get`, `update_max`, and `max` are never used [INFO] [stdout] --> src/scoring.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ColorMaxChains { [INFO] [stdout] | ------------------- associated items in this implementation [INFO] [stdout] 35 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn get(&self, color: GameColor) -> u32 { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn update_max(&mut self, color: GameColor, chain_count: u32) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub fn max(&self) -> u32 { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CustomScoreSystem` is never constructed [INFO] [stdout] --> src/scoring.rs:83:12 [INFO] [stdout] | [INFO] [stdout] 83 | pub struct CustomScoreSystem { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_score`, `add_chain_bonus`, `consume_chain_bonus`, and `set_chain_bonus_from_total` are never used [INFO] [stdout] --> src/scoring.rs:90:12 [INFO] [stdout] | [INFO] [stdout] 89 | impl CustomScoreSystem { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 90 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub fn add_score(&mut self, points: u32) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn add_chain_bonus(&mut self, lines: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn consume_chain_bonus(&mut self, lines: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn set_chain_bonus_from_total(&mut self, total_bonus: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/tetromino.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub enum TetrominoShape { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 10 | I, [INFO] [stdout] | ^ [INFO] [stdout] 11 | O, [INFO] [stdout] | ^ [INFO] [stdout] 12 | T, [INFO] [stdout] | ^ [INFO] [stdout] 13 | L, [INFO] [stdout] | ^ [INFO] [stdout] 14 | J, [INFO] [stdout] | ^ [INFO] [stdout] 15 | S, [INFO] [stdout] | ^ [INFO] [stdout] 16 | Z, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: `TetrominoShape` 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: function `get_srs_wall_kick_offsets_by_shape` is never used [INFO] [stdout] --> src/tetromino.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | pub fn get_srs_wall_kick_offsets_by_shape( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `all_shapes` is never used [INFO] [stdout] --> src/tetromino.rs:101:12 [INFO] [stdout] | [INFO] [stdout] 100 | impl TetrominoShape { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 101 | pub fn all_shapes() -> Vec { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TetrominoBag` is never constructed [INFO] [stdout] --> src/tetromino.rs:114:12 [INFO] [stdout] | [INFO] [stdout] 114 | pub struct TetrominoBag { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `next` are never used [INFO] [stdout] --> src/tetromino.rs:120:12 [INFO] [stdout] | [INFO] [stdout] 119 | impl TetrominoBag { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 120 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 131 | pub fn next(&mut self) -> TetrominoShape { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new_random`, `from_shape`, `moved`, and `rotated_counter_clockwise` are never used [INFO] [stdout] --> src/tetromino.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 152 | impl Tetromino { [INFO] [stdout] | -------------- associated items in this implementation [INFO] [stdout] 153 | pub fn new_random() -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 191 | pub fn from_shape(shape: TetrominoShape, colors: [GameColor; 4]) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 294 | pub fn moved(&self, dx: i8, dy: i8) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | pub fn rotated_counter_clockwise(&self) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `count` [INFO] [stdout] --> src/animation.rs:57:17 [INFO] [stdout] | [INFO] [stdout] 57 | count, [INFO] [stdout] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_line_clear` is never used [INFO] [stdout] --> src/animation.rs:171:8 [INFO] [stdout] | [INFO] [stdout] 171 | pub fn process_line_clear( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `is_movement`, `is_rotation`, `is_control`, and `description` are never used [INFO] [stdout] --> src/game_input.rs:149:12 [INFO] [stdout] | [INFO] [stdout] 147 | impl GameInput { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] 148 | /// 移動系の入力かどうか [INFO] [stdout] 149 | pub fn is_movement(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn is_rotation(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 165 | pub fn is_control(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub fn description(&self) -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `gen_bool` and `gen_f64` are never used [INFO] [stdout] --> src/random.rs:46:8 [INFO] [stdout] | [INFO] [stdout] 35 | pub trait RandomProvider: Send + Sync { [INFO] [stdout] | -------------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 46 | fn gen_bool(&mut self) -> bool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | fn gen_f64(&mut self) -> f64; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `with_seed` is never used [INFO] [stdout] --> src/random.rs:75:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl NativeRandomProvider { [INFO] [stdout] | ------------------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 75 | pub fn with_seed(seed: u64) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Deterministic` is never constructed [INFO] [stdout] --> src/random.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 222 | pub enum RandomProviderImpl { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 227 | Deterministic(DeterministicRandomProvider), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/random.rs:289:12 [INFO] [stdout] | [INFO] [stdout] 288 | impl DeterministicRandomProvider { [INFO] [stdout] | -------------------------------- associated function in this implementation [INFO] [stdout] 289 | pub fn new(values: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_sleep_count`, and `reset_sleep_count` are never used [INFO] [stdout] --> src/scheduler.rs:85:12 [INFO] [stdout] | [INFO] [stdout] 84 | impl DeterministicScheduler { [INFO] [stdout] | --------------------------- associated items in this implementation [INFO] [stdout] 85 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub fn get_sleep_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn reset_sleep_count(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Deterministic` is never constructed [INFO] [stdout] --> src/scheduler.rs:112:5 [INFO] [stdout] | [INFO] [stdout] 108 | pub enum SchedulerImpl { [INFO] [stdout] | ------------- variant in this enum [INFO] [stdout] ... [INFO] [stdout] 112 | Deterministic(DeterministicScheduler), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `max` is never used [INFO] [stdout] --> src/scoring.rs:76:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ColorMaxChains { [INFO] [stdout] | ------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 76 | pub fn max(&self) -> u32 { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: method `add_chain_bonus` is never used [INFO] [stdout] --> src/scoring.rs:103:12 [INFO] [stdout] | [INFO] [stdout] 89 | impl CustomScoreSystem { [INFO] [stdout] | ---------------------- method in this implementation [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn add_chain_bonus(&mut self, lines: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `get_shape_coordinates` is never used [INFO] [stdout] --> src/tetromino.rs:433:12 [INFO] [stdout] | [INFO] [stdout] 152 | impl Tetromino { [INFO] [stdout] | -------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 433 | pub fn get_shape_coordinates(shape: usize, rotation: usize) -> Option<[(i8, i8); 4]> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 5.21s [INFO] running `Command { std: "docker" "inspect" "f42c5e614c1b916e170cbc3259d3e45a49df8974707116bcc39ffbdd3728c0d5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f42c5e614c1b916e170cbc3259d3e45a49df8974707116bcc39ffbdd3728c0d5", kill_on_drop: false }` [INFO] [stdout] f42c5e614c1b916e170cbc3259d3e45a49df8974707116bcc39ffbdd3728c0d5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] c32d596a57ddf7c930a6b8be90766bd26b2a1d3b186a212bf9920aeb98990a1f [INFO] running `Command { std: "docker" "start" "-a" "c32d596a57ddf7c930a6b8be90766bd26b2a1d3b186a212bf9920aeb98990a1f", kill_on_drop: false }` [INFO] [stdout] warning: unused imports: `HashSet` and `VecDeque` [INFO] [stdout] --> src/lib.rs:6:24 [INFO] [stdout] | [INFO] [stdout] 6 | use std::collections::{HashSet, VecDeque}; [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 macro definition: `console_log` [INFO] [stdout] --> src/lib.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | macro_rules! console_log { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Animation`, `calculate_line_clear_score`, and `process_line_clear` [INFO] [stdout] --> src/lib.rs:122:17 [INFO] [stdout] | [INFO] [stdout] 122 | use animation::{calculate_line_clear_score, process_line_clear, Animation}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `cell::Cell` [INFO] [stdout] --> src/lib.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | use cell::Cell; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `game_input::GameInput` [INFO] [stdout] --> src/lib.rs:126:5 [INFO] [stdout] | [INFO] [stdout] 126 | use game_input::GameInput; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `scoring::CustomScoreSystem` [INFO] [stdout] --> src/lib.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | use scoring::CustomScoreSystem; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `get_srs_wall_kick_offsets_by_shape` [INFO] [stdout] --> src/lib.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | use tetromino::{get_srs_wall_kick_offsets_by_shape, Tetromino}; // CLI版のSRS関数とTetrominoをimport [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `count` [INFO] [stdout] --> src/animation.rs:57:17 [INFO] [stdout] | [INFO] [stdout] 57 | count, [INFO] [stdout] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Animation` is never used [INFO] [stdout] --> src/animation.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum Animation { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnimationResult` is never constructed [INFO] [stdout] --> src/animation.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct AnimationResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/animation.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl AnimationResult { [INFO] [stdout] | -------------------- associated function in this implementation [INFO] [stdout] 35 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_animations` is never used [INFO] [stdout] --> src/animation.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn update_animations( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_push_down_step` is never used [INFO] [stdout] --> src/animation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn process_push_down_step( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PushDownStepResult` is never used [INFO] [stdout] --> src/animation.rs:138:10 [INFO] [stdout] | [INFO] [stdout] 138 | pub enum PushDownStepResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_line_clear_score` is never used [INFO] [stdout] --> src/animation.rs:144:8 [INFO] [stdout] | [INFO] [stdout] 144 | pub fn calculate_line_clear_score( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_line_clear` is never used [INFO] [stdout] --> src/animation.rs:171:8 [INFO] [stdout] | [INFO] [stdout] 171 | pub fn process_line_clear( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Point` is never used [INFO] [stdout] --> src/board_logic.rs:6:10 [INFO] [stdout] | [INFO] [stdout] 6 | pub type Point = (usize, usize); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `find_and_connect_adjacent_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | pub fn find_and_connect_adjacent_blocks(board: &mut Board, lines_to_clear: &[usize]) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `count_connected_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn count_connected_blocks(board: &Board, cleared_line_y: usize) -> Vec<(Point, u32)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_isolated_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:138:8 [INFO] [stdout] | [INFO] [stdout] 138 | pub fn remove_isolated_blocks(board: &mut Board, cleared_line_y: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_chain_bonus` is never used [INFO] [stdout] --> src/board_logic.rs:192:8 [INFO] [stdout] | [INFO] [stdout] 192 | pub fn calculate_chain_bonus(board: &Board) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Cell` is never used [INFO] [stdout] --> src/cell.rs:4:10 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Cell { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Board` is never used [INFO] [stdout] --> src/cell.rs:22:10 [INFO] [stdout] | [INFO] [stdout] 22 | pub type Board = Vec>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BOARD_HEIGHT` is never used [INFO] [stdout] --> src/config.rs:5:11 [INFO] [stdout] | [INFO] [stdout] 5 | pub const BOARD_HEIGHT: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FALL_SPEED_START` is never used [INFO] [stdout] --> src/config.rs:6:11 [INFO] [stdout] | [INFO] [stdout] 6 | pub const FALL_SPEED_START: std::time::Duration = std::time::Duration::from_millis(800); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `COLOR_PALETTE` is never used [INFO] [stdout] --> src/config.rs:8:11 [INFO] [stdout] | [INFO] [stdout] 8 | pub const COLOR_PALETTE: [GameColor; 3] = [GameColor::Cyan, GameColor::Magenta, GameColor::Yellow]; [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_ANIMATION_STEP` is never used [INFO] [stdout] --> src/config.rs:9:11 [INFO] [stdout] | [INFO] [stdout] 9 | pub const BLINK_ANIMATION_STEP: std::time::Duration = std::time::Duration::from_millis(120); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_COUNT_MAX` is never used [INFO] [stdout] --> src/config.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const BLINK_COUNT_MAX: usize = 6; // 3 blinks: on-off-on-off-on-off [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PUSH_DOWN_STEP_DURATION` is never used [INFO] [stdout] --> src/config.rs:11:11 [INFO] [stdout] | [INFO] [stdout] 11 | pub const PUSH_DOWN_STEP_DURATION: std::time::Duration = std::time::Duration::from_millis(50); // 100ms → 50ms に高速化 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `GameInput` is never used [INFO] [stdout] --> src/game_input.rs:7:10 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum GameInput { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `InputProvider` is never used [INFO] [stdout] --> src/game_input.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait InputProvider { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CrosstermInputProvider` is never constructed [INFO] [stdout] --> src/game_input.rs:41:12 [INFO] [stdout] | [INFO] [stdout] 41 | pub struct CrosstermInputProvider; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/game_input.rs:45:12 [INFO] [stdout] | [INFO] [stdout] 44 | impl CrosstermInputProvider { [INFO] [stdout] | --------------------------- associated function in this implementation [INFO] [stdout] 45 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `is_movement`, `is_rotation`, `is_control`, and `description` are never used [INFO] [stdout] --> src/game_input.rs:149:12 [INFO] [stdout] | [INFO] [stdout] 147 | impl GameInput { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] 148 | /// 移動系の入力かどうか [INFO] [stdout] 149 | pub fn is_movement(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 157 | pub fn is_rotation(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 165 | pub fn is_control(&self) -> bool { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 173 | pub fn description(&self) -> &'static str { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `choose`, `gen_bool`, and `gen_f64` are never used [INFO] [stdout] --> src/random.rs:40:8 [INFO] [stdout] | [INFO] [stdout] 35 | pub trait RandomProvider: Send + Sync { [INFO] [stdout] | -------------- methods in this trait [INFO] [stdout] ... [INFO] [stdout] 40 | fn choose<'a, T>(&mut self, slice: &'a [T]) -> Option<&'a T>; [INFO] [stdout] | ^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 46 | fn gen_bool(&mut self) -> bool; [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 49 | fn gen_f64(&mut self) -> f64; [INFO] [stdout] | ^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `with_seed` is never used [INFO] [stdout] --> src/random.rs:75:12 [INFO] [stdout] | [INFO] [stdout] 59 | impl NativeRandomProvider { [INFO] [stdout] | ------------------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 75 | pub fn with_seed(seed: u64) -> Self { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant `Deterministic` is never constructed [INFO] [stdout] --> src/random.rs:227:5 [INFO] [stdout] | [INFO] [stdout] 222 | pub enum RandomProviderImpl { [INFO] [stdout] | ------------------ variant in this enum [INFO] [stdout] ... [INFO] [stdout] 227 | Deterministic(DeterministicRandomProvider), [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/random.rs:289:12 [INFO] [stdout] | [INFO] [stdout] 288 | impl DeterministicRandomProvider { [INFO] [stdout] | -------------------------------- associated function in this implementation [INFO] [stdout] 289 | pub fn new(values: Vec) -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `Scheduler` is never used [INFO] [stdout] --> src/scheduler.rs:9:11 [INFO] [stdout] | [INFO] [stdout] 9 | pub trait Scheduler { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `NativeScheduler` is never constructed [INFO] [stdout] --> src/scheduler.rs:22:12 [INFO] [stdout] | [INFO] [stdout] 22 | pub struct NativeScheduler; [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/scheduler.rs:25:12 [INFO] [stdout] | [INFO] [stdout] 24 | impl NativeScheduler { [INFO] [stdout] | -------------------- associated function in this implementation [INFO] [stdout] 25 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `DeterministicScheduler` is never constructed [INFO] [stdout] --> src/scheduler.rs:80:12 [INFO] [stdout] | [INFO] [stdout] 80 | pub struct DeterministicScheduler { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `get_sleep_count`, and `reset_sleep_count` are never used [INFO] [stdout] --> src/scheduler.rs:85:12 [INFO] [stdout] | [INFO] [stdout] 84 | impl DeterministicScheduler { [INFO] [stdout] | --------------------------- associated items in this implementation [INFO] [stdout] 85 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 91 | pub fn get_sleep_count(&self) -> usize { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 95 | pub fn reset_sleep_count(&self) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `SchedulerImpl` is never used [INFO] [stdout] --> src/scheduler.rs:108:10 [INFO] [stdout] | [INFO] [stdout] 108 | pub enum SchedulerImpl { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `create_default_scheduler` is never used [INFO] [stdout] --> src/scheduler.rs:127:8 [INFO] [stdout] | [INFO] [stdout] 127 | pub fn create_default_scheduler() -> SchedulerImpl { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TotalScore` is never constructed [INFO] [stdout] --> src/scoring.rs:6:12 [INFO] [stdout] | [INFO] [stdout] 6 | pub struct TotalScore { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add`, and `total` are never used [INFO] [stdout] --> src/scoring.rs:11:12 [INFO] [stdout] | [INFO] [stdout] 10 | impl TotalScore { [INFO] [stdout] | --------------- associated items in this implementation [INFO] [stdout] 11 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 16 | pub fn add(&mut self, points: u32) { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | pub fn total(&self) -> u32 { [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `ColorMaxChains` is never constructed [INFO] [stdout] --> src/scoring.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct ColorMaxChains { [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Compiling thud-and-tile v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: associated items `new`, `get`, `update_max`, and `max` are never used [INFO] [stdout] --> src/scoring.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl ColorMaxChains { [INFO] [stdout] | ------------------- associated items in this implementation [INFO] [stdout] 35 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 44 | pub fn get(&self, color: GameColor) -> u32 { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 54 | pub fn update_max(&mut self, color: GameColor, chain_count: u32) { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 76 | pub fn max(&self) -> u32 { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `CustomScoreSystem` is never constructed [INFO] [stdout] --> src/scoring.rs:83:12 [INFO] [stdout] | [INFO] [stdout] 83 | pub struct CustomScoreSystem { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new`, `add_score`, `add_chain_bonus`, `consume_chain_bonus`, and `set_chain_bonus_from_total` are never used [INFO] [stdout] --> src/scoring.rs:90:12 [INFO] [stdout] | [INFO] [stdout] 89 | impl CustomScoreSystem { [INFO] [stdout] | ---------------------- associated items in this implementation [INFO] [stdout] 90 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 98 | pub fn add_score(&mut self, points: u32) { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 103 | pub fn add_chain_bonus(&mut self, lines: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 108 | pub fn consume_chain_bonus(&mut self, lines: u32) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 115 | pub fn set_chain_bonus_from_total(&mut self, total_bonus: u32) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: multiple variants are never constructed [INFO] [stdout] --> src/tetromino.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 9 | pub enum TetrominoShape { [INFO] [stdout] | -------------- variants in this enum [INFO] [stdout] 10 | I, [INFO] [stdout] | ^ [INFO] [stdout] 11 | O, [INFO] [stdout] | ^ [INFO] [stdout] 12 | T, [INFO] [stdout] | ^ [INFO] [stdout] 13 | L, [INFO] [stdout] | ^ [INFO] [stdout] 14 | J, [INFO] [stdout] | ^ [INFO] [stdout] 15 | S, [INFO] [stdout] | ^ [INFO] [stdout] 16 | Z, [INFO] [stdout] | ^ [INFO] [stdout] | [INFO] [stdout] = note: `TetrominoShape` 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: function `get_srs_wall_kick_offsets_by_shape` is never used [INFO] [stdout] --> src/tetromino.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | pub fn get_srs_wall_kick_offsets_by_shape( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `all_shapes` is never used [INFO] [stdout] --> src/tetromino.rs:101:12 [INFO] [stdout] | [INFO] [stdout] 100 | impl TetrominoShape { [INFO] [stdout] | ------------------- associated function in this implementation [INFO] [stdout] 101 | pub fn all_shapes() -> Vec { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `TetrominoBag` is never constructed [INFO] [stdout] --> src/tetromino.rs:114:12 [INFO] [stdout] | [INFO] [stdout] 114 | pub struct TetrominoBag { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new` and `next` are never used [INFO] [stdout] --> src/tetromino.rs:120:12 [INFO] [stdout] | [INFO] [stdout] 119 | impl TetrominoBag { [INFO] [stdout] | ----------------- associated items in this implementation [INFO] [stdout] 120 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] ... [INFO] [stdout] 131 | pub fn next(&mut self) -> TetrominoShape { [INFO] [stdout] | ^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated items `new_random`, `from_shape`, `moved`, and `rotated_counter_clockwise` are never used [INFO] [stdout] --> src/tetromino.rs:153:12 [INFO] [stdout] | [INFO] [stdout] 152 | impl Tetromino { [INFO] [stdout] | -------------- associated items in this implementation [INFO] [stdout] 153 | pub fn new_random() -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 191 | pub fn from_shape(shape: TetrominoShape, colors: [GameColor; 4]) -> Self { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 294 | pub fn moved(&self, dx: i8, dy: i8) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | pub fn rotated_counter_clockwise(&self) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `HashSet` and `VecDeque` [INFO] [stdout] --> src/lib.rs:6:24 [INFO] [stdout] | [INFO] [stdout] 6 | use std::collections::{HashSet, VecDeque}; [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 macro definition: `console_log` [INFO] [stdout] --> src/lib.rs:33:14 [INFO] [stdout] | [INFO] [stdout] 33 | macro_rules! console_log { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused imports: `Animation`, `calculate_line_clear_score`, and `process_line_clear` [INFO] [stdout] --> src/lib.rs:122:17 [INFO] [stdout] | [INFO] [stdout] 122 | use animation::{calculate_line_clear_score, process_line_clear, Animation}; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `cell::Cell` [INFO] [stdout] --> src/lib.rs:123:5 [INFO] [stdout] | [INFO] [stdout] 123 | use cell::Cell; [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `game_input::GameInput` [INFO] [stdout] --> src/lib.rs:126:5 [INFO] [stdout] | [INFO] [stdout] 126 | use game_input::GameInput; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `scoring::CustomScoreSystem` [INFO] [stdout] --> src/lib.rs:128:5 [INFO] [stdout] | [INFO] [stdout] 128 | use scoring::CustomScoreSystem; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused import: `get_srs_wall_kick_offsets_by_shape` [INFO] [stdout] --> src/lib.rs:129:17 [INFO] [stdout] | [INFO] [stdout] 129 | use tetromino::{get_srs_wall_kick_offsets_by_shape, Tetromino}; // CLI版のSRS関数とTetrominoをimport [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `count` [INFO] [stdout] --> src/animation.rs:57:17 [INFO] [stdout] | [INFO] [stdout] 57 | count, [INFO] [stdout] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `Animation` is never used [INFO] [stdout] --> src/animation.rs:14:10 [INFO] [stdout] | [INFO] [stdout] 14 | pub enum Animation { [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: struct `AnimationResult` is never constructed [INFO] [stdout] --> src/animation.rs:28:12 [INFO] [stdout] | [INFO] [stdout] 28 | pub struct AnimationResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `new` is never used [INFO] [stdout] --> src/animation.rs:35:12 [INFO] [stdout] | [INFO] [stdout] 34 | impl AnimationResult { [INFO] [stdout] | -------------------- associated function in this implementation [INFO] [stdout] 35 | pub fn new() -> Self { [INFO] [stdout] | ^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `update_animations` is never used [INFO] [stdout] --> src/animation.rs:47:8 [INFO] [stdout] | [INFO] [stdout] 47 | pub fn update_animations( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_push_down_step` is never used [INFO] [stdout] --> src/animation.rs:103:8 [INFO] [stdout] | [INFO] [stdout] 103 | pub fn process_push_down_step( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: enum `PushDownStepResult` is never used [INFO] [stdout] --> src/animation.rs:138:10 [INFO] [stdout] | [INFO] [stdout] 138 | pub enum PushDownStepResult { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_line_clear_score` is never used [INFO] [stdout] --> src/animation.rs:144:8 [INFO] [stdout] | [INFO] [stdout] 144 | pub fn calculate_line_clear_score( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_line_clear` is never used [INFO] [stdout] --> src/animation.rs:171:8 [INFO] [stdout] | [INFO] [stdout] 171 | pub fn process_line_clear( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Point` is never used [INFO] [stdout] --> src/board_logic.rs:6:10 [INFO] [stdout] | [INFO] [stdout] 6 | pub type Point = (usize, usize); [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `find_and_connect_adjacent_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:8:8 [INFO] [stdout] | [INFO] [stdout] 8 | pub fn find_and_connect_adjacent_blocks(board: &mut Board, lines_to_clear: &[usize]) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `count_connected_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:76:8 [INFO] [stdout] | [INFO] [stdout] 76 | pub fn count_connected_blocks(board: &Board, cleared_line_y: usize) -> Vec<(Point, u32)> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `remove_isolated_blocks` is never used [INFO] [stdout] --> src/board_logic.rs:138:8 [INFO] [stdout] | [INFO] [stdout] 138 | pub fn remove_isolated_blocks(board: &mut Board, cleared_line_y: usize) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `calculate_chain_bonus` is never used [INFO] [stdout] --> src/board_logic.rs:192:8 [INFO] [stdout] | [INFO] [stdout] 192 | pub fn calculate_chain_bonus(board: &Board) -> u32 { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `Empty`, `Occupied`, and `Solid` are never constructed [INFO] [stdout] --> src/cell.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 4 | pub enum Cell { [INFO] [stdout] | ---- variants in this enum [INFO] [stdout] 5 | Empty, [INFO] [stdout] | ^^^^^ [INFO] [stdout] 6 | Occupied(GameColor), [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] 7 | Solid, [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: type alias `Board` is never used [INFO] [stdout] --> src/cell.rs:22:10 [INFO] [stdout] | [INFO] [stdout] 22 | pub type Board = Vec>; [INFO] [stdout] | ^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BOARD_HEIGHT` is never used [INFO] [stdout] --> src/config.rs:5:11 [INFO] [stdout] | [INFO] [stdout] 5 | pub const BOARD_HEIGHT: usize = 20; [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `FALL_SPEED_START` is never used [INFO] [stdout] --> src/config.rs:6:11 [INFO] [stdout] | [INFO] [stdout] 6 | pub const FALL_SPEED_START: std::time::Duration = std::time::Duration::from_millis(800); [INFO] [stdout] | ^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_ANIMATION_STEP` is never used [INFO] [stdout] --> src/config.rs:9:11 [INFO] [stdout] | [INFO] [stdout] 9 | pub const BLINK_ANIMATION_STEP: std::time::Duration = std::time::Duration::from_millis(120); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `BLINK_COUNT_MAX` is never used [INFO] [stdout] --> src/config.rs:10:11 [INFO] [stdout] | [INFO] [stdout] 10 | pub const BLINK_COUNT_MAX: usize = 6; // 3 blinks: on-off-on-off-on-off [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: constant `PUSH_DOWN_STEP_DURATION` is never used [INFO] [stdout] --> src/config.rs:11:11 [INFO] [stdout] | [INFO] [stdout] 11 | pub const PUSH_DOWN_STEP_DURATION: std::time::Duration = std::time::Duration::from_millis(50); // 100ms → 50ms に高速化 [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variants `MoveRight`, `HardDrop`, and `Pause` are never constructed [INFO] [stdout] --> src/game_input.rs:10:5 [INFO] [stdout] | [INFO] [stdout] 7 | pub enum GameInput { [INFO] [stdout] | --------- variants in this enum [INFO] [stdout] ... [INFO] [stdout] 10 | MoveRight, [INFO] [stdout] | ^^^^^^^^^ [INFO] [stdout] 11 | SoftDrop, // スペースキー: ゆっくり落下 [INFO] [stdout] 12 | HardDrop, // Shift+Down: 即座に着地 [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] ... [INFO] [stdout] 21 | Pause, // 'p': 一時停止(将来用) [INFO] [stdout] | ^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `GameInput` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait `InputProvider` is never used [INFO] [stdout] --> src/game_input.rs:28:11 [INFO] [stdout] | [INFO] [stdout] 28 | pub trait InputProvider { [INFO] [stdout] | ^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `get_srs_wall_kick_offsets_by_shape` is never used [INFO] [stdout] --> src/tetromino.rs:82:8 [INFO] [stdout] | [INFO] [stdout] 82 | pub fn get_srs_wall_kick_offsets_by_shape( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: methods `moved` and `rotated_counter_clockwise` are never used [INFO] [stdout] --> src/tetromino.rs:294:12 [INFO] [stdout] | [INFO] [stdout] 152 | impl Tetromino { [INFO] [stdout] | -------------- methods in this implementation [INFO] [stdout] ... [INFO] [stdout] 294 | pub fn moved(&self, dx: i8, dy: i8) -> Self { [INFO] [stdout] | ^^^^^ [INFO] [stdout] ... [INFO] [stdout] 346 | pub fn rotated_counter_clockwise(&self) -> Self { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused variable: `count` [INFO] [stdout] --> src/animation.rs:57:17 [INFO] [stdout] | [INFO] [stdout] 57 | count, [INFO] [stdout] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: function `process_line_clear` is never used [INFO] [stdout] --> src/animation.rs:171:8 [INFO] [stdout] | [INFO] [stdout] 171 | pub fn process_line_clear( [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: associated function `get_shape_coordinates` is never used [INFO] [stdout] --> src/tetromino.rs:433:12 [INFO] [stdout] | [INFO] [stdout] 152 | impl Tetromino { [INFO] [stdout] | -------------- associated function in this implementation [INFO] [stdout] ... [INFO] [stdout] 433 | pub fn get_shape_coordinates(shape: usize, rotation: usize) -> Option<[(i8, i8); 4]> { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 2.16s [INFO] running `Command { std: "docker" "inspect" "c32d596a57ddf7c930a6b8be90766bd26b2a1d3b186a212bf9920aeb98990a1f", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "c32d596a57ddf7c930a6b8be90766bd26b2a1d3b186a212bf9920aeb98990a1f", kill_on_drop: false }` [INFO] [stdout] c32d596a57ddf7c930a6b8be90766bd26b2a1d3b186a212bf9920aeb98990a1f [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-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:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+c90bcb9571b7aab0d8beaa2ce8a998ffaf079d38" "test" "--frozen", kill_on_drop: false }` [INFO] [stdout] daab2ae0860fc5886d5a6519d7fa656bf0550200dbf78497fe89e54755a98858 [INFO] running `Command { std: "docker" "start" "-a" "daab2ae0860fc5886d5a6519d7fa656bf0550200dbf78497fe89e54755a98858", kill_on_drop: false }` [INFO] [stderr] warning: unused imports: `HashSet` and `VecDeque` [INFO] [stderr] --> src/lib.rs:6:24 [INFO] [stderr] | [INFO] [stderr] 6 | use std::collections::{HashSet, VecDeque}; [INFO] [stderr] | ^^^^^^^ ^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused macro definition: `console_log` [INFO] [stderr] --> src/lib.rs:33:14 [INFO] [stderr] | [INFO] [stderr] 33 | macro_rules! console_log { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_macros)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Animation`, `calculate_line_clear_score`, and `process_line_clear` [INFO] [stderr] --> src/lib.rs:122:17 [INFO] [stderr] | [INFO] [stderr] 122 | use animation::{calculate_line_clear_score, process_line_clear, Animation}; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^ ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `cell::Cell` [INFO] [stderr] --> src/lib.rs:123:5 [INFO] [stderr] | [INFO] [stderr] 123 | use cell::Cell; [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `game_input::GameInput` [INFO] [stderr] --> src/lib.rs:126:5 [INFO] [stderr] | [INFO] [stderr] 126 | use game_input::GameInput; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `scoring::CustomScoreSystem` [INFO] [stderr] --> src/lib.rs:128:5 [INFO] [stderr] | [INFO] [stderr] 128 | use scoring::CustomScoreSystem; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `get_srs_wall_kick_offsets_by_shape` [INFO] [stderr] --> src/lib.rs:129:17 [INFO] [stderr] | [INFO] [stderr] 129 | use tetromino::{get_srs_wall_kick_offsets_by_shape, Tetromino}; // CLI版のSRS関数とTetrominoをimport [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `count` [INFO] [stderr] --> src/animation.rs:57:17 [INFO] [stderr] | [INFO] [stderr] 57 | count, [INFO] [stderr] | ^^^^^ help: try ignoring the field: `count: _` [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: enum `Animation` is never used [INFO] [stderr] --> src/animation.rs:14:10 [INFO] [stderr] | [INFO] [stderr] 14 | pub enum Animation { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: struct `AnimationResult` is never constructed [INFO] [stderr] --> src/animation.rs:28:12 [INFO] [stderr] | [INFO] [stderr] 28 | pub struct AnimationResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/animation.rs:35:12 [INFO] [stderr] | [INFO] [stderr] 34 | impl AnimationResult { [INFO] [stderr] | -------------------- associated function in this implementation [INFO] [stderr] 35 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: function `update_animations` is never used [INFO] [stderr] --> src/animation.rs:47:8 [INFO] [stderr] | [INFO] [stderr] 47 | pub fn update_animations( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `process_push_down_step` is never used [INFO] [stderr] --> src/animation.rs:103:8 [INFO] [stderr] | [INFO] [stderr] 103 | pub fn process_push_down_step( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `PushDownStepResult` is never used [INFO] [stderr] --> src/animation.rs:138:10 [INFO] [stderr] | [INFO] [stderr] 138 | pub enum PushDownStepResult { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `calculate_line_clear_score` is never used [INFO] [stderr] --> src/animation.rs:144:8 [INFO] [stderr] | [INFO] [stderr] 144 | pub fn calculate_line_clear_score( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `process_line_clear` is never used [INFO] [stderr] --> src/animation.rs:171:8 [INFO] [stderr] | [INFO] [stderr] 171 | pub fn process_line_clear( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: type alias `Point` is never used [INFO] [stderr] --> src/board_logic.rs:6:10 [INFO] [stderr] | [INFO] [stderr] 6 | pub type Point = (usize, usize); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `find_and_connect_adjacent_blocks` is never used [INFO] [stderr] --> src/board_logic.rs:8:8 [INFO] [stderr] | [INFO] [stderr] 8 | pub fn find_and_connect_adjacent_blocks(board: &mut Board, lines_to_clear: &[usize]) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `count_connected_blocks` is never used [INFO] [stderr] --> src/board_logic.rs:76:8 [INFO] [stderr] | [INFO] [stderr] 76 | pub fn count_connected_blocks(board: &Board, cleared_line_y: usize) -> Vec<(Point, u32)> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `remove_isolated_blocks` is never used [INFO] [stderr] --> src/board_logic.rs:138:8 [INFO] [stderr] | [INFO] [stderr] 138 | pub fn remove_isolated_blocks(board: &mut Board, cleared_line_y: usize) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `calculate_chain_bonus` is never used [INFO] [stderr] --> src/board_logic.rs:192:8 [INFO] [stderr] | [INFO] [stderr] 192 | pub fn calculate_chain_bonus(board: &Board) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `Cell` is never used [INFO] [stderr] --> src/cell.rs:4:10 [INFO] [stderr] | [INFO] [stderr] 4 | pub enum Cell { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: type alias `Board` is never used [INFO] [stderr] --> src/cell.rs:22:10 [INFO] [stderr] | [INFO] [stderr] 22 | pub type Board = Vec>; [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `BOARD_HEIGHT` is never used [INFO] [stderr] --> src/config.rs:5:11 [INFO] [stderr] | [INFO] [stderr] 5 | pub const BOARD_HEIGHT: usize = 20; [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `FALL_SPEED_START` is never used [INFO] [stderr] --> src/config.rs:6:11 [INFO] [stderr] | [INFO] [stderr] 6 | pub const FALL_SPEED_START: std::time::Duration = std::time::Duration::from_millis(800); [INFO] [stderr] | ^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `COLOR_PALETTE` is never used [INFO] [stderr] --> src/config.rs:8:11 [INFO] [stderr] | [INFO] [stderr] 8 | pub const COLOR_PALETTE: [GameColor; 3] = [GameColor::Cyan, GameColor::Magenta, GameColor::Yellow]; [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `BLINK_ANIMATION_STEP` is never used [INFO] [stderr] --> src/config.rs:9:11 [INFO] [stderr] | [INFO] [stderr] 9 | pub const BLINK_ANIMATION_STEP: std::time::Duration = std::time::Duration::from_millis(120); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `BLINK_COUNT_MAX` is never used [INFO] [stderr] --> src/config.rs:10:11 [INFO] [stderr] | [INFO] [stderr] 10 | pub const BLINK_COUNT_MAX: usize = 6; // 3 blinks: on-off-on-off-on-off [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant `PUSH_DOWN_STEP_DURATION` is never used [INFO] [stderr] --> src/config.rs:11:11 [INFO] [stderr] | [INFO] [stderr] 11 | pub const PUSH_DOWN_STEP_DURATION: std::time::Duration = std::time::Duration::from_millis(50); // 100ms → 50ms に高速化 [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `GameInput` is never used [INFO] [stderr] --> src/game_input.rs:7:10 [INFO] [stderr] | [INFO] [stderr] 7 | pub enum GameInput { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: trait `InputProvider` is never used [INFO] [stderr] --> src/game_input.rs:28:11 [INFO] [stderr] | [INFO] [stderr] 28 | pub trait InputProvider { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `CrosstermInputProvider` is never constructed [INFO] [stderr] --> src/game_input.rs:41:12 [INFO] [stderr] | [INFO] [stderr] 41 | pub struct CrosstermInputProvider; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/game_input.rs:45:12 [INFO] [stderr] | [INFO] [stderr] 44 | impl CrosstermInputProvider { [INFO] [stderr] | --------------------------- associated function in this implementation [INFO] [stderr] 45 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: methods `is_movement`, `is_rotation`, `is_control`, and `description` are never used [INFO] [stderr] --> src/game_input.rs:149:12 [INFO] [stderr] | [INFO] [stderr] 147 | impl GameInput { [INFO] [stderr] | -------------- methods in this implementation [INFO] [stderr] 148 | /// 移動系の入力かどうか [INFO] [stderr] 149 | pub fn is_movement(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 157 | pub fn is_rotation(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 165 | pub fn is_control(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 173 | pub fn description(&self) -> &'static str { [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: methods `choose`, `gen_bool`, and `gen_f64` are never used [INFO] [stderr] --> src/random.rs:40:8 [INFO] [stderr] | [INFO] [stderr] 35 | pub trait RandomProvider: Send + Sync { [INFO] [stderr] | -------------- methods in this trait [INFO] [stderr] ... [INFO] [stderr] 40 | fn choose<'a, T>(&mut self, slice: &'a [T]) -> Option<&'a T>; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 46 | fn gen_bool(&mut self) -> bool; [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 49 | fn gen_f64(&mut self) -> f64; [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `with_seed` is never used [INFO] [stderr] --> src/random.rs:75:12 [INFO] [stderr] | [INFO] [stderr] 59 | impl NativeRandomProvider { [INFO] [stderr] | ------------------------- associated function in this implementation [INFO] [stderr] ... [INFO] [stderr] 75 | pub fn with_seed(seed: u64) -> Self { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variant `Deterministic` is never constructed [INFO] [stderr] --> src/random.rs:227:5 [INFO] [stderr] | [INFO] [stderr] 222 | pub enum RandomProviderImpl { [INFO] [stderr] | ------------------ variant in this enum [INFO] [stderr] ... [INFO] [stderr] 227 | Deterministic(DeterministicRandomProvider), [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/random.rs:289:12 [INFO] [stderr] | [INFO] [stderr] 288 | impl DeterministicRandomProvider { [INFO] [stderr] | -------------------------------- associated function in this implementation [INFO] [stderr] 289 | pub fn new(values: Vec) -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: trait `Scheduler` is never used [INFO] [stderr] --> src/scheduler.rs:9:11 [INFO] [stderr] | [INFO] [stderr] 9 | pub trait Scheduler { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `NativeScheduler` is never constructed [INFO] [stderr] --> src/scheduler.rs:22:12 [INFO] [stderr] | [INFO] [stderr] 22 | pub struct NativeScheduler; [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `new` is never used [INFO] [stderr] --> src/scheduler.rs:25:12 [INFO] [stderr] | [INFO] [stderr] 24 | impl NativeScheduler { [INFO] [stderr] | -------------------- associated function in this implementation [INFO] [stderr] 25 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `DeterministicScheduler` is never constructed [INFO] [stderr] --> src/scheduler.rs:80:12 [INFO] [stderr] | [INFO] [stderr] 80 | pub struct DeterministicScheduler { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `get_sleep_count`, and `reset_sleep_count` are never used [INFO] [stderr] --> src/scheduler.rs:85:12 [INFO] [stderr] | [INFO] [stderr] 84 | impl DeterministicScheduler { [INFO] [stderr] | --------------------------- associated items in this implementation [INFO] [stderr] 85 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 91 | pub fn get_sleep_count(&self) -> usize { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 95 | pub fn reset_sleep_count(&self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: enum `SchedulerImpl` is never used [INFO] [stderr] --> src/scheduler.rs:108:10 [INFO] [stderr] | [INFO] [stderr] 108 | pub enum SchedulerImpl { [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function `create_default_scheduler` is never used [INFO] [stderr] --> src/scheduler.rs:127:8 [INFO] [stderr] | [INFO] [stderr] 127 | pub fn create_default_scheduler() -> SchedulerImpl { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `TotalScore` is never constructed [INFO] [stderr] --> src/scoring.rs:6:12 [INFO] [stderr] | [INFO] [stderr] 6 | pub struct TotalScore { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `add`, and `total` are never used [INFO] [stderr] --> src/scoring.rs:11:12 [INFO] [stderr] | [INFO] [stderr] 10 | impl TotalScore { [INFO] [stderr] | --------------- associated items in this implementation [INFO] [stderr] 11 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 16 | pub fn add(&mut self, points: u32) { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 21 | pub fn total(&self) -> u32 { [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `ColorMaxChains` is never constructed [INFO] [stderr] --> src/scoring.rs:28:12 [INFO] [stderr] | [INFO] [stderr] 28 | pub struct ColorMaxChains { [INFO] [stderr] | ^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `get`, `update_max`, and `max` are never used [INFO] [stderr] --> src/scoring.rs:35:12 [INFO] [stderr] | [INFO] [stderr] 34 | impl ColorMaxChains { [INFO] [stderr] | ------------------- associated items in this implementation [INFO] [stderr] 35 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 44 | pub fn get(&self, color: GameColor) -> u32 { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 54 | pub fn update_max(&mut self, color: GameColor, chain_count: u32) { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 76 | pub fn max(&self) -> u32 { [INFO] [stderr] | ^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `CustomScoreSystem` is never constructed [INFO] [stderr] --> src/scoring.rs:83:12 [INFO] [stderr] | [INFO] [stderr] 83 | pub struct CustomScoreSystem { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new`, `add_score`, `add_chain_bonus`, `consume_chain_bonus`, and `set_chain_bonus_from_total` are never used [INFO] [stderr] --> src/scoring.rs:90:12 [INFO] [stderr] | [INFO] [stderr] 89 | impl CustomScoreSystem { [INFO] [stderr] | ---------------------- associated items in this implementation [INFO] [stderr] 90 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 98 | pub fn add_score(&mut self, points: u32) { [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 103 | pub fn add_chain_bonus(&mut self, lines: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 108 | pub fn consume_chain_bonus(&mut self, lines: u32) -> u32 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 115 | pub fn set_chain_bonus_from_total(&mut self, total_bonus: u32) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: multiple variants are never constructed [INFO] [stderr] --> src/tetromino.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 9 | pub enum TetrominoShape { [INFO] [stderr] | -------------- variants in this enum [INFO] [stderr] 10 | I, [INFO] [stderr] | ^ [INFO] [stderr] 11 | O, [INFO] [stderr] | ^ [INFO] [stderr] 12 | T, [INFO] [stderr] | ^ [INFO] [stderr] 13 | L, [INFO] [stderr] | ^ [INFO] [stderr] 14 | J, [INFO] [stderr] | ^ [INFO] [stderr] 15 | S, [INFO] [stderr] | ^ [INFO] [stderr] 16 | Z, [INFO] [stderr] | ^ [INFO] [stderr] | [INFO] [stderr] = note: `TetrominoShape` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: function `get_srs_wall_kick_offsets_by_shape` is never used [INFO] [stderr] --> src/tetromino.rs:82:8 [INFO] [stderr] | [INFO] [stderr] 82 | pub fn get_srs_wall_kick_offsets_by_shape( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated function `all_shapes` is never used [INFO] [stderr] --> src/tetromino.rs:101:12 [INFO] [stderr] | [INFO] [stderr] 100 | impl TetrominoShape { [INFO] [stderr] | ------------------- associated function in this implementation [INFO] [stderr] 101 | pub fn all_shapes() -> Vec { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: struct `TetrominoBag` is never constructed [INFO] [stderr] --> src/tetromino.rs:114:12 [INFO] [stderr] | [INFO] [stderr] 114 | pub struct TetrominoBag { [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new` and `next` are never used [INFO] [stderr] --> src/tetromino.rs:120:12 [INFO] [stderr] | [INFO] [stderr] 119 | impl TetrominoBag { [INFO] [stderr] | ----------------- associated items in this implementation [INFO] [stderr] 120 | pub fn new() -> Self { [INFO] [stderr] | ^^^ [INFO] [stderr] ... [INFO] [stderr] 131 | pub fn next(&mut self) -> TetrominoShape { [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: associated items `new_random`, `from_shape`, `moved`, and `rotated_counter_clockwise` are never used [INFO] [stderr] --> src/tetromino.rs:153:12 [INFO] [stderr] | [INFO] [stderr] 152 | impl Tetromino { [INFO] [stderr] | -------------- associated items in this implementation [INFO] [stderr] 153 | pub fn new_random() -> Self { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 191 | pub fn from_shape(shape: TetrominoShape, colors: [GameColor; 4]) -> Self { [INFO] [stderr] | ^^^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 294 | pub fn moved(&self, dx: i8, dy: i8) -> Self { [INFO] [stderr] | ^^^^^ [INFO] [stderr] ... [INFO] [stderr] 346 | pub fn rotated_counter_clockwise(&self) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variants `Empty`, `Occupied`, and `Solid` are never constructed [INFO] [stderr] --> src/cell.rs:5:5 [INFO] [stderr] | [INFO] [stderr] 4 | pub enum Cell { [INFO] [stderr] | ---- variants in this enum [INFO] [stderr] 5 | Empty, [INFO] [stderr] | ^^^^^ [INFO] [stderr] 6 | Occupied(GameColor), [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] 7 | Solid, [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `Cell` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: variants `MoveRight`, `HardDrop`, and `Pause` are never constructed [INFO] [stderr] --> src/game_input.rs:10:5 [INFO] [stderr] | [INFO] [stderr] 7 | pub enum GameInput { [INFO] [stderr] | --------- variants in this enum [INFO] [stderr] ... [INFO] [stderr] 10 | MoveRight, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] 11 | SoftDrop, // スペースキー: ゆっくり落下 [INFO] [stderr] 12 | HardDrop, // Shift+Down: 即座に着地 [INFO] [stderr] | ^^^^^^^^ [INFO] [stderr] ... [INFO] [stderr] 21 | Pause, // 'p': 一時停止(将来用) [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `GameInput` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis [INFO] [stderr] [INFO] [stderr] warning: methods `moved` and `rotated_counter_clockwise` are never used [INFO] [stderr] --> src/tetromino.rs:294:12 [INFO] [stderr] | [INFO] [stderr] 152 | impl Tetromino { [INFO] [stderr] | -------------- methods in this implementation [INFO] [stderr] ... [INFO] [stderr] 294 | pub fn moved(&self, dx: i8, dy: i8) -> Self { [INFO] [stderr] | ^^^^^ [INFO] [stderr] ... [INFO] [stderr] 346 | pub fn rotated_counter_clockwise(&self) -> Self { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `thud-and-tile` (lib) generated 57 warnings (run `cargo fix --lib -p thud-and-tile` to apply 7 suggestions) [INFO] [stderr] warning: `thud-and-tile` (lib test) generated 32 warnings (29 duplicates) [INFO] [stderr] warning: function `process_line_clear` is never used [INFO] [stderr] --> src/animation.rs:171:8 [INFO] [stderr] | [INFO] [stderr] 171 | pub fn process_line_clear( [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default [INFO] [stderr] [INFO] [stderr] warning: associated function `get_shape_coordinates` is never used [INFO] [stderr] --> src/tetromino.rs:433:12 [INFO] [stderr] | [INFO] [stderr] 152 | impl Tetromino { [INFO] [stderr] | -------------- associated function in this implementation [INFO] [stderr] ... [INFO] [stderr] 433 | pub fn get_shape_coordinates(shape: usize, rotation: usize) -> Option<[(i8, i8); 4]> { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: `thud-and-tile` (bin "thud-and-tile" test) generated 3 warnings (1 duplicate) [INFO] [stderr] Finished `test` profile [unoptimized + debuginfo] target(s) in 0.07s [INFO] [stderr] Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/thud_and_tile-b7353ccfdc725e21) [INFO] [stdout] [INFO] [stdout] running 29 tests [INFO] [stdout] test game_color::tests::test_css_names ... ok [INFO] [stdout] test game_color::tests::test_rgb_conversion ... ok [INFO] [stdout] test game_color::tests::test_crossterm_conversion ... ok [INFO] [stdout] test game_color::tests::test_hex_conversion ... ok [INFO] [stdout] test game_input::tests::test_crossterm_input_provider_creation ... ok [INFO] [stdout] test game_input::tests::test_game_input_descriptions ... ok [INFO] [stdout] test random::tests::test_deterministic_random_provider ... ok [INFO] [stdout] test random::tests::test_deterministic_shuffle ... ok [INFO] [stdout] test random::tests::test_native_random_provider ... ok [INFO] [stdout] test random::tests::test_native_random_provider_with_seed ... ok [INFO] [stdout] test cell::tests::test_connected_cell_debug_output ... ok [INFO] [stdout] test random::tests::test_create_default_random_provider ... ok [INFO] [stdout] test scheduler::tests::test_deterministic_scheduler ... ok [INFO] [stdout] test scheduler::tests::test_scheduler_impl_enum ... ok [INFO] [stdout] test scoring::tests::test_chain_bonus_consume ... ok [INFO] [stdout] test scoring::tests::test_color_max_chains_initialization ... ok [INFO] [stdout] test scoring::tests::test_color_max_chains_update ... ok [INFO] [stdout] test scoring::tests::test_custom_score_system_display ... ok [INFO] [stdout] test scoring::tests::test_custom_score_system_initialization ... ok [INFO] [stdout] test scoring::tests::test_set_chain_bonus_from_total ... ok [INFO] [stdout] test scoring::tests::test_total_score_add ... ok [INFO] [stdout] test scoring::tests::test_chain_bonus_add ... ok [INFO] [stdout] test scoring::tests::test_total_score_initialization ... ok [INFO] [stdout] test tetromino::tests::test_new_random_uses_7_bag_system ... ok [INFO] [stdout] test game_input::tests::test_game_input_classification ... ok [INFO] [stdout] test tetromino::tests::test_new_tetromino_uses_only_three_colors ... ok [INFO] [stdout] test scheduler::tests::test_create_default_scheduler ... ok [INFO] [stdout] test scheduler::tests::test_native_scheduler ... ok [INFO] [stdout] test tetromino::tests::test_adjacent_blocks_have_different_colors ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s [INFO] [stdout] [INFO] [stderr] Running unittests src/main.rs (/opt/rustwide/target/debug/deps/thud_and_tile-7b20ea38bcf0fed0) [INFO] [stdout] [INFO] [stdout] running 63 tests [INFO] [stdout] test cell::tests::test_connected_cell_debug_output ... ok [INFO] [stdout] test game_color::tests::test_rgb_conversion ... ok [INFO] [stdout] test game_color::tests::test_crossterm_conversion ... ok [INFO] [stdout] test game_input::tests::test_crossterm_input_provider_creation ... ok [INFO] [stdout] test game_color::tests::test_hex_conversion ... ok [INFO] [stdout] test game_input::tests::test_game_input_classification ... ok [INFO] [stdout] test game_input::tests::test_game_input_descriptions ... ok [INFO] [stdout] test random::tests::test_deterministic_shuffle ... ok [INFO] [stdout] test random::tests::test_create_default_random_provider ... ok [INFO] [stdout] test random::tests::test_native_random_provider ... ok [INFO] [stdout] test random::tests::test_native_random_provider_with_seed ... ok [INFO] [stdout] test game_color::tests::test_css_names ... ok [INFO] [stdout] test render::tests::test_chain_bonus_display_updates_with_value ... ok [INFO] [stdout] test render::tests::test_render_connected_block_with_count ... ok [INFO] [stdout] test render::tests::test_chain_bonus_display_handles_large_numbers ... ok [INFO] [stdout] test scoring::tests::test_chain_bonus_consume ... ok [INFO] [stdout] test render::tests::test_connected_blocks_blink_during_line_clear_animation ... ok [INFO] [stdout] test scoring::tests::test_color_max_chains_initialization ... ok [INFO] [stdout] test scheduler::tests::test_deterministic_scheduler ... ok [INFO] [stdout] test scoring::tests::test_chain_bonus_add ... ok [INFO] [stdout] test scoring::tests::test_custom_score_system_initialization ... ok [INFO] [stdout] test scoring::tests::test_total_score_add ... ok [INFO] [stdout] test scoring::tests::test_total_score_initialization ... ok [INFO] [stdout] test scoring::tests::test_set_chain_bonus_from_total ... ok [INFO] [stdout] test tests::board_logic_tests::test_calculate_chain_bonus_large_group ... ok [INFO] [stdout] test scheduler::tests::test_scheduler_impl_enum ... ok [INFO] [stdout] test scoring::tests::test_custom_score_system_display ... ok [INFO] [stdout] test tests::board_logic_tests::test_calculate_chain_bonus_exactly_10 ... ok [INFO] [stdout] test scoring::tests::test_color_max_chains_update ... ok [INFO] [stdout] test scheduler::tests::test_create_default_scheduler ... ok [INFO] [stdout] test tests::board_logic_tests::test_calculate_chain_bonus_multiple_groups ... ok [INFO] [stdout] test tests::board_logic_tests::test_calculate_chain_bonus_no_groups ... ok [INFO] [stdout] test tests::board_logic_tests::test_calculate_chain_bonus_small_groups ... ok [INFO] [stdout] test tests::board_logic_tests::test_counts_connected_blocks ... ok [INFO] [stdout] test tests::board_logic_tests::test_isolated_blocks_are_removed_on_non_bottom_clear ... ok [INFO] [stdout] test tests::board_logic_tests::test_newly_landed_block_connects_to_existing_connected_block ... ok [INFO] [stdout] test tests::color_consistency_tests::test_o_mino_color_rotation_consistency ... ok [INFO] [stdout] test tests::game_state_tests::test_consuming_chain_bonus_removes_solid_lines_from_bottom ... ok [INFO] [stdout] test tests::game_state_tests::test_chain_bonus_increases_when_group_reaches_threshold ... ok [INFO] [stdout] test tests::color_consistency_tests::test_other_mino_physical_rotation_sample ... ok [INFO] [stdout] test tests::game_state_tests::test_max_chain_updated_after_piece_landing ... ok [INFO] [stdout] test tests::board_logic_tests::test_connected_blocks_count_after_lock_piece ... ok [INFO] [stdout] test tests::game_state_tests::test_chain_bonus_matches_total_bonus_from_board ... ok [INFO] [stdout] test tests::game_state_tests::test_game_starts_in_title_mode ... ok [INFO] [stdout] test tests::game_state_tests::test_max_chain_only_increases_never_decreases ... ok [INFO] [stdout] test tests::game_state_tests::test_lock_piece_ignores_solid_lines ... ok [INFO] [stdout] test tests::color_consistency_tests::test_t_mino_physical_rotation_color_movement ... ok [INFO] [stdout] test tests::game_state_tests::test_chain_bonus_accumulates_beyond_ten ... ok [INFO] [stdout] test tests::rotation_tests::test_basic_rotation ... ok [INFO] [stdout] test tests::rotation_tests::test_basic_wall_kick_functionality ... ok [INFO] [stdout] test tests::game_state_tests::test_solid_cell_is_collision ... ok [INFO] [stdout] test tests::rotation_tests::test_physical_rotation_produces_movement ... ok [INFO] [stdout] test tests::rotation_tests::test_tetromino_initial_rotation_state ... ok [INFO] [stdout] test tests::game_state_tests::test_chain_bonus_updates_when_group_size_changes ... ok [INFO] [stdout] test tetromino::tests::test_new_random_uses_7_bag_system ... ok [INFO] [stdout] test tests::rotation_tests::test_clockwise_rotation_state_cycle ... ok [INFO] [stdout] test tetromino::tests::test_new_tetromino_uses_only_three_colors ... ok [INFO] [stdout] test tests::rotation_tests::test_color_physical_rotation_detailed ... ok [INFO] [stdout] test tests::rotation_tests::test_counter_clockwise_rotation_state_cycle ... ok [INFO] [stdout] test tests::game_state_tests::test_line_clear_triggers_blink_animation ... ok [INFO] [stdout] test scheduler::tests::test_native_scheduler ... ok [INFO] [stdout] test tetromino::tests::test_adjacent_blocks_have_different_colors ... ok [INFO] [stdout] test random::tests::test_deterministic_random_provider ... ok [INFO] [stdout] [INFO] [stdout] test result: ok. 63 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s [INFO] [stdout] [INFO] [stderr] Doc-tests thud_and_tile [INFO] [stdout] [INFO] [stdout] running 0 tests [INFO] [stdout] [INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s [INFO] [stdout] [INFO] running `Command { std: "docker" "inspect" "daab2ae0860fc5886d5a6519d7fa656bf0550200dbf78497fe89e54755a98858", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "daab2ae0860fc5886d5a6519d7fa656bf0550200dbf78497fe89e54755a98858", kill_on_drop: false }` [INFO] [stdout] daab2ae0860fc5886d5a6519d7fa656bf0550200dbf78497fe89e54755a98858