!7 p-exp { assertEmpty(checkRule([[ true => o(ok) ]], true)); L l = checkRule([[ false => o(ok) ]], false); assertEqualsVerbose(1, l(l)); l = checkRule( [[ true && eval(true) && eval(false) && true => o(ok) ]], false); assertEqualsVerbose(1, l(l)); assertTrueVerbose(jmatch("eval(false) && true", str(first(l)))); } static L checkRule(S rule, final bool shouldSucceed) { print("\n" + rule); NLLogicChecker_v2 c = nlLogicCheckerWithRules(rule); new NLLogicChecker_v2.Matching m; m.verbose = true; final new Flag succeeded; final new L remaining; nlLogic_iterate_withOnFail(c, first(c.rules).in, m, r { if (!shouldSucceed) fail("Should not succeed"); succeeded.raise(); }, voidfunc(Exp e) { remaining.add(e); print("Remaining expression: " + e); }); if (shouldSucceed && !succeeded.isUp()) fail("Rule failed"); ret remaining; }