74 lines
2.1 KiB
Java
74 lines
2.1 KiB
Java
package cljtest.linear;
|
|
|
|
import base.ExtendedRandom;
|
|
import base.Selector;
|
|
import base.TestCounter;
|
|
|
|
import java.util.List;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Function;
|
|
import java.util.function.IntFunction;
|
|
import java.util.function.Supplier;
|
|
|
|
|
|
/**
|
|
* Tests for
|
|
* <a href="https://www.kgeorgiy.info/courses/paradigms/homeworks.html#clojure-linear">Linear Clojure</a>
|
|
* homework of <a href="https://www.kgeorgiy.info/courses/paradigms">Programming Paradigms</a> course.
|
|
*
|
|
* @author Georgiy Korneev (kgeorgiy@kgeorgiy.info)
|
|
*/
|
|
public final class LinearTest {
|
|
// === Selector
|
|
|
|
public static final Selector SELECTOR = new Selector(LinearTester.class, "easy", "hard")
|
|
.variant("Base", v(LinearTester::new))
|
|
;
|
|
|
|
private LinearTest() {
|
|
}
|
|
|
|
/* package-private*/ static Consumer<TestCounter> v(final Function<TestCounter, LinearTester> variant) {
|
|
return counter -> variant.apply(counter).test();
|
|
}
|
|
|
|
/* package-private*/ static Consumer<TestCounter> variant(final List<Item.Fun> functions, final Consumer<Test> variant) {
|
|
return v(counter -> new LinearTester(counter) {
|
|
@Override
|
|
protected void test(final int args) {
|
|
variant.accept(new Test(this, functions, args));
|
|
}
|
|
});
|
|
}
|
|
|
|
/* package-private */ record Test(
|
|
LinearTester test,
|
|
List<Item.Fun> functions,
|
|
int args
|
|
) {
|
|
public void test(final Supplier<Item> generator) {
|
|
test.test(args, functions, Item.same(generator));
|
|
}
|
|
|
|
public void test(final IntFunction<List<Item>> generator) {
|
|
test.test(args, functions, generator);
|
|
}
|
|
|
|
public boolean isHard() {
|
|
return test.isHard();
|
|
}
|
|
|
|
public void expectException(final int[] okDims, final int[][] failDims) {
|
|
test.expectException(functions, okDims, failDims);
|
|
}
|
|
|
|
public ExtendedRandom random() {
|
|
return test.random();
|
|
}
|
|
}
|
|
|
|
public static void main(final String... args) {
|
|
SELECTOR.main(args);
|
|
}
|
|
}
|