Merge rust-bitcoin/rust-bitcoin#4038: Update mutants.toml

3c12d4eb1f Add primitives to mutants.toml (Jamil Lambert, PhD)
32b05132b5 Reorganize mutants.toml (Jamil Lambert, PhD)

Pull request description:

  All of the mutants found by `cargo mutants` in primitives have been killed in: #3948, #3971, #3987, #4012, #4019, #4020, #4024, #4033, #4036, #4037.

  Add `deserialize` as a general exception.  The mutant is changing the return value to Ok(Default::default()), and a test to kill it doesn't prove anything other than the function can return something.

  Reword comments to make them clearer.

  Add the required exceptions for cases in primitives that need to be skipped.

  Add primitives to the examine paths.

ACKs for top commit:
  tcharding:
    ACK 3c12d4eb1f
  apoelstra:
    ACK 3c12d4eb1fcdfc8d7569ef3f4024811017abd15c; successfully ran local tests

Tree-SHA512: 8848164bfea8f44c49c3055d3c6daa9bbc6d65de86b36b1f2022e6cb872602ee878a1dcf62c10da615b26c906d97a606ab4b96cf12d1a2bced2984ec03cc6d67
This commit is contained in:
merge-script 2025-02-13 00:27:29 +00:00
commit 20e970d7f6
No known key found for this signature in database
GPG Key ID: C588D63CE41B97C1
1 changed files with 16 additions and 11 deletions

View File

@ -1,5 +1,5 @@
additional_cargo_args = ["--all-features"]
examine_globs = ["units/src/**/*.rs"]
examine_globs = ["units/src/**/*.rs", "primitives/src/**/*.rs"]
exclude_globs = [
"units/src/amount/verification.rs" # kani tests
]
@ -8,20 +8,25 @@ exclude_re = [
"impl Arbitrary",
"impl Display",
".*Error",
# --------------------------------------------Crate-specific exclusions--------------------------------------------
"deserialize", # Skip serde mutation tests
"Iterator", # Mutating operations in an iterator can result in an infinite loop
# ----------------------------------Crate-specific exclusions----------------------------------
# Units
# src/amount/mod.rs
"parse_signed_to_satoshi", # Can't kill all mutants since there is no denomination smaller than Satoshi
"fmt_satoshi_in", # Related to formatting/display
"dec_width", # Replacing num /= 10 with num %=10 in a loop causes a timeout due to infinite loop
# src/fee_rate/serde.rs
"as_sat_per_kwu::opt::deserialize::<impl Visitor for VisitOpt>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
"as_sat_per_vb_floor::opt::deserialize::<impl Visitor for VisitOpt>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
"as_sat_per_vb_ceil::opt::deserialize::<impl Visitor for VisitOpt>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
# src/amount/serde.rs
"as_sat::opt::deserialize::<impl Visitor for VisitOptAmt<X>>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
"as_btc::opt::deserialize::<impl Visitor for VisitOptAmt<X>>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
"as_str::opt::deserialize::<impl Visitor for VisitOptAmt<X>>.*", # Replaces return value with Ok(Default::default()), which is the same as Ok(None)
# src/locktime/relative.rs
"Time::to_consensus_u32" # It will replace | with ^, which will return the same value since the XOR is always taken against the u16 and an all-zero bitmask
"Time::to_consensus_u32", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask
# primitives
"Sequence::from_512_second_intervals", # Mutant from replacing | with ^, this returns the same value since the XOR is taken against the u16 with an all-zero bitmask
"Opcode::classify", # Not possible to kill all mutants without individually checking every opcode classification
"Block<Checked>::cached_witness_root", # Skip getters
"Block<Checked>::transactions", # Skip getters
"Script::to_bytes", # Deprecated
"decode_cursor", # Mutating operations in decode_cursor can result in an infinite loop
"fmt_debug", # Mutants from formatting/display changes
"fmt_debug_pretty", # Mutants from formatting/display changes
]