/src/test/java/com/tr/rp/rpl/TestRPLExamples.java

https://github.com/tjitze/RankPL · Java · 284 lines · 256 code · 23 blank · 5 comment · 19 complexity · 6f6b51fb7a4f4a57df4207752efa6211 MD5 · raw file

  1. package com.tr.rp.rpl;
  2. import java.util.Arrays;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.LinkedHashMap;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import java.util.Set;
  9. import com.tr.rp.RankPL;
  10. import com.tr.rp.ast.statements.Program;
  11. import com.tr.rp.base.Rank;
  12. import com.tr.rp.executors.Guard;
  13. import junit.framework.TestCase;
  14. public class TestRPLExamples extends TestCase {
  15. public TestRPLExamples() {
  16. Guard.setEnabled(true);
  17. }
  18. public void testBoolCircuitExample() {
  19. Map<Integer, Set<String>> expectedResultMap = new HashMap<Integer, Set<String>>();
  20. expectedResultMap.put(0, new HashSet<String>(Arrays.asList(
  21. "X1 broken: true, X2 broken: false, A1 broken: false, a2 broken: false, O1 broken: false"
  22. )));
  23. expectedResultMap.put(1, new HashSet<String>(Arrays.asList(
  24. "X1 broken: false, X2 broken: true, A1 broken: false, a2 broken: true, O1 broken: false",
  25. "X1 broken: false, X2 broken: true, A1 broken: false, a2 broken: false, O1 broken: true",
  26. "X1 broken: true, X2 broken: true, A1 broken: false, a2 broken: false, O1 broken: false",
  27. "X1 broken: false, X2 broken: true, A1 broken: true, a2 broken: false, O1 broken: false",
  28. "X1 broken: true, X2 broken: false, A1 broken: true, a2 broken: false, O1 broken: false",
  29. "X1 broken: true, X2 broken: false, A1 broken: false, a2 broken: false, O1 broken: true",
  30. "X1 broken: true, X2 broken: false, A1 broken: false, a2 broken: true, O1 broken: false"
  31. )));
  32. expectedResultMap.put(2, new HashSet<String>(Arrays.asList(
  33. "X1 broken: true, X2 broken: true, A1 broken: true, a2 broken: false, O1 broken: false",
  34. "X1 broken: true, X2 broken: false, A1 broken: true, a2 broken: true, O1 broken: false",
  35. "X1 broken: false, X2 broken: true, A1 broken: true, a2 broken: true, O1 broken: false",
  36. "X1 broken: true, X2 broken: true, A1 broken: false, a2 broken: true, O1 broken: false",
  37. "X1 broken: true, X2 broken: false, A1 broken: false, a2 broken: true, O1 broken: true",
  38. "X1 broken: false, X2 broken: true, A1 broken: false, a2 broken: true, O1 broken: true",
  39. "X1 broken: false, X2 broken: true, A1 broken: true, a2 broken: false, O1 broken: true",
  40. "X1 broken: true, X2 broken: true, A1 broken: false, a2 broken: false, O1 broken: true",
  41. "X1 broken: true, X2 broken: false, A1 broken: true, a2 broken: false, O1 broken: true"
  42. )));
  43. expectedResultMap.put(3, new HashSet<String>(Arrays.asList(
  44. "X1 broken: true, X2 broken: true, A1 broken: true, a2 broken: true, O1 broken: false",
  45. "X1 broken: true, X2 broken: true, A1 broken: true, a2 broken: false, O1 broken: true",
  46. "X1 broken: true, X2 broken: false, A1 broken: true, a2 broken: true, O1 broken: true",
  47. "X1 broken: true, X2 broken: true, A1 broken: false, a2 broken: true, O1 broken: true",
  48. "X1 broken: false, X2 broken: true, A1 broken: true, a2 broken: true, O1 broken: true"
  49. )));
  50. expectedResultMap.put(4, new HashSet<String>(Arrays.asList(
  51. "X1 broken: true, X2 broken: true, A1 broken: true, a2 broken: true, O1 broken: true"
  52. )));
  53. String file = "./examples/boolcircuit.rpl";
  54. try {
  55. System.out.print("Running test " + file + "... ");
  56. String source = RankPL.getFileContent(file);
  57. Program program = RankPL.parse(source);
  58. if (program == null) {
  59. fail("Parse error");
  60. }
  61. Map<Integer, Set<String>> resultMap = RankPL.execute(program, Rank.MAX, Rank.MAX, false, false);
  62. assertEquals(expectedResultMap, resultMap);
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. fail("Failure: " + e.toString());
  66. }
  67. }
  68. public void testRankingNetworkExample() {
  69. Map<Integer, Set<String>> expectedResultMap = new HashMap<Integer, Set<String>>();
  70. expectedResultMap.put(0, new HashSet<String>(Arrays.asList(
  71. "rain: false sprinkler: true grass_wet: true"
  72. )));
  73. expectedResultMap.put(2, new HashSet<String>(Arrays.asList(
  74. "rain: true sprinkler: true grass_wet: true",
  75. "rain: false sprinkler: true grass_wet: false"
  76. )));
  77. expectedResultMap.put(7, new HashSet<String>(Arrays.asList(
  78. "rain: true sprinkler: true grass_wet: false"
  79. )));
  80. String file = "./examples/rankingnetwork.rpl";
  81. try {
  82. System.out.print("Running test " + file + "... ");
  83. String source = RankPL.getFileContent(file);
  84. Program program = RankPL.parse(source);
  85. if (program == null) {
  86. fail("Parse error");
  87. }
  88. Map<Integer, Set<String>> resultMap = RankPL.execute(program, Rank.MAX, Rank.MAX, false, false);
  89. assertEquals(expectedResultMap, resultMap);
  90. } catch (Exception e) {
  91. e.printStackTrace();
  92. fail("Failure: " + e.toString());
  93. }
  94. }
  95. public void testSpellingCorrectorExample() {
  96. Map<Integer, Set<String>> expectedResultMap = new HashMap<Integer, Set<String>>();
  97. expectedResultMap.put(0, new HashSet<String>(Arrays.asList(
  98. "twelve", "eleven"
  99. )));
  100. expectedResultMap.put(2, new HashSet<String>(Arrays.asList(
  101. "seven"
  102. )));
  103. expectedResultMap.put(3, new HashSet<String>(Arrays.asList(
  104. "thirteen", "fifteen", "sixteen", "ten", "twenty", "three", "nineteen"
  105. )));
  106. expectedResultMap.put(4, new HashSet<String>(Arrays.asList(
  107. "eighteen", "fourteen", "two", "five", "seventeen"
  108. )));
  109. expectedResultMap.put(5, new HashSet<String>(Arrays.asList(
  110. "eight", "one", "nine"
  111. )));
  112. expectedResultMap.put(6, new HashSet<String>(Arrays.asList(
  113. "four", "six"
  114. )));
  115. String file = "./examples/spellingcorrector.rpl";
  116. try {
  117. System.out.print("Running test " + file + "... ");
  118. String source = RankPL.getFileContent(file);
  119. Program program = RankPL.parse(source);
  120. if (program == null) {
  121. fail("Parse error");
  122. }
  123. Map<Integer, Set<String>> resultMap = RankPL.execute(program, Rank.MAX, Rank.MAX, false, false);
  124. assertEquals(expectedResultMap, resultMap);
  125. } catch (Exception e) {
  126. e.printStackTrace();
  127. fail("Failure: " + e.toString());
  128. }
  129. }
  130. public void testSpellingCorrectorExample10K() {
  131. // We test a couple of different inputs and compare the first match
  132. String actualExample = "inkorrect";
  133. Map<String, String> expectedResults = new LinkedHashMap<String, String>();
  134. expectedResults.put("inkorrect", "incorrect");
  135. expectedResults.put("switzerland", "switzerland");
  136. expectedResults.put("swizerland", "switzerland");
  137. expectedResults.put("switxzerland", "switzerland");
  138. expectedResults.put("svitzerland", "switzerland");
  139. expectedResults.put("svvitzerland", "switzerland");
  140. expectedResults.put("serbia", "serbia");
  141. expectedResults.put("srbia", "serbia");
  142. expectedResults.put("serrbia", "serbia");
  143. expectedResults.put("serbja", "serbia");
  144. for (Entry<String, String> entry: expectedResults.entrySet()) {
  145. String file = "./examples/spellingcorrector-10K-words.rpl";
  146. try {
  147. System.out.println("Running test " + file + " with input " + entry.getKey());
  148. String source = RankPL.getFileContent(file);
  149. source = source.replaceFirst(actualExample, entry.getKey());
  150. Program program = RankPL.parse(source);
  151. if (program == null) {
  152. fail("Parse error");
  153. }
  154. Map<Integer, Set<String>> resultMap = RankPL.execute(program, Rank.MAX, Rank.MAX, false, true);
  155. assertTrue(resultMap.size() == 1);
  156. assertTrue(resultMap.get(0).size() == 1);
  157. assertEquals(entry.getValue(), resultMap.get(0).iterator().next());
  158. } catch (Exception e) {
  159. e.printStackTrace();
  160. fail("Failure: " + e.toString());
  161. }
  162. }
  163. }
  164. public void testLocalizerExample() {
  165. Map<Integer, Set<String>> expectedResultMapK1 = new HashMap<Integer, Set<String>>();
  166. expectedResultMapK1.put(0, new HashSet<String>(Arrays.asList(
  167. "Inferred location (1, 5)",
  168. "Inferred location (2, 5)",
  169. "Inferred location (3, 5)",
  170. "Inferred location (5, 4)"
  171. )));
  172. expectedResultMapK1.put(1, new HashSet<String>(Arrays.asList(
  173. "Inferred location (10, 4)",
  174. "Inferred location (9, 4)",
  175. "Inferred location (8, 4)",
  176. "Inferred location (7, 4)",
  177. "Inferred location (6, 4)",
  178. "Inferred location (4, 4)",
  179. "Inferred location (10, 5)",
  180. "Inferred location (9, 5)",
  181. "Inferred location (8, 5)",
  182. "Inferred location (7, 5)",
  183. "Inferred location (6, 5)",
  184. "Inferred location (4, 5)"
  185. )));
  186. Map<Integer, Set<String>> expectedResultMapK2 = new HashMap<Integer, Set<String>>();
  187. expectedResultMapK2.put(0, new HashSet<String>(Arrays.asList(
  188. "Inferred location (6, 4)"
  189. )));
  190. expectedResultMapK2.put(1, new HashSet<String>(Arrays.asList(
  191. "Inferred location (2, 5)",
  192. "Inferred location (4, 5)",
  193. "Inferred location (3, 5)",
  194. "Inferred location (7, 4)",
  195. "Inferred location (8, 4)",
  196. "Inferred location (9, 4)",
  197. "Inferred location (10, 4)"
  198. )));
  199. Map<Integer, Set<String>> expectedResultMapK3 = new HashMap<Integer, Set<String>>();
  200. expectedResultMapK3.put(0, new HashSet<String>(Arrays.asList(
  201. "Inferred location (7, 4)",
  202. "Inferred location (3, 5)"
  203. )));
  204. expectedResultMapK3.put(1, new HashSet<String>(Arrays.asList(
  205. "Inferred location (8, 4)",
  206. "Inferred location (9, 4)",
  207. "Inferred location (10, 4)",
  208. "Inferred location (4, 5)"
  209. )));
  210. Map<Integer, Set<String>> expectedResultMapK4 = new HashMap<Integer, Set<String>>();
  211. expectedResultMapK4.put(0, new HashSet<String>(Arrays.asList(
  212. "Inferred location (4, 5)"
  213. )));
  214. expectedResultMapK4.put(1, new HashSet<String>(Arrays.asList(
  215. "Inferred location (8, 4)"
  216. )));
  217. String file = "./examples/localizer.rpl";
  218. try {
  219. System.out.print("Running test " + file + "... ");
  220. // K1
  221. String source = RankPL.getFileContent(file);
  222. source = source.replaceFirst("k := 1", "k := 1");
  223. Program program = RankPL.parse(source);
  224. if (program == null) {
  225. fail("Parse error");
  226. }
  227. Map<Integer, Set<String>> resultMap = RankPL.execute(program, Rank.MAX, 1, false, false);
  228. assertEquals(expectedResultMapK1, resultMap);
  229. // K2
  230. source = RankPL.getFileContent(file);
  231. source = source.replaceFirst("k := 1", "k := 2");
  232. program = RankPL.parse(source);
  233. if (program == null) {
  234. fail("Parse error");
  235. }
  236. resultMap = RankPL.execute(program, Rank.MAX, 1, false, false);
  237. assertEquals(expectedResultMapK2, resultMap);
  238. // K3
  239. source = RankPL.getFileContent(file);
  240. source = source.replaceFirst("k := 1", "k := 3");
  241. program = RankPL.parse(source);
  242. if (program == null) {
  243. fail("Parse error");
  244. }
  245. resultMap = RankPL.execute(program, Rank.MAX, 1, false, false);
  246. assertEquals(expectedResultMapK3, resultMap);
  247. // K4
  248. source = RankPL.getFileContent(file);
  249. source = source.replaceFirst("k := 1", "k := 4");
  250. program = RankPL.parse(source);
  251. if (program == null) {
  252. fail("Parse error");
  253. }
  254. resultMap = RankPL.execute(program, Rank.MAX, 1, false, false);
  255. assertEquals(expectedResultMapK4, resultMap);
  256. } catch (Exception e) {
  257. e.printStackTrace();
  258. fail("Failure: " + e.toString());
  259. }
  260. }
  261. }