|
| 1 | +package toylangs.bolog; |
| 2 | + |
| 3 | +import org.junit.FixMethodOrder; |
| 4 | +import org.junit.Test; |
| 5 | +import org.junit.runners.MethodSorters; |
| 6 | +import toylangs.bolog.ast.BologImp; |
| 7 | +import toylangs.bolog.ast.BologNode; |
| 8 | + |
| 9 | +import java.util.Arrays; |
| 10 | +import java.util.HashSet; |
| 11 | +import java.util.Set; |
| 12 | + |
| 13 | +import static org.junit.Assert.assertEquals; |
| 14 | +import static toylangs.bolog.ast.BologNode.*; |
| 15 | + |
| 16 | +@FixMethodOrder(MethodSorters.NAME_ASCENDING) |
| 17 | +public class BologMasterTest { |
| 18 | + |
| 19 | + @Test |
| 20 | + public void test01_basic() { |
| 21 | + checkModel(setOf("X"), imp(var("X"))); |
| 22 | + checkModel(setOf("X", "X"), imp(var("X")), imp(var("X"), var("Y"))); |
| 23 | + checkModel(setOf("X", "Y"), imp(var("X")), imp(var("Y"), var("X"))); |
| 24 | + } |
| 25 | + |
| 26 | + @Test |
| 27 | + public void test02_more() { |
| 28 | + checkModel(setOf("X"), imp(var("X"), tv(true))); |
| 29 | + checkModel(setOf(), imp(var("X"), var("X"))); |
| 30 | + checkModel(setOf("X", "Y", "Z"), |
| 31 | + imp(var("X"), var("Y")), |
| 32 | + imp(var("Y")), imp(var("Z"), var("X"), var("Y")), |
| 33 | + imp(var("Z"), var("P"))); |
| 34 | + checkModel(setOf("Z"), |
| 35 | + imp(var("X"), var("Y")), |
| 36 | + imp(var("Y"), var("X")), |
| 37 | + imp(var("Z"), var("X"), var("Y")), |
| 38 | + imp(var("Z"))); |
| 39 | + } |
| 40 | + |
| 41 | + @Test |
| 42 | + public void test03_sanity() { |
| 43 | + Set<BologImp> imps = new HashSet<>(); |
| 44 | + for (char i = 'A'; i < 'Y'; i++) { |
| 45 | + imps.add(imp(var(Character.toString(i)), var(Character.toString(i)))); |
| 46 | + } |
| 47 | + assertEquals(setOf(), BologMaster.leastModel(imps)); |
| 48 | + |
| 49 | + Set<String> chars = new HashSet<>(); |
| 50 | + for (char i = 'A'; i < 'Y'; i++) { |
| 51 | + imps.add(imp(var(Character.toString(i)))); |
| 52 | + chars.add(Character.toString(i)); |
| 53 | + } |
| 54 | + assertEquals(chars, BologMaster.leastModel(imps)); |
| 55 | + } |
| 56 | + |
| 57 | + |
| 58 | + private static void checkModel(Set<String> model, BologNode... imp) { |
| 59 | + Set<BologNode> nodes = new HashSet<>(Arrays.asList(imp)); |
| 60 | + Set<BologImp> nodecast = new HashSet<>(); |
| 61 | + for (BologNode node : nodes) nodecast.add((BologImp) node); |
| 62 | + assertEquals(model, BologMaster.leastModel(nodecast)); |
| 63 | + } |
| 64 | + |
| 65 | + @SafeVarargs |
| 66 | + private static <T> Set<T> setOf(T... elems) { |
| 67 | + return new HashSet<>(Arrays.asList(elems)); |
| 68 | + } |
| 69 | +} |
0 commit comments