All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2026-09-07
Initial release.
Added
- Eleven mutator families over the Decimal call surface, each reported under
its own name and independently enable-able:
Mutare.Decimal.Arithmetic(:decimal_arithmetic) — swaps same-arity arithmetic calls (add/sub/mult/div/div_int/rem) and reverses visible operands of the non-commutative ones.Mutare.Decimal.Comparison(:decimal_comparison) — swaps comparison predicates (gt?/gte?/lt?/lte?),min/max, and reverses operands ofcompare/2,3and the deprecatedcmp/2.Mutare.Decimal.Classification(:decimal_classification) — swaps classification predicates (positive?↔negative?,nan?↔inf?).Mutare.Decimal.ZeroBoundary(:decimal_zero_boundary) — replacespositive?/negative?with inclusive zero-boundary comparisons.Mutare.Decimal.Sign(:decimal_sign) — swapsabs/1↔negate/1and flips literal signs inDecimal.new/3.Mutare.Decimal.DivRem(:decimal_div_rem) — rebuildsdiv_rem/2with the quotient/remainder pair in the wrong tuple order.Mutare.Decimal.Transform(:decimal_transform) — removes value-transforming calls (normalize,apply_context,abs,negate,sqrt,round/1,2,3).Mutare.Decimal.ModeSwap(:decimal_mode_swap) — swapsround/3rounding modes andto_string/2,3output formats.Mutare.Decimal.DefaultDrop(:decimal_default_drop) — drops refinement/default arguments (round/2,3,compare/3,eq?/3).Mutare.Decimal.LimitsDrop(:decimal_limits_drop) — drops parsing/rendering limit arguments (parse/2,cast/2,new/2,to_string/2,3).Mutare.Decimal.Context(:decimal_context) — removesDecimal.Context.with/set/updateeffects.
- Calls match written qualified, aliased, imported, or as a pipe stage.
- Ignore-variant labels on every mutation (target operation, mode, dropped
argument, or operation kind), so
# mutare:ignore[family:label]can suppress a single variant. Mutare.Decimal.all/0for splicing all families into a:mutatorslist.
Supports Decimal >= 2.2.0 and < 4.0.0.