mutants.toml 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Mutation Testing Configuration for CDK
  2. # Phase 1: Focus on cashu crate only
  3. # Start with cashu crate only - exclude other crates initially
  4. exclude_globs = [
  5. "crates/cdk-*/**", # Exclude other crates initially
  6. "**/tests/**", # Don't mutate test code
  7. "**/benches/**", # Don't mutate benchmarks
  8. ]
  9. # Reasonable timeout to catch hangs (5 minutes minimum)
  10. minimum_test_timeout = 300
  11. # Skip specific mutations that cause infinite loops
  12. # These mutations create scenarios where loops never terminate or recursive functions never return.
  13. # Format: "file.rs:line.*pattern"
  14. exclude_re = [
  15. # dhke.rs:61 - Mutating counter += to *= causes infinite loop (counter stays 0)
  16. "crates/cashu/src/dhke.rs:61:.*replace \\+= with \\*=",
  17. # amount.rs:108 - Mutating % to / in split causes infinite loop
  18. "crates/cashu/src/amount.rs:108:.*replace % with /",
  19. # amount.rs:100 - split() returning empty vec causes infinite loops
  20. "crates/cashu/src/amount.rs:100:.*replace.*split.*with vec!\\[\\]",
  21. "crates/cashu/src/amount.rs:100:.*replace.*split.*with vec!\\[Default",
  22. # amount.rs:203 - checked_add returning Some(Default/0) causes infinite increment loops
  23. "crates/cashu/src/amount.rs:203:.*replace.*checked_add.*with Some\\(Default",
  24. # amount.rs:226 - try_sum returning Ok(Default/0) causes infinite loops
  25. "crates/cashu/src/amount.rs:226:.*replace.*try_sum.*with Ok\\(Default",
  26. # amount.rs:288 - From<u64> returning Default/0 causes infinite loops
  27. "crates/cashu/src/amount.rs:288:.*replace.*from.*with Default",
  28. # amount.rs:331 - Sub returning Default/0 causes infinite loops
  29. "crates/cashu/src/amount.rs:331:.*replace.*sub.*with Default",
  30. # Trivial getters/setters - not worth testing
  31. "FeeAndAmounts::fee",
  32. "FeeAndAmounts::amounts",
  33. "BlindedMessage::witness",
  34. "crates/cashu/src/amount.rs:.*to_u64",
  35. # Trivial trait implementations - unrealistic mutations
  36. "crates/cashu/src/amount.rs.*impl From<&u64> for Amount.*from",
  37. "crates/cashu/src/amount.rs.*impl AsRef<u64> for Amount.*as_ref",
  38. "crates/cashu/src/amount.rs.*impl std::ops::Mul for Amount.*mul",
  39. "crates/cashu/src/amount.rs.*impl std::ops::Div for Amount.*div",
  40. "crates/cashu/src/amount.rs.*impl From<Amount> for u64.*from",
  41. "crates/cashu/src/amount.rs.*impl Default for Amount",
  42. "crates/cashu/src/amount.rs.*impl Default for &Amount",
  43. "crates/cashu/src/amount.rs.*impl.*Display for Amount.*fmt",
  44. # amount_for_offer requires constructing lightning Offer objects which is complex
  45. "crates/cashu/src/amount.rs.*amount_for_offer",
  46. # hash_to_curve boundary check - would require finding a message that needs exactly 2^16
  47. # iterations which is impractical. The < vs <= mutation is not realistically testable.
  48. "crates/cashu/src/dhke.rs:49:.*replace < with",
  49. # Secret::drop zeroizes memory for security. Testing this properly requires unsafe memory
  50. # inspection. The security guarantee comes from using the zeroize crate correctly.
  51. "crates/cashu/src/secret.rs.*impl Drop for Secret.*drop",
  52. # serialize_to_cbor_diag is only used for CLI diagnostic output (decode_token, decode_request).
  53. # Not part of any critical path - purely human-readable debugging output.
  54. "crates/cashu/src/util/mod.rs.*serialize_to_cbor_diag",
  55. # PartialOrd canonical implementation - just delegates to Ord::cmp, this is standard Rust idiom
  56. "crates/cashu/src/nuts/nut00/mod.rs.*impl PartialOrd for Proof.*partial_cmp",
  57. ]