[INFO] cloning repository https://github.com/Esgrove/cli-tools
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Esgrove/cli-tools" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FEsgrove%2Fcli-tools", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FEsgrove%2Fcli-tools'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] a5b9c3d2b6ba95118759cb45c6860a5e2ed1bf35
[INFO] testing Esgrove/cli-tools against 1.95.0 for beta-1.96-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FEsgrove%2Fcli-tools" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-4-tc1/source/.cargo/config.toml
[INFO] started tweaking git repo https://github.com/Esgrove/cli-tools
[INFO] finished tweaking git repo https://github.com/Esgrove/cli-tools
[INFO] tweaked toml for git repo https://github.com/Esgrove/cli-tools written to /workspace/builds/worker-4-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/Esgrove/cli-tools on toolchain 1.95.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/Esgrove/cli-tools already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded windows-interface v0.56.0
[INFO] [stderr]   Downloaded windows-implement v0.56.0
[INFO] [stderr]   Downloaded windows-result v0.1.2
[INFO] [stderr]   Downloaded document-features v0.2.12
[INFO] [stderr]   Downloaded jni-sys-macros v0.4.1
[INFO] [stderr]   Downloaded jni-sys v0.4.1
[INFO] [stderr]   Downloaded num_threads v0.1.7
[INFO] [stderr]   Downloaded num-conv v0.2.1
[INFO] [stderr]   Downloaded windows-registry v0.6.1
[INFO] [stderr]   Downloaded memmem v0.1.1
[INFO] [stderr]   Downloaded page_size v0.6.0
[INFO] [stderr]   Downloaded line-clipping v0.3.7
[INFO] [stderr]   Downloaded console v0.16.3
[INFO] [stderr]   Downloaded wezterm-dynamic v0.2.1
[INFO] [stderr]   Downloaded psl-types v2.0.11
[INFO] [stderr]   Downloaded strum v0.27.2
[INFO] [stderr]   Downloaded filedescriptor v0.8.3
[INFO] [stderr]   Downloaded wezterm-dynamic-derive v0.1.1
[INFO] [stderr]   Downloaded unit-prefix v0.5.2
[INFO] [stderr]   Downloaded vtparse v0.6.2
[INFO] [stderr]   Downloaded windows-core v0.56.0
[INFO] [stderr]   Downloaded alloca v0.4.0
[INFO] [stderr]   Downloaded criterion-plot v0.8.2
[INFO] [stderr]   Downloaded phf_macros v0.11.3
[INFO] [stderr]   Downloaded pest_generator v2.8.6
[INFO] [stderr]   Downloaded half v2.7.1
[INFO] [stderr]   Downloaded criterion v0.8.2
[INFO] [stderr]   Downloaded openssl-sys v0.9.113
[INFO] [stderr]   Downloaded derive_more v2.1.1
[INFO] [stderr]   Downloaded derive_more-impl v2.1.1
[INFO] [stderr]   Downloaded difference v2.0.0
[INFO] [stderr]   Downloaded crossterm v0.29.0
[INFO] [stderr]   Downloaded rayon v1.12.0
[INFO] [stderr]   Downloaded ratatui-core v0.1.0
[INFO] [stderr]   Downloaded ratatui-widgets v0.3.0
[INFO] [stderr]   Downloaded git2 v0.20.4
[INFO] [stderr]   Downloaded rusqlite v0.39.0
[INFO] [stderr]   Downloaded zip v7.2.0
[INFO] [stderr]   Downloaded pest v2.8.6
[INFO] [stderr]   Downloaded webpki-root-certs v1.0.7
[INFO] [stderr]   Downloaded objc2-foundation v0.3.2
[INFO] [stderr]   Downloaded typed-path v0.12.3
[INFO] [stderr]   Downloaded rustls v0.23.38
[INFO] [stderr]   Downloaded euclid v0.22.14
[INFO] [stderr]   Downloaded termwiz v0.23.3
[INFO] [stderr]   Downloaded unicode-segmentation v1.13.2
[INFO] [stderr]   Downloaded wezterm-bidi v0.2.3
[INFO] [stderr]   Downloaded rustls-webpki v0.103.12
[INFO] [stderr]   Downloaded zopfli v0.8.3
[INFO] [stderr]   Downloaded indicatif v0.18.4
[INFO] [stderr]   Downloaded finl_unicode v1.4.0
[INFO] [stderr]   Downloaded pest_meta v2.8.6
[INFO] [stderr]   Downloaded compact_str v0.9.0
[INFO] [stderr]   Downloaded libssh2-sys v0.3.1
[INFO] [stderr]   Downloaded publicsuffix v2.3.0
[INFO] [stderr]   Downloaded zerocopy-derive v0.8.48
[INFO] [stderr]   Downloaded darling_core v0.23.0
[INFO] [stderr]   Downloaded darling v0.23.0
[INFO] [stderr]   Downloaded ratatui v0.30.0
[INFO] [stderr]   Downloaded web-sys v0.3.95
[INFO] [stderr]   Downloaded const-oid v0.10.2
[INFO] [stderr]   Downloaded toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]   Downloaded pest_derive v2.8.6
[INFO] [stderr]   Downloaded hybrid-array v0.4.10
[INFO] [stderr]   Downloaded terminfo v0.9.0
[INFO] [stderr]   Downloaded ucd-trie v0.1.7
[INFO] [stderr]   Downloaded strum_macros v0.27.2
[INFO] [stderr]   Downloaded crypto-common v0.2.1
[INFO] [stderr]   Downloaded trash v5.2.5
[INFO] [stderr]   Downloaded libz-sys v1.1.28
[INFO] [stderr]   Downloaded convert_case v0.10.0
[INFO] [stderr]   Downloaded ratatui-crossterm v0.1.0
[INFO] [stderr]   Downloaded ratatui-macros v0.7.0
[INFO] [stderr]   Downloaded phf_codegen v0.11.3
[INFO] [stderr]   Downloaded phf_generator v0.11.3
[INFO] [stderr]   Downloaded phf v0.11.3
[INFO] [stderr]   Downloaded csscolorparser v0.6.2
[INFO] [stderr]   Downloaded ordered-float v4.6.0
[INFO] [stderr]   Downloaded rust_xlsxwriter v0.94.0
[INFO] [stderr]   Downloaded wezterm-input-types v0.1.0
[INFO] [stderr]   Downloaded ratatui-termwiz v0.1.0
[INFO] [stderr]   Downloaded instability v0.3.12
[INFO] [stderr]   Downloaded unicode-truncate v2.0.1
[INFO] [stderr]   Downloaded litrs v1.0.0
[INFO] [stderr]   Downloaded cookie_store v0.22.1
[INFO] [stderr]   Downloaded rsqlite-vfs v0.1.0
[INFO] [stderr]   Downloaded serde_bencode v0.2.4
[INFO] [stderr]   Downloaded serde_bytes v0.11.19
[INFO] [stderr]   Downloaded sha1 v0.11.0
[INFO] [stderr]   Downloaded lab v0.11.0
[INFO] [stderr]   Downloaded wezterm-color-types v0.3.0
[INFO] [stderr]   Downloaded darling_macro v0.23.0
[INFO] [stderr]   Downloaded hashlink v0.11.0
[INFO] [stderr]   Downloaded rust_xlsxwriter_derive v0.2.0
[INFO] [stderr]   Downloaded rustls-platform-verifier-android v0.1.1
[INFO] [stderr]   Downloaded num_cpus v1.17.0
[INFO] [stderr]   Downloaded termios v0.3.3
[INFO] [stderr]   Downloaded mac_address v1.1.8
[INFO] [stderr]   Downloaded wezterm-blob-leases v0.1.1
[INFO] [stderr]   Downloaded kasuari v0.4.12
[INFO] [stderr]   Downloaded lru v0.16.4
[INFO] [stderr]   Downloaded system-configuration v0.7.0
[INFO] [stderr]   Downloaded digest v0.11.2
[INFO] [stderr]   Downloaded wasm-bindgen-futures v0.4.68
[INFO] [stderr]   Downloaded jni-sys v0.3.1
[INFO] [stderr]   Downloaded block-buffer v0.12.0
[INFO] [stderr]   Downloaded titlecase v3.6.0
[INFO] [stderr]   Downloaded deltae v0.3.2
[INFO] [stderr]   Downloaded libgit2-sys v0.18.3+1.9.2
[INFO] [stderr]   Downloaded libsqlite3-sys v0.37.0
[INFO] [stderr]   Downloaded sqlite-wasm-rs v0.5.2
[INFO] [stderr]   Downloaded windows v0.56.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] d247f0d3eff6fb94fe926f11cefd9e020f8ab0a71a951b93e390172baa90e8c2
[INFO] running `Command { std: "docker" "start" "-a" "d247f0d3eff6fb94fe926f11cefd9e020f8ab0a71a951b93e390172baa90e8c2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "d247f0d3eff6fb94fe926f11cefd9e020f8ab0a71a951b93e390172baa90e8c2", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "d247f0d3eff6fb94fe926f11cefd9e020f8ab0a71a951b93e390172baa90e8c2", kill_on_drop: false }`
[INFO] [stdout] d247f0d3eff6fb94fe926f11cefd9e020f8ab0a71a951b93e390172baa90e8c2
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 0ed8384e8b96dff9b180cb30dafde65eb2e0a8b63c8f089417d4bb3a5f1f3993
[INFO] running `Command { std: "docker" "start" "-a" "0ed8384e8b96dff9b180cb30dafde65eb2e0a8b63c8f089417d4bb3a5f1f3993", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling unicode-ident v1.0.24
[INFO] [stderr]    Compiling libc v0.2.185
[INFO] [stderr]    Compiling find-msvc-tools v0.1.9
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling log v0.4.29
[INFO] [stderr]    Compiling itoa v1.0.18
[INFO] [stderr]    Compiling stable_deref_trait v1.2.1
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling pkg-config v0.3.33
[INFO] [stderr]    Compiling scopeguard v1.2.0
[INFO] [stderr]    Compiling memchr v2.8.0
[INFO] [stderr]    Compiling pin-project-lite v0.2.17
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling lock_api v0.4.14
[INFO] [stderr]    Compiling futures-core v0.3.32
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling bytes v1.11.1
[INFO] [stderr]    Compiling fs_extra v1.3.0
[INFO] [stderr]    Compiling dunce v1.0.5
[INFO] [stderr]    Compiling once_cell v1.21.4
[INFO] [stderr]    Compiling futures-sink v0.3.32
[INFO] [stderr]    Compiling writeable v0.6.3
[INFO] [stderr]    Compiling litemap v0.8.2
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling strsim v0.11.1
[INFO] [stderr]    Compiling icu_properties_data v2.2.0
[INFO] [stderr]    Compiling foldhash v0.2.0
[INFO] [stderr]    Compiling unicode-segmentation v1.13.2
[INFO] [stderr]    Compiling icu_normalizer_data v2.2.0
[INFO] [stderr]    Compiling slab v0.4.12
[INFO] [stderr]    Compiling hashbrown v0.16.1
[INFO] [stderr]    Compiling futures-channel v0.3.32
[INFO] [stderr]    Compiling aws-lc-rs v1.16.3
[INFO] [stderr]    Compiling jobserver v0.1.34
[INFO] [stderr]    Compiling hashbrown v0.17.0
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling rustversion v1.0.22
[INFO] [stderr]    Compiling cc v1.2.60
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling http v1.4.0
[INFO] [stderr]    Compiling futures-io v0.3.32
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling time-core v0.1.8
[INFO] [stderr]    Compiling powerfmt v0.2.0
[INFO] [stderr]    Compiling ryu v1.0.23
[INFO] [stderr]    Compiling num-conv v0.2.1
[INFO] [stderr]    Compiling errno v0.3.14
[INFO] [stderr]    Compiling mio v1.2.0
[INFO] [stderr]    Compiling signal-hook-registry v1.4.8
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling cmake v0.1.58
[INFO] [stderr]    Compiling socket2 v0.6.3
[INFO] [stderr]    Compiling futures-task v0.3.32
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling ident_case v1.0.1
[INFO] [stderr]    Compiling thiserror v2.0.18
[INFO] [stderr]    Compiling time-macros v0.2.27
[INFO] [stderr]    Compiling deranged v0.5.8
[INFO] [stderr]    Compiling rustls-pki-types v1.14.0
[INFO] [stderr]    Compiling aws-lc-sys v0.40.0
[INFO] [stderr]    Compiling openssl-sys v0.9.113
[INFO] [stderr]    Compiling libz-sys v1.1.28
[INFO] [stderr]    Compiling typenum v1.19.0
[INFO] [stderr]    Compiling num_threads v0.1.7
[INFO] [stderr]    Compiling castaway v0.2.4
[INFO] [stderr]    Compiling http-body v1.0.1
[INFO] [stderr]    Compiling itertools v0.14.0
[INFO] [stderr]    Compiling tracing-core v0.1.36
[INFO] [stderr]    Compiling rustls v0.23.38
[INFO] [stderr]    Compiling instability v0.3.12
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling litrs v1.0.0
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling untrusted v0.9.0
[INFO] [stderr]    Compiling indoc v2.0.7
[INFO] [stderr]    Compiling static_assertions v1.1.0
[INFO] [stderr]    Compiling compact_str v0.9.0
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling time v0.3.47
[INFO] [stderr]    Compiling document-features v0.2.12
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling libssh2-sys v0.3.1
[INFO] [stderr]    Compiling lru v0.16.4
[INFO] [stderr]    Compiling convert_case v0.10.0
[INFO] [stderr]    Compiling utf8parse v0.2.2
[INFO] [stderr]    Compiling zmij v1.0.21
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling cookie v0.18.1
[INFO] [stderr]    Compiling anstyle-parse v1.0.0
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling darling_core v0.23.0
[INFO] [stderr]    Compiling unicode-truncate v2.0.1
[INFO] [stderr]    Compiling hybrid-array v0.4.10
[INFO] [stderr]    Compiling serde_json v1.0.149
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.2
[INFO] [stderr]    Compiling anstyle v1.0.14
[INFO] [stderr]    Compiling colorchoice v1.0.5
[INFO] [stderr]    Compiling anstyle-query v1.1.5
[INFO] [stderr]    Compiling unicase v2.9.0
[INFO] [stderr]    Compiling cfg_aliases v0.2.1
[INFO] [stderr]    Compiling nix v0.31.2
[INFO] [stderr]    Compiling mime_guess v2.0.5
[INFO] [stderr]    Compiling anstream v1.0.0
[INFO] [stderr]    Compiling signal-hook-mio v0.2.5
[INFO] [stderr]    Compiling libsqlite3-sys v0.37.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling tokio-macros v2.7.0
[INFO] [stderr]    Compiling zerofrom v0.1.7
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v2.0.18
[INFO] [stderr]    Compiling tokio v1.52.1
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling darling_macro v0.23.0
[INFO] [stderr]    Compiling strum_macros v0.27.2
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling darling v0.23.0
[INFO] [stderr]    Compiling kasuari v0.4.12
[INFO] [stderr]    Compiling strum v0.27.2
[INFO] [stderr]    Compiling derive_more-impl v2.1.1
[INFO] [stderr]    Compiling idna_adapter v1.2.1
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling ratatui-core v0.1.0
[INFO] [stderr]    Compiling libgit2-sys v0.18.3+1.9.2
[INFO] [stderr]    Compiling derive_more v2.1.1
[INFO] [stderr]    Compiling aho-corasick v1.1.4
[INFO] [stderr]    Compiling line-clipping v0.3.7
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling sync_wrapper v1.0.2
[INFO] [stderr]    Compiling portable-atomic v1.13.1
[INFO] [stderr]    Compiling getrandom v0.4.2
[INFO] [stderr]    Compiling zlib-rs v0.6.3
[INFO] [stderr]    Compiling ipnet v2.12.0
[INFO] [stderr]    Compiling regex-syntax v0.8.10
[INFO] [stderr]    Compiling bumpalo v3.20.2
[INFO] [stderr]    Compiling tokio-util v0.7.18
[INFO] [stderr]    Compiling simd-adler32 v0.3.9
[INFO] [stderr]    Compiling clap_lex v1.1.0
[INFO] [stderr]    Compiling openssl-probe v0.2.1
[INFO] [stderr]    Compiling h2 v0.4.13
[INFO] [stderr]    Compiling winnow v1.0.1
[INFO] [stderr]    Compiling psl-types v2.0.11
[INFO] [stderr]    Compiling iana-time-zone v0.1.65
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling publicsuffix v2.3.0
[INFO] [stderr]    Compiling rustls-native-certs v0.8.3
[INFO] [stderr]    Compiling regex-automata v0.4.14
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling clap_builder v4.6.0
[INFO] [stderr]    Compiling zopfli v0.8.3
[INFO] [stderr]    Compiling tower v0.5.3
[INFO] [stderr]    Compiling flate2 v1.1.9
[INFO] [stderr]    Compiling ratatui-widgets v0.3.0
[INFO] [stderr]    Compiling hyper v1.9.0
[INFO] [stderr]    Compiling crossterm v0.29.0
[INFO] [stderr]    Compiling hyper-util v0.1.20
[INFO] [stderr]    Compiling clap_derive v4.6.1
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling block-buffer v0.12.0
[INFO] [stderr]    Compiling crypto-common v0.2.1
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling typed-path v0.12.3
[INFO] [stderr]    Compiling option-ext v0.2.0
[INFO] [stderr]    Compiling anyhow v1.0.102
[INFO] [stderr]    Compiling iri-string v0.7.12
[INFO] [stderr]    Compiling toml_writer v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling const-oid v0.10.2
[INFO] [stderr]    Compiling dirs-sys v0.5.0
[INFO] [stderr]    Compiling digest v0.11.2
[INFO] [stderr]    Compiling tinyvec v1.11.0
[INFO] [stderr]    Compiling clap v4.6.1
[INFO] [stderr]    Compiling rayon v1.12.0
[INFO] [stderr]    Compiling cookie_store v0.22.1
[INFO] [stderr]    Compiling zip v7.2.0
[INFO] [stderr]    Compiling tower-http v0.6.8
[INFO] [stderr]    Compiling ratatui-macros v0.7.0
[INFO] [stderr]    Compiling ratatui-crossterm v0.1.0
[INFO] [stderr]    Compiling regex v1.12.3
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling futures-executor v0.3.32
[INFO] [stderr]    Compiling rust_xlsxwriter_derive v0.2.0
[INFO] [stderr]    Compiling http-body-util v0.1.3
[INFO] [stderr]    Compiling serde_bytes v0.11.19
[INFO] [stderr]    Compiling serde_spanned v1.1.1
[INFO] [stderr]    Compiling console v0.16.3
[INFO] [stderr]    Compiling hashlink v0.11.0
[INFO] [stderr]    Compiling encoding_rs v0.8.35
[INFO] [stderr]    Compiling fallible-streaming-iterator v0.1.9
[INFO] [stderr]    Compiling same-file v1.0.6
[INFO] [stderr]    Compiling fallible-iterator v0.3.0
[INFO] [stderr]    Compiling unit-prefix v0.5.2
[INFO] [stderr]    Compiling cpufeatures v0.3.0
[INFO] [stderr]    Compiling urlencoding v2.1.3
[INFO] [stderr]    Compiling fastrand v2.4.1
[INFO] [stderr]    Compiling indicatif v0.18.4
[INFO] [stderr]    Compiling trash v5.2.5
[INFO] [stderr]    Compiling tempfile v3.27.0
[INFO] [stderr]    Compiling sha1 v0.11.0
[INFO] [stderr]    Compiling walkdir v2.5.0
[INFO] [stderr]    Compiling rust_xlsxwriter v0.94.0
[INFO] [stderr]    Compiling toml v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling serde_bencode v0.2.4
[INFO] [stderr]    Compiling futures v0.3.32
[INFO] [stderr]    Compiling titlecase v3.6.0
[INFO] [stderr]    Compiling ratatui v0.30.0
[INFO] [stderr]    Compiling ctrlc v3.5.2
[INFO] [stderr]    Compiling unicode-normalization v0.1.25
[INFO] [stderr]    Compiling clap_complete v4.6.2
[INFO] [stderr]    Compiling dirs v6.0.0
[INFO] [stderr]    Compiling toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling colored v3.1.1
[INFO] [stderr]    Compiling difference v2.0.0
[INFO] [stderr]    Compiling rusqlite v0.39.0
[INFO] [stderr]    Compiling git2 v0.20.4
[INFO] [stderr]    Compiling rustls-webpki v0.103.12
[INFO] [stderr]    Compiling tokio-rustls v0.26.4
[INFO] [stderr]    Compiling rustls-platform-verifier v0.6.2
[INFO] [stderr]    Compiling hyper-rustls v0.27.9
[INFO] [stderr]    Compiling reqwest v0.13.2
[INFO] [stderr]    Compiling cli-tools v9.11.0 (/opt/rustwide/workdir)
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 5m 37s
[INFO] running `Command { std: "docker" "inspect" "0ed8384e8b96dff9b180cb30dafde65eb2e0a8b63c8f089417d4bb3a5f1f3993", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0ed8384e8b96dff9b180cb30dafde65eb2e0a8b63c8f089417d4bb3a5f1f3993", kill_on_drop: false }`
[INFO] [stdout] 0ed8384e8b96dff9b180cb30dafde65eb2e0a8b63c8f089417d4bb3a5f1f3993
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b6dc69e71c8a93a8384c5e9cb9df1525576072ca4f79bb641c558fd23953adb3
[INFO] running `Command { std: "docker" "start" "-a" "b6dc69e71c8a93a8384c5e9cb9df1525576072ca4f79bb641c558fd23953adb3", kill_on_drop: false }`
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling zerocopy v0.8.48
[INFO] [stderr]    Compiling zerocopy-derive v0.8.48
[INFO] [stderr]    Compiling alloca v0.4.0
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling page_size v0.6.0
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling cookie_store v0.22.1
[INFO] [stderr]    Compiling serde_urlencoded v0.7.1
[INFO] [stderr]    Compiling serde_bencode v0.2.4
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling chrono v0.4.44
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling reqwest v0.13.2
[INFO] [stderr]    Compiling criterion-plot v0.8.2
[INFO] [stderr]    Compiling rust_xlsxwriter v0.94.0
[INFO] [stderr]    Compiling trash v5.2.5
[INFO] [stderr]    Compiling half v2.7.1
[INFO] [stderr]    Compiling cli-tools v9.11.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling criterion v0.8.2
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1m 55s
[INFO] running `Command { std: "docker" "inspect" "b6dc69e71c8a93a8384c5e9cb9df1525576072ca4f79bb641c558fd23953adb3", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b6dc69e71c8a93a8384c5e9cb9df1525576072ca4f79bb641c558fd23953adb3", kill_on_drop: false }`
[INFO] [stdout] b6dc69e71c8a93a8384c5e9cb9df1525576072ca4f79bb641c558fd23953adb3
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] f636d8d933256bea3d4052a3c180973191183fb5dfd0e1f45f17fe83485c5d0b
[INFO] running `Command { std: "docker" "start" "-a" "f636d8d933256bea3d4052a3c180973191183fb5dfd0e1f45f17fe83485c5d0b", kill_on_drop: false }`
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.79s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/cli_tools-2a8a1c1520d4e02e)
[INFO] [stdout] 
[INFO] [stdout] running 492 tests
[INFO] [stdout] test additional_path_utility_tests::get_relative_path_or_filename_no_filename ... ok
[INFO] [stdout] test additional_path_utility_tests::get_relative_path_or_filename_outside_root ... ok
[INFO] [stdout] test additional_path_utility_tests::get_unique_path_handles_no_extension ... ok
[INFO] [stdout] test additional_path_utility_tests::get_unique_path_increments_counter ... ok
[INFO] [stdout] test assert_f64_eq_tests::very_close_values ... ok
[INFO] [stdout] test color_diff_tests::addition_only ... ok
[INFO] [stdout] test additional_path_utility_tests::get_unique_path_returns_original_when_no_conflict ... ok
[INFO] [stdout] test additional_path_utility_tests::insert_suffix_preserves_directory ... ok
[INFO] [stdout] test color_diff_tests::completely_different_strings ... ok
[INFO] [stdout] test color_diff_tests::empty_strings ... ok
[INFO] [stdout] test color_diff_tests::identical_strings ... ok
[INFO] [stdout] test color_diff_tests::partial_change ... ok
[INFO] [stdout] test color_diff_tests::removal_only ... ok
[INFO] [stdout] test color_diff_tests::stacked_mode ... ok
[INFO] [stdout] test colorize_bool_tests::colorize_true ... ok
[INFO] [stdout] test additional_path_utility_tests::append_extension_preserves_directory ... ok
[INFO] [stdout] test additional_path_utility_tests::get_unique_path_increments_multiple_times ... ok
[INFO] [stdout] test assert_f64_eq_tests::equal_values ... ok
[INFO] [stdout] test colorize_bool_tests::colorize_false ... ok
[INFO] [stdout] test date::date_reorder_tests::full_date ... ok
[INFO] [stdout] test date::date_reorder_tests::single_digit_date ... ok
[INFO] [stdout] test date::date_reorder_tests::short_date ... ok
[INFO] [stdout] test date::date_reorder_tests::normal_date ... ok
[INFO] [stdout] test date::date_reorder_tests::single_digit_date_with_full_year ... ok
[INFO] [stdout] test date::date_struct_tests::boundary_month_12 ... ok
[INFO] [stdout] test date::date_struct_tests::boundary_year_1991 ... ok
[INFO] [stdout] test date::date_struct_tests::boundary_day_31 ... ok
[INFO] [stdout] test date::date_struct_tests::dash_format_pads_single_digits ... ok
[INFO] [stdout] test date::date_struct_tests::display_format ... ok
[INFO] [stdout] test date::date_struct_tests::dot_format ... ok
[INFO] [stdout] test date::date_struct_tests::dot_format_pads_single_digits ... ok
[INFO] [stdout] test date::date_struct_tests::parse_from_short_invalid_year_length ... ok
[INFO] [stdout] test date::date_struct_tests::parse_from_short_invalid_year_single_digit ... ok
[INFO] [stdout] test date::date_struct_tests::parse_from_short_valid ... ok
[INFO] [stdout] test date::date_struct_tests::swap_year_invalid_result ... ok
[INFO] [stdout] test date::date_struct_tests::swap_year_valid ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_day_32 ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_day_zero ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_month_thirteen ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_month_zero ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_year_future ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_invalid_year_too_old ... ok
[INFO] [stdout] test date::date_struct_tests::try_from_valid_date ... ok
[INFO] [stdout] test date::date_struct_tests::boundary_year_1990 ... ok
[INFO] [stdout] test date::date_struct_tests::dash_format ... ok
[INFO] [stdout] test date::date_format_detection_tests::no_date ... ok
[INFO] [stdout] test date::directory_tests::dd_mm_yyyy_format ... ok
[INFO] [stdout] test date::date_format_detection_tests::correct_date_format_year_first ... ok
[INFO] [stdout] test assert_f64_eq_tests::close_values - should panic ... ok
[INFO] [stdout] test date::directory_tests::single_digit_date ... ok
[INFO] [stdout] test date::directory_tests::correct_format_with_different_separators ... ok
[INFO] [stdout] test date::directory_tests::replace_file_date_with_directory_date ... ok
[INFO] [stdout] test assert_f64_eq_tests::different_values - should panic ... ok
[INFO] [stdout] test date::directory_tests::yyyy_mm_dd_format ... ok
[INFO] [stdout] test date::date_format_detection_tests::correct_date_format ... ok
[INFO] [stdout] test date::directory_tests::unrecognized_date_format ... ok
[INFO] [stdout] test date::directory_tests::no_date ... ok
[INFO] [stdout] test date::mm_dd_yyyy_tests::date_format_mm_dd_yyyy ... ok
[INFO] [stdout] test date::mm_dd_yyyy_tests::date_format_mm_dd_yyyy_with_various_resolutions ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_at_different_positions_not_detected_as_date ... ok
[INFO] [stdout] test date::invalid_date_tests::not_a_valid_date ... ok
[INFO] [stdout] test date::extra_numbers_tests::extra_numbers ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_numbers_not_detected_as_date ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_at_end_of_string_not_detected_as_date ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_at_different_positions ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_boundary_values ... ok
[INFO] [stdout] test date::regex_tests::full_date_invalid_dates ... ok
[INFO] [stdout] test date::regex_tests::correct_date_format ... ok
[INFO] [stdout] test date::regex_tests::full_date_valid_dates ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_higher_numbers_not_detected_as_date ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_with_varied_name_lengths_not_detected_as_date ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_with_different_boundaries_not_detected_as_date ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_with_year_first_flag ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_does_not_apply_to_non_correct_format ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_invalid_future_year ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_with_long_names ... ok
[INFO] [stdout] test date::year_first_tests::full_date_year_first ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_with_various_extensions ... ok
[INFO] [stdout] test date::ordinal_tests::ordinal_with_nearby_real_date ... ok
[INFO] [stdout] test dir_move::types::test_prefix_group_builder::dotted_prefix_prefers_stable_display_casing ... ok
[INFO] [stdout] test dir_move::types::test_prefix_group_builder::concatenated_form_is_not_replaced_by_better_dotted_casing ... ok
[INFO] [stdout] test directory_utility_tests::is_directory_empty_true ... ok
[INFO] [stdout] test directory_utility_tests::is_directory_empty_with_file ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_with_single_digit_result ... ok
[INFO] [stdout] test date::year_first_tests::year_first_does_not_affect_full_year_dates ... ok
[INFO] [stdout] test date::year_first_tests::year_first_with_various_boundaries ... ok
[INFO] [stdout] test date::swap_year_tests::swap_year_does_not_trigger_without_flag ... ok
[INFO] [stdout] test dot_rename::config::compile_regex_patterns_tests::returns_error_for_invalid_pattern ... ok
[INFO] [stdout] test date::year_first_tests::year_first_changes_short_date_interpretation ... ok
[INFO] [stdout] test date::year_first_tests::year_first_with_ambiguous_short_dates ... ok
[INFO] [stdout] test directory_utility_tests::is_directory_empty_with_subdir ... ok
[INFO] [stdout] test dot_rename::config::dot_rename_config_display_tests::display_shows_include_exclude ... ok
[INFO] [stdout] test dot_rename::config::dot_rename_config_display_tests::display_formats_config ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_dots_section ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_include_list ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_can_override_date_starts_with_year ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_default_date_starts_with_year_is_true ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_move_lists ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_regex_replace ... ok
[INFO] [stdout] test dot_rename::config::parse_regex_substitutes_tests::returns_error_for_invalid_regex ... ok
[INFO] [stdout] test dot_rename::config::parse_removes_tests::parses_valid_removes ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_replace_pairs ... ok
[INFO] [stdout] test dot_rename::config::dots_config_tests::from_toml_str_parses_prefix_dir_options ... ok
[INFO] [stdout] test dot_rename::config::parse_removes_tests::trims_whitespace ... ok
[INFO] [stdout] test dot_rename::config::parse_substitutes_tests::handles_empty_input ... ok
[INFO] [stdout] test dot_rename::config::parse_substitutes_tests::ignores_incomplete_pair ... ok
[INFO] [stdout] test dot_rename::config::parse_substitutes_tests::parses_valid_pairs ... ok
[INFO] [stdout] test dot_rename::config::parse_substitutes_tests::skips_empty_pattern ... ok
[INFO] [stdout] test dot_rename::config::parse_substitutes_tests::trims_whitespace ... ok
[INFO] [stdout] test dot_rename::config::parse_removes_tests::skips_empty_patterns ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::double_dots_collapsed ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::empty_string ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::in_place_no_change_needed ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::filename_with_double_dots ... ok
[INFO] [stdout] test dot_rename::config::dot_rename_config_display_tests::display_shows_empty_lists ... ok
[INFO] [stdout] test dot_rename::config::compile_regex_patterns_tests::handles_empty_input ... ok
[INFO] [stdout] test dot_rename::config::parse_regex_substitutes_tests::ignores_incomplete_pairs ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::many_consecutive_dots_collapsed ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::in_place_mutates_string ... ok
[INFO] [stdout] test dot_rename::config::compile_regex_patterns_tests::compiles_valid_patterns ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::multiple_groups_of_dots ... ok
[INFO] [stdout] test dot_rename::config::parse_regex_substitutes_tests::parses_valid_regex_pairs ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::single_dots_unchanged ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::trim_no_change_needed ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::trim_removes_leading_and_trailing_dots ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::only_dots ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::triple_dots_collapsed ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::trim_only_dots_becomes_empty ... ok
[INFO] [stdout] test dot_rename::format::collapse_consecutive_dots_tests::no_dots ... ok
[INFO] [stdout] test dot_rename::format::normalize_extension_tests::lowercases_extension ... ok
[INFO] [stdout] test dot_rename::format::normalize_extension_tests::maps_jpeg_to_jpg ... ok
[INFO] [stdout] test dot_rename::format::normalize_extension_tests::returns_already_normal_extension ... ok
[INFO] [stdout] test dot_rename::format::normalize_extension_tests::handles_empty_extension ... ok
[INFO] [stdout] test dot_rename::format::test_deduplicate_patterns::test_substitute_creates_duplicate ... ok
[INFO] [stdout] test dot_rename::format::test_deduplicate_patterns::test_triple_duplicate ... ok
[INFO] [stdout] test dot_rename::format::move_date_tests::test_no_match_with_valid_date ... ok
[INFO] [stdout] test dot_rename::format::test_deduplicate_patterns::test_no_duplicates ... ok
[INFO] [stdout] test dot_rename::format::test_remove_from_start::test_consecutive_patterns ... ok
[INFO] [stdout] test dot_rename::format::test_deduplicate_patterns::test_mixed_case_duplicates ... ok
[INFO] [stdout] test dot_rename::format::test_remove_from_start::test_single_occurrence ... ok
[INFO] [stdout] test dot_rename::format::test_remove_from_start::test_no_patterns ... ok
[INFO] [stdout] test dot_rename::format::test_remove_from_start::test_partial_word_match ... ok
[INFO] [stdout] test dot_rename::format::move_date_tests::test_short_date ... ok
[INFO] [stdout] test dot_rename::format::test_deduplicate_patterns::test_double_duplicate ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_convert_case ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_date_with_adjacent_resolution ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_date ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_basic ... ok
[INFO] [stdout] test dot_rename::format::move_date_tests::test_valid_date ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_empty_string ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_no_changes ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_no_brackets ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_brackets ... ok
[INFO] [stdout] test dot_rename::format::test_remove_from_start::test_multiple_occurrences ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_exclamations ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_combined_cases ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_extra_dots ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_full_resolution ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_dotcom ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_newlines ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_parentheses ... ok
[INFO] [stdout] test dot_rename::format::tests::test_move_to_end ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_with_weird_characters ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_and_suffix_together ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_name_without_prefix_suffix ... ok
[INFO] [stdout] test dot_rename::format::tests::test_move_to_start ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_dir_start_option ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_date_mm_dd_yyyy ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_already_present_in_filename ... ok
[INFO] [stdout] test dot_rename::format::tests::test_format_date_year_first ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_dir ... ok
[INFO] [stdout] test dot_rename::format::tests::test_suffix_already_present_in_filename ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_edge_case_single_digit_day ... ok
[INFO] [stdout] test dot_rename::format::tests::test_move_to_end_word_boundary ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_with_explicit_name ... ok
[INFO] [stdout] test dot_rename::format::tests::test_suffix_with_explicit_name ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_leading_and_trailing_spaces ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_mixed_text ... ok
[INFO] [stdout] test dot_rename::format::tests::test_remove_identifier ... ok
[INFO] [stdout] test dot_rename::format::tests::test_starts_with_five_or_more_digits ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_single_date ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_multiple_dates ... ok
[INFO] [stdout] test dot_rename::format::written_date_tests::test_no_date_in_text ... ok
[INFO] [stdout] test dot_rename::rename::test_extension_only_rename::jpeg_renamed_to_jpg_when_stem_unchanged ... ok
[INFO] [stdout] test dot_rename::rename::test_extension_only_rename::uppercase_extension_renamed_when_stem_unchanged ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_and_suffix_cannot_both_be_set ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_already_present_in_filename ... ok
[INFO] [stdout] test dot_rename::rename::test_extension_only_rename::already_normalized_extension_skipped ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_recursive_uses_parent_directory_names ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_with_deeply_nested_directories ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_start_with_5_digit_filename ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_start_prevents_date_reordering ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_non_recursive_uses_root_for_all ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_uses_root_directory_name ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_multiple_files_same_directory_get_same_prefix ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_empty_directory ... ok
[INFO] [stdout] test dot_rename::format::tests::test_prefix_dir_with_leading_digits ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_recursive_with_exclude_filter ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_recursive_different_subdirs_get_different_prefixes ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_recursive_empty_subdirectories ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_recursive_with_include_filter ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_preserves_file_extension ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_with_explicit_name ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_dir_uses_root_directory_name ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_with_explicit_name ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_with_special_characters_in_directory_name ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_already_present_in_filename ... ok
[INFO] [stdout] test format_duration_tests::format_duration_seconds_basic ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_recursive_mode_includes_root_and_subdir_files ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_dir_recursive_uses_parent_directory_names ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_with_special_characters_in_directory_name ... ok
[INFO] [stdout] test format_duration_tests::format_duration_seconds_hours ... ok
[INFO] [stdout] test format_duration_tests::seconds_only ... ok
[INFO] [stdout] test format_size_tests::bytes_only ... ok
[INFO] [stdout] test format_size_tests::gigabytes ... ok
[INFO] [stdout] test format_size_tests::kilobytes ... ok
[INFO] [stdout] test format_duration_tests::format_duration_seconds_minutes ... ok
[INFO] [stdout] test format_duration_tests::format_duration_seconds_negative ... ok
[INFO] [stdout] test format_duration_tests::hours_minutes_seconds ... ok
[INFO] [stdout] test format_size_tests::terabytes ... ok
[INFO] [stdout] test hidden_file_tests::is_hidden_file ... ok
[INFO] [stdout] test hidden_file_tests::is_hidden_directory ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_suffix_recursive_different_subdirs ... ok
[INFO] [stdout] test hidden_file_tests::is_not_hidden_file ... ok
[INFO] [stdout] test network_path_tests::non_windows_always_false ... ok
[INFO] [stdout] test path_utility_tests::append_extension_to_path_basic ... ok
[INFO] [stdout] test path_utility_tests::append_extension_to_path_with_directory ... ok
[INFO] [stdout] test format_size_tests::megabytes ... ok
[INFO] [stdout] test path_utility_tests::get_relative_path_or_filename_same_as_root ... ok
[INFO] [stdout] test format_duration_tests::minutes_and_seconds ... ok
[INFO] [stdout] test path_utility_tests::append_extension_to_path_no_extension ... ok
[INFO] [stdout] test path_utility_tests::get_relative_path_or_filename_within_root ... ok
[INFO] [stdout] test path_utility_tests::get_unique_path_no_extension ... ok
[INFO] [stdout] test path_utility_tests::get_unique_path_with_conflict ... ok
[INFO] [stdout] test path_utility_tests::get_normalized_file_name_and_extension_basic ... ok
[INFO] [stdout] test path_utility_tests::get_normalized_file_name_and_extension_no_extension ... ok
[INFO] [stdout] test path_utility_tests::insert_suffix_before_extension_no_extension ... ok
[INFO] [stdout] test path_utility_tests::get_unique_path_no_conflict ... ok
[INFO] [stdout] test path_utility_tests::insert_suffix_before_extension_with_directory ... ok
[INFO] [stdout] test path_utility_tests::os_str_to_string_basic ... ok
[INFO] [stdout] test path_utility_tests::path_to_file_extension_string_basic ... ok
[INFO] [stdout] test path_utility_tests::path_to_file_extension_string_no_extension ... ok
[INFO] [stdout] test path_utility_tests::path_to_file_stem_string_basic ... ok
[INFO] [stdout] test path_utility_tests::path_to_filename_string_basic ... ok
[INFO] [stdout] test path_utility_tests::path_to_string_basic ... ok
[INFO] [stdout] test print_function_tests::print_cyan_does_not_panic ... ok
[INFO] [stdout] test print_function_tests::print_dimmed_does_not_panic ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_dir_with_numeric_directory_name ... ok
[INFO] [stdout] test print_function_tests::print_error_does_not_panic ... ok
[INFO] [stdout] test print_function_tests::print_bold_does_not_panic ... ok
[INFO] [stdout] test path_utility_tests::insert_suffix_before_extension_multiple_dots ... ok
[INFO] [stdout] test path_utility_tests::get_normalized_dir_name_basic ... ok
[INFO] [stdout] test print_function_tests::print_magenta_bold_does_not_panic ... ok
[INFO] [stdout] test print_function_tests::print_magenta_does_not_panic ... ok
[INFO] [stdout] test print_function_tests::print_yellow_does_not_panic ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_4k_height ... ok
[INFO] [stdout] test relative_path_tests::get_relative_path_from_cwd_returns_path ... ok
[INFO] [stdout] test relative_path_tests::path_to_string_relative_converts ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_4k_width ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_one ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_720p ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_large_value ... ok
[INFO] [stdout] test resolution::test_compute_bounds::bounds_very_small_value ... ok
[INFO] [stdout] test resolution::test_compute_bounds::small_value ... ok
[INFO] [stdout] test resolution::test_compute_bounds::standard_resolution ... ok
[INFO] [stdout] test resolution::test_compute_bounds::zero ... ok
[INFO] [stdout] test print_function_tests::print_green_does_not_panic ... ok
[INFO] [stdout] test path_utility_tests::get_unique_path_multiple_conflicts ... ok
[INFO] [stdout] test path_utility_tests::insert_suffix_before_extension_basic ... ok
[INFO] [stdout] test dot_rename::rename::test_prefix_suffix_options::test_prefix_with_date_reordering_full_date ... ok
[INFO] [stdout] test resolution::test_dimension_regex::does_not_match_partial_numbers ... ok
[INFO] [stdout] test resolution::test_dimension_regex::matches_case_insensitive_vertical ... ok
[INFO] [stdout] test resolution::test_dimension_regex::all_known_resolutions_are_cached ... ok
[INFO] [stdout] test resolution::test_dimension_regex::respects_word_boundaries ... ok
[INFO] [stdout] test resolution::test_dimension_regex::known_resolution_does_not_match_other_resolutions ... ok
[INFO] [stdout] test resolution::test_dimension_regex::known_resolution_returns_cached_regex ... ok
[INFO] [stdout] test resolution::test_dimension_regex::unknown_resolution_creates_new_regex ... ok
[INFO] [stdout] test resolution::test_dimension_regex::vertical_prefix_without_dot_is_matched ... ok
[INFO] [stdout] test resolution::test_dimension_regex::extracts_correct_match_from_filename ... ok
[INFO] [stdout] test resolution::test_dimension_regex::all_cached_resolutions_match_both_orientations ... ok
[INFO] [stdout] test resolution::test_dimension_regex::square_resolution_matches_only_one_pattern ... ok
[INFO] [stdout] test resolution::test_dimension_regex::unknown_resolution_does_not_match_others ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::does_not_match_too_many_digits ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::matches_3_digit_dimensions ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::does_not_match_wrong_separator ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::does_not_match_p_labels ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::matches_at_word_boundaries ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::matches_vertical_prefix ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::all_known_resolutions_have_fuzzy_match ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::extracts_correct_match ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::fuzzy_resolution_1080p_bounds ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::matches_mixed_digit_counts ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::matches_4_digit_dimensions ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::count_matches_known ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::fuzzy_resolution_2160p_bounds ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::fuzzy_resolution_480p_bounds ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::resolution_match_display ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_480p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_540p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_544p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_576p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_960x540 ... ok
[INFO] [stdout] test resolution::test_full_resolution_regex::does_not_match_too_few_digits ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_600p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_480p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_540p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_540x960 ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_544p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_600p ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::sd_resolutions ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::approximate_matches ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::horizontal_near_boundaries ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::just_inside_tolerance_1080p ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::just_outside_tolerance_1080p ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::lower_bound_tolerance ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::near_720p_within_tolerance ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_horizontal ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::slightly_cropped_1080p ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::vertical_1080p_slightly_off ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::vertical_near_boundaries ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::between_known_resolutions ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::upper_bound_tolerance ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::dci_4k ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::exact_1440p ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::exact_vertical_1440p ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::near_720p_outside_tolerance ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::resolution_8k_horizontal ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::resolution_8k_vertical ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::single_pixel ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::small_resolutions ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::square_treated_as_horizontal ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::ultrawide_1440p ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::unknown_horizontal ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::unknown_resolutions ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::unknown_vertical ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::unusual_aspect_ratios ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::very_small_resolution ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::zero_dimensions ... ok
[INFO] [stdout] test resolution::test_label_exact_matches::exact_matches_vertical_576p ... ok
[INFO] [stdout] test resolution::test_label_fuzzy_matches::fuzzy_matches_4k_variations ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::fuzzy_resolution_720p_bounds ... ok
[INFO] [stdout] test resolution::test_fuzzy_resolutions::no_overlapping_height_ranges ... ok
[INFO] [stdout] test resolution::test_label_out_of_range::beyond_tolerance ... ok
[INFO] [stdout] test resolution::test_p_label_regex::does_not_match_without_p_suffix ... ok
[INFO] [stdout] test resolution::test_p_label_regex::matches_multiple_finds_first ... ok
[INFO] [stdout] test resolution::test_p_label_regex::matches_at_word_boundaries ... ok
[INFO] [stdout] test resolution::test_p_label_regex::does_not_match_unknown_labels ... ok
[INFO] [stdout] test resolution::test_resolution_aspect_ratio::zero_height ... ok
[INFO] [stdout] test resolution::test_resolution_display::debug_format ... ok
[INFO] [stdout] test resolution::test_resolution_display::horizontal_resolution ... ok
[INFO] [stdout] test resolution::test_p_label_regex::matches_all_standard_labels ... ok
[INFO] [stdout] test resolution::test_p_label_regex::matches_case_insensitive ... ok
[INFO] [stdout] test resolution::test_p_label_regex::extracts_correct_match ... ok
[INFO] [stdout] test resolution::test_resolution_display::resolution_4k ... ok
[INFO] [stdout] test resolution::test_resolution_display::resolution_8k ... ok
[INFO] [stdout] test resolution::test_p_label_regex::matches_vertical_prefix ... ok
[INFO] [stdout] test resolution::test_resolution_aspect_ratio::square ... ok
[INFO] [stdout] test resolution::test_resolution_aspect_ratio::standard_16_9 ... ok
[INFO] [stdout] test resolution::test_p_label_regex::does_not_match_full_dimensions ... ok
[INFO] [stdout] test resolution::test_resolution_display::small_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_display::square_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_display::ultrawide_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_display::vertical_4k ... ok
[INFO] [stdout] test resolution::test_resolution_from_options::both_missing ... ok
[INFO] [stdout] test resolution::test_resolution_from_options::both_present ... ok
[INFO] [stdout] test resolution::test_resolution_from_options::height_missing ... ok
[INFO] [stdout] test resolution::test_resolution_from_options::width_missing ... ok
[INFO] [stdout] test resolution::test_resolution_hash::same_resolutions_hash_equal ... ok
[INFO] [stdout] test resolution::test_resolution_is_landscape::landscape ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::at_exact_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_landscape::square ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::both_above_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::height_below_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::max_u32_limit ... ok
[INFO] [stdout] test resolution::test_resolution_display::vertical_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_is_landscape::portrait ... ok
[INFO] [stdout] test resolution::test_resolution_hash::different_resolutions_hash_different ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::both_below_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::large_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::one_at_limit_one_below ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::width_below_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::vertical_video_both_above ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::vertical_video_width_below ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::zero_limit ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::zero_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_is_smaller_than::one_dimension_at_limit ... ok
[INFO] [stdout] test resolution::test_resolution_new::creates_resolution_with_correct_dimensions ... ok
[INFO] [stdout] test resolution::test_resolution_new::creates_with_asymmetric_dimensions ... ok
[INFO] [stdout] test resolution::test_resolution_new::creates_with_max_u32 ... ok
[INFO] [stdout] test resolution::test_resolution_new::creates_with_zero_dimensions ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::equal_resolutions ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::inequality ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::lower_width_is_less ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::ordering_vertical_vs_horizontal ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::ordering_same_width_different_height ... ok
[INFO] [stdout] test resolution::test_resolution_pixel_count::large_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_pixel_count::single_pixel ... ok
[INFO] [stdout] test resolution::test_resolution_to_labeled_string::horizontal_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_pixel_count::zero_dimensions ... ok
[INFO] [stdout] test resolution::test_resolution_to_labeled_string::vertical_4k ... ok
[INFO] [stdout] test resolution::test_resolution_to_labeled_string::small_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_to_labeled_string::vertical_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_to_labeled_string::square_resolution ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::ordering_by_width_first ... ok
[INFO] [stdout] test resolution::test_resolution_pixel_count::standard_1080p ... ok
[INFO] [stdout] test resolve_path_tests::resolve_input_path_default ... ok
[INFO] [stdout] test resolve_path_tests::resolve_input_path_empty ... ok
[INFO] [stdout] test resolve_path_tests::resolve_input_path_valid ... ok
[INFO] [stdout] test resolve_path_tests::resolve_required_input_path_whitespace ... ok
[INFO] [stdout] test resolve_path_tests::resolve_input_path_nonexistent ... ok
[INFO] [stdout] test resolve_path_tests::resolve_output_path_default ... ok
[INFO] [stdout] test resolve_path_tests::resolve_output_path_with_file ... ok
[INFO] [stdout] test resolve_path_tests::resolve_required_input_path_empty ... ok
[INFO] [stdout] test scan_cache::test_cached_video_info_conversion::empty_codec_becomes_none ... ok
[INFO] [stdout] test scan_cache::test_cached_video_info_conversion::zero_bitrate_becomes_none ... ok
[INFO] [stdout] test resolve_path_tests::resolve_required_input_path_valid ... ok
[INFO] [stdout] test resolve_path_tests::resolve_required_input_path_nonexistent ... ok
[INFO] [stdout] test scan_cache::test_cached_video_info_conversion::converts_all_fields ... ok
[INFO] [stdout] test scan_cache::test_cached_video_info_conversion::zero_duration_becomes_none ... ok
[INFO] [stdout] test scan_cache::test_cached_video_info_conversion::roundtrip_through_database ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_open::opens_in_memory_database ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_open::empty_cache_returns_empty_map ... ok
[INFO] [stdout] test show_diff_tests::show_diff_does_not_panic_on_different ... ok
[INFO] [stdout] test show_diff_tests::show_diff_does_not_panic_on_empty ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_upsert::upsert_empty_input_returns_zero ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_upsert::upsert_updates_existing_entry ... ok
[INFO] [stdout] test show_diff_tests::show_diff_does_not_panic_on_identical ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_upsert::upsert_multiple_entries ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_upsert::upsert_skips_entry_without_size ... ok
[INFO] [stdout] test scan_cache::test_scan_cache_upsert::upsert_and_retrieve_single_entry ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_macos_spotlight ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_linux_lost_found ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_macos_trashes ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_nas_recycle ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_nas_recycle_mixed_case ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_recycle_bin_case_insensitive_unix ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_similar_name_unix ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_recycle_bin_unix ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_system_volume_information_unix ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_nas_recycle_mixed_case ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_nas_recycle ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_path_normal_directory_unix ... ok
[INFO] [stdout] test system_directory_tests::is_system_directory_walkdir ... ok
[INFO] [stdout] test system_directory_tests::should_skip_entry_hidden_file ... ok
[INFO] [stdout] test video_info::test_compute_median_f64::empty_returns_zero ... ok
[INFO] [stdout] test system_directory_tests::should_skip_entry_normal_file ... ok
[INFO] [stdout] test system_directory_tests::should_skip_entry_system_dir ... ok
[INFO] [stdout] test video_info::test_compute_median_f64::even_count ... ok
[INFO] [stdout] test video_info::test_compute_median_f64::single_value ... ok
[INFO] [stdout] test video_info::test_compute_median_u64::even_count ... ok
[INFO] [stdout] test video_info::test_compute_median_u64::empty_returns_zero ... ok
[INFO] [stdout] test video_info::test_compute_median_u64::odd_count ... ok
[INFO] [stdout] test video_info::test_compute_median_u64::single_value ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::empty_output ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::first_bitrate_source_wins ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::handles_malformed_width ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::handles_large_resolution ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::handles_malformed_height ... ok
[INFO] [stdout] test video_info::test_compute_median_f64::odd_count ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::ignores_zero_bitrate ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::handles_na_bitrate_value ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_codec ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_duration ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_height ... ok
[INFO] [stdout] test system_directory_tests::should_skip_entry_nas_recycle ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_bitrate ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_resolution ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::parses_bitrate_from_bps_eng_tag ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::parses_bitrate_from_bps_tag ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::skips_unknown_keys ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::missing_width ... ok
[INFO] [stdout] test video_info::test_video_info::default_has_all_none ... ok
[INFO] [stdout] test video_info::test_video_info::resolution_returns_none_when_missing ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::parses_codec_as_lowercase ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::skips_empty_lines ... ok
[INFO] [stdout] test video_info::test_video_info::resolution_string_formats_portrait ... ok
[INFO] [stdout] test video_info::test_video_info::resolution_returns_some_when_present ... ok
[INFO] [stdout] test video_info::test_video_info::resolution_string_formats_correctly ... ok
[INFO] [stdout] test video_info::test_video_info::resolution_string_returns_none_when_resolution_missing ... ok
[INFO] [stdout] test video_info::test_video_stats::add_collects_all_fields ... ok
[INFO] [stdout] test video_info::test_video_stats::add_skips_none_fields ... ok
[INFO] [stdout] test video_info::test_video_stats::add_counts_duplicate_codecs ... ok
[INFO] [stdout] test trash_or_delete_tests::returns_error_for_nonexistent_file ... ok
[INFO] [stdout] test trash_or_delete_tests::deletes_local_file ... ok
[INFO] [stdout] test video_info::test_video_stats::new_creates_empty_stats ... ok
[INFO] [stdout] test resolution::test_resolution_ordering::same_width_lower_height_is_less ... ok
[INFO] [stdout] test video_info::test_video_stats::add_counts_duplicate_resolutions ... ok
[INFO] [stdout] test video_info::test_parse_ffprobe_output::parses_all_fields ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 492 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.75s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/dir_move/main.rs (/opt/rustwide/target/debug/deps/dirmove-6e5ac02ebc17096f)
[INFO] [stdout] 
[INFO] [stdout] running 592 tests
[INFO] [stdout] test config::cli_args_tests::config_from_args_ignored_group_parts_lowercase ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_ignored_group_names_normalized ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_ignored_group_names_lowercase ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_default_min_prefix_chars_is_five ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_cli_flags_enable_options ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_includes_unpack_dirs_lowercase ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_normalizes_custom_mapping_pattern ... ok
[INFO] [stdout] test config::cli_args_tests::default_group_size_is_none ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_includes_cli_patterns ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_print_enables_dryrun ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_warns_on_invalid_mapping_format ... ok
[INFO] [stdout] test config::cli_args_tests::parses_combined_short_flags ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_uses_cli_min_prefix_chars ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_parses_custom_mappings ... ok
[INFO] [stdout] test config::cli_args_tests::parses_custom_mapping_cli_arg ... ok
[INFO] [stdout] test config::cli_args_tests::parses_custom_mapping_long_form ... ok
[INFO] [stdout] test config::cli_args_tests::parses_group_size ... ok
[INFO] [stdout] test config::cli_args_tests::parses_ignored_group_names_long_form ... ok
[INFO] [stdout] test config::cli_args_tests::config_from_args_force_enables_overwrite ... ok
[INFO] [stdout] test config::cli_args_tests::parses_long_flags ... ok
[INFO] [stdout] test config::cli_args_tests::parses_min_prefix_chars ... ok
[INFO] [stdout] test config::cli_args_tests::empty_arrays_by_default ... ok
[INFO] [stdout] test config::cli_args_tests::parses_min_prefix_chars_long_form ... ok
[INFO] [stdout] test config::cli_args_tests::parses_ignored_group_parts_long_form ... ok
[INFO] [stdout] test config::cli_args_tests::default_min_prefix_chars_is_none ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_prefix_overrides ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_exclude_patterns ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_custom_mappings ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_unpack_directories ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_default_custom_mappings_is_empty ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_default_min_prefix_chars_is_none ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::cli_args_tests::parses_path_argument ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_prefix_ignores ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_ignored_group_names ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_ignored_group_parts ... ok
[INFO] [stdout] test config::cli_args_tests::rejects_invalid_group_size ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_custom_mappings ... ok
[INFO] [stdout] test config::cli_args_tests::rejects_invalid_min_prefix_chars ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_ignored_group_names ... ok
[INFO] [stdout] test config::cli_args_tests::parses_multiple_include_patterns ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_dirmove_section ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_min_group_size ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_min_prefix_chars ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_prefix_options ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_unpack_directories ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_ignored_group_parts ... ok
[INFO] [stdout] test config::custom_mapping_tests::new_handles_mixed_separators ... ok
[INFO] [stdout] test config::custom_mapping_tests::new_removes_dots_from_pattern ... ok
[INFO] [stdout] test config::custom_mapping_tests::new_preserves_directory_name_case ... ok
[INFO] [stdout] test config::custom_mapping_tests::new_normalizes_pattern_to_lowercase ... ok
[INFO] [stdout] test config::config_tests::from_toml_str_parses_include_exclude ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::adds_to_empty_config ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::creates_dirmove_section_if_missing ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::adds_to_existing_array ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::inline_array_stays_inline ... ok
[INFO] [stdout] test config::custom_mapping_tests::new_removes_spaces_from_pattern ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::adds_multiple_names_sequentially_in_alphabetical_order ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::case_insensitive_duplicate_detection ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::inserts_alphabetically_case_insensitive ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::inserts_alphabetically_between_existing ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::multiline_array_stays_multiline ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::skips_duplicate_dotted_match ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::multiline_array_multiple_sequential_inserts ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::preserves_8_space_indentation ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::skips_duplicate_exact_match ... ok
[INFO] [stdout] test database::tests::display_entry ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::skips_duplicate_normalized_match ... ok
[INFO] [stdout] test config::test_add_ignored_name_to_toml::preserves_existing_config ... ok
[INFO] [stdout] test database::tests::normalized_name_removes_spaces ... ok
[INFO] [stdout] test database::tests::dotted_and_spaced_same_entry ... ok
[INFO] [stdout] test database::tests::different_spacing_same_entry ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::find_directory_matches_dotted_name ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::find_directory_matches_normalized_name ... ok
[INFO] [stdout] test database::tests::upsert_new_entry ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::find_directory_matches_exact_name ... ok
[INFO] [stdout] test database::tests::insert_if_new_preserves_original ... ok
[INFO] [stdout] test database::tests::upsert_updates_display_name ... ok
[INFO] [stdout] test database::tests::open_in_memory ... ok
[INFO] [stdout] test database::tests::get_all_entries_sorted ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::find_directory_no_match ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::find_directory_selects_correct_index ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::process_custom_mappings_empty_when_no_mappings ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::empty_database_returns_none ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::multiple_mappings_first_match_wins ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::process_custom_mappings_ignores_dots_in_pattern ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::exact_match_different_case ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::process_custom_mappings_no_match_without_directory ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::process_custom_mappings_case_insensitive_pattern ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::exact_match_with_dots ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::exact_match_no_spaces ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::exact_match_dots_and_different_case ... ok
[INFO] [stdout] test dir_move::test_custom_mappings::process_custom_mappings_returns_unmatched_files ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::exact_match_same_case ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::multiple_entries_exact_match ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::no_database_returns_none ... ok
[INFO] [stdout] test dir_move::test_directory_matching::basic_match ... ok
[INFO] [stdout] test dir_move::test_directory_matching::case_insensitive ... ok
[INFO] [stdout] test dir_move::test_directory_matching::concatenated_directory_matches_dotted_files_without_prefix ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::preserves_database_formatting ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::no_match_for_prefix_only ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::no_match_for_longer_name ... ok
[INFO] [stdout] test dir_move::test_directory_matching::concatenated_filename_matches_spaced_directory ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::no_match_for_partial_overlap ... ok
[INFO] [stdout] test dir_move::test_database_suggestion::no_match_for_completely_different ... ok
[INFO] [stdout] test dir_move::test_directory_matching::concatenated_directory_with_dotted_files_and_prefix ... ok
[INFO] [stdout] test dir_move::test_directory_matching::concatenated_directory_matches_dotted_files ... ok
[INFO] [stdout] test dir_move::test_directory_matching::dir_has_prefix_file_does_not ... ok
[INFO] [stdout] test dir_move::test_directory_matching::dots_replaced_with_spaces ... ok
[INFO] [stdout] test dir_move::test_directory_matching::file_has_prefix_dir_does_not ... ok
[INFO] [stdout] test dir_move::test_directory_matching::longer_match_wins ... ok
[INFO] [stdout] test dir_move::test_directory_matching::empty_files ... ok
[INFO] [stdout] test dir_move::test_directory_matching::mixed_separators ... ok
[INFO] [stdout] test dir_move::test_directory_matching::empty_dirs ... ok
[INFO] [stdout] test dir_move::test_directory_matching::multiple_dirs ... ok
[INFO] [stdout] test dir_move::test_directory_matching::no_matches ... ok
[INFO] [stdout] test dir_move::test_directory_matching::mixed_concatenated_and_dotted_filenames ... ok
[INFO] [stdout] test dir_move::test_directory_matching::numbers_in_directory_name ... ok
[INFO] [stdout] test dir_move::test_directory_matching::partial_match ... ok
[INFO] [stdout] test dir_move::test_directory_matching::with_multiple_prefix_ignores ... ok
[INFO] [stdout] test dir_move::test_directory_matching::prefix_ignore_applied_to_both ... ok
[INFO] [stdout] test dir_move::test_directory_matching::special_characters_in_names ... ok
[INFO] [stdout] test dir_move::test_directory_matching::with_prefix_ignore ... ok
[INFO] [stdout] test dir_move::test_directory_matching::with_repeated_prefix_ignore ... ok
[INFO] [stdout] test dir_move::test_full_flow::with_resolution_numbers ... ok
[INFO] [stdout] test dir_move::test_full_flow::files_with_resolution_grouped_correctly ... ok
[INFO] [stdout] test dir_move::test_full_flow::with_resolution_pattern ... ok
[INFO] [stdout] test dir_move::test_full_flow::simulation_with_filtering ... ok
[INFO] [stdout] test dir_move::test_full_flow::with_glue_words ... ok
[INFO] [stdout] test dir_move::test_full_flow::short_prefix_with_shared_parts ... ok
[INFO] [stdout] test dir_move::test_full_flow::files_with_dimension_resolution ... ok
[INFO] [stdout] test dir_move::test_full_flow::files_with_2160p_resolution ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_group_name_not_offered ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::multiple_ignored_group_names ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_group_names_case_insensitive ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_multi_part_group_name ... ok
[INFO] [stdout] test dir_move::test_ignored_group_parts::case_insensitive_matching ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_multi_part_group_name_with_dots ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::empty_ignored_list_allows_all ... ok
[INFO] [stdout] test dir_move::test_ignored_group_parts::does_not_filter_substring_matches ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_multi_part_group_name_with_spaces ... ok
[INFO] [stdout] test dir_move::test_ignored_group_parts::empty_ignored_parts_allows_all ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_group_name_with_common_words ... ok
[INFO] [stdout] test dir_move::test_ignored_group_names::ignored_group_names_mixed_formats_all_match ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::chained_prefix_stripping ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::dryrun_does_not_modify_files ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::case_insensitive_prefix_matching ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::empty_prefix_ignores_does_nothing ... ok
[INFO] [stdout] test dir_move::test_ignored_group_parts::multiple_ignored_parts ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::no_merge_without_matching_target ... ok
[INFO] [stdout] test dir_move::test_ignored_group_parts::filters_groups_containing_ignored_part ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::merges_only_when_sibling_exists ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::non_recursive_ignores_subdirectories ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::merges_subdirectories ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::merges_prefixed_directory_into_non_prefixed ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::overwrites_existing_files_with_force_flag ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::multiple_prefix_ignores ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::recursive_merges_at_multiple_levels ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::recursive_merges_in_subdirectories ... ok
[INFO] [stdout] test dir_move::test_parallel_grouping_consistency::parallel_handles_ignored_group_parts_correctly ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::skips_existing_files_without_overwrite ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::recursive_deeply_nested ... ok
[INFO] [stdout] test dir_move::test_merge_prefixed_directories::only_merges_siblings_not_across_levels ... ok
[INFO] [stdout] test dir_move::test_parallel_grouping_consistency::parallel_handles_ignored_group_names_correctly ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::parent_dir_name_case_insensitive ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::ignored_group_name_checked_after_prefix_strip ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_multiple_prefixes_stripped ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_not_offered_as_dir_name ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::different_name_still_offered ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_only_prefix_results_in_empty ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_stripped_from_dir_name ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::parent_dir_name_not_offered_as_new_dir ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::parent_dir_name_with_spaces_matches_concatenated ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::parent_dir_name_with_dots_matches_spaced ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::case_variations_grouped_together ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::dot_separated_and_concatenated_grouped_together ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_with_mixed_dotted_and_concatenated_names ... ok
[INFO] [stdout] test dir_move::test_parent_directory_skipped::prefix_ignore_not_in_create_mode_dir_name ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::files_appear_in_multiple_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::no_files_no_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefers_concatenated_prefix_for_directory_name ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::order_by_prefix_length ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefix_ignores_and_overrides_combined ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefix_ignores_strips_prefix_from_grouping ... ok
[INFO] [stdout] test dir_move::test_parallel_grouping_consistency::parallel_produces_deterministic_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::min_group_size_affects_grouping ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::min_group_size_respected_in_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefix_overrides_merge_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::single_file_no_group ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefix_overrides_no_match_keeps_original ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::same_prefix_different_case_grouped ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::case_insensitive_ignore ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::dot_prefix_multiple_ignores ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::dot_prefix_single_ignore ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::ignore_in_middle_not_stripped ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::prefix_overrides_multiple_overrides ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::is_ignored_prefix_exact_match ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::multiple_ignores ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::no_ignores ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::no_match ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::repeated_prefix_in_name ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::single_ignore ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::empty_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::matching_override ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::merges_groups ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::multiple_overrides ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::no_overrides ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::non_matching ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::override_more_specific_than_prefix ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::override_with_case_sensitivity ... ok
[INFO] [stdout] test dir_move::test_prefix_overrides::partial_match_only ... ok
[INFO] [stdout] test dir_move::test_prefix_ignores::all_parts_are_ignored ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::all_prefix_lengths_offered_complete_hierarchy ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::alphanumeric_prefix_not_filtered ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::concatenated_vs_dotted_same_name_grouped_with_concat_preferred ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_dotted_vs_concatenated_large_group ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_glue_words_break_adjacency ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_extended_prefix_groups ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_mixed_separators_large_dataset ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_prefix_appears_multiple_times ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_numbers_break_adjacency ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_resolution_in_middle_does_not_break ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::large_file_set_multiple_series ... ok
[INFO] [stdout] test dir_move::test_prefix_groups::files_with_completely_different_prefixes ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::files_with_only_extension_no_prefix ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_three_part_prefix_various_forms ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::empty_filename_parts_handled ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::hyphenated_names_treated_as_single_part ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::files_with_numeric_and_resolution_parts_filtered_for_grouping ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::groups_sorted_by_specificity_longest_prefix_first ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::mixed_content_multiple_distinct_groups_with_noise ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::long_single_word_prefix_forms_valid_group ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::mixed_case_and_format_all_normalized_correctly ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::mixed_extensions_same_prefix_grouped ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::min_group_size_one_creates_single_file_groups ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::contiguity_long_date_sequences ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::non_contiguous_parts_do_not_form_group ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::prefix_ignore_strips_common_prefixes_for_better_grouping ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::realistic_scenario_seven_files_four_share_two_part_prefix ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::min_group_size_respected_correctly ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::multiple_valid_groupings_all_offered ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::single_character_prefix_forms_group ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::four_part_prefix_uses_three_part_max ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::underscore_names_not_split ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::user_can_reject_specific_group_and_use_broader_one ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::very_long_filename_prefix_extraction ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::rejected_group_files_remain_available_for_next_group ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::substring_prefix_does_not_incorrectly_match ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::case_insensitive_ignored_group_name_after_stripping ... ok
[INFO] [stdout] test dir_move::test_second_pass_starts_with_matching::starts_with_does_not_add_unrelated_files ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::empty_after_full_strip_is_skipped ... ok
[INFO] [stdout] test dir_move::test_second_pass_starts_with_matching::contiguity_check_prevents_false_positive_in_second_pass ... ok
[INFO] [stdout] test dir_move::test_second_pass_starts_with_matching::multiple_extended_variants_all_added ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::multi_word_ignored_group_name_after_stripping ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::multiple_prefix_ignores_chain_to_ignored_group_name ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::prefix_ignore_partial_match_not_filtered ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::partial_match_not_filtered ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::stripped_name_is_prefix_ignore_not_offered ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::real_world_scenario_release_group_filtering ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::stripped_name_matches_ignored_group_name_not_offered ... ok
[INFO] [stdout] test dir_move::test_realistic_grouping::three_part_prefix_coexists_with_two_part_and_one_part ... ok
[INFO] [stdout] test dir_move::test_unpack::alternating_match_non_match_dirs ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::valid_name_after_stripping_is_offered ... ok
[INFO] [stdout] test dir_move::test_unpack::basic_preserves_structure_and_removes_matched_dir ... ok
[INFO] [stdout] test dir_move::test_unpack::case_insensitive_dirname_match ... ok
[INFO] [stdout] test dir_move::test_unpack::chain_with_non_matching_subdirs_moved_directly ... ok
[INFO] [stdout] test dir_move::test_unpack::chain_with_files_at_multiple_levels ... ok
[INFO] [stdout] test dir_move::test_second_pass_starts_with_matching::already_in_group_not_duplicated ... ok
[INFO] [stdout] test dir_move::test_unpack::collect_candidates_filters_nested ... ok
[INFO] [stdout] test dir_move::test_stripped_name_filtering_integration::case_insensitive_prefix_ignore_result ... ok
[INFO] [stdout] test dir_move::test_unpack::dryrun_does_not_modify_files ... ok
[INFO] [stdout] test dir_move::test_unpack::contains_unpack_directory_helper ... ok
[INFO] [stdout] test dir_move::test_unpack::collect_info_counts_correctly ... ok
[INFO] [stdout] test dir_move::test_unpack::empty_unpack_names_does_nothing ... ok
[INFO] [stdout] test dir_move::test_second_pass_starts_with_matching::concatenated_variant_added_to_existing_group ... ok
[INFO] [stdout] test dir_move::test_unpack::does_not_prune_unrelated_empty_dirs ... ok
[INFO] [stdout] test dir_move::test_unpack::moves_non_matching_dirs_directly ... ok
[INFO] [stdout] test dir_move::test_unpack::multiple_matching_dirs_at_different_levels ... ok
[INFO] [stdout] test dir_move::test_unpack::handles_special_characters_in_names ... ok
[INFO] [stdout] test dir_move::test_unpack::nested_chain_single_summary ... ok
[INFO] [stdout] test dir_move::test_parallel_grouping_consistency::parallel_large_file_set_stress_test ... ok
[INFO] [stdout] test dir_move::test_unpack::nested_chain_with_non_matching_dir_between ... ok
[INFO] [stdout] test dir_move::test_unpack::deeply_nested_structure ... ok
[INFO] [stdout] test dir_move::test_unpack::multiple_unpack_names ... ok
[INFO] [stdout] test dir_move::test_unpack::nested_matching_dirs_are_flattened ... ok
[INFO] [stdout] test dir_move::test_unpack::nested_chain_multiple_non_matching_dirs ... ok
[INFO] [stdout] test dir_move::test_unpack::mixed_files_and_directories ... ok
[INFO] [stdout] test dir_move::test_unpack::dryrun_preserves_empty_matched_directory ... ok
[INFO] [stdout] test dir_move::test_unpack::no_matching_directories ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::case_insensitive ... ok
[INFO] [stdout] test dir_move::test_unpack::preserves_file_content ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::deleted_recursive ... ok
[INFO] [stdout] test dir_move::test_unpack::non_recursive_only_checks_root_level ... ok
[INFO] [stdout] test dir_move::test_unpack::skips_existing_file_without_overwrite ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::collect_unwanted_and_unpack_combined ... ok
[INFO] [stdout] test dir_move::test_unpack::separate_trees_get_separate_processing ... ok
[INFO] [stdout] test dir_move::test_unpack::overwrites_existing_file_with_overwrite ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::deleted ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::skipped_in_collect_directories ... ok
[INFO] [stdout] test dir_move::test_unpack::skips_existing_directory_without_overwrite ... ok
[INFO] [stdout] test dir_move::test_unwanted_directories::dryrun_preserves ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::broader_group_includes_extended_names ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::dotted_vs_concatenated_with_varied_prefixes ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::distinct_studio_names_form_separate_groups ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::near_match_extra_prefix_not_grouped ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::completely_different_files_isolated ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::empty_prefix_ignore_list_no_effect ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::files_without_dots_form_single_groups ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::numeric_looking_prefix_ignore ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::prefix_ignore_does_not_strip_from_middle ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::prefix_ignore_case_insensitive ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::prefix_ignore_with_similar_non_matching_files ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::prefix_ignore_groups_files_with_and_without_prefix ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::single_letter_prefix_ignore ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::specific_groups_separate_from_unrelated_names ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::substring_in_middle_not_matched ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::count_prefix_chars_helper_works_correctly ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::dotted_prefix_char_count_excludes_dots ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::dotted_prefix_included_when_chars_meet_threshold ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::multiple_prefix_ignores_comprehensive ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::exact_threshold_includes_prefix ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::mixed_content_with_noise_files ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::near_match_similar_names_different_groups ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::emoji_prefix_counted_as_chars ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::long_prefix_always_included ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::min_chars_one_allows_single_char ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::integration_dotted_short_prefix_excluded ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::min_chars_zero_allows_all ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::prefix_ignore_multiple_ignored_prefixes ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::mixed_dotted_and_single_word_with_threshold ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::high_threshold_excludes_all_short_dotted ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::config_override_allows_short_prefixes ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::common_short_words_excluded ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::high_threshold_excludes_most_single_words ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::short_prefix_included_with_low_min_chars ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::short_prefix_excluded_with_default_min_chars ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::three_part_dotted_prefix_char_count ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::three_part_dotted_prefix_included_when_long_enough ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::two_part_prefix_affected_by_min_chars ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::threshold_exact_boundary_dotted ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::mixed_lengths_correct_grouping ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::unicode_chars_counted_correctly ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::integration_dotted_long_prefix_included ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::short_names_not_grouped_with_default_config ... ok
[INFO] [stdout] test dir_move::test_word_boundary_grouping::camel_case_boundary_still_groups_correctly ... ok
[INFO] [stdout] test dir_move::test_word_boundary_grouping::intense_and_intensely_not_grouped_together ... ok
[INFO] [stdout] test dir_move::test_word_boundary_grouping::digit_boundary_groups_correctly ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::three_part_prefix_with_ignores_and_noise ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::unicode_dotted_prefix_counted_correctly ... ok
[INFO] [stdout] test types::test_casing_score::all_lowercase_scores_zero ... ok
[INFO] [stdout] test types::test_casing_score::all_uppercase_scores_second ... ok
[INFO] [stdout] test types::test_casing_score::camel_case_scores_highest ... ok
[INFO] [stdout] test types::test_casing_score::empty_string_scores_zero ... ok
[INFO] [stdout] test types::test_filtered_parts_new::lowercased_parts_are_consistent_with_original ... ok
[INFO] [stdout] test types::test_filtered_parts_new::preserves_original_casing ... ok
[INFO] [stdout] test types::test_filtered_parts_new::single_part_name_has_no_combinations ... ok
[INFO] [stdout] test types::test_filtered_parts_new::many_parts_produce_correct_combination_counts ... ok
[INFO] [stdout] test types::test_casing_score::mixed_case_starting_lowercase_scores_third ... ok
[INFO] [stdout] test types::test_filtered_parts_new::empty_string_produces_single_empty_part ... ok
[INFO] [stdout] test types::test_filtered_parts_new::single_parts_split_correctly ... ok
[INFO] [stdout] test dir_move::test_varied_prefix_grouping::test_min_prefix_chars::threshold_zero_allows_all_dotted_prefixes ... ok
[INFO] [stdout] test dir_move::test_word_boundary_grouping::lowercase_suffix_not_grouped_with_base ... ok
[INFO] [stdout] test types::test_filtered_parts_new::three_part_combinations_computed ... ok
[INFO] [stdout] test types::test_filtered_parts_new::two_part_combinations_computed ... ok
[INFO] [stdout] test types::test_filtered_parts_new::two_part_name_has_no_three_part_combinations ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::all_uppercase_name_with_word_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::empty_target_matches_nothing ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::intense_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::intense_not_matched_by_intensely ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::match_at_middle_position ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::no_match_returns_false ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::prefix_not_at_start_of_any_part ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_single_part_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_starts_with_lowercase_rejected ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_starts_with_scandic_lowercase_rejected ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_starts_with_scandic_uppercase_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_two_part_combined_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_starts_with_uppercase_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_two_part_combined_with_lowercase_rejected ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::single_part_exact_match_case_insensitive ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::single_part_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::starts_with_at_word_boundary_uppercase ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::single_part_file_no_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::three_part_combined_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::scandic_two_part_combined_with_uppercase_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::two_part_combined_starts_with_at_word_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::three_part_combined_starts_with_at_word_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::two_part_combined_starts_with_rejected_at_lowercase ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::three_part_combined_starts_with_rejected_at_lowercase ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::two_part_match_at_middle_position ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::starts_with_at_digit_boundary ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::umlaut_prefix_not_confused_with_ascii ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::two_part_combined_exact_match ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::starts_with_rejected_at_lowercase_continuation ... ok
[INFO] [stdout] test types::test_is_better_prefix::all_uppercase_preferred_over_all_lowercase ... ok
[INFO] [stdout] test types::test_filtered_parts_prefix_matches::single_part_file_exact_match ... ok
[INFO] [stdout] test types::test_is_better_prefix::alphabetical_order_breaks_ties ... ok
[INFO] [stdout] test types::test_is_better_prefix::camel_case_preferred_over_all_uppercase ... ok
[INFO] [stdout] test types::test_is_better_prefix::same_prefix_not_better ... ok
[INFO] [stdout] test utils::test_contiguity::case_insensitive_concatenated ... ok
[INFO] [stdout] test utils::test_contiguity::case_insensitive_mixed_case ... ok
[INFO] [stdout] test utils::test_contiguity::case_insensitive_concatenated_reverse ... ok
[INFO] [stdout] test utils::test_contiguity::concatenated_three_part_prefix_matches_dotted ... ok
[INFO] [stdout] test types::test_is_better_prefix::camel_case_preferred_over_all_lowercase ... ok
[INFO] [stdout] test utils::test_contiguity::case_insensitive_exact_match ... ok
[INFO] [stdout] test utils::test_contiguity::empty_prefix_parts ... ok
[INFO] [stdout] test utils::test_contiguity::concatenated_prefix_matches_dotted_original ... ok
[INFO] [stdout] test utils::test_contiguity::episode_code_as_part ... ok
[INFO] [stdout] test utils::test_contiguity::exact_concatenated_match_not_substring ... ok
[INFO] [stdout] test utils::test_contiguity::exact_single_part_match ... ok
[INFO] [stdout] test utils::test_contiguity::exact_two_part_match_at_end ... ok
[INFO] [stdout] test utils::test_contiguity::exact_three_part_match_at_start ... ok
[INFO] [stdout] test utils::test_contiguity::exact_two_part_match_at_start ... ok
[INFO] [stdout] test utils::test_contiguity::exact_two_part_match_in_middle ... ok
[INFO] [stdout] test utils::test_contiguity::extended_prefix_matches ... ok
[INFO] [stdout] test utils::test_contiguity::extended_prefix_all_forms_match ... ok
[INFO] [stdout] test utils::test_contiguity::extended_prefix_matches_longer_concatenated ... ok
[INFO] [stdout] test utils::test_contiguity::extended_dotted_prefix_matches_concatenated ... ok
[INFO] [stdout] test utils::test_contiguity::extended_single_part_prefix_matches ... ok
[INFO] [stdout] test utils::test_contiguity::long_filename_match_at_start ... ok
[INFO] [stdout] test utils::test_contiguity::extended_single_part_prefix_various_extensions ... ok
[INFO] [stdout] test utils::test_contiguity::matches_first_occurrence ... ok
[INFO] [stdout] test utils::test_contiguity::mixed_concatenated_in_middle ... ok
[INFO] [stdout] test utils::test_contiguity::partial_match_not_sufficient ... ok
[INFO] [stdout] test utils::test_contiguity::long_filename_match_deep_in_middle ... ok
[INFO] [stdout] test utils::test_contiguity::long_filename_non_contiguous ... ok
[INFO] [stdout] test utils::test_contiguity::numeric_parts_are_literal ... ok
[INFO] [stdout] test utils::test_contiguity::parts_in_wrong_order ... ok
[INFO] [stdout] test utils::test_contiguity::realistic_adult_site_with_date ... ok
[INFO] [stdout] test utils::test_contiguity::prefix_matches_entire_filename_except_extension ... ok
[INFO] [stdout] test utils::test_contiguity::dotted_prefix_matches_concatenated_original ... ok
[INFO] [stdout] test utils::test_contiguity::prefix_matches_including_extension_part ... ok
[INFO] [stdout] test utils::test_contiguity::realistic_movie_title_contiguous ... ok
[INFO] [stdout] test utils::test_contiguity::prefix_longer_than_filename ... ok
[INFO] [stdout] test utils::test_contiguity::prefix_part_not_in_filename ... ok
[INFO] [stdout] test utils::test_contiguity::single_concatenated_prefix_matches_three_dotted ... ok
[INFO] [stdout] test utils::test_contiguity::realistic_movie_with_year ... ok
[INFO] [stdout] test utils::test_contiguity::realistic_tv_show_pattern ... ok
[INFO] [stdout] test utils::test_contiguity::resolution_pattern_as_part ... ok
[INFO] [stdout] test utils::test_contiguity::repeated_single_part ... ok
[INFO] [stdout] test utils::test_contiguity::three_variations_of_same_name_partial_concat ... ok
[INFO] [stdout] test utils::test_contiguity::three_variations_of_same_name_dotted ... ok
[INFO] [stdout] test utils::test_contiguity::three_parts_with_gap_in_middle ... ok
[INFO] [stdout] test utils::test_contiguity::three_variations_reverse_partial_concat ... ok
[INFO] [stdout] test utils::test_contiguity::single_part_filename ... ok
[INFO] [stdout] test utils::test_contiguity::two_parts_separated_by_date ... ok
[INFO] [stdout] test utils::test_contiguity::three_variations_of_same_name_concatenated ... ok
[INFO] [stdout] test utils::test_contiguity::two_parts_separated_by_word ... ok
[INFO] [stdout] test utils::test_contiguity::two_parts_separated_by_single_number ... ok
[INFO] [stdout] test utils::test_contiguity::very_long_concatenated_name ... ok
[INFO] [stdout] test utils::test_contiguity::very_long_dotted_name_matches_concatenated ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::extension_not_included_as_candidate ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::double_extension_only_last_excluded ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::extension_not_included_even_when_common ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::extension_case_insensitive_exclusion ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::extension_not_part_of_multi_part_candidate ... ok
[INFO] [stdout] test utils::test_filtering::case_insensitive_resolution ... ok
[INFO] [stdout] test utils::test_filtering::complex_filtering_year_resolution_glue ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::name_that_looks_like_extension_at_non_extension_position ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::long_extension_excluded ... ok
[INFO] [stdout] test utils::test_file_extension_exclusion::valid_candidates_still_found_without_extension ... ok
[INFO] [stdout] test utils::test_filtering::consecutive_dots ... ok
[INFO] [stdout] test utils::test_filtering::all_numeric_except_extension ... ok
[INFO] [stdout] test utils::test_filtering::glue_words_case_insensitive ... ok
[INFO] [stdout] test utils::test_filtering::keeps_4k_not_matched_by_resolution_regex ... ok
[INFO] [stdout] test utils::test_filtering::generic_tv_show ... ok
[INFO] [stdout] test utils::test_filtering::empty_string ... ok
[INFO] [stdout] test utils::test_filtering::no_dots_in_name ... ok
[INFO] [stdout] test utils::test_filtering::multiple_resolutions ... ok
[INFO] [stdout] test utils::test_filtering::no_numeric_parts ... ok
[INFO] [stdout] test utils::test_filtering::keeps_mixed_alphanumeric ... ok
[INFO] [stdout] test utils::test_filtering::preserves_episode_codes ... ok
[INFO] [stdout] test utils::test_filtering::only_extension_left ... ok
[INFO] [stdout] test utils::test_filtering::removes_2160p ... ok
[INFO] [stdout] test utils::test_filtering::removes_1080p ... ok
[INFO] [stdout] test utils::test_filtering::removes_720p ... ok
[INFO] [stdout] test utils::test_filtering::removes_all_glue_words ... ok
[INFO] [stdout] test utils::test_filtering::removes_and_glue_word ... ok
[INFO] [stdout] test utils::test_filtering::removes_the_glue_word ... ok
[INFO] [stdout] test utils::test_filtering::removes_multiple_numeric ... ok
[INFO] [stdout] test utils::test_filtering::removes_year ... ok
[INFO] [stdout] test utils::test_filtering::single_part ... ok
[INFO] [stdout] test utils::test_filtering::removes_smaller_dimension ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::four_part_sequences_exact_length ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::no_dots_multi_part_returns_empty ... ok
[INFO] [stdout] test utils::test_contiguity::realistic_adult_site_without_date ... ok
[INFO] [stdout] test utils::test_filtering::removes_multiple_glue_words ... ok
[INFO] [stdout] test utils::test_contiguity::dotted_three_part_prefix_matches_concatenated ... ok
[INFO] [stdout] test utils::test_filtering::removes_dimension_format ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::no_dots_single_part ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::three_part_sequences ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::too_few_parts ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::realistic_filename ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::single_part_sequences ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::two_part_sequences ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::realistic_filename_three_parts ... ok
[INFO] [stdout] test utils::test_get_all_n_part_sequences::zero_parts_returns_empty ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::empty_prefix_always_matches ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_case_insensitive ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_exact_single_part ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_exact_two_parts ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_non_contiguous_rejected ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_reverse_split ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::middle_position_match ... ok
[INFO] [stdout] test utils::test_normalize_name::normalize_name_function ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_concatenated_form ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::matches_original_extended_starts_with ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::no_match_returns_false ... ok
[INFO] [stdout] test utils::test_parts_are_contiguous_precomputed::three_part_contiguous ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::concatenated_and_dotted_at_various_positions ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::group_name_not_found_when_not_contiguous ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::dotted_group_name_in_middle ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::group_name_in_middle_of_filename ... ok
[INFO] [stdout] test utils::test_filtering::generic_movie_name ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::group_name_at_various_positions ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::prefix_matches_normalized_three_part_anywhere ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::mixed_prefix_and_middle_positions ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::prefix_matches_normalized_two_part_anywhere ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::prefix_matches_normalized_finds_anywhere ... ok
[INFO] [stdout] test utils::test_prefix_candidates::case_insensitive_prefix_matching ... ok
[INFO] [stdout] test utils::test_prefix_candidates::dot_separated_three_parts_matches_concatenated ... ok
[INFO] [stdout] test utils::test_position_agnostic_matching::realistic_scenario_with_dates_in_middle ... ok
[INFO] [stdout] test utils::test_prefix_candidates::empty_file_list ... ok
[INFO] [stdout] test utils::test_prefix_candidates::dot_separated_matches_concatenated ... ok
[INFO] [stdout] test utils::test_prefix_candidates::dot_separated_two_parts_match_single_word ... ok
[INFO] [stdout] test utils::test_prefix_candidates::file_not_in_list ... ok
[INFO] [stdout] test utils::test_prefix_candidates::dot_separated_with_mixed_case ... ok
[INFO] [stdout] test utils::test_prefix_candidates::fallback_to_two_part_when_no_three_part_matches ... ok
[INFO] [stdout] test utils::test_prefix_candidates::identical_prefix_files_are_grouped ... ok
[INFO] [stdout] test utils::test_prefix_candidates::identical_single_word_prefix_grouped ... ok
[INFO] [stdout] test utils::test_prefix_candidates::high_min_group_size_filters_all ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_documentary_with_regions ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_franchise_with_year_variations ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_with_date_after_prefix ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_mixed_year_positions ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_with_only_year_after_prefix ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_season_with_year_in_name ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_with_year_after_prefix ... ok
[INFO] [stdout] test utils::test_prefix_candidates::min_group_size_one ... ok
[INFO] [stdout] test utils::test_prefix_candidates::mixed_case_variations_all_group_together ... ok
[INFO] [stdout] test utils::test_prefix_candidates::min_group_size_one_matches_single_file ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_with_version_and_year ... ok
[INFO] [stdout] test utils::test_prefix_candidates::movie_series_with_years ... ok
[INFO] [stdout] test utils::test_prefix_candidates::mixed_prefixes_different_third_parts ... ok
[INFO] [stdout] test utils::test_prefix_candidates::mixed_years_without_filtering ... ok
[INFO] [stdout] test utils::test_prefix_candidates::min_group_size_filters_small_groups ... ok
[INFO] [stdout] test utils::test_prefix_candidates::min_group_size_at_exact_threshold ... ok
[INFO] [stdout] test utils::test_prefix_candidates::many_files_same_prefix ... ok
[INFO] [stdout] test utils::test_prefix_candidates::normalize_name_removes_dots_spaces_and_lowercases ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefix_matches_normalized_no_match ... ok
[INFO] [stdout] test utils::test_prefix_candidates::numeric_filtering_groups_correctly ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefix_matches_normalized_single_part ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefix_matches_normalized_three_parts ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefix_matches_normalized_starts_with ... ok
[INFO] [stdout] test utils::test_prefix_candidates::only_two_files_high_threshold ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefers_longer_prefix_over_short_with_more_matches ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prefix_matches_normalized_two_parts ... ok
[INFO] [stdout] test utils::test_prefix_candidates::no_matches_below_threshold ... ok
[INFO] [stdout] test utils::test_prefix_candidates::respects_min_group_size ... ok
[INFO] [stdout] test utils::test_prefix_candidates::simple_prefix_multiple_files ... ok
[INFO] [stdout] test utils::test_prefix_candidates::prioritizes_longer_prefix ... ok
[INFO] [stdout] test utils::test_prefix_candidates::returns_all_viable_options_for_alternatives ... ok
[INFO] [stdout] test utils::test_prefix_candidates::single_file_no_match ... ok
[INFO] [stdout] test utils::test_prefix_candidates::three_part_dot_separated_match_single_word ... ok
[INFO] [stdout] test utils::test_prefix_candidates::tv_show_generic_scenario ... ok
[INFO] [stdout] test utils::test_prefix_candidates::tv_show_season_episodes ... ok
[INFO] [stdout] test utils::test_prefix_candidates::short_names_with_extensions ... ok
[INFO] [stdout] test utils::test_prefix_candidates::single_word_fallback ... ok
[INFO] [stdout] test utils::test_prefix_candidates::three_part_prefix_with_mixed_fourth_parts ... ok
[INFO] [stdout] test utils::test_prefix_candidates::with_filtered_numeric_parts ... ok
[INFO] [stdout] test utils::test_word_boundary::digit_after_digit_is_not_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::beyond_string_length_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::camel_case_multi_word ... ok
[INFO] [stdout] test utils::test_word_boundary::exact_match_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::letter_after_digit_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::lowercase_after_prefix_is_not_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::mid_codepoint_position_returns_false ... ok
[INFO] [stdout] test utils::test_word_boundary::lowercase_continuation_rejected ... ok
[INFO] [stdout] test utils::test_word_boundary::real_world_photolab_pro ... ok
[INFO] [stdout] test utils::test_word_boundary::real_world_photolabs ... ok
[INFO] [stdout] test utils::test_word_boundary::scandic_chars_preserve_boundary_logic_in_prefix ... ok
[INFO] [stdout] test utils::test_word_boundary::digit_after_scandic_letter_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::digit_after_letter_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::scandic_lowercase_after_prefix_is_not_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::scandic_lowercase_continuation_not_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::scandic_uppercase_after_prefix_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::uppercase_after_prefix_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::scandic_uppercase_after_scandic_prefix_is_boundary ... ok
[INFO] [stdout] test utils::test_word_boundary::uppercase_continuation_accepted ... ok
[INFO] [stdout] test utils::test_prefix_candidates::long_name_decade_in_title ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 592 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.33s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/divider.rs (/opt/rustwide/target/debug/deps/div-f0e874e3c80fbd7c)
[INFO] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test div_tests::test_aligned_divider_basic ... ok
[INFO] [stderr]      Running unittests src/bin/dots/main.rs (/opt/rustwide/target/debug/deps/dots-72a8700bbb3e0768)
[INFO] [stdout] test div_tests::test_centered_divider_empty ... ok
[INFO] [stdout] test div_tests::test_aligned_divider_no_text ... ok
[INFO] [stdout] test div_tests::test_centered_divider_long_text ... ok
[INFO] [stdout] test div_tests::test_centered_divider_basic ... ok
[INFO] [stdout] test div_tests::test_aligned_divider_with_padding ... ok
[INFO] [stdout] test div_tests::test_centered_divider_no_text ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/dupe_find/main.rs (/opt/rustwide/target/debug/deps/dupefind-61a777fc91302865)
[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] [stdout] 
[INFO] [stdout] running 83 tests
[INFO] [stdout] test cli_args_tests::parses_long_form_pattern ... ok
[INFO] [stdout] test cli_args_tests::parses_complex_regex_pattern ... ok
[INFO] [stdout] test cli_args_tests::empty_by_default ... ok
[INFO] [stdout] test cli_args_tests::parses_move_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_long_form_extension ... ok
[INFO] [stdout] test cli_args_tests::parses_debug_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_default_paths_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_multiple_extension_args ... ok
[INFO] [stdout] test cli_args_tests::parses_multiple_paths ... ok
[INFO] [stdout] test cli_args_tests::parses_paths_with_patterns_and_extensions ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test cli_args_tests::parses_combined_flags ... ok
[INFO] [stdout] test cli_args_tests::parses_multiple_pattern_args ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_dupefind_section ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_extensions ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_paths ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_ignore_matches ... ok
[INFO] [stdout] test config::dupe_config_tests::from_toml_str_parses_patterns ... ok
[INFO] [stdout] test config_from_args_tests::config_includes_cli_extensions_normalized ... ok
[INFO] [stdout] test config_from_args_tests::config_recurse_flag_enables_recurse ... ok
[INFO] [stdout] test config_from_args_tests::config_debug_flag_enables_debug ... ok
[INFO] [stdout] test config_from_args_tests::config_rejects_invalid_regex ... ok
[INFO] [stdout] test config_from_args_tests::config_print_enables_dryrun ... ok
[INFO] [stdout] test dupe_find::test_display_name::falls_back_to_key_for_empty_group ... ok
[INFO] [stdout] test config_from_args_tests::config_move_flag_enables_move_files ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_alphabetic_only_identifier ... ok
[INFO] [stdout] test dupe_find::test_display_name::falls_back_to_key_when_no_pattern_matches ... ok
[INFO] [stdout] test config_from_args_tests::config_has_extensions ... ok
[INFO] [stdout] test dupe_find::test_display_name::falls_back_to_key_when_pattern_texts_differ ... ok
[INFO] [stdout] test config_from_args_tests::config_includes_cli_regex_patterns ... ok
[INFO] [stdout] test config_from_args_tests::config_verbose_flag_enables_verbose ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_numeric_only_identifier ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_pattern_at_different_positions_in_filenames ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_pattern_with_mixed_separators ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_episode_pattern_with_letters_and_numbers ... ok
[INFO] [stdout] test dupe_find::test_display_name::uses_pattern_text_with_different_casing ... ok
[INFO] [stdout] test dupe_find::test_display_name::uses_common_pattern_text_when_all_files_match ... ok
[INFO] [stdout] test dupe_find::test_display_name::uses_pattern_text_for_single_file_with_match ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::comparison_is_case_insensitive ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::filters_by_numeric_pattern_display_name ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::filters_group_by_key_match ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::filters_multiple_ignored_patterns ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::does_not_filter_partial_matches ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::keeps_all_groups_when_no_ignores_configured ... ok
[INFO] [stdout] test dupe_find::test_video_info_resolution_string::returns_none_when_resolution_missing ... ok
[INFO] [stdout] test dupe_find::test_video_info_resolution_string::formats_resolution ... ok
[INFO] [stdout] test dupe_find::test_filter_ignored_groups::filters_group_by_pattern_match_display_name ... ok
[INFO] [stdout] test dupe_find::test_display_name::falls_back_to_key_when_only_some_files_match ... ok
[INFO] [stdout] test dupe_find::test_display_name::matches_short_alphanumeric_code ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_empty_input ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_by_normalized_name ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_multiple_patterns ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_by_pattern ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_by_exact_filename ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_first_pattern_takes_priority ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_merges_groups ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_no_duplicates ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_same_identifier_different_case_in_name ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_at_different_positions ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_multiple_roots ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_nested_subdirs ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_same_root ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_format_filename_with_highlight_no_match ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_single_file ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_get_unique_path_no_conflict ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_get_unique_path_no_extension ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_case_insensitive ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_cleans_multiple_dots ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_cleans_multiple_spaces ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_fallback_to_original ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_removes_both ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_preserves_content ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_same_base ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_removes_codec ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_removes_resolution ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_with_special_chars_in_path ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_with_resolution_variants ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_many_patterns_many_files ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_varied_naming_styles ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_normalize_stem_trims_separators ... ok
[INFO] [stdout] test dupe_find::tests_dupe_find::test_find_duplicates_pattern_overlapping_with_resolution ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 83 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.09s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/flip_date/main.rs (/opt/rustwide/target/debug/deps/flipdate-c1b3ca6d5ebde510)
[INFO] [stdout] 
[INFO] [stdout] running 25 tests
[INFO] [stdout] test config::date_config_tests::default_values_are_correct ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_parses_file_extensions ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_parses_overwrite_and_swap ... ok
[INFO] [stdout] test flip_date::tests::test_default_file_extensions ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_parses_flip_date_section ... ok
[INFO] [stdout] test config::date_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::config_from_args_tests::from_args_uses_default_extensions ... ok
[INFO] [stdout] test config::config_from_args_tests::from_args_uses_cli_extensions ... ok
[INFO] [stdout] test config::config_from_args_tests::from_args_cli_overrides_defaults ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_empty_directory ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_no_matching_extensions ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_filters_by_extension ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_non_recursive ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_recursive ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_returns_sorted ... ok
[INFO] [stdout] test flip_date::tests::test_files_to_rename_single_file ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_non_recursive ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_recursive ... ok
[INFO] [stdout] test flip_date::tests::test_rename_item_creation ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_with_date ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_sorted_case_insensitive ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_already_correct_format ... ok
[INFO] [stdout] test flip_date::tests::test_directories_to_rename_no_dates ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.05s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/qtorrent/main.rs (/opt/rustwide/target/debug/deps/qtorrent-4f60f2338c7a605f)
[INFO] [stdout] 
[INFO] [stdout] running 244 tests
[INFO] [stdout] test add::normalize_rename_options::both_without_extension_different_names ... ok
[INFO] [stdout] test add::normalize_rename_options::directory_names_without_extension ... ok
[INFO] [stdout] test add::normalize_rename_options::both_date_and_extension_added ... ok
[INFO] [stdout] test add::normalize_rename_options::date_added_to_internal_when_missing ... ok
[INFO] [stdout] test add::normalize_rename_options::different_extensions_remain_different ... ok
[INFO] [stdout] test add::normalize_rename_options::different_dates_remain_different ... ok
[INFO] [stdout] test add::normalize_rename_options::both_same_returns_equal ... ok
[INFO] [stdout] test add::normalize_rename_options::extension_added_to_suggested_when_missing ... ok
[INFO] [stdout] test add::test_check_existing_torrent::matches_case_insensitively ... ok
[INFO] [stdout] test add::test_check_existing_torrent::returns_name_when_hash_matches ... ok
[INFO] [stdout] test add::normalize_rename_options::non_extension_dots_not_treated_as_extension ... ok
[INFO] [stdout] test add::test_check_existing_torrent::returns_none_when_map_is_empty ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::all_excluded_indices_have_matching_priority ... ok
[INFO] [stdout] test add::normalize_rename_options::date_added_to_suggested_when_missing ... ok
[INFO] [stdout] test add::normalize_rename_options::extension_added_to_internal_when_missing ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::empty_api_files_means_no_indices_exist ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::empty_excluded_indices_always_have_priority ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::empty_excluded_indices_always_exist ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::priority_check_fails_when_index_does_not_exist ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::priority_check_fails_when_one_index_has_wrong_priority ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::priority_check_with_single_file ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::single_excluded_index_present ... ok
[INFO] [stdout] test add::normalize_rename_options::no_internal_returns_suggested_only ... ok
[INFO] [stdout] test add::test_check_existing_torrent::finds_among_multiple_torrents ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::returns_false_when_any_excluded_index_missing ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::single_excluded_index_missing ... ok
[INFO] [stdout] test cli_args_tests::info_defaults_to_name_sort_no_list ... ok
[INFO] [stdout] test cli_args_tests::global_args_before_subcommand ... ok
[INFO] [stdout] test cli_args_tests::parses_comma_delimited_skip_directories ... ok
[INFO] [stdout] test cli_args_tests::parses_comma_delimited_skip_extensions ... ok
[INFO] [stdout] test add::normalize_rename_options::extension_added_when_names_differ ... ok
[INFO] [stdout] test add::test_check_existing_torrent::returns_none_when_hash_not_found ... ok
[INFO] [stdout] test cli_args_tests::parses_combined_boolean_flags ... ok
[INFO] [stdout] test cli_args_tests::empty_by_default ... ok
[INFO] [stdout] test cli_args_tests::parses_include_images_short_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_info_list_mode ... ok
[INFO] [stdout] test cli_args_tests::parses_completion_subcommand ... ok
[INFO] [stdout] test cli_args_tests::parses_complex_combination ... ok
[INFO] [stdout] test cli_args_tests::parses_info_list_with_sort_and_verbose ... ok
[INFO] [stdout] test cli_args_tests::parses_completion_with_install ... ok
[INFO] [stdout] test cli_args_tests::parses_include_images ... ok
[INFO] [stdout] test cli_args_tests::parses_host_and_port ... ok
[INFO] [stdout] test add::test_excluded_file_priorities::all_excluded_indices_present_with_non_contiguous_ids ... ok
[INFO] [stdout] test cli_args_tests::parses_info_sort_by_path ... ok
[INFO] [stdout] test cli_args_tests::parses_info_sort_by_size ... ok
[INFO] [stdout] test cli_args_tests::parses_long_form_flags ... ok
[INFO] [stdout] test cli_args_tests::parses_long_form_min_size ... ok
[INFO] [stdout] test cli_args_tests::parses_info_with_global_connection_args ... ok
[INFO] [stdout] test cli_args_tests::parses_info_with_global_verbose ... ok
[INFO] [stdout] test cli_args_tests::parses_long_form_skip_dir ... ok
[INFO] [stdout] test cli_args_tests::parses_min_file_size ... ok
[INFO] [stdout] test cli_args_tests::parses_offline_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_min_image_size_short_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_offline_short_flag ... ok
[INFO] [stdout] test cli_args_tests::parses_long_form_skip_ext ... ok
[INFO] [stdout] test cli_args_tests::parses_save_path_and_category ... ok
[INFO] [stdout] test cli_args_tests::rejects_invalid_min_size ... ok
[INFO] [stdout] test cli_args_tests::parses_tags ... ok
[INFO] [stdout] test cli_args_tests::rejects_invalid_port ... ok
[INFO] [stdout] test cli_args_tests::parses_credentials ... ok
[INFO] [stdout] test config::qtorrent_config_tests::excludes_undersized_images_with_lowercase_extensions ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test cli_args_tests::parses_info_subcommand ... ok
[INFO] [stdout] test config::qtorrent_config_tests::excludes_undersized_images_with_uppercase_extensions ... ok
[INFO] [stdout] test config::qtorrent_config_tests::excludes_undersized_images_with_titlecase_extensions ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_defaults_tag_overwrite_prefixes_to_empty ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_empty_tag_overwrite_prefixes ... ok
[INFO] [stdout] test cli_args_tests::parses_min_image_size ... ok
[INFO] [stdout] test cli_args_tests::parses_multiple_paths ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_integer_file_filtering_options ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_file_filtering_options ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_offline ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_recurse_and_skip_existing ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_qtorrent_section ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_name_processing_options ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_save_path_and_category ... ok
[INFO] [stdout] test config::test_resolve_tags::handles_path_with_directories ... ok
[INFO] [stdout] test config::test_resolve_tags::longer_prefix_matches_first ... ok
[INFO] [stdout] test config::test_resolve_tags::matches_case_insensitively ... ok
[INFO] [stdout] test config::qtorrent_config_tests::images_excluded_entirely_when_include_images_disabled ... ok
[INFO] [stdout] test config::test_resolve_tags::prefixes_sorted_by_length_descending_in_config ... ok
[INFO] [stdout] test config::qtorrent_config_tests::mixed_files_with_image_size_and_skip_extensions ... ok
[INFO] [stdout] test config::test_resolve_tags::returns_associated_tag_on_prefix_match ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_tag_overwrite_prefixes ... ok
[INFO] [stdout] test config::test_resolve_tags::returns_default_tags_when_no_prefix_matches ... ok
[INFO] [stdout] test config::test_resolve_tags::returns_none_when_no_tags_and_no_prefix_match ... ok
[INFO] [stdout] test config::qtorrent_config_tests::keeps_images_at_or_above_size_limit ... ok
[INFO] [stdout] test config::qtorrent_config_tests::image_size_limit_does_not_apply_to_non_image_files ... ok
[INFO] [stdout] test config::qtorrent_config_tests::skip_extensions_exclude_regardless_of_case ... ok
[INFO] [stdout] test config::test_resolve_tags::returns_none_when_no_tags_and_no_prefixes ... ok
[INFO] [stdout] test config::test_resolve_tags::shorter_prefix_matches_when_longer_does_not ... ok
[INFO] [stdout] test config::test_resolve_tags::uses_file_stem_without_torrent_extension ... ok
[INFO] [stdout] test config::test_resolve_tags::returns_default_tags_when_no_prefixes_configured ... ok
[INFO] [stdout] test config::qtorrent_config_tests::from_toml_str_parses_tags_and_tag_overwrite_prefixes_together ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_boolean_flags_enable_options ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_directories_enable_file_filters ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_min_size_enables_file_filters ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_extensions_enable_file_filters ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_min_size_converts_to_bytes ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_overrides_host_and_port ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_includes_images ... ok
[INFO] [stdout] test config_from_args_tests::config_cli_image_min_size_converts_to_bytes ... ok
[INFO] [stdout] test config_from_args_tests::config_has_credentials_when_cli_sets_them ... ok
[INFO] [stdout] test config_from_args_tests::config_includes_cli_skip_directories_normalized ... ok
[INFO] [stdout] test config_from_args_tests::config_dryrun_without_offline ... ok
[INFO] [stdout] test config_from_args_tests::config_offline_implies_dryrun ... ok
[INFO] [stdout] test config_from_args_tests::config_has_host_and_port ... ok
[INFO] [stdout] test config_from_args_tests::config_offline_short_flag_implies_dryrun ... ok
[INFO] [stdout] test stats::tests::starts_with_correct_total ... ok
[INFO] [stdout] test stats::tests::starts_with_zero_counters ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::dict_with_items ... ok
[INFO] [stdout] test config_from_args_tests::config_zero_sizes_disable_size_filters ... ok
[INFO] [stdout] test config_from_args_tests::config_includes_cli_skip_extensions_normalized ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::error_on_empty ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::error_on_unknown_type ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::integer_positive ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::integer_zero ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::list_empty ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::list_nested ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::list_with_items ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::string_empty ... ok
[INFO] [stdout] test stats::tests::increments_counters ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::dict_nested ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::integer_negative ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::dict_empty ... ok
[INFO] [stdout] test torrent::test_file_filter::applies_image_size_limit_when_enabled ... ok
[INFO] [stdout] test torrent::test_extract_info_dict_bytes::fails_on_missing_info_key ... ok
[INFO] [stdout] test torrent::test_file_filter::excludes_by_extension ... ok
[INFO] [stdout] test torrent::test_file_filter::excludes_images_when_disabled ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::string_longer ... ok
[INFO] [stdout] test torrent::test_file_filter::excludes_by_size ... ok
[INFO] [stdout] test torrent::test_file_filter::excludes_by_directory_name ... ok
[INFO] [stdout] test torrent::test_extract_info_dict_bytes::extracts_info_dict_from_valid_torrent ... ok
[INFO] [stdout] test torrent::test_file_filter::includes_images_when_enabled ... ok
[INFO] [stdout] test torrent::test_bencode_value_length::string_simple ... ok
[INFO] [stdout] test torrent::test_file_filter::is_empty_returns_false_with_extension_filter ... ok
[INFO] [stdout] test torrent::test_file_filter::is_empty_returns_false_with_size_filter ... ok
[INFO] [stdout] test torrent::test_file_filter::is_empty_returns_true_for_no_filters ... ok
[INFO] [stdout] test torrent::test_filtered_files::calculates_included_size ... ok
[INFO] [stdout] test torrent::test_filtered_files::calculates_excluded_size ... ok
[INFO] [stdout] test torrent::test_find_subsequence::empty_haystack ... ok
[INFO] [stdout] test torrent::test_find_subsequence::finds_at_end ... ok
[INFO] [stdout] test torrent::test_find_subsequence::finds_at_start ... ok
[INFO] [stdout] test torrent::test_find_subsequence::finds_bencode_info_key ... ok
[INFO] [stdout] test torrent::test_find_subsequence::not_found ... ok
[INFO] [stdout] test torrent::test_file_filter::includes_when_no_filter_matches ... ok
[INFO] [stdout] test torrent::test_file_filter::is_empty_returns_false_when_images_are_disabled ... ok
[INFO] [stdout] test torrent::test_parse_torrent::calculates_included_size ... ok
[INFO] [stdout] test torrent::test_parse_torrent::calculates_info_hash ... ok
[INFO] [stdout] test torrent::test_find_subsequence::finds_in_middle ... ok
[INFO] [stdout] test torrent::test_parse_torrent::fails_on_invalid_torrent_data ... ok
[INFO] [stdout] test torrent::test_filtered_files::handles_empty_lists ... ok
[INFO] [stdout] test torrent::test_parse_torrent::fails_on_nonexistent_file ... ok
[INFO] [stdout] test torrent::test_parse_torrent::filter_excludes_by_extension ... ok
[INFO] [stdout] test torrent::test_parse_torrent::parses_valid_torrent_file ... ok
[INFO] [stdout] test torrent::test_parse_torrent::no_excluded_indices_without_filter ... ok
[INFO] [stdout] test torrent::test_parse_torrent::rename_to_is_none_initially ... ok
[INFO] [stdout] test torrent::test_parse_torrent::stores_raw_bytes ... ok
[INFO] [stdout] test torrent::test_parse_torrent::sets_original_name ... ok
[INFO] [stdout] test torrent::test_parse_torrent::single_file_torrent_not_multi_file ... ok
[INFO] [stdout] test torrent::test_parse_torrent::single_included_file_is_none_for_single_file_torrent ... ok
[INFO] [stdout] test torrent::test_parse_torrent::filter_by_size_on_single_file ... ok
[INFO] [stdout] test torrent::test_parse_torrent::sets_path_correctly ... ok
[INFO] [stdout] test torrent::test_to_hex::empty_bytes ... ok
[INFO] [stdout] test torrent::test_parse_torrent_all_files_excluded::all_files_excluded_by_size ... ok
[INFO] [stdout] test torrent::test_parse_torrent_all_files_excluded::all_files_excluded_by_extension ... ok
[INFO] [stdout] test torrent::test_parse_torrent_all_files_excluded::not_all_excluded_when_some_files_remain ... ok
[INFO] [stdout] test torrent::test_parse_torrent_all_files_excluded::not_all_excluded_without_filters ... ok
[INFO] [stdout] test torrent::test_to_hex::multiple_bytes ... ok
[INFO] [stdout] test torrent::test_to_hex::single_byte_max ... ok
[INFO] [stdout] test torrent::test_to_hex::single_byte_zero ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::calculates_info_hash_hex ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::calculates_info_hash ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_announce_url ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::calculates_total_size ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_comment ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_creation_date ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_announce_list ... ok
[INFO] [stdout] test torrent::test_to_hex::sha1_hash_length ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_piece_length ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_created_by ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_file_length ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::filter_files_with_no_filters ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::gets_files_list_for_single_file ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::extracts_private_flag ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::filter_files_excludes_by_extension ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::filter_files_excludes_by_size ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::gets_torrent_name ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::parses_dummy_torrent_file ... ok
[INFO] [stdout] test torrent::test_torrent_parsing_from_file::is_single_file_torrent ... ok
[INFO] [stdout] test utils::test_all_files_excluded::returns_false_when_some_files_remain ... ok
[INFO] [stdout] test utils::test_all_files_excluded::returns_false_when_no_files_excluded ... ok
[INFO] [stdout] test utils::test_display_name::returns_internal_name_when_no_rename ... ok
[INFO] [stdout] test utils::test_display_name::returns_rename_to_when_set ... ok
[INFO] [stdout] test torrent::test_torrent_struct_methods::from_buffer_fails_on_invalid_data ... ok
[INFO] [stdout] test torrent::test_torrent_struct_methods::info_hash_from_bytes_fails_without_info_dict ... ok
[INFO] [stdout] test utils::test_all_files_excluded::returns_true_when_all_files_excluded ... ok
[INFO] [stdout] test utils::test_display_name::returns_unknown_when_no_name ... ok
[INFO] [stdout] test utils::test_all_files_excluded::returns_false_for_single_file_torrent ... ok
[INFO] [stdout] test utils::test_extract_file_extension::extracts_known_archive_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::extracts_known_audio_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::extracts_known_document_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::extracts_known_image_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::handles_case_insensitive_extensions ... ok
[INFO] [stdout] test utils::test_extract_file_extension::handles_multiple_dots ... ok
[INFO] [stdout] test utils::test_extract_file_extension::returns_none_for_no_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::returns_none_for_numeric_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::returns_none_for_unknown_extension ... ok
[INFO] [stdout] test utils::test_extract_file_extension::extracts_known_video_extension ... ok
[INFO] [stdout] test utils::test_insert_date_before_extension::appends_date_when_no_extension ... ok
[INFO] [stdout] test utils::test_insert_date_before_extension::handles_multiple_dots_in_name ... ok
[INFO] [stdout] test utils::test_restore_file_extension::appends_extension_when_missing ... ok
[INFO] [stdout] test utils::test_restore_file_extension::appends_mkv_extension ... ok
[INFO] [stdout] test utils::test_restore_file_extension::does_not_duplicate_same_extension ... ok
[INFO] [stdout] test utils::test_restore_file_extension::handles_dotted_custom_name_without_known_extension ... ok
[INFO] [stdout] test utils::test_restore_file_extension::handles_numeric_extension_in_reference ... ok
[INFO] [stdout] test utils::test_restore_file_extension::preserves_different_known_extension ... ok
[INFO] [stdout] test utils::test_restore_file_extension::unknown_extension_in_reference_ignored ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::add_file_increments_count_and_size ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::add_multiple_files ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::default_values ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::files_word_plural_multiple ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::files_word_plural_zero ... ok
[INFO] [stdout] test utils::test_skipped_directory_summary::files_word_singular ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_multi_file::falls_back_to_internal_name_when_no_filename ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_multi_file::ignores_filename_matching_pattern ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_multi_file::prefers_filename_over_internal_name ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_multi_file::returns_unknown_when_no_names_available ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::adds_extension_from_internal_name ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::case_insensitive_extension_check ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::does_not_duplicate_extension ... ok
[INFO] [stdout] test utils::test_insert_date_before_extension::inserts_date_before_extension ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::falls_back_to_internal_name ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::falls_back_to_single_included_file ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::returns_unknown_when_no_names_available ... ok
[INFO] [stdout] test utils::test_suggested_name_raw_single_file::uses_single_included_file_extension_for_filtered_multi ... ok
[INFO] [stdout] test utils::test_restore_file_extension::no_extension_in_reference ... ok
[INFO] [stdout] test utils::test_format_single_file_name::preserves_extension_case ... ok
[INFO] [stdout] test utils::test_format_single_file_name::formats_name_without_extension ... ok
[INFO] [stdout] test utils::test_format_single_file_name::handles_multiple_spaces ... ok
[INFO] [stdout] test utils::test_format_single_file_name::handles_underscores ... ok
[INFO] [stdout] test utils::test_format_single_file_name::formats_name_with_extension ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 244 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.18s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/rx_rename.rs (/opt/rustwide/target/debug/deps/rx_rename-63d91c572429f776)
[INFO] [stderr]      Running unittests src/bin/thumbnail/main.rs (/opt/rustwide/target/debug/deps/thumbs-70203bf0c3928866)
[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] [stdout] 
[INFO] [stdout] running 7 tests
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_parses_display_settings ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_parses_thumbnail_section ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_parses_padding_settings ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_parses_grid_settings ... ok
[INFO] [stdout] test config::thumbnail_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stderr]      Running unittests src/bin/video_convert/main.rs (/opt/rustwide/target/debug/deps/vconvert-d54f78f39d3099d3)
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 7 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 162 tests
[INFO] [stdout] test cli::database_mode_tests::database_mode_equality ... ok
[INFO] [stdout] test cli::database_mode_tests::database_mode_debug ... ok
[INFO] [stdout] test cli::sort_order_tests::display_formats_correctly ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_name ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_resolution ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_size ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_returns_error_for_unknown ... ok
[INFO] [stdout] test cli::sort_order_tests::sql_order_clause_returns_valid_sql ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_duration ... ok
[INFO] [stdout] test config::config_lowercase_vec_tests::handles_empty_slice ... ok
[INFO] [stdout] test config::config_lowercase_vec_tests::handles_mixed_case ... ok
[INFO] [stdout] test config::config_lowercase_vec_tests::handles_string_slice ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_impact ... ok
[INFO] [stdout] test config::video_convert_config_tests::default_values_are_correct ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_count_and_display_limit ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::config_lowercase_vec_tests::converts_to_lowercase ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_duration_settings ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_sort_order ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_video_convert_section ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_bitrate_settings ... ok
[INFO] [stdout] test cli::sort_order_tests::from_str_parses_bitrate ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_include_exclude_lists ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_extensions ... ok
[INFO] [stdout] test convert::test_classify_already_converted::av1_mp4_with_av1_suffix_is_already_converted ... ok
[INFO] [stdout] test convert::test_classify_bitrate_filtering::below_min_bitrate_is_skipped ... ok
[INFO] [stdout] test convert::test_classify_bitrate_filtering::above_max_bitrate_is_skipped ... ok
[INFO] [stdout] test convert::test_classify_already_converted::hevc_mp4_with_x265_suffix_is_already_converted ... ok
[INFO] [stdout] test config::video_convert_config_tests::from_toml_str_parses_sort_order_size ... ok
[INFO] [stdout] test cli::sort_order_tests::default_is_bitrate ... ok
[INFO] [stdout] test convert::test_classify_already_converted::hevc_mp4_with_x265_suffix_uppercase_is_already_converted ... ok
[INFO] [stdout] test convert::test_classify_combined_filters::first_failing_filter_wins_bitrate_before_duration ... ok
[INFO] [stdout] test convert::test_classify_duration_filtering::below_min_duration_is_skipped ... ok
[INFO] [stdout] test convert::test_classify_bitrate_filtering::bitrate_at_max_threshold_is_not_skipped ... ok
[INFO] [stdout] test convert::test_classify_combined_filters::passes_all_filters_gets_converted ... ok
[INFO] [stdout] test convert::test_classify_duration_filtering::duration_filter_does_not_apply_to_remux ... ok
[INFO] [stdout] test convert::test_classify_needs_conversion::h264_mkv_needs_conversion ... ok
[INFO] [stdout] test convert::test_classify_needs_conversion::h264_mp4_needs_conversion ... ok
[INFO] [stdout] test convert::test_classify_bitrate_filtering::bitrate_at_min_threshold_is_not_skipped ... ok
[INFO] [stdout] test convert::test_classify_bitrate_filtering::bitrate_filter_does_not_apply_to_remux ... ok
[INFO] [stdout] test convert::test_classify_duration_filtering::above_max_duration_is_skipped ... ok
[INFO] [stdout] test convert::test_classify_needs_conversion::mpeg4_avi_needs_conversion ... ok
[INFO] [stdout] test convert::test_classify_needs_remux::hevc_mkv_needs_remux ... ok
[INFO] [stdout] test convert::test_classify_needs_remux::av1_mkv_needs_remux ... ok
[INFO] [stdout] test convert::test_classify_needs_rename::av1_mp4_without_suffix_needs_rename ... ok
[INFO] [stdout] test convert::test_classify_needs_remux::hevc_avi_needs_remux ... ok
[INFO] [stdout] test convert::test_classify_needs_rename::hevc_mp4_without_suffix_needs_rename ... ok
[INFO] [stdout] test convert::test_classify_resolution_filtering::below_min_resolution_is_skipped ... ok
[INFO] [stdout] test convert::test_classify_resolution_filtering::at_min_resolution_is_not_skipped ... ok
[INFO] [stdout] test convert::test_classify_output_exists::remux_skipped_when_output_exists_no_overwrite ... ok
[INFO] [stdout] test convert::test_classify_resolution_filtering::vertical_video_uses_smaller_dimension ... ok
[INFO] [stdout] test convert::test_classify_output_exists::converts_when_output_exists_with_overwrite ... ok
[INFO] [stdout] test database::test_drive_key::windows_drive_letter_lowercase ... ok
[INFO] [stdout] test convert::test_classify_output_exists::rename_proceeds_when_output_exists_with_overwrite ... ok
[INFO] [stdout] test database::test_drive_key::windows_unc_path_server_only ... ok
[INFO] [stdout] test database::test_group_paths_by_drive::groups_empty_input ... ok
[INFO] [stdout] test database::test_group_paths_by_drive::groups_mixed_unc_and_drive_paths ... ok
[INFO] [stdout] test database::test_group_paths_by_drive::groups_multiple_drives ... ok
[INFO] [stdout] test database::test_group_paths_by_drive::groups_single_drive ... ok
[INFO] [stdout] test database::test_group_paths_by_drive::groups_unix_paths_into_single_group ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_pending_files_returns_zero_for_empty_input ... ok
[INFO] [stdout] test database::test_drive_key::windows_unc_path ... ok
[INFO] [stdout] test database::test_drive_key::relative_path ... ok
[INFO] [stdout] test convert::test_classify_resolution_filtering::resolution_filter_does_not_apply_to_remux ... ok
[INFO] [stdout] test database::test_drive_key::unix_path ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_scanned_files_returns_zero_for_empty_input ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_pending_files_writes_all_entries ... ok
[INFO] [stdout] test convert::test_classify_output_exists::skips_when_output_exists_no_overwrite ... ok
[INFO] [stdout] test database::test_drive_key::windows_drive_letter ... ok
[INFO] [stdout] test convert::test_classify_output_exists::rename_skipped_when_output_exists_no_overwrite ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_scanned_files_updates_existing_entries ... ok
[INFO] [stdout] test database::tests::test_filter_by_action ... ok
[INFO] [stdout] test database::tests::test_duration_filter_does_not_exclude_remux_files ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_scanned_files_writes_all_entries ... ok
[INFO] [stdout] test database::tests::test_clear_database ... ok
[INFO] [stdout] test database::tests::test_bitrate_filter_does_not_exclude_remux_files ... ok
[INFO] [stdout] test database::tests::test_filter_with_limit ... ok
[INFO] [stdout] test database::tests::test_filter_by_duration ... ok
[INFO] [stdout] test database::tests::test_find_scanned_file_returns_none_for_unknown_path ... ok
[INFO] [stdout] test database::tests::test_batch_upsert_pending_files_updates_existing_entries ... ok
[INFO] [stdout] test database::tests::test_get_all_scanned_files_returns_empty_map_when_no_entries ... ok
[INFO] [stdout] test database::tests::test_get_all_scanned_files_returns_all_entries ... ok
[INFO] [stdout] test database::tests::test_combined_filters ... ok
[INFO] [stdout] test database::tests::test_get_stats ... ok
[INFO] [stdout] test database::tests::test_pending_action_display ... ok
[INFO] [stdout] test database::tests::test_pending_action_from_str ... ok
[INFO] [stdout] test database::tests::test_get_extension_stats ... ok
[INFO] [stdout] test database::tests::test_find_scanned_file_returns_none_when_size_differs ... ok
[INFO] [stdout] test database::tests::test_open_in_memory ... ok
[INFO] [stdout] test database::tests::test_insert_and_get_pending_file ... ok
[INFO] [stdout] test database::tests::test_remove_missing_scanned_files_returns_zero_when_empty ... ok
[INFO] [stdout] test database::tests::test_remove_missing_scanned_files_removes_nonexistent ... ok
[INFO] [stdout] test database::tests::test_scanned_file_count_after_inserts ... ok
[INFO] [stdout] test database::tests::test_remove_pending_file ... ok
[INFO] [stdout] test database::tests::test_scanned_file_count_empty ... ok
[INFO] [stdout] test database::tests::test_filter_by_extension ... ok
[INFO] [stdout] test database::tests::test_get_extensions ... ok
[INFO] [stdout] test database::tests::test_to_video_info ... ok
[INFO] [stdout] test database::tests::test_filter_by_bitrate ... ok
[INFO] [stdout] test database::tests::test_upsert_and_find_scanned_file ... ok
[INFO] [stdout] test stats::analysis_stats_tests::default_values_are_zero ... ok
[INFO] [stdout] test database::tests::test_remove_missing_scanned_files_keeps_existing ... ok
[INFO] [stdout] test database::tests::test_sort_by_impact ... ok
[INFO] [stdout] test stats::analysis_stats_tests::total_skipped_sums_all_skip_reasons ... ok
[INFO] [stdout] test stats::conversion_stats_tests::change_percentage_calculates_increase ... ok
[INFO] [stdout] test stats::conversion_stats_tests::change_percentage_calculates_reduction ... ok
[INFO] [stdout] test stats::conversion_stats_tests::change_percentage_zero_when_original_zero ... ok
[INFO] [stdout] test database::tests::test_sort_by_name ... ok
[INFO] [stdout] test database::tests::test_sort_by_bitrate ... ok
[INFO] [stdout] test database::tests::test_upsert_scanned_file_updates_existing_entry ... ok
[INFO] [stdout] test stats::conversion_stats_tests::display_formats_correctly ... ok
[INFO] [stdout] test stats::conversion_stats_tests::change_percentage_zero_when_converted_zero ... ok
[INFO] [stdout] test stats::conversion_stats_tests::size_difference_positive_when_larger ... ok
[INFO] [stdout] test stats::run_stats_tests::add_assign_conversion_stats ... ok
[INFO] [stdout] test stats::run_stats_tests::add_assign_run_stats ... ok
[INFO] [stdout] test stats::run_stats_tests::add_assign_run_stats_ref ... ok
[INFO] [stderr]      Running unittests src/bin/visa_parse/main.rs (/opt/rustwide/target/debug/deps/visaparse-a2ca93918d2e2d5a)
[INFO] [stdout] test stats::conversion_stats_tests::new_creates_stats_with_values ... ok
[INFO] [stdout] test stats::run_stats_tests::add_result_increments_failed ... ok
[INFO] [stdout] test stats::conversion_stats_tests::size_difference_negative_when_smaller ... ok
[INFO] [stdout] test stats::run_stats_tests::add_result_increments_remuxed ... ok
[INFO] [stdout] test stats::analysis_stats_tests::total_skipped_excludes_analysis_failed ... ok
[INFO] [stdout] test database::tests::test_upsert_updates_existing ... ok
[INFO] [stdout] test stats::run_stats_tests::default_values_are_zero ... ok
[INFO] [stdout] test stats::run_stats_tests::space_saved_negative_when_larger ... ok
[INFO] [stdout] test stats::run_stats_tests::space_saved_positive_when_smaller ... ok
[INFO] [stdout] test stats::run_stats_tests::add_result_increments_converted ... ok
[INFO] [stdout] test types::process_result_tests::converted_creates_stats ... ok
[INFO] [stdout] test types::skip_reason_tests::display_bitrate_above_threshold ... ok
[INFO] [stdout] test types::skip_reason_tests::display_duration_above_threshold ... ok
[INFO] [stdout] test types::skip_reason_tests::display_file_missing ... ok
[INFO] [stdout] test types::skip_reason_tests::display_output_exists ... ok
[INFO] [stdout] test types::skip_reason_tests::display_resolution_below_limit ... ok
[INFO] [stdout] test types::analysis_filter_tests::filter_debug_format ... ok
[INFO] [stdout] test types::video_file_tests::new_extracts_name_and_extension ... ok
[INFO] [stdout] test types::skip_reason_tests::display_already_converted ... ok
[INFO] [stdout] test types::skip_reason_tests::display_analysis_failed ... ok
[INFO] [stdout] test types::skip_reason_tests::display_bitrate_below_threshold ... ok
[INFO] [stdout] test types::skip_reason_tests::display_duration_below_threshold ... ok
[INFO] [stdout] test types::video_file_tests::display_shows_path ... ok
[INFO] [stdout] test types::video_file_tests::new_handles_no_extension ... ok
[INFO] [stdout] test types::video_file_tests::output_path_preserves_existing_x265 ... ok
[INFO] [stdout] test types::video_file_tests::output_path_adds_av1_suffix ... ok
[INFO] [stdout] test types::video_info_tests::display_formats_correctly ... ok
[INFO] [stdout] test types::video_file_tests::output_path_adds_x265_suffix ... ok
[INFO] [stdout] test types::video_file_tests::output_path_preserves_existing_av1 ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_captures_warning ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_fails_without_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_parses_fractional_framerate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_rejects_timebase_framerate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_skips_bogus_takes_valid_framerate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_fails_without_duration ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_fails_without_codec ... ok
[INFO] [stdout] test types::video_info_tests::quality_level_1080p_high_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_parses_correctly ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_rejects_zero_framerate ... ok
[INFO] [stdout] test types::video_info_tests::quality_level_1080p_low_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::quality_level_4k_high_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::quality_level_4k_low_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::quality_level_4k_medium_bitrate ... ok
[INFO] [stdout] test types::video_info_tests::from_ffprobe_output_takes_first_valid_framerate ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 162 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.06s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 173 tests
[INFO] [stdout] test config::test_config_cli_parsing::defaults_when_no_args ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_all_options ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_output_flag_short ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_number_flag_long ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_number_flag_short ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_output_flag_long ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_combined_flags ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_path_positional ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_verbose_flag_short ... ok
[INFO] [stdout] test config::test_config_cli_parsing::rejects_invalid_number ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_print_flag_long ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::all_options_combined ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_verbose_flag_long ... ok
[INFO] [stdout] test config::test_config_cli_parsing::rejects_negative_number ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::both_cli_and_config_false_results_in_false ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::both_cli_and_config_verbose_true_results_in_verbose ... ok
[INFO] [stdout] test config::test_config_cli_parsing::parses_print_flag_short ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::cli_print_true_overrides_config_print_false ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::cli_verbose_true_overrides_config_verbose_false ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::config_from_default_user_config ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::config_number_used_when_cli_not_provided ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::config_verbose_true_enables_verbose_when_cli_false ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::config_print_true_enables_print_when_cli_false ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::input_path_is_resolved ... ok
[INFO] [stdout] test config::test_visa_parse_config::default_config_has_expected_values ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::default_number_used_when_neither_provided ... ok
[INFO] [stdout] test config::test_config_integration::cli_zero_number_is_valid_override ... ok
[INFO] [stdout] test config::test_config_integration::cli_args_with_toml_config_merges_correctly ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::test_config_integration::full_toml_config_no_cli_overrides ... ok
[INFO] [stdout] test config::test_config_from_args_and_config::cli_number_overrides_config_number ... ok
[INFO] [stdout] test config::test_config_integration::empty_toml_uses_defaults ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_parses_visaparse_section ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_wrong_type_returns_error ... ok
[INFO] [stdout] test parse::test_calculate_totals::handles_single_item ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_parses_partial_config ... ok
[INFO] [stdout] test parse::test_calculate_totals::sorts_by_sum_descending ... ok
[INFO] [stdout] test parse::test_calculate_totals::groups_by_name_and_sums ... ok
[INFO] [stdout] test config::test_visa_parse_config::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test parse::test_calculate_totals::handles_empty_input ... ok
[INFO] [stdout] test parse::test_clean_whitespaces::preserves_single_spaces ... ok
[INFO] [stdout] test parse::test_clean_whitespaces::removes_multiple_spaces ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::replaces_carriage_returns ... ok
[INFO] [stdout] test parse::test_clean_whitespaces::removes_tabs_and_newlines ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::replaces_newlines ... ok
[INFO] [stdout] test parse::test_extract_items::handles_empty_lines ... ok
[INFO] [stdout] test parse::test_clean_whitespaces::handles_empty_string ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::replaces_tabs ... ok
[INFO] [stdout] test parse::test_extract_items_edge_cases::handles_double_digit_day_and_month ... ok
[INFO] [stdout] test parse::test_extract_items::extracts_items_from_raw_lines ... ok
[INFO] [stdout] test parse::test_extract_items::no_year_transition_when_all_same_year ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::handles_mixed_whitespace ... ok
[INFO] [stdout] test parse::test_clean_whitespaces::handles_mixed_whitespace ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::collapses_multiple_whitespaces ... ok
[INFO] [stdout] test parse::test_clean_whitespaces_comprehensive::preserves_single_spaces ... ok
[INFO] [stdout] test parse::test_extract_items::handles_year_transition_december_to_january ... ok
[INFO] [stdout] test parse::test_extract_items_edge_cases::returns_error_for_invalid_date_format ... ok
[INFO] [stdout] test parse::test_extract_items_edge_cases::handles_single_digit_day_and_month ... ok
[INFO] [stdout] test parse::test_filter_prefixes::filter_prefixes_contains_common_items ... ok
[INFO] [stdout] test parse::test_format_name::handles_itunes ... ok
[INFO] [stdout] test parse::test_extract_items_edge_cases::returns_error_for_invalid_sum ... ok
[INFO] [stdout] test parse::test_format_name::converts_to_uppercase ... ok
[INFO] [stdout] test parse::test_filter_prefixes::filter_prefixes_is_not_empty ... ok
[INFO] [stdout] test parse::test_format_name::replaces_html_ampersand ... ok
[INFO] [stdout] test parse::test_format_name::removes_www_prefix ... ok
[INFO] [stdout] test parse::test_format_name::replaces_known_patterns ... ok
[INFO] [stdout] test parse::test_format_name::removes_brackets ... ok
[INFO] [stdout] test parse::test_format_name::handles_mobilepay ... ok
[INFO] [stdout] test parse::test_format_name::removes_tc_prefix ... ok
[INFO] [stdout] test parse::test_format_name::removes_osto_prefix ... ok
[INFO] [stdout] test parse::test_format_name::handles_wolt ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::removes_osto_prefix_with_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::collapses_multiple_spaces ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::converts_to_uppercase ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::removes_parentheses ... ok
[INFO] [stdout] test parse::test_format_name::replaces_special_characters_with_spaces ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::removes_curly_braces ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_finnair ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_chatgpt_subscription ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_epassi ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::removes_square_brackets ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::removes_tc_star_prefix ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_k_citymarket ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_dotcomfi ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_wolt ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_html_ampersand ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_dri_pattern ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_known_pattern_35314369001 ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_itunes ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_contains_verkkokauppa ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_levistrauss ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_slash_with_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_known_pattern_4029357733 ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_chf_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_k_market ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_paypal_bandcamp ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_star_with_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_alepa ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_beamhill ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_hertz ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_underscore_with_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_mobpay ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_vfi_pattern ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_paypal_beatport ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_paypal_djcity ... ok
[INFO] [stdout] test parse::test_format_sum::test_large_number ... ok
[INFO] [stdout] test parse::test_format_sum::test_negative_number ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_paypal_dropbox ... ok
[INFO] [stdout] test parse::test_format_sum::test_normal_value ... ok
[INFO] [stdout] test parse::test_format_sum::test_number_with_many_decimal_places ... ok
[INFO] [stdout] test parse::test_format_sum::test_number_with_thousand_space ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_paypal_patreon ... ok
[INFO] [stdout] test parse::test_format_sum::test_invalid_format ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_stockmann ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::trims_whitespace ... ok
[INFO] [stdout] test parse::test_format_sum::test_number_without_decimal ... ok
[INFO] [stdout] test parse::test_format_sum::test_small_number ... ok
[INFO] [stdout] test parse::test_format_sum::test_value_with_whitespace ... ok
[INFO] [stdout] test parse::test_format_sum::test_zero_value ... ok
[INFO] [stdout] test parse::test_format_name_comprehensive::replaces_start_www ... ok
[INFO] [stdout] test parse::test_get_xml_file_list::handles_single_xml_file ... ok
[INFO] [stdout] test parse::test_get_xml_file_list::rejects_non_xml_file ... ok
[INFO] [stdout] test parse::test_get_xml_file_list::handles_directory ... ok
[INFO] [stdout] test parse::test_get_xml_files::finds_xml_files_in_fixtures_directory ... ok
[INFO] [stdout] test parse::test_get_xml_files::returns_empty_for_nonexistent_directory ... ok
[INFO] [stdout] test parse::test_get_xml_files::returns_sorted_files ... ok
[INFO] [stdout] test parse::test_item_parse::test_split_item_text ... ok
[INFO] [stdout] test parse::test_read_xml_file::handles_nonexistent_file ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_brackets_matches_square_brackets ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_brackets_matches_curly_braces ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_brackets_matches_parentheses ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_html_and_matches_ampersand ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_separators_matches_carriage_return ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_separators_matches_newline ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_separators_matches_tab ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_specification_free_text_extracts_content ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_item_date_does_not_match_without_date ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_whitespace_does_not_match_single_space ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_whitespace_matches_multiple_spaces ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_item_date_matches_date_format ... ok
[INFO] [stdout] test parse::test_replace_pairs::replace_contains_has_expected_entries ... ok
[INFO] [stdout] test parse::test_replace_pairs::replace_pairs_has_expected_entries ... ok
[INFO] [stdout] test parse::test_replace_pairs::replace_start_has_expected_entries ... ok
[INFO] [stdout] test parse::test_regex_patterns::re_start_date_extracts_year ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::handles_empty_string ... ok
[INFO] [stdout] test parse::test_replace_pairs::replace_start_pairs_has_expected_entries ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::handles_multiple_double_spaces ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::splits_on_double_space ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::handles_no_double_space ... ok
[INFO] [stdout] test parse::test_read_xml_file::reads_sample_xml_file ... ok
[INFO] [stdout] test parse::test_integration_xml_parsing::parses_year_transition_xml_end_to_end ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::handles_trailing_double_space ... ok
[INFO] [stdout] test parse::test_split_from_last_whitespaces::trims_whitespace_from_parts ... ok
[INFO] [stdout] test parse::test_read_xml_file::reads_year_transition_xml_file ... ok
[INFO] [stdout] test parse::test_split_item_text::handles_empty_string ... ok
[INFO] [stdout] test parse::test_split_item_text::handles_large_sum ... ok
[INFO] [stdout] test parse::test_split_item_text::handles_no_double_space ... ok
[INFO] [stdout] test parse::test_split_item_text::handles_single_digit_day ... ok
[INFO] [stdout] test parse::test_split_item_text::splits_standard_format ... ok
[INFO] [stdout] test parse::test_visa_item::finnish_date_formats_correctly ... ok
[INFO] [stdout] test parse::test_visa_item::finnish_sum_formats_correctly ... ok
[INFO] [stdout] test parse::test_visa_item::finnish_sum_handles_whole_numbers ... ok
[INFO] [stdout] test parse::test_visa_item::ordering_by_date_then_name ... ok
[INFO] [stdout] test parse::test_visa_item_ordering_comprehensive::orders_by_name_when_date_equal ... ok
[INFO] [stdout] test parse::test_visa_item_ordering_comprehensive::equal_items_are_equal ... ok
[INFO] [stdout] test parse::test_visa_item_ordering_comprehensive::orders_by_date_first ... ok
[INFO] [stdout] test parse::test_visa_item::partial_ord_matches_ord ... ok
[INFO] [stdout] test parse::test_visa_item_ordering_comprehensive::orders_by_sum_when_date_and_name_equal ... ok
[INFO] [stdout] test parse::test_integration_xml_parsing::calculates_correct_totals_from_sample ... ok
[INFO] [stdout] test parse::test_visa_item_serialize::serializes_to_correct_json ... ok
[INFO] [stdout] test parse::test_visa_item::display_formats_correctly ... ok
[INFO] [stdout] test parse::test_integration_xml_parsing::parses_sample_xml_end_to_end ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 173 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/video_resolution/main.rs (/opt/rustwide/target/debug/deps/vres-7f14646495750f4b)
[INFO] [stdout] 
[INFO] [stdout] running 117 tests
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_1080p ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_1440p ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_480p ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_empty ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_empty_height_value ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_4k ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_empty_width_value ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_720p ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_large_resolution ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_float_width ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_malformed_width ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_mixed_crlf_lf ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_malformed_height ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_negative_height ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_missing_width ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_no_trailing_newline ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_missing_height ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_negative_width ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_only_newlines ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_sd_resolution ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_swapped_order ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_single_digit ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_square ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_ultrawide ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_extra_fields_after ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_vertical ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_large_values ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_zero_dimensions ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_whitespace_in_width ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_very_small ... ok
[INFO] [stdout] test cli::ffpprobe_tests::parse_ffprobe_output_windows_crlf ... ok
[INFO] [stdout] test cli::regex_tests::regex_high_resolutions_case_insensitive ... ok
[INFO] [stdout] test cli::regex_tests::regex_high_resolutions_no_match_544p ... ok
[INFO] [stdout] test cli::regex_tests::regex_high_resolutions_no_match_low_res ... ok
[INFO] [stdout] test cli::regex_tests::regex_high_resolutions_matches ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_at_start_of_filename ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_at_end_of_filename ... ok
[INFO] [stdout] test cli::regex_tests::regex_high_resolutions_empty_string ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_case_insensitive ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_embedded_in_word_matches ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_in_middle_of_filename ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_matches_544p ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_matches_600p ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_matches_standard ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_mixed_case ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_no_match ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_no_match_8k ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_no_match_partial ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_no_match_without_p_suffix ... ok
[INFO] [stdout] test cli::regex_tests::regex_resolutions_only_resolution ... ok
[INFO] [stdout] test config::resolution_config_tests::from_toml_str_ignores_other_sections ... ok
[INFO] [stdout] test config::resolution_config_tests::from_toml_str_invalid_toml_returns_error ... ok
[INFO] [stdout] test config::resolution_config_tests::from_toml_str_parses_delete_limit ... ok
[INFO] [stdout] test config::resolution_config_tests::from_toml_str_parses_empty_config ... ok
[INFO] [stdout] test config::resolution_config_tests::from_toml_str_parses_resolution_section ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::debug_format ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::delete_actual ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::delete_dryrun ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::equality ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::inequality_different_file ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::inequality_different_resolution ... ok
[INFO] [stdout] test cli::regex_tests::regex_full_resolution_word_boundaries ... ok
[INFO] [stdout] test cli::regex_tests::regex_full_resolution_no_match_small_numbers ... ok
[INFO] [stdout] test cli::regex_tests::regex_full_resolution_no_match_label_only ... ok
[INFO] [stdout] test cli::regex_tests::regex_full_resolution_matches_with_label_present ... ok
[INFO] [stdout] test cli::regex_tests::regex_full_resolution_matches_standard_patterns ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_fixes_duplicate_1920x1080_1080p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_fixes_duplicate_720x480_480p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_already_has_720p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_fixes_duplicate_960x540_540p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_already_has_label ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_fixes_duplicate_vertical_prefix_and_label ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_fixes_duplicate_vertical_with_full_resolution_and_label ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_720p_does_not_remove_2560x1440 ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_720p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_960x540_replaces_with_540p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_4k ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_does_not_remove_other_resolutions ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_no_label ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_no_partial_digit_match_trailing ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_nonstandard_resolution_already_labeled ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_720x540_with_540p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_720x480_with_480p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_no_partial_digit_match ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_removes_both_orientations ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_full_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_swapped_dimensions_vertical ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_vertical_bare_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_unknown_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_vertical_no_dot_prefix_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_vertical ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_nonstandard_vertical_resolution_already_labeled ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_capitalized_vertical_prefix ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_vertical_540x720_with_vertical_540p ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_with_dots_in_name ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_vertical_dot_prefix_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_inserts_resolution_before_av1_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_if_needed_replaces_swapped_dimensions ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_inserts_resolution_before_hevc_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_inserts_resolution_before_x264_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_codec_case_insensitive ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_multiple_codec_occurrences ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_inserts_resolution_before_x265_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_codec_in_middle_of_name ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_duplicate_resolution_and_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_existing_resolution_and_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::rename_actual ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_full_resolution_and_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_vertical_resolution_and_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::ordering_multiple_results ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::ordering_same_resolution_by_file ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::rename_dryrun ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_vertical_full_resolution_with_codec ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::ordering_by_resolution ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::rename_no_overwrite ... ok
[INFO] [stderr]      Running unittests src/bin/video_stats/main.rs (/opt/rustwide/target/debug/deps/vstats-d5edfdb6f31f7165)
[INFO] [stdout] test resolution::ffprobe_result_tests::rename_with_overwrite ... ok
[INFO] [stdout] test resolution::ffprobe_result_tests::new_path_with_weird_resolution_and_codec ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 117 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.08s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running unittests src/bin/version_tag.rs (/opt/rustwide/target/debug/deps/vtag-4ff6c465e712dcac)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stderr]      Running tests/config_integration_tests.rs (/opt/rustwide/target/debug/deps/config_integration_tests-1fb55b0eff507b1f)
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 13 tests
[INFO] [stdout] test sample_config_file_exists ... ok
[INFO] [stdout] test config_values_have_correct_types ... ok
[INFO] [stdout] test resolution_section_has_expected_structure ... ok
[INFO] [stdout] test sample_config_is_valid_toml ... ok
[INFO] [stdout] test sample_config_has_all_sections ... ok
[INFO] [stdout] test dupefind_section_has_expected_structure ... ok
[INFO] [stdout] test dots_section_has_expected_structure ... ok
[INFO] [stdout] test thumbnail_section_has_expected_structure ... ok
[INFO] [stdout] test dirmove_section_has_expected_structure ... ok
[INFO] [stdout] test flip_date_section_has_expected_structure ... ok
[INFO] [stdout] test video_stats_section_has_expected_structure ... ok
[INFO] [stdout] test qtorrent_section_has_expected_structure ... ok
[INFO] [stdout] test video_convert_section_has_expected_structure ... ok
[INFO] [stderr]    Doc-tests cli_tools
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 13 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] running 10 tests
[INFO] [stdout] test src/lib.rs - get_unique_path (line 760) ... ok
[INFO] [stdout] test src/lib.rs - get_relative_path_or_filename (line 701) ... ok
[INFO] [stdout] test src/lib.rs - resolve_required_input_path_str (line 631) ... ok
[INFO] [stdout] test src/lib.rs - resolve_input_path_str (line 566) ... ok
[INFO] [stdout] test src/lib.rs - resolve_required_input_path (line 608) ... ok
[INFO] [stdout] test src/resolution.rs - resolution::Resolution::p_label_regex (line 207) ... ok
[INFO] [stdout] test src/lib.rs - insert_suffix_before_extension (line 498) ... ok
[INFO] [stdout] test src/lib.rs - resolve_input_path (line 541) ... ok
[INFO] [stdout] test src/resolution.rs - resolution::Resolution::full_resolution_regex (line 183) ... ok
[INFO] [stdout] test src/resolution.rs - resolution::Resolution::dimension_regex (line 231) ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 10 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s
[INFO] [stdout] 
[INFO] [stdout] all doctests ran in 1.31s; merged doctests compilation took 1.21s
[INFO] running `Command { std: "docker" "inspect" "f636d8d933256bea3d4052a3c180973191183fb5dfd0e1f45f17fe83485c5d0b", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "f636d8d933256bea3d4052a3c180973191183fb5dfd0e1f45f17fe83485c5d0b", kill_on_drop: false }`
[INFO] [stdout] f636d8d933256bea3d4052a3c180973191183fb5dfd0e1f45f17fe83485c5d0b
