!7 !include once #1017126 // transpileRaw sclass DevelopFromExamples > DynTextArea { S whatToTry; transient ReliableSingleThread rst = new(r think); JComponent visualize() { ret withCenteredButtons(centerAndSouthWithMargins( jhsplit(super.visualize(), dm_printLogComponent()), jsection("Stuff to try", onEnter(dm_fieldTextField('whatToTry), rst))), "Fresh", rThread fresh, "Think", rst); } void fresh { forgetTranspiledStandardFunctions(words(whatToTry)); loadFunctions_clearCache(); rst.trigger(); } void think { clearPrintLog(); loadFunctions_preferDiskCache(); S text = rtrimAll(getText()); Pair examplesFile = ai_makeExamplesFile(text); if (examplesFile.b) print("Wrote: " + f2s(examplesFile.a)); new L> examples; bool eqic = false; L lines = tlftj(text); if (eq(first(lines), "splitAtEmptyLines")) lines = splitAtEmptyLines(text); for (S line : lines) pcall { if (eqic(line, "eqic")) eqic = true; L l = splitAtDoubleArrow_bothDirections(line); if (l(l) == 2) addPair(examples, tok_multiLineQuotesToStandardQuotes(first(l)), safeCanonicalizeStructure(tok_multiLineQuotesToStandardQuotes(second(l)))); } final File logFile = replaceExtension(examplesFile.a, ".log"); final LineBuffer lineBuffer = new(voidfunc(S line) { appendToFile(logFile, line + "\n") }); temp tempInterceptPrint(func(S s) -> Bool { lineBuffer.append(s); true; }); print(localDateWithMilliseconds()); print("Thinking about " + n2(examples, "example")); new LinkedHashSet thingsThatWork; F2 equalsFunction = eqic ? func(O a, O b) -> Bool { eqic((S) a, (S) b) } : func(O a, O b) -> Bool { eq(a, b) }; for (fS s : words(whatToTry)) if (isStandardFunction(s)) { F1 f = func(S in) -> S { struct(callAndMake_orDirect(s, unstruct(in))) }; T3 counterExample = worksOnAllExamples_returnCounterExample(f, examples, equalsFunction); if (counterExample == null) print("WORKS: " + addAndReturn(thingsThatWork, s)); else { print("Nope: " + s); bool exc = counterExample.c instanceof Throwable; print((exc ? "Exception on: " : "Wrong result on: ") + sfu(counterExample.a)); print( "Expected: " + sfu(counterExample.b)); if (exc) printStackTrace((Throwable) counterExample.c); else print( " Result: " + sfu(counterExample.c)); } } print("\nDone. " + (empty(thingsThatWork) ? "Nothing works." : "Things that work: " + joinWithComma(thingsThatWork))); print(); } }