khammurabi 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. data/khammurabi-0.2/docs/classes/Array.html +563 -0
  2. data/khammurabi-0.2/docs/classes/Array.src/M000004.html +21 -0
  3. data/khammurabi-0.2/docs/classes/Array.src/M000005.html +18 -0
  4. data/khammurabi-0.2/docs/classes/Array.src/M000006.html +27 -0
  5. data/khammurabi-0.2/docs/classes/Array.src/M000007.html +23 -0
  6. data/khammurabi-0.2/docs/classes/Array.src/M000008.html +29 -0
  7. data/khammurabi-0.2/docs/classes/Array.src/M000009.html +47 -0
  8. data/khammurabi-0.2/docs/classes/Array.src/M000010.html +19 -0
  9. data/khammurabi-0.2/docs/classes/Array.src/M000011.html +22 -0
  10. data/khammurabi-0.2/docs/classes/Array.src/M000012.html +22 -0
  11. data/khammurabi-0.2/docs/classes/Array.src/M000013.html +22 -0
  12. data/khammurabi-0.2/docs/classes/Array.src/M000014.html +16 -0
  13. data/khammurabi-0.2/docs/classes/Array.src/M000015.html +20 -0
  14. data/khammurabi-0.2/docs/classes/Array.src/M000016.html +29 -0
  15. data/khammurabi-0.2/docs/classes/Array.src/M000017.html +25 -0
  16. data/khammurabi-0.2/docs/classes/Array.src/M000018.html +16 -0
  17. data/khammurabi-0.2/docs/classes/Array.src/M000019.html +16 -0
  18. data/khammurabi-0.2/docs/classes/Array.src/M000020.html +16 -0
  19. data/khammurabi-0.2/docs/classes/Array.src/M000021.html +16 -0
  20. data/khammurabi-0.2/docs/classes/Array.src/M000022.html +16 -0
  21. data/khammurabi-0.2/docs/classes/Array.src/M000023.html +16 -0
  22. data/khammurabi-0.2/docs/classes/Array.src/M000024.html +16 -0
  23. data/khammurabi-0.2/docs/classes/Array.src/M000025.html +16 -0
  24. data/khammurabi-0.2/docs/classes/Array.src/M000026.html +16 -0
  25. data/khammurabi-0.2/docs/classes/Array.src/M000027.html +16 -0
  26. data/khammurabi-0.2/docs/classes/Array.src/M000028.html +16 -0
  27. data/khammurabi-0.2/docs/classes/FalseClass.html +139 -0
  28. data/khammurabi-0.2/docs/classes/FalseClass.src/M000003.html +16 -0
  29. data/khammurabi-0.2/docs/classes/Fixnum.html +139 -0
  30. data/khammurabi-0.2/docs/classes/Fixnum.src/M000041.html +22 -0
  31. data/khammurabi-0.2/docs/classes/Hash.html +163 -0
  32. data/khammurabi-0.2/docs/classes/Hash.src/M000001.html +28 -0
  33. data/khammurabi-0.2/docs/classes/Hash.src/M000002.html +22 -0
  34. data/khammurabi-0.2/docs/classes/Hostilities.html +187 -0
  35. data/khammurabi-0.2/docs/classes/Hostilities.src/M000043.html +16 -0
  36. data/khammurabi-0.2/docs/classes/Hostilities.src/M000044.html +16 -0
  37. data/khammurabi-0.2/docs/classes/Hostilities.src/M000045.html +16 -0
  38. data/khammurabi-0.2/docs/classes/Hostilities.src/M000046.html +24 -0
  39. data/khammurabi-0.2/docs/classes/MK.html +330 -0
  40. data/khammurabi-0.2/docs/classes/MK/ActionObjectDelete.html +200 -0
  41. data/khammurabi-0.2/docs/classes/MK/ActionObjectDelete.src/M000194.html +22 -0
  42. data/khammurabi-0.2/docs/classes/MK/ActionObjectDelete.src/M000195.html +19 -0
  43. data/khammurabi-0.2/docs/classes/MK/ActionObjectDelete.src/M000196.html +18 -0
  44. data/khammurabi-0.2/docs/classes/MK/ActionObjectDeleteFromWorkingMemory.html +197 -0
  45. data/khammurabi-0.2/docs/classes/MK/ActionObjectDeleteFromWorkingMemory.src/M000106.html +22 -0
  46. data/khammurabi-0.2/docs/classes/MK/ActionObjectDeleteFromWorkingMemory.src/M000107.html +19 -0
  47. data/khammurabi-0.2/docs/classes/MK/ActionObjectDeleteFromWorkingMemory.src/M000108.html +18 -0
  48. data/khammurabi-0.2/docs/classes/MK/ActionObjectInsert.html +182 -0
  49. data/khammurabi-0.2/docs/classes/MK/ActionObjectInsert.src/M000292.html +22 -0
  50. data/khammurabi-0.2/docs/classes/MK/ActionObjectInsert.src/M000293.html +18 -0
  51. data/khammurabi-0.2/docs/classes/MK/ActionObjectModifyWorkingMemory.html +199 -0
  52. data/khammurabi-0.2/docs/classes/MK/ActionObjectModifyWorkingMemory.src/M000289.html +23 -0
  53. data/khammurabi-0.2/docs/classes/MK/ActionObjectModifyWorkingMemory.src/M000290.html +20 -0
  54. data/khammurabi-0.2/docs/classes/MK/ActionObjectModifyWorkingMemory.src/M000291.html +34 -0
  55. data/khammurabi-0.2/docs/classes/MK/ActionOutput.html +236 -0
  56. data/khammurabi-0.2/docs/classes/MK/ActionOutput.src/M000226.html +22 -0
  57. data/khammurabi-0.2/docs/classes/MK/ActionOutput.src/M000227.html +20 -0
  58. data/khammurabi-0.2/docs/classes/MK/ActionOutput.src/M000228.html +19 -0
  59. data/khammurabi-0.2/docs/classes/MK/ActionOutput.src/M000229.html +19 -0
  60. data/khammurabi-0.2/docs/classes/MK/ActionOutput.src/M000230.html +16 -0
  61. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.html +273 -0
  62. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000282.html +20 -0
  63. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000283.html +25 -0
  64. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000284.html +23 -0
  65. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000285.html +20 -0
  66. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000286.html +22 -0
  67. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000287.html +22 -0
  68. data/khammurabi-0.2/docs/classes/MK/ArbitratorNode.src/M000288.html +16 -0
  69. data/khammurabi-0.2/docs/classes/MK/Cluster.html +475 -0
  70. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000329.html +20 -0
  71. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000330.html +19 -0
  72. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000331.html +16 -0
  73. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000332.html +24 -0
  74. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000333.html +26 -0
  75. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000334.html +24 -0
  76. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000335.html +20 -0
  77. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000336.html +21 -0
  78. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000337.html +21 -0
  79. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000338.html +18 -0
  80. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000339.html +16 -0
  81. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000340.html +25 -0
  82. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000341.html +16 -0
  83. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000342.html +16 -0
  84. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000343.html +16 -0
  85. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000344.html +31 -0
  86. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000345.html +16 -0
  87. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000346.html +20 -0
  88. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000347.html +16 -0
  89. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000348.html +16 -0
  90. data/khammurabi-0.2/docs/classes/MK/Cluster.src/M000349.html +16 -0
  91. data/khammurabi-0.2/docs/classes/MK/ClusterManager.html +521 -0
  92. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000305.html +20 -0
  93. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000306.html +20 -0
  94. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000307.html +29 -0
  95. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000308.html +23 -0
  96. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000309.html +21 -0
  97. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000310.html +16 -0
  98. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000311.html +16 -0
  99. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000312.html +21 -0
  100. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000313.html +21 -0
  101. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000314.html +18 -0
  102. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000315.html +32 -0
  103. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000316.html +20 -0
  104. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000317.html +20 -0
  105. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000318.html +18 -0
  106. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000319.html +22 -0
  107. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000320.html +16 -0
  108. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000321.html +21 -0
  109. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000322.html +23 -0
  110. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000323.html +16 -0
  111. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000324.html +16 -0
  112. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000325.html +30 -0
  113. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000326.html +16 -0
  114. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000327.html +18 -0
  115. data/khammurabi-0.2/docs/classes/MK/ClusterManager.src/M000328.html +39 -0
  116. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.html +271 -0
  117. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000186.html +19 -0
  118. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000187.html +23 -0
  119. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000188.html +25 -0
  120. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000189.html +23 -0
  121. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000190.html +22 -0
  122. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000191.html +33 -0
  123. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000192.html +21 -0
  124. data/khammurabi-0.2/docs/classes/MK/ConstantObjectOperation.src/M000193.html +16 -0
  125. data/khammurabi-0.2/docs/classes/MK/ConstantTestNode.html +185 -0
  126. data/khammurabi-0.2/docs/classes/MK/ConstantTestNode.src/M000251.html +20 -0
  127. data/khammurabi-0.2/docs/classes/MK/ConstantTestNode.src/M000252.html +23 -0
  128. data/khammurabi-0.2/docs/classes/MK/ConstantTestNode.src/M000253.html +41 -0
  129. data/khammurabi-0.2/docs/classes/MK/Engine.html +770 -0
  130. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000115.html +30 -0
  131. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000116.html +32 -0
  132. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000117.html +19 -0
  133. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000118.html +29 -0
  134. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000119.html +18 -0
  135. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000120.html +18 -0
  136. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000121.html +20 -0
  137. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000122.html +22 -0
  138. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000123.html +21 -0
  139. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000124.html +18 -0
  140. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000125.html +19 -0
  141. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000126.html +16 -0
  142. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000127.html +16 -0
  143. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000128.html +153 -0
  144. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000129.html +16 -0
  145. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000130.html +19 -0
  146. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000131.html +24 -0
  147. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000132.html +16 -0
  148. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000133.html +16 -0
  149. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000134.html +46 -0
  150. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000135.html +16 -0
  151. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000136.html +16 -0
  152. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000137.html +20 -0
  153. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000138.html +29 -0
  154. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000139.html +16 -0
  155. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000140.html +16 -0
  156. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000141.html +20 -0
  157. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000142.html +27 -0
  158. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000143.html +26 -0
  159. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000144.html +23 -0
  160. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000145.html +19 -0
  161. data/khammurabi-0.2/docs/classes/MK/Engine.src/M000146.html +25 -0
  162. data/khammurabi-0.2/docs/classes/MK/EqualityTest.html +177 -0
  163. data/khammurabi-0.2/docs/classes/MK/EqualityTest.src/M000092.html +19 -0
  164. data/khammurabi-0.2/docs/classes/MK/EqualityTest.src/M000093.html +20 -0
  165. data/khammurabi-0.2/docs/classes/MK/EqualityTest.src/M000094.html +19 -0
  166. data/khammurabi-0.2/docs/classes/MK/FalseTest.html +177 -0
  167. data/khammurabi-0.2/docs/classes/MK/FalseTest.src/M000397.html +19 -0
  168. data/khammurabi-0.2/docs/classes/MK/FalseTest.src/M000398.html +20 -0
  169. data/khammurabi-0.2/docs/classes/MK/FalseTest.src/M000399.html +19 -0
  170. data/khammurabi-0.2/docs/classes/MK/GraphNode.html +823 -0
  171. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000361.html +28 -0
  172. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000362.html +20 -0
  173. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000363.html +16 -0
  174. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000364.html +19 -0
  175. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000365.html +16 -0
  176. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000366.html +16 -0
  177. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000367.html +20 -0
  178. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000368.html +26 -0
  179. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000369.html +19 -0
  180. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000370.html +19 -0
  181. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000371.html +23 -0
  182. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000372.html +16 -0
  183. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000373.html +16 -0
  184. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000374.html +19 -0
  185. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000375.html +19 -0
  186. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000376.html +16 -0
  187. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000377.html +19 -0
  188. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000378.html +16 -0
  189. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000379.html +25 -0
  190. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000380.html +19 -0
  191. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000381.html +24 -0
  192. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000382.html +20 -0
  193. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000383.html +23 -0
  194. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000384.html +16 -0
  195. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000385.html +31 -0
  196. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000386.html +16 -0
  197. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000387.html +22 -0
  198. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000388.html +19 -0
  199. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000389.html +19 -0
  200. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000390.html +25 -0
  201. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000391.html +50 -0
  202. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000392.html +31 -0
  203. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000393.html +18 -0
  204. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000394.html +18 -0
  205. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000395.html +17 -0
  206. data/khammurabi-0.2/docs/classes/MK/GraphNode.src/M000396.html +16 -0
  207. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.html +261 -0
  208. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000276.html +23 -0
  209. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000277.html +22 -0
  210. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000278.html +30 -0
  211. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000279.html +19 -0
  212. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000280.html +29 -0
  213. data/khammurabi-0.2/docs/classes/MK/GraphNodeJoiner.src/M000281.html +19 -0
  214. data/khammurabi-0.2/docs/classes/MK/GreaterThanOrEqualTest.html +177 -0
  215. data/khammurabi-0.2/docs/classes/MK/GreaterThanOrEqualTest.src/M000095.html +19 -0
  216. data/khammurabi-0.2/docs/classes/MK/GreaterThanOrEqualTest.src/M000096.html +20 -0
  217. data/khammurabi-0.2/docs/classes/MK/GreaterThanOrEqualTest.src/M000097.html +19 -0
  218. data/khammurabi-0.2/docs/classes/MK/GreaterThanTest.html +177 -0
  219. data/khammurabi-0.2/docs/classes/MK/GreaterThanTest.src/M000112.html +19 -0
  220. data/khammurabi-0.2/docs/classes/MK/GreaterThanTest.src/M000113.html +20 -0
  221. data/khammurabi-0.2/docs/classes/MK/GreaterThanTest.src/M000114.html +20 -0
  222. data/khammurabi-0.2/docs/classes/MK/IncorporatorTest.html +139 -0
  223. data/khammurabi-0.2/docs/classes/MK/IncorporatorTest.src/M000294.html +36 -0
  224. data/khammurabi-0.2/docs/classes/MK/InequalityTest.html +177 -0
  225. data/khammurabi-0.2/docs/classes/MK/InequalityTest.src/M000231.html +19 -0
  226. data/khammurabi-0.2/docs/classes/MK/InequalityTest.src/M000232.html +20 -0
  227. data/khammurabi-0.2/docs/classes/MK/InequalityTest.src/M000233.html +19 -0
  228. data/khammurabi-0.2/docs/classes/MK/InstantiatorNode.html +194 -0
  229. data/khammurabi-0.2/docs/classes/MK/InstantiatorNode.src/M000083.html +22 -0
  230. data/khammurabi-0.2/docs/classes/MK/InstantiatorNode.src/M000084.html +20 -0
  231. data/khammurabi-0.2/docs/classes/MK/InstantiatorNode.src/M000085.html +45 -0
  232. data/khammurabi-0.2/docs/classes/MK/LessThanOrEqualTest.html +177 -0
  233. data/khammurabi-0.2/docs/classes/MK/LessThanOrEqualTest.src/M000109.html +19 -0
  234. data/khammurabi-0.2/docs/classes/MK/LessThanOrEqualTest.src/M000110.html +20 -0
  235. data/khammurabi-0.2/docs/classes/MK/LessThanOrEqualTest.src/M000111.html +19 -0
  236. data/khammurabi-0.2/docs/classes/MK/LessThanTest.html +177 -0
  237. data/khammurabi-0.2/docs/classes/MK/LessThanTest.src/M000089.html +19 -0
  238. data/khammurabi-0.2/docs/classes/MK/LessThanTest.src/M000090.html +20 -0
  239. data/khammurabi-0.2/docs/classes/MK/LessThanTest.src/M000091.html +19 -0
  240. data/khammurabi-0.2/docs/classes/MK/Message.html +167 -0
  241. data/khammurabi-0.2/docs/classes/MK/Message.src/M000081.html +20 -0
  242. data/khammurabi-0.2/docs/classes/MK/Message.src/M000082.html +18 -0
  243. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.html +291 -0
  244. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000243.html +20 -0
  245. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000244.html +25 -0
  246. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000245.html +23 -0
  247. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000246.html +35 -0
  248. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000247.html +23 -0
  249. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000248.html +22 -0
  250. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000249.html +22 -0
  251. data/khammurabi-0.2/docs/classes/MK/MultiChildrenArbitratorNode.src/M000250.html +16 -0
  252. data/khammurabi-0.2/docs/classes/MK/MultiChildrenSelectorNode.html +219 -0
  253. data/khammurabi-0.2/docs/classes/MK/MultiChildrenSelectorNode.src/M000161.html +22 -0
  254. data/khammurabi-0.2/docs/classes/MK/MultiChildrenSelectorNode.src/M000162.html +23 -0
  255. data/khammurabi-0.2/docs/classes/MK/MultiChildrenSelectorNode.src/M000163.html +54 -0
  256. data/khammurabi-0.2/docs/classes/MK/MultiChildrenSelectorNode.src/M000164.html +18 -0
  257. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.html +564 -0
  258. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000059.html +21 -0
  259. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000060.html +21 -0
  260. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000061.html +18 -0
  261. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000062.html +24 -0
  262. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000063.html +29 -0
  263. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000064.html +36 -0
  264. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000065.html +23 -0
  265. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000066.html +28 -0
  266. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000067.html +26 -0
  267. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000068.html +16 -0
  268. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000069.html +18 -0
  269. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000070.html +18 -0
  270. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000071.html +16 -0
  271. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000072.html +16 -0
  272. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000073.html +16 -0
  273. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000074.html +16 -0
  274. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000075.html +16 -0
  275. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000076.html +16 -0
  276. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000077.html +22 -0
  277. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000078.html +24 -0
  278. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000079.html +23 -0
  279. data/khammurabi-0.2/docs/classes/MK/ObjectDescription.src/M000080.html +16 -0
  280. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.html +256 -0
  281. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000180.html +19 -0
  282. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000181.html +21 -0
  283. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000182.html +21 -0
  284. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000183.html +16 -0
  285. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000184.html +19 -0
  286. data/khammurabi-0.2/docs/classes/MK/ObjectGraphWrapper.src/M000185.html +16 -0
  287. data/khammurabi-0.2/docs/classes/MK/ObjectIDEqualityTest.html +177 -0
  288. data/khammurabi-0.2/docs/classes/MK/ObjectIDEqualityTest.src/M000400.html +19 -0
  289. data/khammurabi-0.2/docs/classes/MK/ObjectIDEqualityTest.src/M000401.html +20 -0
  290. data/khammurabi-0.2/docs/classes/MK/ObjectIDEqualityTest.src/M000402.html +19 -0
  291. data/khammurabi-0.2/docs/classes/MK/ObjectIDInequalityTest.html +177 -0
  292. data/khammurabi-0.2/docs/classes/MK/ObjectIDInequalityTest.src/M000056.html +19 -0
  293. data/khammurabi-0.2/docs/classes/MK/ObjectIDInequalityTest.src/M000057.html +20 -0
  294. data/khammurabi-0.2/docs/classes/MK/ObjectIDInequalityTest.src/M000058.html +19 -0
  295. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.html +290 -0
  296. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000098.html +19 -0
  297. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000099.html +23 -0
  298. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000100.html +18 -0
  299. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000101.html +18 -0
  300. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000102.html +16 -0
  301. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000103.html +16 -0
  302. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000104.html +19 -0
  303. data/khammurabi-0.2/docs/classes/MK/ObjectOperation.src/M000105.html +16 -0
  304. data/khammurabi-0.2/docs/classes/MK/ObjectProduction.html +223 -0
  305. data/khammurabi-0.2/docs/classes/MK/ObjectProduction.src/M000239.html +24 -0
  306. data/khammurabi-0.2/docs/classes/MK/ObjectProduction.src/M000240.html +21 -0
  307. data/khammurabi-0.2/docs/classes/MK/ObjectProduction.src/M000241.html +19 -0
  308. data/khammurabi-0.2/docs/classes/MK/ObjectProduction.src/M000242.html +19 -0
  309. data/khammurabi-0.2/docs/classes/MK/ObjectProductionAction.html +211 -0
  310. data/khammurabi-0.2/docs/classes/MK/ObjectProductionAction.src/M000273.html +19 -0
  311. data/khammurabi-0.2/docs/classes/MK/ObjectProductionAction.src/M000274.html +16 -0
  312. data/khammurabi-0.2/docs/classes/MK/ObjectProductionAction.src/M000275.html +19 -0
  313. data/khammurabi-0.2/docs/classes/MK/Pair.html +259 -0
  314. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000298.html +21 -0
  315. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000299.html +18 -0
  316. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000300.html +18 -0
  317. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000301.html +20 -0
  318. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000302.html +16 -0
  319. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000303.html +18 -0
  320. data/khammurabi-0.2/docs/classes/MK/Pair.src/M000304.html +22 -0
  321. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.html +289 -0
  322. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000174.html +22 -0
  323. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000175.html +24 -0
  324. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000176.html +20 -0
  325. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000177.html +18 -0
  326. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000178.html +19 -0
  327. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeNode.src/M000179.html +16 -0
  328. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.html +230 -0
  329. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.src/M000234.html +20 -0
  330. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.src/M000235.html +18 -0
  331. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.src/M000236.html +21 -0
  332. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.src/M000237.html +36 -0
  333. data/khammurabi-0.2/docs/classes/MK/ReteParseTreePrinter.src/M000238.html +16 -0
  334. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeToObjectDescriptionConverter.html +219 -0
  335. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeToObjectDescriptionConverter.src/M000170.html +20 -0
  336. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeToObjectDescriptionConverter.src/M000171.html +18 -0
  337. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeToObjectDescriptionConverter.src/M000172.html +16 -0
  338. data/khammurabi-0.2/docs/classes/MK/ReteParseTreeToObjectDescriptionConverter.src/M000173.html +60 -0
  339. data/khammurabi-0.2/docs/classes/MK/RootNode.html +181 -0
  340. data/khammurabi-0.2/docs/classes/MK/RootNode.src/M000295.html +22 -0
  341. data/khammurabi-0.2/docs/classes/MK/RootNode.src/M000296.html +19 -0
  342. data/khammurabi-0.2/docs/classes/MK/RootNode.src/M000297.html +21 -0
  343. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.html +247 -0
  344. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.src/M000165.html +18 -0
  345. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.src/M000166.html +20 -0
  346. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.src/M000167.html +18 -0
  347. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.src/M000168.html +20 -0
  348. data/khammurabi-0.2/docs/classes/MK/TestIDRegistrar.src/M000169.html +28 -0
  349. data/khammurabi-0.2/docs/classes/MK/TestNode.html +203 -0
  350. data/khammurabi-0.2/docs/classes/MK/TestNode.src/M000350.html +18 -0
  351. data/khammurabi-0.2/docs/classes/MK/TestNode.src/M000351.html +20 -0
  352. data/khammurabi-0.2/docs/classes/MK/TestNode.src/M000352.html +16 -0
  353. data/khammurabi-0.2/docs/classes/MK/Token.html +541 -0
  354. data/khammurabi-0.2/docs/classes/MK/Token.src/M000254.html +24 -0
  355. data/khammurabi-0.2/docs/classes/MK/Token.src/M000255.html +16 -0
  356. data/khammurabi-0.2/docs/classes/MK/Token.src/M000256.html +31 -0
  357. data/khammurabi-0.2/docs/classes/MK/Token.src/M000257.html +16 -0
  358. data/khammurabi-0.2/docs/classes/MK/Token.src/M000258.html +16 -0
  359. data/khammurabi-0.2/docs/classes/MK/Token.src/M000259.html +18 -0
  360. data/khammurabi-0.2/docs/classes/MK/Token.src/M000260.html +28 -0
  361. data/khammurabi-0.2/docs/classes/MK/Token.src/M000261.html +26 -0
  362. data/khammurabi-0.2/docs/classes/MK/Token.src/M000262.html +16 -0
  363. data/khammurabi-0.2/docs/classes/MK/Token.src/M000263.html +20 -0
  364. data/khammurabi-0.2/docs/classes/MK/Token.src/M000264.html +20 -0
  365. data/khammurabi-0.2/docs/classes/MK/Token.src/M000265.html +33 -0
  366. data/khammurabi-0.2/docs/classes/MK/Token.src/M000266.html +16 -0
  367. data/khammurabi-0.2/docs/classes/MK/Token.src/M000267.html +16 -0
  368. data/khammurabi-0.2/docs/classes/MK/Token.src/M000268.html +19 -0
  369. data/khammurabi-0.2/docs/classes/MK/Token.src/M000269.html +24 -0
  370. data/khammurabi-0.2/docs/classes/MK/Token.src/M000270.html +16 -0
  371. data/khammurabi-0.2/docs/classes/MK/Token.src/M000271.html +18 -0
  372. data/khammurabi-0.2/docs/classes/MK/Token.src/M000272.html +16 -0
  373. data/khammurabi-0.2/docs/classes/MK/TokenCluster.html +369 -0
  374. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000211.html +16 -0
  375. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000212.html +16 -0
  376. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000213.html +16 -0
  377. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000214.html +16 -0
  378. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000215.html +16 -0
  379. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000216.html +16 -0
  380. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000217.html +16 -0
  381. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000218.html +19 -0
  382. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000219.html +34 -0
  383. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000220.html +19 -0
  384. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000221.html +25 -0
  385. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000222.html +31 -0
  386. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000223.html +92 -0
  387. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000224.html +31 -0
  388. data/khammurabi-0.2/docs/classes/MK/TokenCluster.src/M000225.html +16 -0
  389. data/khammurabi-0.2/docs/classes/MK/TokenClusterManager.html +156 -0
  390. data/khammurabi-0.2/docs/classes/MK/TokenClusterManager.src/M000209.html +19 -0
  391. data/khammurabi-0.2/docs/classes/MK/TokenClusterManager.src/M000210.html +34 -0
  392. data/khammurabi-0.2/docs/classes/MK/TrueTest.html +177 -0
  393. data/khammurabi-0.2/docs/classes/MK/TrueTest.src/M000053.html +19 -0
  394. data/khammurabi-0.2/docs/classes/MK/TrueTest.src/M000054.html +20 -0
  395. data/khammurabi-0.2/docs/classes/MK/TrueTest.src/M000055.html +19 -0
  396. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.html +258 -0
  397. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000203.html +22 -0
  398. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000204.html +22 -0
  399. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000205.html +20 -0
  400. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000206.html +18 -0
  401. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000207.html +18 -0
  402. data/khammurabi-0.2/docs/classes/MK/UniqueTokenAssurerNode.src/M000208.html +62 -0
  403. data/khammurabi-0.2/docs/classes/MK/ValueTest.html +275 -0
  404. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000153.html +19 -0
  405. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000154.html +16 -0
  406. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000155.html +16 -0
  407. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000156.html +16 -0
  408. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000157.html +30 -0
  409. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000158.html +18 -0
  410. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000159.html +18 -0
  411. data/khammurabi-0.2/docs/classes/MK/ValueTest.src/M000160.html +18 -0
  412. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.html +260 -0
  413. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000197.html +20 -0
  414. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000198.html +25 -0
  415. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000199.html +48 -0
  416. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000200.html +19 -0
  417. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000201.html +21 -0
  418. data/khammurabi-0.2/docs/classes/MK/VariableObjectOperation.src/M000202.html +16 -0
  419. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.html +317 -0
  420. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000353.html +24 -0
  421. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000354.html +21 -0
  422. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000355.html +21 -0
  423. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000356.html +25 -0
  424. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000357.html +23 -0
  425. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000358.html +25 -0
  426. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000359.html +25 -0
  427. data/khammurabi-0.2/docs/classes/MK/VariableTestNode.src/M000360.html +19 -0
  428. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.html +249 -0
  429. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000147.html +22 -0
  430. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000148.html +20 -0
  431. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000149.html +16 -0
  432. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000150.html +19 -0
  433. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000151.html +21 -0
  434. data/khammurabi-0.2/docs/classes/MK/VariableTestNodeExecutor.src/M000152.html +216 -0
  435. data/khammurabi-0.2/docs/classes/MK/XiaccEngine.html +191 -0
  436. data/khammurabi-0.2/docs/classes/MK/XiaccEngine.src/M000051.html +122 -0
  437. data/khammurabi-0.2/docs/classes/MK/XiaccEngine.src/M000052.html +69 -0
  438. data/khammurabi-0.2/docs/classes/MK/XiaccParseInput.html +172 -0
  439. data/khammurabi-0.2/docs/classes/MK/XiaccParseInput.src/M000049.html +24 -0
  440. data/khammurabi-0.2/docs/classes/MK/XiaccParseInput.src/M000050.html +20 -0
  441. data/khammurabi-0.2/docs/classes/MK/XiaccParseSpecification.html +174 -0
  442. data/khammurabi-0.2/docs/classes/MK/XiaccParseSpecification.src/M000047.html +21 -0
  443. data/khammurabi-0.2/docs/classes/MK/XiaccParseSpecification.src/M000048.html +20 -0
  444. data/khammurabi-0.2/docs/classes/MK/ZombieNode.html +181 -0
  445. data/khammurabi-0.2/docs/classes/MK/ZombieNode.src/M000086.html +21 -0
  446. data/khammurabi-0.2/docs/classes/MK/ZombieNode.src/M000087.html +18 -0
  447. data/khammurabi-0.2/docs/classes/MK/ZombieNode.src/M000088.html +17 -0
  448. data/khammurabi-0.2/docs/classes/Object.html +345 -0
  449. data/khammurabi-0.2/docs/classes/Object.src/M000029.html +21 -0
  450. data/khammurabi-0.2/docs/classes/Object.src/M000030.html +19 -0
  451. data/khammurabi-0.2/docs/classes/Object.src/M000031.html +24 -0
  452. data/khammurabi-0.2/docs/classes/Object.src/M000032.html +19 -0
  453. data/khammurabi-0.2/docs/classes/Object.src/M000033.html +18 -0
  454. data/khammurabi-0.2/docs/classes/Object.src/M000034.html +22 -0
  455. data/khammurabi-0.2/docs/classes/Object.src/M000035.html +16 -0
  456. data/khammurabi-0.2/docs/classes/Object.src/M000036.html +16 -0
  457. data/khammurabi-0.2/docs/classes/Object.src/M000037.html +16 -0
  458. data/khammurabi-0.2/docs/classes/Object.src/M000038.html +16 -0
  459. data/khammurabi-0.2/docs/classes/Object.src/M000039.html +16 -0
  460. data/khammurabi-0.2/docs/classes/Object.src/M000040.html +16 -0
  461. data/khammurabi-0.2/docs/classes/TrueClass.html +139 -0
  462. data/khammurabi-0.2/docs/classes/TrueClass.src/M000042.html +16 -0
  463. data/khammurabi-0.2/docs/created.rid +1 -0
  464. data/khammurabi-0.2/docs/files/License_txt.html +136 -0
  465. data/khammurabi-0.2/docs/files/ReadMe_txt.html +351 -0
  466. data/khammurabi-0.2/docs/files/nist/khammurabi/ActionObjectDeleteFromWorkingMemory_rb.html +109 -0
  467. data/khammurabi-0.2/docs/files/nist/khammurabi/ActionObjectDelete_rb.html +109 -0
  468. data/khammurabi-0.2/docs/files/nist/khammurabi/ActionObjectInsert_rb.html +109 -0
  469. data/khammurabi-0.2/docs/files/nist/khammurabi/ActionObjectModifyWorkingMemory_rb.html +111 -0
  470. data/khammurabi-0.2/docs/files/nist/khammurabi/ActionOutput_rb.html +110 -0
  471. data/khammurabi-0.2/docs/files/nist/khammurabi/ArbitratorNode_rb.html +108 -0
  472. data/khammurabi-0.2/docs/files/nist/khammurabi/ArrayAddon_rb.html +110 -0
  473. data/khammurabi-0.2/docs/files/nist/khammurabi/BooleanAddon_rb.html +101 -0
  474. data/khammurabi-0.2/docs/files/nist/khammurabi/ClusterManager2_rb.html +108 -0
  475. data/khammurabi-0.2/docs/files/nist/khammurabi/ClusterManager_rb.html +108 -0
  476. data/khammurabi-0.2/docs/files/nist/khammurabi/Cluster_rb.html +110 -0
  477. data/khammurabi-0.2/docs/files/nist/khammurabi/ConstantObjectOperation_rb.html +111 -0
  478. data/khammurabi-0.2/docs/files/nist/khammurabi/ConstantTestNode_rb.html +111 -0
  479. data/khammurabi-0.2/docs/files/nist/khammurabi/Engine_rb.html +128 -0
  480. data/khammurabi-0.2/docs/files/nist/khammurabi/FixnumAddon_rb.html +101 -0
  481. data/khammurabi-0.2/docs/files/nist/khammurabi/GraphNodeJoiner_rb.html +110 -0
  482. data/khammurabi-0.2/docs/files/nist/khammurabi/GraphNode_rb.html +109 -0
  483. data/khammurabi-0.2/docs/files/nist/khammurabi/HashAddon_rb.html +101 -0
  484. data/khammurabi-0.2/docs/files/nist/khammurabi/Hostilities_rb.html +108 -0
  485. data/khammurabi-0.2/docs/files/nist/khammurabi/InstantiatorNode_rb.html +110 -0
  486. data/khammurabi-0.2/docs/files/nist/khammurabi/Message_rb.html +101 -0
  487. data/khammurabi-0.2/docs/files/nist/khammurabi/MultiChildrenArbitratorNode_rb.html +108 -0
  488. data/khammurabi-0.2/docs/files/nist/khammurabi/MultiChildrenSelectorNode_rb.html +108 -0
  489. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectAddon_rb.html +108 -0
  490. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectDescription_rb.html +112 -0
  491. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectGraphWrapper_rb.html +108 -0
  492. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectOperation_rb.html +110 -0
  493. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectProductionAction_rb.html +111 -0
  494. data/khammurabi-0.2/docs/files/nist/khammurabi/ObjectProduction_rb.html +109 -0
  495. data/khammurabi-0.2/docs/files/nist/khammurabi/Pair_rb.html +108 -0
  496. data/khammurabi-0.2/docs/files/nist/khammurabi/QueryNode_rb.html +111 -0
  497. data/khammurabi-0.2/docs/files/nist/khammurabi/ReteParseTreeNode_rb.html +108 -0
  498. data/khammurabi-0.2/docs/files/nist/khammurabi/ReteParseTreePrinter_rb.html +111 -0
  499. data/khammurabi-0.2/docs/files/nist/khammurabi/ReteParseTreeToObjectDescriptionConverter_rb.html +111 -0
  500. data/khammurabi-0.2/docs/files/nist/khammurabi/RootNode_rb.html +109 -0
  501. data/khammurabi-0.2/docs/files/nist/khammurabi/TestIDRegistrar_rb.html +108 -0
  502. data/khammurabi-0.2/docs/files/nist/khammurabi/TestNode_rb.html +109 -0
  503. data/khammurabi-0.2/docs/files/nist/khammurabi/TokenClusterManager_rb.html +110 -0
  504. data/khammurabi-0.2/docs/files/nist/khammurabi/TokenCluster_rb.html +108 -0
  505. data/khammurabi-0.2/docs/files/nist/khammurabi/Token_rb.html +112 -0
  506. data/khammurabi-0.2/docs/files/nist/khammurabi/UniqueTokenAssurerNode_rb.html +110 -0
  507. data/khammurabi-0.2/docs/files/nist/khammurabi/ValueTestSuite_rb.html +108 -0
  508. data/khammurabi-0.2/docs/files/nist/khammurabi/VariableObjectOperation_rb.html +112 -0
  509. data/khammurabi-0.2/docs/files/nist/khammurabi/VariableTestNodeExecutor_rb.html +110 -0
  510. data/khammurabi-0.2/docs/files/nist/khammurabi/VariableTestNode_rb.html +111 -0
  511. data/khammurabi-0.2/docs/files/nist/khammurabi/XiaccEngine_rb.html +126 -0
  512. data/khammurabi-0.2/docs/files/nist/khammurabi/XiaccParseInput_rb.html +108 -0
  513. data/khammurabi-0.2/docs/files/nist/khammurabi/XiaccParseSpecification_rb.html +101 -0
  514. data/khammurabi-0.2/docs/files/nist/khammurabi/ZombieNode_rb.html +108 -0
  515. data/khammurabi-0.2/docs/fr_class_index.html +86 -0
  516. data/khammurabi-0.2/docs/fr_file_index.html +77 -0
  517. data/khammurabi-0.2/docs/fr_method_index.html +428 -0
  518. data/khammurabi-0.2/docs/index.html +24 -0
  519. data/khammurabi-0.2/docs/rdoc-style.css +208 -0
  520. data/khammurabi-0.2/lib/nist/khammurabi/ActionObjectDelete.rb +35 -0
  521. data/khammurabi-0.2/lib/nist/khammurabi/ActionObjectDeleteFromWorkingMemory.rb +34 -0
  522. data/khammurabi-0.2/lib/nist/khammurabi/ActionObjectInsert.rb +29 -0
  523. data/khammurabi-0.2/lib/nist/khammurabi/ActionObjectModifyWorkingMemory.rb +53 -0
  524. data/khammurabi-0.2/lib/nist/khammurabi/ActionOutput.rb +45 -0
  525. data/khammurabi-0.2/lib/nist/khammurabi/ArbitratorNode.rb +68 -0
  526. data/khammurabi-0.2/lib/nist/khammurabi/ArrayAddon.rb +201 -0
  527. data/khammurabi-0.2/lib/nist/khammurabi/BooleanAddon.rb +3 -0
  528. data/khammurabi-0.2/lib/nist/khammurabi/Cluster.rb +128 -0
  529. data/khammurabi-0.2/lib/nist/khammurabi/ClusterManager.rb +96 -0
  530. data/khammurabi-0.2/lib/nist/khammurabi/ClusterManager2.rb +103 -0
  531. data/khammurabi-0.2/lib/nist/khammurabi/ConstantObjectOperation.rb +92 -0
  532. data/khammurabi-0.2/lib/nist/khammurabi/ConstantTestNode.rb +59 -0
  533. data/khammurabi-0.2/lib/nist/khammurabi/Engine.rb +454 -0
  534. data/khammurabi-0.2/lib/nist/khammurabi/FixnumAddon.rb +14 -0
  535. data/khammurabi-0.2/lib/nist/khammurabi/GraphNode.rb +305 -0
  536. data/khammurabi-0.2/lib/nist/khammurabi/GraphNodeJoiner.rb +83 -0
  537. data/khammurabi-0.2/lib/nist/khammurabi/HashAddon.rb +29 -0
  538. data/khammurabi-0.2/lib/nist/khammurabi/Hostilities.rb +24 -0
  539. data/khammurabi-0.2/lib/nist/khammurabi/InstantiatorNode.rb +60 -0
  540. data/khammurabi-0.2/lib/nist/khammurabi/Message.rb +19 -0
  541. data/khammurabi-0.2/lib/nist/khammurabi/MultiChildrenArbitratorNode.rb +97 -0
  542. data/khammurabi-0.2/lib/nist/khammurabi/MultiChildrenSelectorNode.rb +77 -0
  543. data/khammurabi-0.2/lib/nist/khammurabi/ObjectAddon.rb +63 -0
  544. data/khammurabi-0.2/lib/nist/khammurabi/ObjectDescription.rb +192 -0
  545. data/khammurabi-0.2/lib/nist/khammurabi/ObjectGraphWrapper.rb +46 -0
  546. data/khammurabi-0.2/lib/nist/khammurabi/ObjectOperation.rb +59 -0
  547. data/khammurabi-0.2/lib/nist/khammurabi/ObjectProduction.rb +45 -0
  548. data/khammurabi-0.2/lib/nist/khammurabi/ObjectProductionAction.rb +31 -0
  549. data/khammurabi-0.2/lib/nist/khammurabi/Pair.rb +49 -0
  550. data/khammurabi-0.2/lib/nist/khammurabi/QueryNode.rb +44 -0
  551. data/khammurabi-0.2/lib/nist/khammurabi/ReteParseTreeNode.rb +66 -0
  552. data/khammurabi-0.2/lib/nist/khammurabi/ReteParseTreePrinter.rb +58 -0
  553. data/khammurabi-0.2/lib/nist/khammurabi/ReteParseTreeToObjectDescriptionConverter.rb +76 -0
  554. data/khammurabi-0.2/lib/nist/khammurabi/RootNode.rb +32 -0
  555. data/khammurabi-0.2/lib/nist/khammurabi/TODO +7 -0
  556. data/khammurabi-0.2/lib/nist/khammurabi/TestIDRegistrar.rb +63 -0
  557. data/khammurabi-0.2/lib/nist/khammurabi/TestNode.rb +33 -0
  558. data/khammurabi-0.2/lib/nist/khammurabi/Token.rb +168 -0
  559. data/khammurabi-0.2/lib/nist/khammurabi/TokenCluster.rb +177 -0
  560. data/khammurabi-0.2/lib/nist/khammurabi/TokenClusterManager.rb +36 -0
  561. data/khammurabi-0.2/lib/nist/khammurabi/UniqueTokenAssurerNode.rb +100 -0
  562. data/khammurabi-0.2/lib/nist/khammurabi/ValueTestSuite.rb +239 -0
  563. data/khammurabi-0.2/lib/nist/khammurabi/VariableObjectOperation.rb +87 -0
  564. data/khammurabi-0.2/lib/nist/khammurabi/VariableTestNode.rb +73 -0
  565. data/khammurabi-0.2/lib/nist/khammurabi/VariableTestNodeExecutor.rb +246 -0
  566. data/khammurabi-0.2/lib/nist/khammurabi/XiaccEngine.rb +201 -0
  567. data/khammurabi-0.2/lib/nist/khammurabi/XiaccParseInput.rb +27 -0
  568. data/khammurabi-0.2/lib/nist/khammurabi/XiaccParseSpecification.rb +25 -0
  569. data/khammurabi-0.2/lib/nist/khammurabi/ZombieNode.rb +24 -0
  570. data/khammurabi-0.2/tests/test_action_object_delete.rb +91 -0
  571. data/khammurabi-0.2/tests/test_action_object_insert.rb +89 -0
  572. data/khammurabi-0.2/tests/test_action_object_modify.rb +103 -0
  573. data/khammurabi-0.2/tests/test_array_addon.rb +214 -0
  574. data/khammurabi-0.2/tests/test_cluster.rb +188 -0
  575. data/khammurabi-0.2/tests/test_cluster_graph.rb +393 -0
  576. data/khammurabi-0.2/tests/test_cluster_manager.rb +204 -0
  577. data/khammurabi-0.2/tests/test_constant_object_operation.rb +112 -0
  578. data/khammurabi-0.2/tests/test_constant_test_node.rb +142 -0
  579. data/khammurabi-0.2/tests/test_constant_test_node_graph.rb +404 -0
  580. data/khammurabi-0.2/tests/test_graph.rb +843 -0
  581. data/khammurabi-0.2/tests/test_graph_node_joiner.rb +94 -0
  582. data/khammurabi-0.2/tests/test_hash_addon.rb +90 -0
  583. data/khammurabi-0.2/tests/test_insurance_with_variables.rb +143 -0
  584. data/khammurabi-0.2/tests/test_multi_children_arbitrator_node.rb +149 -0
  585. data/khammurabi-0.2/tests/test_multi_children_selector_node.rb +203 -0
  586. data/khammurabi-0.2/tests/test_object_description.rb +177 -0
  587. data/khammurabi-0.2/tests/test_person_graph.rb +202 -0
  588. data/khammurabi-0.2/tests/test_root_node.rb +101 -0
  589. data/khammurabi-0.2/tests/test_token.rb +166 -0
  590. data/khammurabi-0.2/tests/test_token_cluster.rb +324 -0
  591. data/khammurabi-0.2/tests/test_unique_token_assurer_node.rb +146 -0
  592. data/khammurabi-0.2/tests/test_value_tests.rb +131 -0
  593. data/khammurabi-0.2/tests/test_variable_object_operation.rb +181 -0
  594. data/khammurabi-0.2/tests/test_variable_test_node.rb +445 -0
  595. data/khammurabi-0.2/tests/test_variable_test_node_graph.rb +587 -0
  596. data/khammurabi-0.2/tests/test_zombie_node.rb +130 -0
  597. metadata +790 -0
