6f6d5fd7

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

Kill every mutation of the renderer

The renderer is a table and the layout is arithmetic over columns, so both
are wrong one entry and one character at a time, and the suite that was here
could not tell.  710 mutants, none surviving, where there were 166 before.

Most of it is exact text: every function, range function, aggregation,
operator, duration unit and matcher, written out both on one line and too
wide to fit, because what a query is written as when it breaks goes through a
different road from what it is written as when it does not.  Then the
precedence table itself, at every adjacent pair and from both sides, since a
step of it that is wrong is a query that means something else.

Two of the mutants that survived were not worth a test, because they changed
nothing:

  * the Applied branch of the layout put brackets around a call, which is an
    atom and so is never the thing that needs them.  That was dead code, and
    it is gone rather than suppressed.
  * three Validity instances ran genericValidate over a newtype whose only
    field is a Word or a Text, whose validity is trivial.  Those say what
    they check and nothing more now.

precedence, operatorPrecedence, lowestPrecedence and atomPrecedence are
exported.  How tightly something binds is a fair question to ask a library
that puts the brackets in, and asking it directly is what pins the table
rather than only its effect.

Total

20s

Created Started Finished

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 1s 7s 7s 8s 0s
Build 8s 15s 12s 20s 0s
Suite 0s 24s 20s 20s 0s

Timeline

Config Eval Build
0s10s20s