static A assertEqualsVerbose(O x, A y) { assertEqualsVerbose((S) null, x, y); ret y; } // x = expected, y = actual static A assertEqualsVerbose(S msg, O x, A y) { if (!eq(x, y)) { ifdef assertEqualsVerbose_advancedDiff if (x instanceof S && y instanceof S && (containsNewLine((S) x) || containsNewLine((S) y))) nlPrintNL(unidiff((S) x, (S) y)); endifdef fail((nempty(msg) ? msg + ": " : "") + "expected: "+ x + ", got: " + y); } else print("OK" + (empty(msg) ? "" : " " + msg) + ": " + /*sfu*/(x)); ret y; } ifclass Scorer static void assertEqualsVerbose(Scorer scorer, S msg default "", O x, O y) { if (scorer == null) ret with assertEqualsVerbose(x, y); if (!eq(x, y)) { print(appendColonIfNempty(msg) + y + " != " + x); scorer.add(false); } else { print("OK: " + appendColonIfNempty(msg) + x); scorer.add(true); } } endif