6f6d5fd7

Created Started Finished

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.