@@ -0,0 +1,404 @@
1
+ module MK
2
+
3
+ require 'test/unit'
4
+ require 'stringio'
5
+
6
+ require 'nist/khammurabi/Engine'
7
+ require 'nist/khammurabi/TestNode'
8
+ require 'nist/khammurabi/VariableTestNode'
9
+ require 'nist/khammurabi/InstantiatorNode'
10
+ require 'nist/khammurabi/ObjectProduction'
11
+ require 'nist/khammurabi/ArrayAddon'
12
+ require 'nist/khammurabi/GraphNode'
13
+ require 'nist/khammurabi/ValueTestSuite'
14
+ require 'nist/khammurabi/ReteParseTreePrinter'
15
+
16
+ class Tester
17
+ attr :val1, true
18
+ attr :val2, true
19
+ attr :val3, true
20
+
21
+ def initialize
22
+ @val1 = @val2 = @val3 = nil
23
+ end
24
+ def to_s
25
+ "val1: #{self.val1} val2: #{self.val2} val3: #{self.val3}"
26
+ end
27
+ end
28
+
29
+ class Tester2
30
+ attr :val0, true
31
+ attr :val1, true
32
+ attr :val2, true
33
+ attr :val3, true
34
+
35
+ def initialize
36
+ @val0 = @val1 = @val2 = @val3 = nil
37
+ end
38
+
39
+ end
40
+
41
+ class Test_Constant_Test_Node_Graph < Test::Unit::TestCase
42
+
43
+ attr_accessor :graphA
44
+
45
+ def objectA
46
+ t = Tester.new
47
+ t.val1 = 5
48
+ t.val2 = 10
49
+ #t.val3 = 15
50
+ t
51
+ end
52
+
53
+ def test_single_constant
54
+ size = 1
55
+ object = Tester.new
56
+ objectToAdd = object.clone
57
+
58
+ graph = Engine.new
59
+ objectDescription = ObjectDescription.init( object )
60
+ objectProduction = ObjectProduction.init( objectDescription, graph )
61
+ graph.addObjectProduction( objectProduction )
62
+ graph.compile
63
+
64
+ oin = graph.leaf( objectProduction )
65
+
66
+ instantiations = oin.instantiations
67
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
68
+ graph.addObject( objectToAdd )
69
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
70
+ end
71
+
72
+ def test_two_constants
73
+ size = 2
74
+ objects = Array.new( size ) { Tester.new }
75
+ objects[ 0 ].val1 = objects[ 1 ].val1 = 4
76
+ objects[ 0 ].val2 = objects[ 1 ].val2 = 6
77
+ objects[ 0 ].val3, objects[ 1 ].val3 = 9, 5
78
+
79
+ objectProduction = ObjectProduction.new
80
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
81
+ objectDescriptions.each_index do |idx|
82
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
83
+ objectDescriptions[ idx ].parseObject
84
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
85
+ end
86
+
87
+ graph = Engine.new
88
+ graph.addObjectProduction( objectProduction )
89
+ graph.compile
90
+
91
+ ( objects.size - 1 ).times do |idx|
92
+ #print "\n\nadding object idx: #{idx}\n\n"
93
+ graph.addObject( objects[ idx ] )
94
+ end
95
+
96
+ oin = graph.leaf( objectProduction )
97
+
98
+ instantiations = oin.instantiations
99
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
100
+
101
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
102
+ graph.addObject( objects[ -1 ] )
103
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
104
+
105
+ end
106
+
107
+ def test_four_constants
108
+ size = 4
109
+ objects = Array.new( size ) { Tester.new }
110
+ objects[ 0 ].val1 = objects[ 1 ].val1 = objects[ 2 ].val1 = 2
111
+ objects[ 1 ].val2, objects[ 3 ].val2 = 3, 6
112
+ objects[ 0 ].val3, objects[ 2 ].val3 = 6, 9
113
+
114
+ objectProduction = ObjectProduction.new
115
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
116
+ objectDescriptions.each_index do |idx|
117
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
118
+ objectDescriptions[ idx ].parseObject
119
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
120
+ end
121
+
122
+ graph = Engine.new
123
+ graph.addObjectProduction( objectProduction )
124
+ graph.compile
125
+
126
+ ( objects.size - 1 ).times { |idx| graph.addObject( objects[ idx ] ) }
127
+
128
+ oin = graph.leaf( objectProduction )
129
+
130
+ instantiations = oin.instantiations
131
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
132
+
133
+ graph.addObject( objects[ -1 ] )
134
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
135
+ end
136
+
137
+ def test_multiobject
138
+ size = 2
139
+ objects = Array.new( size ) { Tester.new }
140
+ objects.each { |object| object.val1, object.val2, object.val3 = 1, 2, 3 }
141
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
142
+ objectProduction = ObjectProduction.new
143
+ objectDescriptions.each_index do |index|
144
+ #print "index: #{index}\n"
145
+ objectDescription = objectDescriptions[ index ]
146
+ objectDescription.objectDescribing = objects[ index ]
147
+ objectDescription.parseObject
148
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
149
+ end
150
+
151
+ graph = Engine.new
152
+ graph.addObjectProduction( objectProduction )
153
+ graph.compile
154
+
155
+ ( objects.size - 1 ).times do |idx|
156
+ #print "\n\nadding object idx: #{idx}\n\n"
157
+ graph.addObject( objects[ idx ] )
158
+ end
159
+
160
+ oin = graph.leaf( objectProduction )
161
+
162
+ instantiations = oin.instantiations
163
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
164
+
165
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
166
+ graph.addObject( objects[ -1 ] )
167
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
168
+ end
169
+
170
+ def test_two_multiobjects
171
+ size = 4
172
+ objects = Array.new( size ) { Tester.new }
173
+ for i in 0..1
174
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 1, 2, 3
175
+ end
176
+ for i in 2..3
177
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 4, 5, 6
178
+ end
179
+
180
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
181
+ objectProduction = ObjectProduction.new
182
+ objectDescriptions.each_index do |index|
183
+ #print "index: #{index}\n"
184
+ objectDescription = objectDescriptions[ index ]
185
+ objectDescription.objectDescribing = objects[ index ]
186
+ objectDescription.parseObject
187
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
188
+ end
189
+
190
+ graph = Engine.new
191
+ graph.addObjectProduction( objectProduction )
192
+ graph.compile
193
+
194
+ ( objects.size - 1 ).times do |idx|
195
+ #print "\n\nadding object idx: #{idx}\n\n"
196
+ graph.addObject( objects[ idx ] )
197
+ end
198
+
199
+ oin = graph.leaf( objectProduction )
200
+
201
+ instantiations = oin.instantiations
202
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
203
+
204
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
205
+ graph.addObject( objects[ -1 ] )
206
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
207
+ end
208
+
209
+ def test_two_two_multiobjects
210
+ size = 6
211
+ objects = Array.new( size ) { Tester.new }
212
+ for i in 0..1
213
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 1, 2, 3
214
+ end
215
+ for i in 2..3
216
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 4, 5, 6
217
+ end
218
+ objects[ 4 ].val1, objects[ 4 ].val2, objects[ 4 ].val3 = 8, 9, 10
219
+ objects[ 5 ].val1, objects[ 5 ].val2, objects[ 5 ].val3 = 8, 9, 11
220
+
221
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
222
+ objectProduction = ObjectProduction.new
223
+ objectDescriptions.each_index do |index|
224
+ #print "index: #{index}\n"
225
+ objectDescription = objectDescriptions[ index ]
226
+ objectDescription.objectDescribing = objects[ index ]
227
+ objectDescription.parseObject
228
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
229
+ end
230
+
231
+ graph = Engine.new
232
+ graph.addObjectProduction( objectProduction )
233
+ graph.compile
234
+
235
+ ( objects.size - 1 ).times do |idx|
236
+ #print "\n\nadding object idx: #{idx}\n\n"
237
+ graph.addObject( objects[ idx ] )
238
+ end
239
+
240
+ oin = graph.leaf( objectProduction )
241
+
242
+ instantiations = oin.instantiations
243
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
244
+
245
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
246
+ graph.addObject( objects[ -1 ] )
247
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
248
+ end
249
+
250
+ def test_less_than_constants
251
+ size = 2
252
+ objects = Array.new( size ) { Tester.new }
253
+ objects[ 0 ].setValues( 4, 6, 9 )
254
+ objects[ 1 ].setValues( 10, 15, 11 )
255
+
256
+ objectProduction = ObjectProduction.new
257
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
258
+ objectDescriptions.each_index do |idx|
259
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
260
+ objectDescriptions[ idx ].parseObject
261
+ end
262
+
263
+ objectDescriptions[ 0 ][ "@val1" ].valueTest = LessThanTest.init( 5 )
264
+ objectDescriptions[ 0 ][ "@val2" ].valueTest = EqualityTest.init( 6 )
265
+ objectDescriptions[ 0 ][ "@val3" ].valueTest = LessThanOrEqualTest.init( 9 )
266
+ objectDescriptions[ 1 ][ "@val1" ].valueTest = LessThanTest.init( 11 )
267
+ objectDescriptions[ 1 ][ "@val2" ].valueTest = LessThanOrEqualTest.init( 15 )
268
+ objectDescriptions[ 1 ][ "@val3" ].valueTest = EqualityTest.init( 11 )
269
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
270
+
271
+ objectsToAdd = Array.new
272
+ objects.each { |object| objectsToAdd.push( object.clone ) }
273
+ objectsToAdd[ 0 ].setValues( 3, 6, 9 )
274
+ objectsToAdd[ 1 ].setValues( 1, 15, 11 )
275
+
276
+ graph = Engine.new
277
+ graph.addObjectProduction( objectProduction )
278
+ #graph.setDebugging( true )
279
+ graph.compile
280
+
281
+ ( objects.size - 1 ).times do |idx|
282
+ #print "\n\nadding object idx: #{idx}\n\n"
283
+ graph.addObject( objectsToAdd[ idx ] )
284
+ end
285
+
286
+ oin = graph.leaf( objectProduction )
287
+
288
+ instantiations = oin.instantiations
289
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
290
+
291
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
292
+ graph.addObject( objectsToAdd[ -1 ] )
293
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
294
+ end
295
+
296
+ def test_greater_than_constants
297
+ size = 2
298
+ objects = Array.new( size ) { Tester.new }
299
+ objects[ 0 ].val1, objects[ 1 ].val1 = 6, 4
300
+ objects[ 0 ].val2, objects[ 1 ].val2 = 2, 16
301
+ objects[ 0 ].val3, objects[ 1 ].val3 = 100, 102
302
+
303
+ objectProduction = ObjectProduction.new
304
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
305
+ objectDescriptions.each_index do |idx|
306
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
307
+ objectDescriptions[ idx ].parseObject
308
+ end
309
+
310
+ objectDescriptions[ 0 ][ "@val1" ].valueTest = GreaterThanTest.init( 3 )
311
+ objectDescriptions[ 0 ][ "@val2" ].valueTest = EqualityTest.init( 2 )
312
+ objectDescriptions[ 0 ][ "@val3" ].valueTest = GreaterThanOrEqualTest.init( 50 )
313
+ objectDescriptions[ 1 ][ "@val1" ].valueTest = GreaterThanTest.init( 2 )
314
+ objectDescriptions[ 1 ][ "@val2" ].valueTest = GreaterThanOrEqualTest.init( 16 )
315
+ objectDescriptions[ 1 ][ "@val3" ].valueTest = EqualityTest.init( 102 )
316
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
317
+
318
+ objectsToAdd = Array.new
319
+ objects.each { |object| objectsToAdd.push( object.clone ) }
320
+ objectsToAdd[ 0 ].val1, objectsToAdd[ 0 ].val2, objectsToAdd[ 0 ].val3 = 7, 2, 100
321
+ objectsToAdd[ 1 ].val1, objectsToAdd[ 1 ].val2, objectsToAdd[ 1 ].val3 = 5, 16, 102
322
+
323
+ graph = Engine.new
324
+ graph.addObjectProduction( objectProduction )
325
+ graph.compile
326
+
327
+ ( objects.size - 1 ).times do |idx|
328
+ #print "\n\nadding object idx: #{idx}\n\n"
329
+ graph.addObject( objectsToAdd[ idx ] )
330
+ end
331
+
332
+ oin = graph.leaf( objectProduction )
333
+
334
+ instantiations = oin.instantiations
335
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
336
+
337
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
338
+ graph.addObject( objectsToAdd[ -1 ] )
339
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
340
+ end
341
+
342
+ def test_less_greater_than_constants
343
+ size = 2
344
+ objects = Array.new( size ) { Tester.new }
345
+ objects[ 0 ].val1, objects[ 1 ].val1 = 6, 9
346
+ objects[ 0 ].val2, objects[ 1 ].val2 = 8, 10
347
+ objects[ 0 ].val3, objects[ 1 ].val3 = 5, 102
348
+
349
+ objectProduction = ObjectProduction.new
350
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
351
+ objectDescriptions.each_index do |idx|
352
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
353
+ objectDescriptions[ idx ].parseObject
354
+ end
355
+
356
+ objectDescriptions[ 0 ][ "@val1" ].valueTest = LessThanTest.init( 9 )
357
+ objectDescriptions[ 0 ][ "@val2" ].valueTest = GreaterThanTest.init( 5 )
358
+ objectDescriptions[ 0 ][ "@val3" ].valueTest = LessThanOrEqualTest.init( 5 )
359
+ objectDescriptions[ 1 ][ "@val1" ].valueTest = LessThanTest.init( 10 )
360
+ objectDescriptions[ 1 ][ "@val2" ].valueTest = EqualityTest.init( 10 )
361
+ objectDescriptions[ 1 ][ "@val3" ].valueTest = GreaterThanOrEqualTest.init( 102 )
362
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
363
+
364
+ objectsToAdd = Array.new
365
+ objects.each { |object| objectsToAdd.push( object.clone ) }
366
+ objectsToAdd[ 0 ].val1, objectsToAdd[ 0 ].val2, objectsToAdd[ 0 ].val3 = 5, 9, 5
367
+ objectsToAdd[ 1 ].val1, objectsToAdd[ 1 ].val2, objectsToAdd[ 1 ].val3 = 8, 10, 102
368
+
369
+ graph = Engine.new
370
+ graph.addObjectProduction( objectProduction )
371
+ graph.compile
372
+
373
+ ( objects.size - 1 ).times { |idx| graph.addObject( objectsToAdd[ idx ] ) }
374
+ oin = graph.leaf( objectProduction )
375
+
376
+ instantiations = oin.instantiations
377
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
378
+
379
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
380
+ graph.addObject( objectsToAdd[ -1 ] )
381
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
382
+ end
383
+
384
+ def self.suite
385
+ suite = Test::Unit::TestSuite.new
386
+ suite << self.new( 'test_single_constant' )
387
+ #suite << self.new( 'test_two_constants' )
388
+ #suite << self.new( 'test_four_constants' )
389
+ #suite << self.new( 'test_multiobject' )
390
+ #suite << self.new( 'test_two_multiobjects' )
391
+ #suite << self.new( 'test_two_two_multiobjects' )
392
+ #suite << self.new( 'test_less_than_constants' )
393
+ #suite << self.new( 'test_greater_than_constants' )
394
+ #suite << self.new( 'test_less_greater_than_constants' )
395
+ suite
396
+ end
397
+
398
+ end
399
+
400
+ require 'test/unit/ui/console/testrunner'
401
+
402
+ Test::Unit::UI::Console::TestRunner.run( Test_Constant_Test_Node_Graph )
403
+
404
+ end
@@ -0,0 +1,843 @@
1
+ module MK
2
+
3
+ require 'test/unit'
4
+ require 'stringio'
5
+ require 'tracer'
6
+ require 'socket'
7
+
8
+ require 'nist/khammurabi/Engine'
9
+ require 'nist/khammurabi/TestNode'
10
+ require 'nist/khammurabi/VariableTestNode'
11
+ require 'nist/khammurabi/InstantiatorNode'
12
+ require 'nist/khammurabi/ObjectProduction'
13
+ require 'nist/khammurabi/ArrayAddon'
14
+ require 'nist/khammurabi/GraphNode'
15
+ require 'nist/khammurabi/ValueTestSuite'
16
+ require 'nist/khammurabi/ReteParseTreePrinter'
17
+ require 'nist/khammurabi/Hostilities'
18
+
19
+ class Tester
20
+
21
+ include Hostilities
22
+
23
+ attr :val1, true
24
+ attr :val2, true
25
+ attr :val3, true
26
+
27
+ def initialize
28
+ @val1 = @val2 = @val3 = nil
29
+ end
30
+
31
+ def setValues( a, b, c )
32
+ @val1 = a
33
+ @val2 = b
34
+ @val3 = c
35
+ end
36
+
37
+ def to_s; "val1: #{self.val1} val2: #{self.val2} val3: #{self.val3}"; end
38
+
39
+ end
40
+
41
+ class Tester2
42
+
43
+ include Hostilities
44
+
45
+ attr :val0, true
46
+ attr :val1, true
47
+ attr :val2, true
48
+ attr :val3, true
49
+
50
+ def initialize
51
+ @val0 = @val1 = @val2 = @val3 = nil
52
+ end
53
+
54
+ def setValues( a, b, c, d )
55
+ @val0 = a
56
+ @val1 = b
57
+ @val2 = c
58
+ @val3 = d
59
+ end
60
+
61
+ end
62
+
63
+ # This test class tests basic graph construction. Some code may be similar to other tests
64
+ class Test_Graph < Test::Unit::TestCase
65
+
66
+ attr_accessor :graphA
67
+
68
+ def objectA
69
+ t = Tester.new
70
+ t.val1 = 5
71
+ t.val2 = 10
72
+ #t.val3 = 15
73
+ t
74
+ end
75
+
76
+ def test_single_constant
77
+ size = 1
78
+ object = Tester.new
79
+ objectToAdd = object.clone
80
+
81
+ graph = Engine.new
82
+ objectDescription = ObjectDescription.init( object )
83
+ objectProduction = ObjectProduction.init( objectDescription, graph )
84
+ graph.addObjectProduction( objectProduction )
85
+ graph.compile
86
+
87
+ oin = graph.leaf( objectProduction )
88
+
89
+ instantiations = oin.instantiations
90
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
91
+ graph.addObject( objectToAdd )
92
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
93
+ end
94
+
95
+ def test_two_constants
96
+ size = 2
97
+ objects = Array.new( size ) { Tester.new }
98
+ objects[ 0 ].val1 = objects[ 1 ].val1 = 4
99
+ objects[ 0 ].val2 = objects[ 1 ].val2 = 6
100
+ objects[ 0 ].val3, objects[ 1 ].val3 = 9, 5
101
+
102
+ objectProduction = ObjectProduction.new
103
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
104
+ objectDescriptions.each_index do |idx|
105
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
106
+ objectDescriptions[ idx ].parseObject
107
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
108
+ end
109
+
110
+ graph = Engine.new
111
+ graph.addObjectProduction( objectProduction )
112
+ graph.compile
113
+
114
+ ( objects.size - 1 ).times do |idx|
115
+ #print "\n\nadding object idx: #{idx}\n\n"
116
+ graph.addObject( objects[ idx ] )
117
+ end
118
+
119
+ oin = graph.leaf( objectProduction )
120
+
121
+ instantiations = oin.instantiations
122
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
123
+
124
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
125
+ graph.addObject( objects[ -1 ] )
126
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
127
+
128
+ end
129
+
130
+ def test_four_constants
131
+ size = 4
132
+ objects = Array.new( size ) { Tester.new }
133
+ objects[ 0 ].val1 = objects[ 1 ].val1 = objects[ 2 ].val1 = 2
134
+ objects[ 1 ].val2, objects[ 3 ].val2 = 3, 6
135
+ objects[ 0 ].val3, objects[ 2 ].val3 = 6, 9
136
+
137
+ objectProduction = ObjectProduction.new
138
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
139
+ objectDescriptions.each_index do |idx|
140
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
141
+ objectDescriptions[ idx ].parseObject
142
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
143
+ end
144
+
145
+ graph = Engine.new
146
+ graph.addObjectProduction( objectProduction )
147
+ graph.compile
148
+
149
+ ( objects.size - 1 ).times { |idx| graph.addObject( objects[ idx ] ) }
150
+
151
+ oin = graph.leaf( objectProduction )
152
+
153
+ instantiations = oin.instantiations
154
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
155
+
156
+ graph.addObject( objects[ -1 ] )
157
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
158
+ end
159
+
160
+ def test_two_variables
161
+ size = 2
162
+ objects = Array.new( size ) { Tester.new }
163
+ objects[ 0 ].val1 = objects[ 0 ].val2 = objects[ 1 ].val1 = 6
164
+ objects[ 1 ].val2 = 7
165
+ objects[ 0 ].val3 = objects[ 1 ].val3 = 8
166
+
167
+ objectProduction = ObjectProduction.new
168
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
169
+ objectDescriptions.each_index do |idx|
170
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
171
+ objectDescriptions[ idx ].parseObject
172
+ objectDescriptions[ idx ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
173
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
174
+ end
175
+
176
+ graph = Engine.new
177
+ graph.addObjectProduction( objectProduction )
178
+ graph.compile
179
+
180
+ ( objects.size - 1 ).times { |idx| graph.addObject( objects[ idx ] ) }
181
+
182
+ oin = graph.leaf( objectProduction )
183
+
184
+ instantiations = oin.instantiations
185
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
186
+
187
+ graph.addObject( objects[ -1 ] )
188
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
189
+ end
190
+
191
+ def test_two_variables_with_nonequality
192
+ size = 2
193
+ objects = Array.new( size ) { Tester.new }
194
+ objects[ 0 ].setValues( 1, 6, 1 )
195
+ objects[ 1 ].setValues( 2, 7, 2 )
196
+
197
+ objectProduction = ObjectProduction.new
198
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
199
+ objectDescriptions.each_index do |idx|
200
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
201
+ objectDescriptions[ idx ].parseObject
202
+ objectDescriptions[ idx ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
203
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
204
+ end
205
+
206
+ graph = Engine.new
207
+ graph.addObjectProduction( objectProduction )
208
+ #graph.setDebugging( true )
209
+ graph.compile
210
+
211
+ #printer = ReteParseTreePrinter.init( graph.root )
212
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
213
+ #exit
214
+
215
+ objects.each { |object| graph.addObject( object ) }
216
+
217
+ oin = graph.leaf( objectProduction )
218
+
219
+ instantiations = oin.instantiations
220
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
221
+
222
+ # Match the objects now and make sure it works
223
+ finalObject = Tester.new
224
+ finalObject.setValues( 1, 6, 2 )
225
+ graph.addObject( finalObject )
226
+
227
+ oin = graph.leaf( objectProduction )
228
+ instantiations = oin.instantiations
229
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
230
+ end
231
+
232
+ def test_two_variables_with_nonequality2
233
+ size = 2
234
+ objects = Array.new( size ) { Tester.new }
235
+ objects[ 0 ].setValues( 6, 6, 9 )
236
+ objects[ 1 ].setValues( 7, 7, 9 )
237
+
238
+ objectProduction = ObjectProduction.new
239
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
240
+ objectDescriptions.each_index do |idx|
241
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
242
+ objectDescriptions[ idx ].parseObject
243
+ objectProduction.addObjectDescription( objectDescriptions[ idx ] )
244
+ end
245
+
246
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val2", "Y", [ MK::InequalityTest.new ] )
247
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "Y", [ MK::EqualityTest.new ] )
248
+
249
+ graph = Engine.new
250
+ graph.addObjectProduction( objectProduction )
251
+ #graph.setDebugging( true )
252
+ graph.compile
253
+
254
+ ( objects.size - 1 ).times { |idx| graph.addObject( objects[ idx ] ) }
255
+
256
+ oin = graph.leaf( objectProduction )
257
+
258
+ instantiations = oin.instantiations
259
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
260
+
261
+ # Match the objects now and make sure it works
262
+ graph.addObject( objects[ -1 ] )
263
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
264
+ end
265
+
266
+ def test_three_variables
267
+ size = 3
268
+ objects = Array.new( size ) { Tester.new }
269
+ objects[ 0 ].setValues( 6, 2, 42 )
270
+ objects[ 1 ].setValues( 10, 2, 7 )
271
+ objects[ 2 ].setValues( 6, 8, 7 )
272
+
273
+ objectProduction = ObjectProduction.new
274
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
275
+ objectDescriptions.each_index do |idx|
276
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
277
+ objectDescriptions[ idx ].parseObject
278
+ end
279
+
280
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val2", "X", [ MK::EqualityTest.new ] )
281
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "X", [ MK::EqualityTest.new ] )
282
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
283
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
284
+
285
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
286
+
287
+ graph = Engine.new
288
+ graph.addObjectProduction( objectProduction )
289
+ #graph.setDebugging( true )
290
+ graph.compile
291
+
292
+ #printer = ReteParseTreePrinter.init( graph.root )
293
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
294
+ #exit
295
+
296
+ ( objects.size - 1 ).times do |idx|
297
+ #print "\n\nAdding object idx: #{idx} and it is: #{objects[idx].to_s}\n\n"
298
+ graph.addObject( objects[ idx ] )
299
+ end
300
+
301
+ oin = graph.leaf( objectProduction )
302
+
303
+ instantiations = oin.instantiations
304
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
305
+
306
+ #print "\n\nAdding object idx: #{objects.size - 1} it is: #{objects[-1].to_s}\n\n"
307
+ graph.addObject( objects[ -1 ] )
308
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
309
+ end
310
+
311
+ def test_three_variables_with_nonequality
312
+ size = 3
313
+ objects = Array.new( size ) { Tester.new }
314
+ objects[ 0 ].setValues( 6, 1, 2 )
315
+ objects[ 1 ].setValues( 10, 1, 3 )
316
+ objects[ 2 ].setValues( 7, 2, 3 )
317
+
318
+ objectProduction = ObjectProduction.new
319
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
320
+ objectDescriptions.each_index do |idx|
321
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
322
+ objectDescriptions[ idx ].parseObject
323
+ end
324
+
325
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val2", "X", [ MK::EqualityTest.new ] )
326
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "X", [ MK::EqualityTest.new ] )
327
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val2", "X", [ MK::InequalityTest.new ] )
328
+
329
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val3", "Y", [ MK::InequalityTest.new ] )
330
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
331
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val3", "Y", [ MK::EqualityTest.new ] )
332
+
333
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
334
+
335
+ graph = Engine.new
336
+ graph.addObjectProduction( objectProduction )
337
+ #graph.setDebugging( true )
338
+ graph.compile
339
+
340
+ ( objects.size - 1 ).times do |idx|
341
+ #print "\n\nadding object idx: #{idx} and it is: #{objects[idx].to_s}\n\n"
342
+ graph.addObject( objects[ idx ] )
343
+ end
344
+
345
+ oin = graph.leaf( objectProduction )
346
+ instantiations = oin.instantiations
347
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
348
+
349
+ #print "\n\nadding object idx: #{objects.size - 1} it is: #{objects[-1].to_s}\n\n"
350
+ graph.addObject( objects[ -1 ] )
351
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
352
+ end
353
+
354
+ def test_three_variables_with_nonequality1
355
+ size = 3
356
+ objects = Array.new( size ) { Tester.new }
357
+ objects[ 0 ].setValues( nil, 1, nil )
358
+ objects[ 1 ].setValues( nil, 2, nil )
359
+ objects[ 2 ].setValues( nil, 2, nil )
360
+
361
+ objectProduction = ObjectProduction.new
362
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
363
+ objectDescriptions.each_index do |idx|
364
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
365
+ objectDescriptions[ idx ].parseObject
366
+ end
367
+
368
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val2", "X", [ MK::EqualityTest.new ] )
369
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "Y", [ MK::InequalityTest.new ] )
370
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val2", "Z", [ MK::InequalityTest.new ] )
371
+
372
+ # Make the test more simple
373
+ objectDescriptions.each { |od| od.deleteObjectOperation( "@val1" ); od.deleteObjectOperation( "@val3" ) }
374
+
375
+ # Add the object descriptions
376
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
377
+
378
+ graph = Engine.new
379
+ graph.addObjectProduction( objectProduction )
380
+ #graph.setDebugging( true )
381
+ #self.outfile = File.new( "output", "w" )
382
+ graph.compile
383
+
384
+ #printer = ReteParseTreePrinter.init( graph.root )
385
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
386
+ #exit
387
+
388
+ graph.addObject( objects[ 2 ] )
389
+ graph.addObject( objects[ 0 ] )
390
+
391
+ oin = graph.leaf( objectProduction )
392
+ #Tracer.on
393
+ instantiations = oin.instantiations
394
+ assert( instantiations.size == 0, "Instantiations #{oin.object_id} size isn't 0, it's #{instantiations.size}" )
395
+
396
+ #print "\n\nadding object idx: #{objects.size - 1} it is: #{objects[-1].to_s}\n\n"
397
+ graph.addObject( objects[ 1 ] )
398
+ assert( instantiations.size == 1, "Instantiations #{oin.object_id} size isn't 1, it's #{instantiations.size}" )
399
+ #$defout.flush
400
+ Tracer.off
401
+ end
402
+
403
+ def test_four_variables
404
+ size = 4
405
+ objects = Array.new( size ) { Tester.new }
406
+ objects[ 0 ].setValues( 2, 101, 1000 )
407
+ objects[ 1 ].setValues( 2, 3, 4 )
408
+ objects[ 2 ].setValues( 2, 102, 4 )
409
+ objects[ 3 ].setValues( 2, 3, 4 )
410
+
411
+ objectProduction = ObjectProduction.new
412
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
413
+ objectDescriptions.each_index do |idx|
414
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
415
+ objectDescriptions[ idx ].parseObject
416
+ end
417
+
418
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
419
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
420
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
421
+
422
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "Y", MK::EqualityTest.new )
423
+ objectDescriptions[ 3 ].setObjectAsVariable( "@val2", "Y", MK::EqualityTest.new )
424
+
425
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
426
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
427
+ objectDescriptions[ 3 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
428
+
429
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
430
+
431
+ graph = Engine.new
432
+ graph.addObjectProduction( objectProduction )
433
+ graph.compile
434
+
435
+ #printer = ReteParseTreePrinter.init( graph.root )
436
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
437
+ #exit
438
+
439
+ ( objects.size - 1 ).times do |idx|
440
+ i = ( objects.size - 1 ) - idx
441
+ #print "\n\nadding object idx: #{idx}\n\n"
442
+ graph.addObject( objects[ i ] )
443
+ end
444
+
445
+ oin = graph.leaf( objectProduction )
446
+
447
+ instantiations = oin.instantiations
448
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
449
+
450
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
451
+ graph.addObject( objects[ 0 ] )
452
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
453
+ end
454
+
455
+ def test_five_variables
456
+ size = 5
457
+ objects = Array.new( size ) { Tester2.new }
458
+ # only variables in this test
459
+ objects[ 0 ].setValues( 1, 1, 2, 3 )
460
+ objects[ 1 ].setValues( 2, 1000, 2, 3 )
461
+ objects[ 2 ].setValues( 3, 1, 2, 3 )
462
+ objects[ 3 ].setValues( 4, 1001, 9, 3 )
463
+ objects[ 4 ].setValues( 5, 1, 1001, 3 )
464
+
465
+ objectProduction = ObjectProduction.new
466
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
467
+ objectDescriptions.each_index do |idx|
468
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
469
+ objectDescriptions[ idx ].parseObject
470
+ end
471
+
472
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
473
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
474
+ objectDescriptions[ 4 ].setObjectAsVariable( "@val1", "X", MK::EqualityTest.new )
475
+
476
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val2", "Y", MK::EqualityTest.new )
477
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val2", "Y", MK::EqualityTest.new )
478
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val2", "Y", MK::EqualityTest.new )
479
+ objectDescriptions[ 3 ].setObjectAsVariable( "@val2", "Y", MK::InequalityTest.new )
480
+
481
+ objectDescriptions[ 0 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
482
+ objectDescriptions[ 1 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
483
+ objectDescriptions[ 2 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
484
+ objectDescriptions[ 3 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
485
+ objectDescriptions[ 4 ].setObjectAsVariable( "@val3", "Z", MK::EqualityTest.new )
486
+
487
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
488
+
489
+ graph = Engine.new
490
+ graph.addObjectProduction( objectProduction )
491
+ #graph.setDebugging( true )
492
+ graph.compile
493
+
494
+ #printer = ReteParseTreePrinter.init( graph.root )
495
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
496
+ #exit
497
+
498
+ ( objects.size - 1 ).times do |idx|
499
+ #i = ( objects.size - 1 ) - idx
500
+ i = idx
501
+ #print "\n\nadding object idx: #{i}\n\n"
502
+ graph.addObject( objects[ i ] )
503
+ #exit if idx == 1
504
+ end
505
+
506
+ oin = graph.leaf( objectProduction )
507
+
508
+ instantiations = oin.instantiations
509
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
510
+
511
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
512
+ graph.addObject( objects[ -1 ] )
513
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
514
+ end
515
+
516
+ def test_four_same_variables
517
+ size = 4
518
+ objects = Array.new( size ) { Tester.new }
519
+ objects.each { |object| object.val1, object.val2, object.val3 = 1, 2, 3 }
520
+
521
+ objectProduction = ObjectProduction.new
522
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
523
+ objectDescriptions.each_index do |idx|
524
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
525
+ objectDescriptions[ idx ].parseObject
526
+ end
527
+
528
+ objectDescriptions.each do |od|
529
+ od.setObjectAsVariable( "@val3", "X", MK::EqualityTest.new )
530
+ objectProduction.addObjectDescription( od )
531
+ end
532
+
533
+ graph = Engine.new
534
+ graph.addObjectProduction( objectProduction )
535
+ graph.compile
536
+
537
+ ( objects.size - 1 ).times do |idx|
538
+ i = ( objects.size - 1 ) - idx
539
+ #print "\n\nadding object idx: #{idx}\n\n"
540
+ graph.addObject( objects[ i ] )
541
+ end
542
+
543
+ oin = graph.leaf( objectProduction )
544
+
545
+ instantiations = oin.instantiations
546
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
547
+
548
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
549
+ graph.addObject( objects[ -1 ] )
550
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
551
+ end
552
+
553
+ def test_multiobject
554
+ size = 2
555
+ objects = Array.new( size ) { Tester.new }
556
+ objects.each { |object| object.val1, object.val2, object.val3 = 1, 2, 3 }
557
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
558
+ objectProduction = ObjectProduction.new
559
+ objectDescriptions.each_index do |index|
560
+ #print "index: #{index}\n"
561
+ objectDescription = objectDescriptions[ index ]
562
+ objectDescription.objectDescribing = objects[ index ]
563
+ objectDescription.parseObject
564
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
565
+ end
566
+
567
+ graph = Engine.new
568
+ graph.addObjectProduction( objectProduction )
569
+ #graph.setDebugging( true )
570
+ graph.compile
571
+
572
+ #printer = ReteParseTreePrinter.init( graph.root )
573
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
574
+ #exit
575
+
576
+ ( objects.size - 1 ).times do |idx|
577
+ #print "\n\nadding object idx: #{idx}\n\n"
578
+ graph.addObject( objects[ idx ] )
579
+ end
580
+
581
+ oin = graph.leaf( objectProduction )
582
+
583
+ instantiations = oin.instantiations
584
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
585
+
586
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
587
+ graph.addObject( objects[ -1 ] )
588
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
589
+ end
590
+
591
+ def test_two_multiobjects
592
+ size = 4
593
+ objects = Array.new( size ) { Tester.new }
594
+ for i in 0..1
595
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 1, 2, 3
596
+ end
597
+ for i in 2..3
598
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 4, 5, 6
599
+ end
600
+
601
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
602
+ objectProduction = ObjectProduction.new
603
+ objectDescriptions.each_index do |index|
604
+ #print "index: #{index}\n"
605
+ objectDescription = objectDescriptions[ index ]
606
+ objectDescription.objectDescribing = objects[ index ]
607
+ objectDescription.parseObject
608
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
609
+ end
610
+
611
+ graph = Engine.new
612
+ graph.addObjectProduction( objectProduction )
613
+ #graph.setDebugging( true )
614
+ graph.compile
615
+
616
+ #printer = ReteParseTreePrinter.init( graph.root )
617
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
618
+ #exit
619
+
620
+ ( objects.size - 1 ).times do |idx|
621
+ #print "\n\nadding object idx: #{idx}\n\n"
622
+ graph.addObject( objects[ idx ] )
623
+ end
624
+
625
+ oin = graph.leaf( objectProduction )
626
+
627
+ instantiations = oin.instantiations
628
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
629
+
630
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
631
+ graph.addObject( objects[ -1 ] )
632
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
633
+ end
634
+
635
+ def test_two_two_multiobjects
636
+ size = 6
637
+ objects = Array.new( size ) { Tester.new }
638
+ for i in 0..1
639
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 1, 2, 3
640
+ end
641
+ for i in 2..3
642
+ objects[ i ].val1, objects[ i ].val2, objects[ i ].val3 = 4, 5, 6
643
+ end
644
+ objects[ 4 ].val1, objects[ 4 ].val2, objects[ 4 ].val3 = 8, 9, 10
645
+ objects[ 5 ].val1, objects[ 5 ].val2, objects[ 5 ].val3 = 8, 9, 11
646
+
647
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
648
+ objectProduction = ObjectProduction.new
649
+ objectDescriptions.each_index do |index|
650
+ #print "index: #{index}\n"
651
+ objectDescription = objectDescriptions[ index ]
652
+ objectDescription.objectDescribing = objects[ index ]
653
+ objectDescription.parseObject
654
+ objectProduction.addObjectDescription( objectDescriptions[ index ] )
655
+ end
656
+
657
+ graph = Engine.new
658
+ graph.addObjectProduction( objectProduction )
659
+ graph.compile
660
+
661
+ #printer = ReteParseTreePrinter.init( graph.root )
662
+ #print "\n\n" + printer.printOn( StringIO.new ).string + "\n\n"
663
+ #exit
664
+
665
+ ( objects.size - 1 ).times do |idx|
666
+ #print "\n\nadding object idx: #{idx}\n\n"
667
+ graph.addObject( objects[ idx ] )
668
+ end
669
+
670
+ oin = graph.leaf( objectProduction )
671
+
672
+ instantiations = oin.instantiations
673
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
674
+
675
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
676
+ graph.addObject( objects[ -1 ] )
677
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
678
+ end
679
+
680
+ def test_less_than_constants
681
+ size = 2
682
+ objects = Array.new( size ) { Tester.new }
683
+ objects[ 0 ].val1, objects[ 1 ].val1 = 4, 10
684
+ objects[ 0 ].val2, objects[ 1 ].val2 = 6, 15
685
+ objects[ 0 ].val3, objects[ 1 ].val3 = 9, 11
686
+
687
+ objectProduction = ObjectProduction.new
688
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
689
+ objectDescriptions.each_index do |idx|
690
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
691
+ objectDescriptions[ idx ].parseObject
692
+ end
693
+
694
+ objectDescriptions[ 0 ][ "@val1" ].valueTests = [ LessThanTest.init( 5 ) ]
695
+ objectDescriptions[ 0 ][ "@val2" ].valueTests = [ EqualityTest.init( 6 ) ]
696
+ objectDescriptions[ 0 ][ "@val3" ].valueTests = [ LessThanOrEqualTest.init( 9 ) ]
697
+ objectDescriptions[ 1 ][ "@val1" ].valueTests = [ LessThanTest.init( 11 ) ]
698
+ objectDescriptions[ 1 ][ "@val2" ].valueTests = [ LessThanOrEqualTest.init( 15 ) ]
699
+ objectDescriptions[ 1 ][ "@val3" ].valueTests = [ EqualityTest.init( 11 ) ]
700
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
701
+
702
+ objectsToAdd = Array.new
703
+ objects.each { |object| objectsToAdd.push( object.clone ) }
704
+ objectsToAdd[ 0 ].val1, objectsToAdd[ 0 ].val2, objectsToAdd[ 0 ].val3 = 3, 6, 9
705
+ objectsToAdd[ 1 ].val1, objectsToAdd[ 1 ].val2, objectsToAdd[ 1 ].val3 = 1, 15, 11
706
+
707
+ graph = Engine.new
708
+ graph.addObjectProduction( objectProduction )
709
+ graph.compile
710
+
711
+ ( objects.size - 1 ).times do |idx|
712
+ #print "\n\nadding object idx: #{idx}\n\n"
713
+ graph.addObject( objectsToAdd[ idx ] )
714
+ end
715
+
716
+ oin = graph.leaf( objectProduction )
717
+
718
+ instantiations = oin.instantiations
719
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
720
+
721
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
722
+ graph.addObject( objectsToAdd[ -1 ] )
723
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
724
+ end
725
+
726
+ def test_greater_than_constants
727
+ size = 2
728
+ objects = Array.new( size ) { Tester.new }
729
+ objects[ 0 ].val1, objects[ 1 ].val1 = 6, 4
730
+ objects[ 0 ].val2, objects[ 1 ].val2 = 2, 16
731
+ objects[ 0 ].val3, objects[ 1 ].val3 = 100, 102
732
+
733
+ objectProduction = ObjectProduction.new
734
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
735
+ objectDescriptions.each_index do |idx|
736
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
737
+ objectDescriptions[ idx ].parseObject
738
+ end
739
+
740
+ objectDescriptions[ 0 ][ "@val1" ].valueTests = [ GreaterThanTest.init( 3 ) ]
741
+ objectDescriptions[ 0 ][ "@val2" ].valueTests = [ EqualityTest.init( 2 ) ]
742
+ objectDescriptions[ 0 ][ "@val3" ].valueTests = [ GreaterThanOrEqualTest.init( 50 ) ]
743
+ objectDescriptions[ 1 ][ "@val1" ].valueTests = [ GreaterThanTest.init( 2 ) ]
744
+ objectDescriptions[ 1 ][ "@val2" ].valueTests = [ GreaterThanOrEqualTest.init( 16 ) ]
745
+ objectDescriptions[ 1 ][ "@val3" ].valueTests = [ EqualityTest.init( 102 ) ]
746
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
747
+
748
+ objectsToAdd = Array.new
749
+ objects.each { |object| objectsToAdd.push( object.clone ) }
750
+ objectsToAdd[ 0 ].val1, objectsToAdd[ 0 ].val2, objectsToAdd[ 0 ].val3 = 7, 2, 100
751
+ objectsToAdd[ 1 ].val1, objectsToAdd[ 1 ].val2, objectsToAdd[ 1 ].val3 = 5, 16, 102
752
+
753
+ graph = Engine.new
754
+ graph.addObjectProduction( objectProduction )
755
+ graph.compile
756
+
757
+ ( objects.size - 1 ).times do |idx|
758
+ #print "\n\nadding object idx: #{idx}\n\n"
759
+ graph.addObject( objectsToAdd[ idx ] )
760
+ end
761
+
762
+ oin = graph.leaf( objectProduction )
763
+
764
+ instantiations = oin.instantiations
765
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
766
+
767
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
768
+ graph.addObject( objectsToAdd[ -1 ] )
769
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
770
+ end
771
+
772
+ def test_less_greater_than_constants
773
+ size = 2
774
+ objects = Array.new( size ) { Tester.new }
775
+ objects[ 0 ].val1, objects[ 1 ].val1 = 6, 9
776
+ objects[ 0 ].val2, objects[ 1 ].val2 = 8, 10
777
+ objects[ 0 ].val3, objects[ 1 ].val3 = 5, 102
778
+
779
+ objectProduction = ObjectProduction.new
780
+ objectDescriptions = Array.new( size ) { ObjectDescription.new }
781
+ objectDescriptions.each_index do |idx|
782
+ objectDescriptions[ idx ].objectDescribing = objects[ idx ]
783
+ objectDescriptions[ idx ].parseObject
784
+ end
785
+
786
+ objectDescriptions[ 0 ][ "@val1" ].valueTests = [ LessThanTest.init( 9 ) ]
787
+ objectDescriptions[ 0 ][ "@val2" ].valueTests = [ GreaterThanTest.init( 5 ) ]
788
+ objectDescriptions[ 0 ][ "@val3" ].valueTests = [ LessThanOrEqualTest.init( 5 ) ]
789
+ objectDescriptions[ 1 ][ "@val1" ].valueTests = [ LessThanTest.init( 10 ) ]
790
+ objectDescriptions[ 1 ][ "@val2" ].valueTests = [ EqualityTest.init( 10 ) ]
791
+ objectDescriptions[ 1 ][ "@val3" ].valueTests = [ GreaterThanOrEqualTest.init( 102 ) ]
792
+ objectDescriptions.each { |od| objectProduction.addObjectDescription( od ) }
793
+
794
+ objectsToAdd = Array.new
795
+ objects.each { |object| objectsToAdd.push( object.clone ) }
796
+ objectsToAdd[ 0 ].val1, objectsToAdd[ 0 ].val2, objectsToAdd[ 0 ].val3 = 5, 9, 5
797
+ objectsToAdd[ 1 ].val1, objectsToAdd[ 1 ].val2, objectsToAdd[ 1 ].val3 = 8, 10, 102
798
+
799
+ graph = Engine.new
800
+ graph.addObjectProduction( objectProduction )
801
+ graph.compile
802
+
803
+ ( objects.size - 1 ).times { |idx| graph.addObject( objectsToAdd[ idx ] ) }
804
+ oin = graph.leaf( objectProduction )
805
+
806
+ instantiations = oin.instantiations
807
+ assert( instantiations.size == 0, "Instantiations size isn't 0, it's #{instantiations.size}" )
808
+
809
+ #print "\n\nadding object idx: #{objects.size - 1}\n\n"
810
+ graph.addObject( objectsToAdd[ -1 ] )
811
+ assert( instantiations.size == 1, "Instantiations size isn't 1, it's #{instantiations.size}" )
812
+ end
813
+
814
+ def self.suite
815
+ suite = Test::Unit::TestSuite.new
816
+ suite << self.new( 'test_single_constant' )
817
+ suite << self.new( 'test_two_constants' )
818
+ suite << self.new( 'test_four_constants' )
819
+ suite << self.new( 'test_two_variables' )
820
+ suite << self.new( 'test_two_variables_with_nonequality' )
821
+ suite << self.new( 'test_two_variables_with_nonequality2' )
822
+ suite << self.new( 'test_three_variables' )
823
+ suite << self.new( 'test_three_variables_with_nonequality' )
824
+ suite << self.new( 'test_three_variables_with_nonequality1' )
825
+ suite << self.new( 'test_four_variables' )
826
+ suite << self.new( 'test_five_variables' )
827
+ suite << self.new( 'test_multiobject' )
828
+ suite << self.new( 'test_two_multiobjects' )
829
+ suite << self.new( 'test_two_two_multiobjects' )
830
+ suite << self.new( 'test_four_same_variables' )
831
+ suite << self.new( 'test_less_than_constants' )
832
+ suite << self.new( 'test_greater_than_constants' )
833
+ suite << self.new( 'test_less_greater_than_constants' )
834
+ suite
835
+ end
836
+
837
+ end
838
+
839
+ require 'test/unit/ui/console/testrunner'
840
+
841
+ Test::Unit::UI::Console::TestRunner.run( Test_Graph )
842
+
843
+ end