Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-httpclient

Named HTTP clients for Pudu: a client factory, delegating handlers, pooled keep-alive connections, handler lifetimes, logging, and resilience

0.1.1Apache-2.01

InstallClose

Mutate.md

Markdown43 lines1.7 KB

GitHub ↗

Mutate (tool)


type: module path: "@root/tools/Mutate.pudu" fidelity: Active grammar: "[[grammar/pudu]]" tags: [module, tool]


Purpose

Mutation testing: apply one operator change at a time to source files, run the checks and the suites, and report survivors.

Interface

pudu run tools/Mutate.pudu [--file <path> | --domain] [--suites <path>] [--every <n>] [--threshold <percent>] [--dry-run], with PUDU_BIN naming the compiler (default pudu) and --suites the suites to run (default test).

Algorithm

  1. Mutants are operator swaps at code positions outside strings, comments, and imports; comparisons must be spaced so type brackets are not mutated.
  2. A mutant that fails pudu check is invalid; one whose suites still pass survived.
  3. --domain limits the run to the pure layer; --every n samples; --threshold fails the run below a score.

Negative Logic (Prohibited Paths)

  • Every mutated file is restored before the next mutant, whatever the verdict.
  • A mutant whose suites run past 30 seconds counts as killed.
  • The harness runs on a committed tree only: a run stopped mid-mutant leaves that one change, which git diff shows and git checkout removes.

Grill Log

  • Q: Why run the domain mutants against the domain suites only? A: The pure layer must be pinned by its own suites; the transport suites take seconds each and would turn a minutes-long gate into hours. _Rejected:_ the whole tree's suites per mutant.
  • Q: Why replace comparisons whose boundary cannot matter instead of excusing their mutants? A: Math.min, Math.max, and splitting functions leave no equivalent mutant to explain, so the threshold stays an honest 100. _Rejected:_ a list of excused survivors.

Referenced by

[[architecture/TESTING]] · [[src/_MOC]]