Expect the randomized ~E tests FORMAT.E.1 and FORMAT.E.2 to fail sometimes - #1842
Expect the randomized ~E tests FORMAT.E.1 and FORMAT.E.2 to fail sometimes#1842dg1sbg wants to merge 2 commits into
Conversation
…times FORMAT.E.1 and FORMAT.E.2 fail intermittently on unmodified main and on unrelated pull requests, and each failure costs someone an adjudication before the red can be dismissed. They are not deterministic ~E tests. Each draws a float type with (RANDOM 4), draws a random exponent, repeats 1000 times, and compares (FORMAT NIL "~E" X) against PRIN1-TO-STRING and against a compiled FORMATTER call (dependencies/ansi-test/printer/format/format-e.lsp:12,45). Whether they trip is a property of the draw. What they catch when they do trip is the round-trip float-printing defect already tracked as clasp-developers#1816, reached through ~E rather than through PRIN1: the two printers disagree about where the decade boundary falls when the mantissa rounds up to it. On a build of 0aa5b71, ~E prints the single-float 9.99999e-18 as "0.999999e-17" while PRIN1 prints "9.99999e-18", and the double-float 9.9999999e-18 disagrees the same way. It is not specific to LONG-FLOAT and not specific to extreme exponents; any of the four float types will do, at ordinary magnitudes. Recent instances: main at 0aa5b71 red on FORMAT.E.1 with that exact single-float value, and clasp-developers#1820 red on FORMAT.E.2 with -9.999338424609615l-2430. In both cases it was the only unexpected failure out of 21936, with the regression suite green in the same job. Listing a test that usually passes costs nothing. DO-ENTRIES returns (null *unexpected-failures*) (rt.lsp:521), so a listed test that passes is recorded as an unexpected success (rt.lsp:496) and reported, but does not change the exit status. Both names match loaded test entries, so neither adds to the "Found unknown test or note names" report. This is already how PRINT.LONG-FLOAT.RANDOM, PRINT.SYMBOL.RANDOM.3, PRINT.SYMBOL.RANDOM.4 and FORMAT.E.26 are handled; FORMAT.E.26 is defined in the same file and already carries the "fails sometimes" note. This does not fix clasp-developers#1816, and it deliberately leaves PRINT.SHORT-FLOAT.RANDOM, PRINT.SINGLE-FLOAT.RANDOM and PRINT.DOUBLE-FLOAT.RANDOM unlisted even though PRINT.DOUBLE-FLOAT.RANDOM has also been seen red on main. Those are a judgement for whoever owns the printer work; the smallest change that stops the recurring noise is the one worth making now. Refs clasp-developers#1816
CI on this branch reddened clasp/ubuntu-latest/native/yes/no on PRINT.DOUBLE-FLOAT.RANDOM, while FORMAT.E.1 and FORMAT.E.2 both drew clean and were reported as unexpected successes. That is this change making the case for its own widening: the two tests it listed behaved exactly as intended and contributed nothing to the exit status, and the job still failed on the next member of the same family. PRINT.SHORT-FLOAT.RANDOM, PRINT.SINGLE-FLOAT.RANDOM, PRINT.DOUBLE-FLOAT.RANDOM and PRINT.LONG-FLOAT.RANDOM are the same test written four times, once per float type: each walks the exponent range from least-positive to most-positive, draws ten values per decade with (RANDOM f), and feeds each to RANDOMLY-CHECK-READABILITY (dependencies/ansi-test/printer/print-floats.lsp:86,181,276,371, checking at :100,195,290,385). They are the PRIN1 half of the round-trip defect that FORMAT.E.1 and FORMAT.E.2 reach through ~E, i.e. clasp-developers#1816. Only the LONG-FLOAT one was listed, which made the grouping look arbitrary -- the defect is not specific to any float type, as the single-float 9.99999e-18 case shows. Listing them stays free: DO-ENTRIES returns (null *unexpected-failures*) (rt.lsp:521), so a listed test that passes is reported as an unexpected success (rt.lsp:496) without affecting the exit status. Verified against the loaded test entries before committing: no unknown names, 32 -> 35 expected failures. Refs clasp-developers#1816
|
Widened, and the CI run on the first version is the reason. Run 32345271440, job 96352593574 — That single job contains both halves of the argument. So this now also lists Re-verified against the loaded test entries before pushing, same way as before — no unknown names, 32 → 35 expected failures: Still no attempt at #1816 itself — this only stops the randomized printer tests from reddening unrelated PRs. Happy to trim it back if you would rather keep some of these visible. |
FORMAT.E.1andFORMAT.E.2fail intermittently on unmodifiedmainand on unrelated pull requests, and each failure costs someone an adjudication before the red can be dismissed. They are not deterministic~Etests. Each draws a float type with(RANDOM 4), draws a random exponent, repeats 1000 times, and compares(FORMAT NIL "~E" X)againstPRIN1-TO-STRINGand against a compiledFORMATTERcall (dependencies/ansi-test/printer/format/format-e.lsp:12,45). Whether they trip is a property of the draw.What they catch when they do trip is the round-trip float-printing defect already tracked as #1816, reached through
~Erather than throughPRIN1: the two printers disagree about where the decade boundary falls when the mantissa rounds up to it. On a build of0aa5b71ac,~Eprints the single-float9.99999e-18as"0.999999e-17"whilePRIN1prints"9.99999e-18", and the double-float9.9999999e-18disagrees the same way. It is not specific toLONG-FLOATand not specific to extreme exponents; any of the four float types will do, at ordinary magnitudes.Recent instances:
mainat0aa5b71acred onFORMAT.E.1with that exact single-float value, and #1820 red onFORMAT.E.2with-9.999338424609615l-2430. In both cases it was the only unexpected failure out of 21936, with the regression suite green in the same job.Why listing them is free
DO-ENTRIESreturns(null *unexpected-failures*)(rt.lsp:521), so a listed test that passes is recorded as an unexpected success (rt.lsp:496) and reported, but does not change the exit status. Both names match loaded test entries, so neither adds to theFound unknown test or note namesreport — verified by loadinginit.lspand callingrt::load-expected-failuresagainst the edited file:This is already how
PRINT.LONG-FLOAT.RANDOM,PRINT.SYMBOL.RANDOM.3,PRINT.SYMBOL.RANDOM.4andFORMAT.E.26are handled;FORMAT.E.26is defined in the same file and already carries thefails sometimesnote.Scope
This does not fix #1816, and it deliberately leaves
PRINT.SHORT-FLOAT.RANDOM,PRINT.SINGLE-FLOAT.RANDOMandPRINT.DOUBLE-FLOAT.RANDOMunlisted even thoughPRINT.DOUBLE-FLOAT.RANDOMhas also been seen red onmain. Those are a judgement for whoever owns the printer work; the smallest change that stops the recurring noise is the one worth making now. Happy to widen it if you would rather have the whole randomized-printer family listed at once.Refs #1816