svoid gazelle_fakery_processInput_multi_v3(TreeMap sections, O... _) { int maxMonologue = optPar maxMonologue(_, 0); ErrorCounter errorCounter = optPar errorCounter(_, new ErrorCounter); for (fS key : startingWithIC(keys(sections), "test input")) errorCounter.run(key, r { LS inputLines = tlft(sections.get(key)); S expectedOutput = sections.get(replaceIC(key, "test input", "expected output")); S expectedTempFacts = sections.get(replaceIC(key, "test input", "expected temporary facts")); S _preContext = sections.get(replaceIC(key, "test input", "pre-context")); print("\nPROCESSING: " + key + "\n"); temporaryFacts.clear(); LS preContext = tlft(_preContext); new LS lines; int nMonologue = 0; for i over inputLines: { S input = inputLines.get(i); S user = leadingSquareBracketStuff(input); input = dropActuallyLeadingSquareBracketStuff(input); gazelle_gatherFulfillments(ll(nu GazelleLine(text := input, extras := litmap(+user))), fulfillments, debug := true); preContext.add(input); O[] subParams = paramsPlus(_, userName := user, preContext := dropLast(preContext), respondingToHuman := nMonologue == 0, contextMaker := f dm_gazelle_stdEvalContext, requiredComment := null, debug := true); print("useRepeat_v2: " + boolPar useRepeat_v2(_) + ", params: " + _); L l = boolPar useRepeat_v2(_) ? gazelle_reason_repeat_v2(input, subParams) : boolPar useRepeat(_, true) ? gazelle_reason_repeat(input, subParams) : gazelle_reasonWithPreAndPost(input, subParams); print("Got " + n2(l, "child", "children") + " with line types: " + collect lineType(l)); for (GazelleTree t : l) { if (eq(t.lineType, "temporary fact")) temporaryFacts.add(printWithIndent("TEMP FACT> ", t.line)); else { lines.add(printWithIndent("OUT> ", t.line)); if (++nMonologue < maxMonologue) { inputLines.add(t.line); preContext.add(t.line); } } } } assertEqualsVerbose(lines, tlft(expectedOutput)); assertEqualsVerbose(asList(temporaryFacts), tlft(expectedTempFacts)); }); errorCounter.print(); }