package jstest.functional;
import base.Selector;
import base.TestCounter;
import common.expression.Dialect;
import common.expression.ExprTester;
import common.expression.Language;
import common.expression.LanguageBuilder;
import jstest.JSExpressionEngine;
import java.nio.file.Path;
import java.util.List;
import static common.expression.Operations.*;
/**
* Tests for
* JavaScript Functional Expressions
* homework of Programming Paradigms course.
*
* @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
*/
public final class FunctionalTest {
public static final Dialect ARITHMETIC = new Dialect("variable('%s')", "cnst(%s)", "{op}({args})", ", ")
.functional();
public static final Dialect POLISH = new Dialect("%s", "%s", "{args} {op}", " ");
private static final Path SCRIPT = Path.of("functionalExpression.js");
private FunctionalTest() {
}
/* package-private */ static Selector.Composite selector() {
return LanguageBuilder.selector(
FunctionalTest.class,
mode -> false,
List.of("x"),
(builder, counter) -> tester(counter, builder.language(ARITHMETIC, POLISH)),
"easy", "hard"
);
}
public static final Selector SELECTOR = selector()
.variant("Base", ARITH)
.variant("3637", VARIABLES, ONE, TWO, THREE, CLAMP, WRAP, ARG_MIN.fix(3), ARG_MAX.fix(3), ARG_MIN.fix(5), ARG_MAX.fix(5))
.variant("3839", VARIABLES, ONE, TWO, THREE, CLAMP, SOFT_CLAMP, ARG_MIN.fix(3), ARG_MAX.fix(3), ARG_MIN.fix(5), ARG_MAX.fix(5))
.variant("3435", VARIABLES, ONE, TWO, THREE, ATAN, ATAN2)
.variant("3233", VARIABLES, ONE, TWO, THREE, SIN, COS)
.selector();
public static void main(final String... args) {
SELECTOR.main(args);
}
public static ExprTester