package expression.common; import base.Pair; import base.TestCounter; import expression.ToMiniString; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Consumer; public class TestGenerator { private final Generator generator; private final NodeRenderer renderer; public TestGenerator(final Generator generator, final NodeRenderer renderer) { this.generator = generator; this.renderer = renderer; } public void testBasic(final Consumer> test) { generator.testBasic(consumer(test)); } public void testRandom(final TestCounter counter, final int denominator, final Consumer> test) { generator.testRandom(counter, denominator, consumer(test)); } private Consumer> consumer(final Consumer> consumer) { return expr -> consumer.accept(new TestGenerator.Test<>(expr, renderer)); } public List> variables(final int count) { return generator.variables(count); } public String render(final Expr expr, final NodeRenderer.Settings settings) { return renderer.render(expr, settings); } public static class Test { public final Expr expr; private final Map rendered = new HashMap<>(); private final NodeRenderer renderer; public Test(final Expr expr, final NodeRenderer renderer) { this.expr = expr; this.renderer = renderer; } public String render(final NodeRenderer.Settings settings) { return rendered.computeIfAbsent(settings, s -> renderer.render(expr, s)); } } }