c17d43f3

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Update sydtest and keep the mutation check passing on the new engine

The upgraded sydtest mutation engine adds the SwitchFunctionArguments,
RemoveClause, ElideCall and TupleSwap operators (plus control-group
mutations). Cover the genuinely-killable new mutants with tests and mark the
equivalent ones with DisableMutation annotations:

* Strengthen the wrapper specs (AmountOf/AccountOf/ConversionRateOf) and the
  Multi*, Account, Amount, ConversionRate and DecimalLiteral specs so the new
  mutants no longer slip through the `Nothing`-guarded branches.
* Annotate the equivalent mutants (commutative add/compose swaps, redundant
  optimisation clauses, the fromDouble exponent short-circuit, symmetric
  sign-routing tuple swaps in rate/multiply, the empty-string sign, S.insert
  in the repetend check, and uncoverable diagnostic messages), each with a
  rationale.

Where a mutant marked genuinely redundant or dead code rather than an
intentional optimisation or safety guard, simplify the code instead of
annotating it (behaviour-preserving, and the freed-up mutants are now killed
by the existing tests):

* Account.distribute: drop the no-op `abs` on the `Word16` chunk count and
  collapse the unreachable zero-account branches.
* Amount.fraction: drop the redundant zero-fraction clause (the `Amount 0`
  clause stays, as it guards the `0 % 0` crash).
* DecimalLiteral.toRational/fromRatio: drop redundant always-Nothing/sign
  plumbing.

Bump really-safe-money to 0.0.0.1 and add a changelog.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 11m55s 13s 13s 12m08s 11m55s
Eval 12m16s 45s 45s 13m02s 7s
Build 25m35s 2m35s 2m35s 28m11s 12m33s
Suite 11m55s 3m34s 16m16s 28m11s 24m36s

Timeline

0s12m12m20s12m40s13m25m40s26m26m20s26m40s27m27m20s27m40s28m