[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<Vec<Cell>>;
[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<usize>) -> 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<TetrominoShape> {
[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<usize>) -> 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<Vec<Cell>>;
[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<usize>) -> 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<TetrominoShape> {
[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<Vec<Cell>>;
[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<Vec<Cell>>;
[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<usize>) -> 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<TetrominoShape> {
[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
