cauldron 0.1.0

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 (398) hide show
  1. data/.document +5 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE.txt +20 -0
  4. data/README +1 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/bin/cauldron +10 -0
  9. data/cauldron/.autotest +23 -0
  10. data/cauldron/History.txt +6 -0
  11. data/cauldron/Manifest.txt +8 -0
  12. data/cauldron/README.txt +57 -0
  13. data/cauldron/Rakefile +27 -0
  14. data/cauldron/bin/cauldron +3 -0
  15. data/cauldron/lib/cauldron.rb +3 -0
  16. data/cauldron/test/test_cauldron.rb +8 -0
  17. data/features/cauldron_example_cases.feature +13 -0
  18. data/features/cauldron_generates_runtime_method.feature +12 -0
  19. data/features/cauldron_start_terminal.feature +13 -0
  20. data/features/step_definitions/cauldron_steps.rb +16 -0
  21. data/features/step_definitions/terminal_steps.rb +34 -0
  22. data/features/support/env.rb +19 -0
  23. data/lib/Chain.rb +879 -0
  24. data/lib/ChainMapping.rb +172 -0
  25. data/lib/CodeHandler.rb +517 -0
  26. data/lib/Mapping.rb +26 -0
  27. data/lib/MappingValues.rb +24 -0
  28. data/lib/ScopeDependencies.rb +7 -0
  29. data/lib/Theory.rb +274 -0
  30. data/lib/UnifiedChain.rb +110 -0
  31. data/lib/cauldron.rb +6 -0
  32. data/lib/cauldron/conversion.rb +15 -0
  33. data/lib/cauldron/pot.rb +134 -0
  34. data/lib/cauldron/sexp2cauldron.rb +156 -0
  35. data/lib/cauldron/terminal.rb +120 -0
  36. data/lib/cauldron/theory_factory.rb +10 -0
  37. data/lib/core/ActsAsCode.rb +25 -0
  38. data/lib/core/BlockToken.rb +33 -0
  39. data/lib/core/CCall.rb +7 -0
  40. data/lib/core/CTestCase.rb +27 -0
  41. data/lib/core/ClassMethodCallContainer.rb +45 -0
  42. data/lib/core/Container.rb +85 -0
  43. data/lib/core/InstanceCallContainer.rb +272 -0
  44. data/lib/core/MethodUsage.rb +66 -0
  45. data/lib/core/PrintVariables.rb +25 -0
  46. data/lib/core/TheoryGenerator.rb +764 -0
  47. data/lib/core/Token.rb +7 -0
  48. data/lib/core/assignment/Assignment.rb +18 -0
  49. data/lib/core/assignment/Equal.rb +39 -0
  50. data/lib/core/assignment/Equivalent.rb +20 -0
  51. data/lib/core/assignment/NotEqual.rb +14 -0
  52. data/lib/core/call_container/CallContainer.rb +66 -0
  53. data/lib/core/class_method_call/New.rb +15 -0
  54. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +31 -0
  55. data/lib/core/declaration/Declaration.rb +16 -0
  56. data/lib/core/declaration/LiteralDeclaration.rb +47 -0
  57. data/lib/core/declaration/VariableDeclaration.rb +59 -0
  58. data/lib/core/instance_call/ArrayEach.rb +23 -0
  59. data/lib/core/instance_call/ArrayLength.rb +15 -0
  60. data/lib/core/instance_call/Chop.rb +28 -0
  61. data/lib/core/instance_call/Copy.rb +22 -0
  62. data/lib/core/instance_call/DeclaredVariable.rb +18 -0
  63. data/lib/core/instance_call/InstanceCall.rb +77 -0
  64. data/lib/core/instance_call/Params.rb +15 -0
  65. data/lib/core/instance_call/Push.rb +20 -0
  66. data/lib/core/instance_call/StringLength.rb +32 -0
  67. data/lib/core/instance_call/Times.rb +20 -0
  68. data/lib/core/instance_call/instance_calls.rb +168 -0
  69. data/lib/core/instance_call/length_equal.rb +15 -0
  70. data/lib/core/kernal/EvalCall.rb +15 -0
  71. data/lib/core/kernal/LocalVariablesCall.rb +15 -0
  72. data/lib/core/literal/Literal.rb +111 -0
  73. data/lib/core/literal/Raw.rb +23 -0
  74. data/lib/core/literal/RuntimeMethodLiteral.rb +21 -0
  75. data/lib/core/literal/StatementLiteral.rb +28 -0
  76. data/lib/core/method_call/AvailableVariablesCall.rb +25 -0
  77. data/lib/core/method_call/ClassCall.rb +33 -0
  78. data/lib/core/method_call/DefCall.rb +72 -0
  79. data/lib/core/method_call/EvaluateClassCall.rb +29 -0
  80. data/lib/core/method_call/MethodNameCall.rb +27 -0
  81. data/lib/core/method_call/ToDeclarationCall.rb +15 -0
  82. data/lib/core/requirement/Requirement.rb +291 -0
  83. data/lib/core/runtime_class/ArrayClass.rb +19 -0
  84. data/lib/core/runtime_class/ClassCallClass.rb +23 -0
  85. data/lib/core/runtime_class/ClassEvaluationClass.rb +19 -0
  86. data/lib/core/runtime_class/ClassName.rb +18 -0
  87. data/lib/core/runtime_class/DefCallClass.rb +21 -0
  88. data/lib/core/runtime_class/EqualClass.rb +19 -0
  89. data/lib/core/runtime_class/FixnumClass.rb +15 -0
  90. data/lib/core/runtime_class/IfStatementClass.rb +12 -0
  91. data/lib/core/runtime_class/InstanceCallClass.rb +19 -0
  92. data/lib/core/runtime_class/InstanceCallContainerClass.rb +16 -0
  93. data/lib/core/runtime_class/InstanceClassCallClass.rb +19 -0
  94. data/lib/core/runtime_class/LiteralClass.rb +19 -0
  95. data/lib/core/runtime_class/MethodParameterClass.rb +27 -0
  96. data/lib/core/runtime_class/MethodUsageClass.rb +27 -0
  97. data/lib/core/runtime_class/RequirementClass.rb +19 -0
  98. data/lib/core/runtime_class/ReturnClass.rb +21 -0
  99. data/lib/core/runtime_class/RuntimeClass.rb +30 -0
  100. data/lib/core/runtime_class/RuntimeClassClass.rb +19 -0
  101. data/lib/core/runtime_class/RuntimeMethodClass.rb +34 -0
  102. data/lib/core/runtime_class/StatementClass.rb +53 -0
  103. data/lib/core/runtime_class/StringClass.rb +23 -0
  104. data/lib/core/runtime_class/StringLengthClass.rb +19 -0
  105. data/lib/core/runtime_class/StringVariableClass.rb +19 -0
  106. data/lib/core/runtime_class/ThisClass.rb +15 -0
  107. data/lib/core/runtime_class/UnknownClass.rb +23 -0
  108. data/lib/core/runtime_class/class_names.rb +95 -0
  109. data/lib/core/runtime_class/runtime_class.rb +123 -0
  110. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +300 -0
  111. data/lib/core/runtime_method/ParametersContainer.rb +29 -0
  112. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +94 -0
  113. data/lib/core/runtime_method/RuntimeMethod.rb +817 -0
  114. data/lib/core/runtime_method/WriteParameters.rb +35 -0
  115. data/lib/core/statement/ActsAsStatement.rb +116 -0
  116. data/lib/core/statement/ArrayAccess.rb +96 -0
  117. data/lib/core/statement/BlockStatement.rb +348 -0
  118. data/lib/core/statement/DeclarationStatement.rb +19 -0
  119. data/lib/core/statement/HackStatement.rb +25 -0
  120. data/lib/core/statement/HashAccess.rb +18 -0
  121. data/lib/core/statement/OpenStatement.rb +171 -0
  122. data/lib/core/statement/RealisedStatement.rb +5 -0
  123. data/lib/core/statement/SingleLineBlockStatement.rb +39 -0
  124. data/lib/core/statement/Statement.rb +1223 -0
  125. data/lib/core/statement/StatementDependencies.rb +271 -0
  126. data/lib/core/statement/StatementGroup.rb +157 -0
  127. data/lib/core/statement/StatementStructure2.rb +224 -0
  128. data/lib/core/statement/TheoryStatement.rb +60 -0
  129. data/lib/core/statement/TopologicalStatements.rb +34 -0
  130. data/lib/core/structure/DeclareNewInstanceStructure.rb +49 -0
  131. data/lib/core/structure/DeclareRuntimeMethodStructure.rb +34 -0
  132. data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +31 -0
  133. data/lib/core/structure/DeclareVariableAsVariableStructure.rb +52 -0
  134. data/lib/core/structure/FixnumAdditionStructure.rb +56 -0
  135. data/lib/core/structure/InstanceCallContainerStructure.rb +50 -0
  136. data/lib/core/structure/InstanceCallStructure.rb +53 -0
  137. data/lib/core/structure/InstanceMethodCallStructure.rb +21 -0
  138. data/lib/core/structure/ReturnStructure.rb +20 -0
  139. data/lib/core/structure/StatementStructure.rb +11 -0
  140. data/lib/core/syntax/Addition.rb +25 -0
  141. data/lib/core/syntax/BlockContainer.rb +130 -0
  142. data/lib/core/syntax/Boolean.rb +15 -0
  143. data/lib/core/syntax/Code.rb +11 -0
  144. data/lib/core/syntax/Do.rb +20 -0
  145. data/lib/core/syntax/False.rb +12 -0
  146. data/lib/core/syntax/If.rb +28 -0
  147. data/lib/core/syntax/IfContainer.rb +100 -0
  148. data/lib/core/syntax/Nil.rb +15 -0
  149. data/lib/core/syntax/Return.rb +33 -0
  150. data/lib/core/syntax/Subtract.rb +19 -0
  151. data/lib/core/syntax/This.rb +40 -0
  152. data/lib/core/syntax/True.rb +20 -0
  153. data/lib/core/syntax/syntax.rb +24 -0
  154. data/lib/core/tracking/ActsAsTrackable.rb +65 -0
  155. data/lib/core/tracking/History.rb +167 -0
  156. data/lib/core/tracking/RuntimeTrackingMethod.rb +32 -0
  157. data/lib/core/tracking/Step.rb +52 -0
  158. data/lib/core/variable/ArrayVariable.rb +76 -0
  159. data/lib/core/variable/BaseVariable.rb +154 -0
  160. data/lib/core/variable/BlockVariable.rb +92 -0
  161. data/lib/core/variable/FixnumVariable.rb +36 -0
  162. data/lib/core/variable/HistoryVariable.rb +8 -0
  163. data/lib/core/variable/MethodParameter.rb +206 -0
  164. data/lib/core/variable/MethodUsageVariable.rb +60 -0
  165. data/lib/core/variable/NilVariable.rb +29 -0
  166. data/lib/core/variable/RuntimeMethodParameter.rb +67 -0
  167. data/lib/core/variable/StatementVariable.rb +72 -0
  168. data/lib/core/variable/StepVariable.rb +7 -0
  169. data/lib/core/variable/StringVariable.rb +46 -0
  170. data/lib/core/variable/TypeVariable.rb +72 -0
  171. data/lib/core/variable/Unknown.rb +116 -0
  172. data/lib/core/variable/UnknownVariable.rb +29 -0
  173. data/lib/core/variable/Variable.rb +70 -0
  174. data/lib/core/variable/VariableContainer.rb +28 -0
  175. data/lib/core/variable/VariableIncluded.rb +27 -0
  176. data/lib/core/variable/VariableReference.rb +85 -0
  177. data/lib/error/FailedToFindStatementContainerError.rb +7 -0
  178. data/lib/error/FailedToFindStatementError.rb +7 -0
  179. data/lib/error/FailedToFindVariableError.rb +7 -0
  180. data/lib/error/FailedToLiteraliseError.rb +7 -0
  181. data/lib/error/FailedVariableMatch.rb +7 -0
  182. data/lib/error/ImproperStatementUsageError.rb +7 -0
  183. data/lib/error/IncompatiableRequirementsError.rb +7 -0
  184. data/lib/error/InvalidStatementError.rb +7 -0
  185. data/lib/error/MethodSizeError.rb +7 -0
  186. data/lib/error/RuntimeSyntaxError.rb +7 -0
  187. data/lib/error/UnexpectedStatementTypeError.rb +7 -0
  188. data/lib/error/UnknownStatementType.rb +7 -0
  189. data/lib/error/UnliteralisableError.rb +7 -0
  190. data/lib/implemented_chain.rb +34 -0
  191. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +20 -0
  192. data/lib/intrinsic/IntrinsicLiteral.rb +26 -0
  193. data/lib/intrinsic/IntrinsicObject.rb +22 -0
  194. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +27 -0
  195. data/lib/intrinsic/IntrinsicTestCases.rb +17 -0
  196. data/lib/logger/StandardLogger.rb +62 -0
  197. data/lib/required.rb +236 -0
  198. data/lib/ruby_code/Array.rb +95 -0
  199. data/lib/ruby_code/Fixnum.rb +39 -0
  200. data/lib/ruby_code/Hash.rb +25 -0
  201. data/lib/ruby_code/NilClass.rb +19 -0
  202. data/lib/ruby_code/Object.rb +24 -0
  203. data/lib/ruby_code/String.rb +86 -0
  204. data/lib/ruby_code/Symbol.rb +7 -0
  205. data/lib/standard_library/Tasks.rb +12 -0
  206. data/lib/theories.rb +143 -0
  207. data/lib/theory/ActionImplementation.rb +17 -0
  208. data/lib/theory/TheoryAction.rb +70 -0
  209. data/lib/theory/TheoryChainValidator.rb +101 -0
  210. data/lib/theory/TheoryComponent.rb +42 -0
  211. data/lib/theory/TheoryConnector.rb +755 -0
  212. data/lib/theory/TheoryDependent.rb +135 -0
  213. data/lib/theory/TheoryImplementation.rb +74 -0
  214. data/lib/theory/TheoryResult.rb +131 -0
  215. data/lib/theory/TheoryVariable.rb +63 -0
  216. data/lib/theory/theory_collection.rb +62 -0
  217. data/lib/util/ClassEvaluation.rb +68 -0
  218. data/lib/util/CodeEvaluation.rb +35 -0
  219. data/lib/util/DeclarationStatementEvaluation.rb +31 -0
  220. data/lib/util/MethodEvaluation.rb +49 -0
  221. data/lib/util/MethodTester.rb +71 -0
  222. data/lib/util/MethodValidation.rb +145 -0
  223. data/lib/util/MethodWriter.rb +66 -0
  224. data/lib/util/Parser.rb +299 -0
  225. data/lib/util/StatementCheck.rb +42 -0
  226. data/lib/util/StringToTheory.rb +119 -0
  227. data/lib/util/System.rb +8 -0
  228. data/spec/cauldron/pot_spec.rb +6 -0
  229. data/spec/cauldron/runtime_method_spec.rb +36 -0
  230. data/spec/cauldron/sexp_2_cauldron_spec.rb +26 -0
  231. data/spec/cauldron/terminal_spec.rb +38 -0
  232. data/spec/cauldron/theory_action_spec.rb +5 -0
  233. data/spec/spec_helper.rb +4 -0
  234. data/test/fixtures/chains/1/declaration.txt +26 -0
  235. data/test/fixtures/chains/1/dump +0 -0
  236. data/test/fixtures/chains/2/declaration.txt +26 -0
  237. data/test/fixtures/chains/2/dump +0 -0
  238. data/test/fixtures/chains/3/declaration.txt +26 -0
  239. data/test/fixtures/chains/3/dump +0 -0
  240. data/test/fixtures/implementation_results/0/declaration.txt +3 -0
  241. data/test/fixtures/implementation_results/0/dump +0 -0
  242. data/test/fixtures/theories/0/declaration.txt +9 -0
  243. data/test/fixtures/theories/0/desc +10 -0
  244. data/test/fixtures/theories/0/dump +0 -0
  245. data/test/fixtures/theories/1/declaration.txt +15 -0
  246. data/test/fixtures/theories/1/desc +11 -0
  247. data/test/fixtures/theories/1/dump +0 -0
  248. data/test/fixtures/theories/10/declaration.txt +23 -0
  249. data/test/fixtures/theories/10/desc +17 -0
  250. data/test/fixtures/theories/10/dump +0 -0
  251. data/test/fixtures/theories/11/declaration.txt +20 -0
  252. data/test/fixtures/theories/11/desc +14 -0
  253. data/test/fixtures/theories/11/dump +0 -0
  254. data/test/fixtures/theories/12/declaration.txt +18 -0
  255. data/test/fixtures/theories/12/desc +12 -0
  256. data/test/fixtures/theories/12/dump +0 -0
  257. data/test/fixtures/theories/13/declaration.txt +24 -0
  258. data/test/fixtures/theories/13/desc +20 -0
  259. data/test/fixtures/theories/13/dump +0 -0
  260. data/test/fixtures/theories/14/declaration.txt +26 -0
  261. data/test/fixtures/theories/14/desc +20 -0
  262. data/test/fixtures/theories/14/dump +0 -0
  263. data/test/fixtures/theories/15/declaration.txt +20 -0
  264. data/test/fixtures/theories/15/desc +14 -0
  265. data/test/fixtures/theories/15/dump +0 -0
  266. data/test/fixtures/theories/16/declaration.txt +30 -0
  267. data/test/fixtures/theories/16/desc +14 -0
  268. data/test/fixtures/theories/16/dump +0 -0
  269. data/test/fixtures/theories/17/declaration.txt +25 -0
  270. data/test/fixtures/theories/17/desc +11 -0
  271. data/test/fixtures/theories/17/dump +0 -0
  272. data/test/fixtures/theories/18/declaration.txt +23 -0
  273. data/test/fixtures/theories/18/desc +11 -0
  274. data/test/fixtures/theories/18/dump +0 -0
  275. data/test/fixtures/theories/19/declaration.txt +23 -0
  276. data/test/fixtures/theories/19/desc +11 -0
  277. data/test/fixtures/theories/19/dump +0 -0
  278. data/test/fixtures/theories/2/declaration.txt +12 -0
  279. data/test/fixtures/theories/2/desc +10 -0
  280. data/test/fixtures/theories/2/dump +0 -0
  281. data/test/fixtures/theories/20/declaration.txt +23 -0
  282. data/test/fixtures/theories/20/desc +17 -0
  283. data/test/fixtures/theories/20/dump +0 -0
  284. data/test/fixtures/theories/3/declaration.txt +19 -0
  285. data/test/fixtures/theories/3/desc +11 -0
  286. data/test/fixtures/theories/3/dump +0 -0
  287. data/test/fixtures/theories/4/declaration.txt +11 -0
  288. data/test/fixtures/theories/4/desc +11 -0
  289. data/test/fixtures/theories/4/dump +0 -0
  290. data/test/fixtures/theories/5/declaration.txt +6 -0
  291. data/test/fixtures/theories/5/desc +9 -0
  292. data/test/fixtures/theories/5/dump +0 -0
  293. data/test/fixtures/theories/6/declaration.txt +13 -0
  294. data/test/fixtures/theories/6/desc +11 -0
  295. data/test/fixtures/theories/6/dump +0 -0
  296. data/test/fixtures/theories/7/declaration.txt +19 -0
  297. data/test/fixtures/theories/7/desc +11 -0
  298. data/test/fixtures/theories/7/dump +0 -0
  299. data/test/fixtures/theories/8/declaration.txt +21 -0
  300. data/test/fixtures/theories/8/desc +11 -0
  301. data/test/fixtures/theories/8/dump +0 -0
  302. data/test/fixtures/theories/9/declaration.txt +24 -0
  303. data/test/fixtures/theories/9/desc +20 -0
  304. data/test/fixtures/theories/9/dump +0 -0
  305. data/test/fixtures/theory_implementations/0/declaration.txt +11 -0
  306. data/test/fixtures/theory_implementations/0/desc.txt +9 -0
  307. data/test/fixtures/theory_implementations/0/dump +0 -0
  308. data/test/fixtures/theory_implementations/0/theory_id +1 -0
  309. data/test/fixtures/theory_implementations/1/desc.txt +9 -0
  310. data/test/fixtures/theory_implementations/1/dump +0 -0
  311. data/test/fixtures/theory_implementations/1/theory_id +1 -0
  312. data/test/fixtures/theory_implementations/2/desc.txt +9 -0
  313. data/test/fixtures/theory_implementations/2/dump +0 -0
  314. data/test/fixtures/theory_implementations/2/theory_id +1 -0
  315. data/test/output/simple_method.txt +6 -0
  316. data/test/output/test_method/first_possible_method.txt +6 -0
  317. data/test/output/test_simple_cases/simple_case_01.txt +8 -0
  318. data/test/output/test_simple_cases/simple_case_02.txt +7 -0
  319. data/test/output/test_simple_cases/simple_case_03.txt +8 -0
  320. data/test/output/test_simple_cases/simple_case_04.txt +8 -0
  321. data/test/output/test_simple_cases/simple_case_05.txt +8 -0
  322. data/test/output/test_simple_cases/simple_case_06.txt +9 -0
  323. data/test/output/test_simple_cases/simple_case_07.txt +9 -0
  324. data/test/output/test_simple_cases/simple_case_08.txt +9 -0
  325. data/test/tc_contextual_variables.rb +87 -0
  326. data/test/tc_describe.rb +47 -0
  327. data/test/tc_method.rb +133 -0
  328. data/test/tc_requirement.rb +30 -0
  329. data/test/tc_suite_complete.rb +26 -0
  330. data/test/tc_variable.rb +52 -0
  331. data/test/ts_complete.rb +84 -0
  332. data/test/ts_stable.rb +81 -0
  333. data/test/unit/core/declaration/tc_literal_declaration.rb +34 -0
  334. data/test/unit/core/method_call/tc_class_call.rb +20 -0
  335. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +129 -0
  336. data/test/unit/core/runtime_method/tc_runtime_method.rb +616 -0
  337. data/test/unit/core/statement/tc_array_access.rb +63 -0
  338. data/test/unit/core/statement/tc_block_statement.rb +51 -0
  339. data/test/unit/core/statement/tc_hack_statement.rb +26 -0
  340. data/test/unit/core/statement/tc_open_statement.rb +70 -0
  341. data/test/unit/core/statement/tc_statement.rb +681 -0
  342. data/test/unit/core/statement/tc_statement_dependencies.rb +146 -0
  343. data/test/unit/core/statement/tc_statement_group.rb +35 -0
  344. data/test/unit/core/statement/tc_statement_replace_variable.rb +61 -0
  345. data/test/unit/core/statement/tc_theory_statement.rb +51 -0
  346. data/test/unit/core/structure/tc_declare_new_instance_structure.rb +41 -0
  347. data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +41 -0
  348. data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +66 -0
  349. data/test/unit/core/structure/tc_instance_call_container_structure.rb +41 -0
  350. data/test/unit/core/structure/tc_return_structure.rb +32 -0
  351. data/test/unit/core/syntax/tc_block_container.rb +32 -0
  352. data/test/unit/core/syntax/tc_if_container.rb +39 -0
  353. data/test/unit/core/tc_class_method_call.rb +34 -0
  354. data/test/unit/core/tc_container.rb +41 -0
  355. data/test/unit/core/tc_ctest_case.rb +25 -0
  356. data/test/unit/core/tc_instance_call_container.rb +93 -0
  357. data/test/unit/core/tc_literal.rb +30 -0
  358. data/test/unit/core/tc_theory_generator.rb +336 -0
  359. data/test/unit/core/tc_theory_generator_heavy.rb +42 -0
  360. data/test/unit/core/tracking/tc_history.rb +102 -0
  361. data/test/unit/core/tracking/tc_step.rb +65 -0
  362. data/test/unit/core/variable/tc_array_variable.rb +61 -0
  363. data/test/unit/core/variable/tc_block_variable.rb +17 -0
  364. data/test/unit/core/variable/tc_fixnum_variable.rb +54 -0
  365. data/test/unit/core/variable/tc_method_parameter_variable.rb +22 -0
  366. data/test/unit/core/variable/tc_runtime_method_variable.rb +32 -0
  367. data/test/unit/core/variable/tc_string_variable.rb +37 -0
  368. data/test/unit/core/variable/tc_unknown.rb +24 -0
  369. data/test/unit/core/variable/tc_variable_reference.rb +28 -0
  370. data/test/unit/ruby_code/tc_array.rb +64 -0
  371. data/test/unit/ruby_code/tc_fixnum.rb +18 -0
  372. data/test/unit/ruby_code/tc_hash.rb +41 -0
  373. data/test/unit/ruby_code/tc_string.rb +38 -0
  374. data/test/unit/tc_chain.rb +434 -0
  375. data/test/unit/tc_chain_mapping.rb +62 -0
  376. data/test/unit/tc_chain_with_case_1.rb +169 -0
  377. data/test/unit/tc_instance_call.rb +40 -0
  378. data/test/unit/tc_instance_call_structure.rb +35 -0
  379. data/test/unit/tc_method_usage.rb +35 -0
  380. data/test/unit/tc_pot.rb +124 -0
  381. data/test/unit/tc_runtime_tracking_method.rb +40 -0
  382. data/test/unit/tc_statement_structure_2.rb +43 -0
  383. data/test/unit/tc_theory.rb +533 -0
  384. data/test/unit/tc_variable_declaration.rb +32 -0
  385. data/test/unit/theory/tc_theory_action.rb +80 -0
  386. data/test/unit/theory/tc_theory_action_implementation.rb +23 -0
  387. data/test/unit/theory/tc_theory_chain_validator.rb +340 -0
  388. data/test/unit/theory/tc_theory_connector.rb +396 -0
  389. data/test/unit/theory/tc_theory_dependent.rb +151 -0
  390. data/test/unit/theory/tc_theory_implementation.rb +133 -0
  391. data/test/unit/theory/tc_theory_result.rb +111 -0
  392. data/test/unit/theory/tc_theory_variable.rb +45 -0
  393. data/test/unit/util/tc_method_validation.rb +98 -0
  394. data/test/unit/util/tc_parser.rb +108 -0
  395. data/test/unit/util/tc_string_to_theory.rb +299 -0
  396. data/test/unit/variable/tc_method_usage_variable.rb +25 -0
  397. data/tmp/runtime_method_evaluation.rb +10 -0
  398. metadata +522 -0
@@ -0,0 +1,28 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestVariableReference < Test::Unit::TestCase
5
+
6
+ # var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
7
+ # var_13 = 8
8
+ # var_559 = RuntimeMethod.new(var_11)
9
+ # var_570 = var_12.declared_variable
10
+
11
+ def setup
12
+
13
+ end
14
+
15
+ def teardown
16
+ System.reset
17
+ RuntimeMethod.reset_global_id
18
+ end
19
+
20
+ # Scenario
21
+
22
+ def test_variable_reference_is_maintained
23
+
24
+
25
+
26
+ end
27
+
28
+ end
@@ -0,0 +1,64 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestArray < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @teams = ['Manchester United','Arsenal']
8
+ @animals = ['spider','bear','rat']
9
+ end
10
+
11
+ def teardown
12
+ System.reset
13
+ end
14
+
15
+ def test_to_literal
16
+ assert(@teams.to_literal.kind_of?(Literal))
17
+ assert_equal(@teams.length,@teams.to_literal.value.length)
18
+ assert_equal(@teams.first,@teams.to_literal.value.first.value)
19
+ assert(@teams.to_literal.value.last.kind_of?(Literal))
20
+ end
21
+
22
+ def test_to_declaration
23
+ assert_equal(true,@animals.to_declaration.kind_of?(LiteralDeclaration))
24
+ #assert_equal('["spider", "bear", "rat"]',@animals.to_declaration.write)
25
+ end
26
+
27
+ def test_contains?
28
+
29
+ # Check that contains? searches go through each of the elements
30
+ results = [[].to_var,7.to_var]
31
+ assert(results.contains? {|x| x.kind_of?(ArrayVariable)})
32
+ assert(results.contains? {|x| x.kind_of?(FixnumVariable)})
33
+ assert_equal(false,results.contains? {|x| x.kind_of?(StringVariable)})
34
+
35
+ end
36
+
37
+ def test_in_tandem
38
+
39
+ letters = ('A'..'C').to_a
40
+ numbers = (1..3).to_a
41
+ container = []
42
+ letters.zip(numbers) do |x,y|
43
+ container.push(x+y.to_s)
44
+ end
45
+ assert_equal('A1',container.first)
46
+ assert_equal('B2',container[1])
47
+ assert_equal('C3',container.last)
48
+
49
+ end
50
+
51
+ def test_to_var
52
+ assert_equal(5,['A','B','C'].to_var(5,10).variable_id)
53
+ assert_equal(10,['A','B','C'].to_var(5,10).uniq_id)
54
+ end
55
+
56
+ def test_select_all_with_simple_structure
57
+ assert_equal(5,['A',['B','C'],'D'].select_all {|x| true }.length)
58
+ end
59
+
60
+ def test_select_all_with_class_match
61
+ assert_equal(4,['A',['B','C'],'D'].select_all {|x| x.kind_of?(String) }.length)
62
+ end
63
+
64
+ end
@@ -0,0 +1,18 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestFixnum < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ System.reset
11
+ end
12
+
13
+ def test_to_var
14
+ assert_equal(8,6.to_var(8,9).variable_id)
15
+ assert_equal(9,6.to_var(8,9).uniq_id)
16
+ end
17
+
18
+ end
@@ -0,0 +1,41 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestHash < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @hash_a = {:mass_effect,'awesome' }
8
+ end
9
+
10
+ def teardown
11
+ System.reset
12
+ RuntimeMethod.reset_global_id
13
+ end
14
+
15
+ def test_copy
16
+ assert_nothing_raised(){@hash_a.copy}
17
+ assert(@hash_a.copy.kind_of?(Hash))
18
+ assert_equal(@hash_a.write,@hash_a.copy.write)
19
+ assert_not_equal(@hash_a.copy.shift.object_id,@hash_a.copy.shift.object_id)
20
+ end
21
+
22
+ def test_copy_with_mapping_hash
23
+ mapping = {
24
+ 5 => Parser.run('test_cases'),
25
+ 6 => Parser.run('0'),
26
+ 1 => Parser.run('last_runtime_method'),
27
+ 2 => Parser.run('runtime_method'),
28
+ 3 => Parser.run('1'),
29
+ 4 => Parser.run('0')
30
+ }
31
+ assert_equal(
32
+ 6,
33
+ mapping.copy.length
34
+ )
35
+ copied = mapping.copy
36
+ copied[6] = 'Warren'
37
+ assert_not_equal(copied[6].object_id,mapping[6].object_id)
38
+ assert_equal(copied.length,mapping.length)
39
+ end
40
+
41
+ end
@@ -0,0 +1,38 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestString < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ end
9
+
10
+ def teardown
11
+ System.reset
12
+ end
13
+
14
+ def test_write
15
+ assert_equal('\'three headed monkey\'','three headed monkey'.write)
16
+ assert_equal("'three headed monkey'",'three headed monkey'.write)
17
+ assert_equal("'\\'vodoo\\' lady'","'vodoo' lady".write)
18
+ end
19
+
20
+ def test_to_literal
21
+ x = 'test'
22
+ assert(x.to_literal.kind_of?(Literal))
23
+ assert_equal(x,x.to_literal.value)
24
+ end
25
+
26
+ def test_to_declared_variable_statement
27
+ x = 'test'
28
+ declared_variable_statement = x.to_declared_variable_statement
29
+ assert_equal("var_0 = 'test'",declared_variable_statement.write)
30
+ assert_equal(0,declared_variable_statement.declared_variable_id)
31
+ end
32
+
33
+ def test_to_var
34
+ assert_equal(4,'test'.to_var(4,7).variable_id)
35
+ assert_equal(7,'test'.to_var(4,7).uniq_id)
36
+ end
37
+
38
+ end
@@ -0,0 +1,434 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestChain < Test::Unit::TestCase
5
+ include ContainsTheories
6
+
7
+ def setup
8
+
9
+ end
10
+
11
+ def teardown
12
+ System.reset
13
+ RuntimeMethod.reset_global_id
14
+ end
15
+
16
+ # Create the most simple of chains that only has a head and a tail and completes
17
+ def test_initialize_1
18
+
19
+ # Create the single requirement
20
+ result_one = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
21
+ head = Theory.new([],nil,[result_one])
22
+
23
+ # Check initial declaration
24
+ assert_nothing_raised(){Chain.new()}
25
+
26
+ # Add the head to the chain - completing it
27
+ chain = Chain.new()
28
+ assert_nothing_raised(){chain.add_link(head)}
29
+ chain_results = chain.add_link(head)
30
+ assert_equal(true,chain_results.any? {|x|x.complete?})
31
+
32
+ # Implement the chain
33
+ assert_equal(1,chain_results.length)
34
+ complete_chain = chain_results.first
35
+ assert_nothing_raised() {complete_chain.implement}
36
+
37
+ end
38
+
39
+ # Test a very simple chain that shares all the save variable ids(negating the mapping) but is made up
40
+ # of a head, link and tail.
41
+ def test_initialize_2
42
+
43
+ # Create the head for the chain
44
+ head_result = TheoryResult.new(StringToTheory.run("if(var2[var3][:output]==var2[var3][:params][var4])\nreturn true\nend"))
45
+ head = Theory.new([],nil,[head_result])
46
+
47
+ # Create linking method
48
+ link_one_dependent_one = TheoryDependent.new(StringToTheory.run("if(var2[var3][:output]==var2[var3][:params][var4])\nreturn true\nend"))
49
+ link_one_action = TheoryAction.new(
50
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2[var3][:output])')),
51
+ StringToTheory.run('var1.statement_id')
52
+ )
53
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
54
+ link_one = Theory.new([link_one_dependent_one],link_one_action,[link_one_result])
55
+
56
+ # Create the initial chain and confirm it isn't complete (the head can't connect to tail)
57
+ chain = Chain.new
58
+ assert_equal(false,chain.complete?)
59
+
60
+ assert_nothing_raised(){chain.add_link(head)}
61
+ chain_results = chain.add_link(head)
62
+
63
+ # Add the next chain in the link
64
+ extended_results = []
65
+ chain_results.each do |c|
66
+ extended_results += c.add_link(link_one)
67
+ end
68
+ chain_results = extended_results
69
+
70
+ assert_equal(true,chain_results.all? {|x| x.kind_of?(Chain)})
71
+ assert_equal(true,chain_results.all? {|x| x.complete? })
72
+ assert_equal(true,chain_results.all? {|x| x.broken_link_count == 0})
73
+
74
+ end
75
+
76
+ # Test that this very simple chain can be unified
77
+ #
78
+ def test_unifiy_chain_1
79
+ head = Theory.new([],nil,[])
80
+
81
+ link_one_action = TheoryAction.new(
82
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2[var3][:output])')),
83
+ StringToTheory.run('var1.statement_id')
84
+ )
85
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
86
+ link_one = Theory.new([],link_one_action,[link_one_result])
87
+ chain = Chain.new
88
+ chain = chain.add_link(head).first
89
+ chain = chain.add_link(link_one).first
90
+
91
+ global_ids = chain.chain_mapping.mapping.collect {|key,value| key}
92
+
93
+ assert_equal(
94
+ true,
95
+ global_ids.all? do |x|
96
+ chain.unify_chain.write.include?('var'+x.to_s)
97
+ end
98
+ )
99
+
100
+ end
101
+
102
+ # Test that an extremely basic chain can be implemented. The chain
103
+ # basically involves adding one return statement to a runtime method.
104
+ #
105
+ def test_implement_1
106
+
107
+ head = Theory.new([],nil,[])
108
+
109
+ link_one_action = TheoryAction.new(
110
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2[var3][:output])')),
111
+ StringToTheory.run('var1.statement_id')
112
+ )
113
+ # NOTE: I need to add one result so the theory can be flagged as complete - I might not need it
114
+ # to be complete -
115
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
116
+ link_one = Theory.new([],link_one_action,[link_one_result])
117
+ chain = Chain.new
118
+ chain = chain.add_link(head).first
119
+ chain = chain.add_link(
120
+ link_one,
121
+ {
122
+ 1=>IntrinsicRuntimeMethod.new,
123
+ 2=>IntrinsicTestCases.new,
124
+ 3=>IntrinsicLiteral.new(0)
125
+ }
126
+ ).first
127
+
128
+ # Attempt to implement the chain
129
+ assert_nothing_raised() {chain.implement}
130
+ implemented_chain = chain.implement
131
+ assert_equal(false,implemented_chain.write.include?('var'))
132
+
133
+ end
134
+
135
+ # Checks that a implemented theory can be created with the very basic
136
+ # chain.
137
+ #
138
+ def test_theory_progression_with_case_1
139
+
140
+ # ----------------- SETUP -----------------
141
+ # Create demonstration #1
142
+ # (just return the first parameter)
143
+ demo_1_test_case_1 = CTestCase.new
144
+ demo_1_test_case_1[:params] = ['sparky']
145
+ demo_1_test_case_1[:output] = 'sparky'
146
+ demo_1_test_case_2 = CTestCase.new
147
+ demo_1_test_case_2[:params] = ['kel']
148
+ demo_1_test_case_2[:output] = 'kel'
149
+ demo_1_test_cases = [
150
+ demo_1_test_case_1,demo_1_test_case_2
151
+ ]
152
+
153
+ head = Theory.new([],nil,[])
154
+ link_one_action = TheoryAction.new(
155
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2.params[var3])')),
156
+ StringToTheory.run('var1.statement_id')
157
+ )
158
+ # NOTE: I need to add one result so the theory can be flagged as complete - I might not need it
159
+ # to be complete -
160
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
161
+ link_one = Theory.new([],link_one_action,[link_one_result])
162
+ chain = Chain.new
163
+ chain = chain.add_link(head).first
164
+ chain = chain.add_link(
165
+ link_one,
166
+ {
167
+ 1=>IntrinsicRuntimeMethod.new,
168
+ 2=>IntrinsicTestCases.new,
169
+ 3=>IntrinsicLiteral.new(0)
170
+ }
171
+ ).first
172
+ runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
173
+
174
+ # ---------------- Attempt to create the three theory snapshots -------------
175
+ assert_nothing_raised() {chain.theory_progression(runtime_method,demo_1_test_cases)}
176
+ assert_equal(3,chain.theory_progression(runtime_method,demo_1_test_cases).length)
177
+ assert_equal(true,chain.theory_progression(runtime_method,demo_1_test_cases).all?{|x| x.kind_of?(TheoryImplementation)})
178
+
179
+ end
180
+
181
+ # Test implementation with the simple example that just returns the passed
182
+ # value.
183
+ def test_implement_2
184
+
185
+ # Create the head for the chain
186
+ head_result = TheoryResult.new(StringToTheory.run("if(var2[var3][:output]==var2[var3][:params][var4])\nreturn true\nend"))
187
+ head = Theory.new([],nil,[head_result])
188
+
189
+ # Create linking method
190
+ link_one_dependent_one = TheoryDependent.new(StringToTheory.run("if(var2[var3][:output]==var2[var3][:params][var4])\nreturn true\nend"))
191
+ link_one_action = TheoryAction.new(
192
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2[var3][:output])')),
193
+ StringToTheory.run('var1.statement_id')
194
+ )
195
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
196
+ link_one = Theory.new([link_one_dependent_one],link_one_action,[link_one_result])
197
+
198
+ # Create the values for the head
199
+ head_values = {2=>IntrinsicTestCases.new,3=>IntrinsicLiteral.new(0),4=>IntrinsicLiteral.new(0)}
200
+ link_one_values = { 1=>IntrinsicRuntimeMethod.new,
201
+ 2=>IntrinsicTestCases.new,
202
+ 3=>IntrinsicLiteral.new(0),
203
+ 4=>IntrinsicLiteral.new(0)
204
+ }
205
+
206
+ # Create the initial chain and confirm it isn't complete (the head can't connect to tail)
207
+ chain = Chain.new
208
+ assert_equal(false,chain.complete?)
209
+
210
+ assert_nothing_raised(){chain.add_link(head)}
211
+ chain_results = chain.add_link(head,head_values)
212
+
213
+ # Add the next chain in the link
214
+ extended_results = []
215
+ chain_results.each do |c|
216
+ extended_results += c.add_link(link_one,link_one_values)
217
+ end
218
+ chain_results = extended_results
219
+ assert_equal(1,chain_results.length)
220
+
221
+ # Now attempt to implement it
222
+ complete_chain = chain_results.first
223
+ assert_equal(true,complete_chain.complete?)
224
+ assert_nothing_raised(){complete_chain.implement}
225
+
226
+ end
227
+
228
+ # Add the theories needded to create a simple 'if' runtime method
229
+ #
230
+ # def method_1(var1)
231
+ # if var1 == 'something'
232
+ # return 'exist'
233
+ # end
234
+ # return 'does not exists'
235
+ # end
236
+ #
237
+ def test_add_link_to_3
238
+
239
+ theory_1 = Theory.load_theory(20)
240
+ theory_2 = Theory.load_theory(14)
241
+ theory_3 = Theory.load_theory(15)
242
+ theory_4 = Theory.load_theory(12)
243
+
244
+ # Create te head for the theory
245
+ head_result_one = TheoryResult.new(StringToTheory.run("if(var2[var3].kind_of?(CTestCase))\nreturn true\nend"))
246
+ head_result_two = TheoryResult.new(
247
+ StringToTheory.run("if((var2[var3][:params][var6] == var2[var4][:params][var6])==false)\nreturn true\nend")
248
+ )
249
+ head = Theory.new([],nil,[head_result_one,head_result_two])
250
+
251
+ # Create the initial chain
252
+ chain = Chain.new
253
+
254
+ # Add the head link to the chain
255
+ chain_results = chain.add_link(head)
256
+
257
+ # Add the next link to the chain
258
+ extended_results = []
259
+ chain_results.each do |c|
260
+ extended_results += c.add_link(theory_1)
261
+ end
262
+ chain_results = extended_results
263
+
264
+ assert_equal(1,chain_results.length)
265
+ assert_equal(false,chain_results.all? {|x| x.complete? })
266
+
267
+ # Add the next link to the chain
268
+ extended_results = []
269
+ chain_results.each do |c|
270
+ extended_results += c.add_link(theory_2)
271
+ end
272
+ chain_results = extended_results
273
+
274
+ # Add the next link to the chain
275
+ extended_results = []
276
+ chain_results.each do |c|
277
+ extended_results += c.add_link(theory_3)
278
+ end
279
+ chain_results = extended_results
280
+
281
+ # Add the next link to the chain
282
+ extended_results = []
283
+ chain_results.each do |c|
284
+ extended_results += c.add_link(theory_4)
285
+ end
286
+ chain_results = extended_results
287
+
288
+ # Check the results - at least one the chains should be complete now
289
+ assert_equal(true,chain_results.all? {|x| x.kind_of?(Chain)})
290
+ #assert_equal(true,chain_results.any? {|x| x.complete?})
291
+ #assert_equal(1,chain_results.select {|x| x.complete?}.length)
292
+
293
+ # Implement the completed chain
294
+ #complete_chain = chain_results.select {|x| x.complete?}.first
295
+ #assert_equal(6,complete_chain.unify_chain.theory_variables.length)
296
+
297
+ end
298
+
299
+ def test_variables_creation_with_case_1
300
+
301
+ # Create demonstration #1
302
+ # (just return the first parameter)
303
+ demo_1_test_case_1 = CTestCase.new
304
+ demo_1_test_case_1[:params] = ['sparky']
305
+ demo_1_test_case_1[:output] = 'sparky'
306
+ demo_1_test_case_2 = CTestCase.new
307
+ demo_1_test_case_2[:params] = ['kel']
308
+ demo_1_test_case_2[:output] = 'kel'
309
+ demo_1_test_cases = [
310
+ demo_1_test_case_1,demo_1_test_case_2
311
+ ]
312
+
313
+ head = Theory.new([],nil,[])
314
+ link_one_action = TheoryAction.new(
315
+ TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var2.params[var3])')),
316
+ StringToTheory.run('var1.statement_id')
317
+ )
318
+ # NOTE: I need to add one result so the theory can be flagged as complete - I might not need it
319
+ # to be complete -
320
+ link_one_result = TheoryResult.new(StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend"))
321
+ link_one = Theory.new([],link_one_action,[link_one_result])
322
+ chain = Chain.new
323
+ chain = chain.add_link(head).first
324
+ chain = chain.add_link(
325
+ link_one,
326
+ {
327
+ 1=>IntrinsicRuntimeMethod.new,
328
+ 2=>IntrinsicTestCases.new,
329
+ 3=>IntrinsicLiteral.new(0)
330
+ }
331
+ ).first
332
+ runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
333
+
334
+ assert_equal(3,chain.variables_creation.length)
335
+
336
+ end
337
+
338
+ # # Add the theories needded to create a simple 'if' runtime method
339
+ # #
340
+ # # def method_1(var1)
341
+ # # if var1 == 'something'
342
+ # # return 'exist'
343
+ # # end
344
+ # # return 'does not exists'
345
+ # # end
346
+ # #
347
+ # # but also include the values of each of the values.
348
+ # #
349
+ # def test_add_link_to_3_with_values
350
+ #
351
+ # theory_1 = Theory.load_theory(20)
352
+ # theory_2 = Theory.load_theory(14)
353
+ # theory_3 = Theory.load_theory(15)
354
+ # theory_4 = Theory.load_theory(12)
355
+ #
356
+ # # Create te head for the theory
357
+ # head_result_one = TheoryResult.new(StringToTheory.run("if(var2[var3].kind_of?(CTestCase))\nreturn true\nend"))
358
+ # head_result_two = TheoryResult.new(
359
+ # StringToTheory.run("if((var2[var3][:params][var6] == var2[var4][:params][var6])==false)\nreturn true\nend")
360
+ # )
361
+ # head = Theory.new([],nil,[head_result_one,head_result_two])
362
+ #
363
+ # end
364
+
365
+ # def test_solvable_passing_no_theories
366
+ #
367
+ # # Create the initial starting chain from pre-existing chain
368
+ # directory_path = $LOC+File.join('test','fixtures','chains','3')
369
+ # raise StandardError.new("chain 3 does not exist") unless(File.exists?(directory_path))
370
+ # dump_file = File.open(File.join(directory_path,'dump'),'r')
371
+ # initial_chain = Marshal.load(dump_file)
372
+ #
373
+ # finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
374
+ #
375
+ # assert_equal(false,initial_chain.solvable?(finish,[]))
376
+ #
377
+ # end
378
+
379
+ # def test_solvable_with_one_theory_that_solves_it
380
+ #
381
+ # # Create the initial starting chain from pre-existing chain
382
+ # directory_path = $LOC+File.join('test','fixtures','chains','1')
383
+ # raise StandardError.new("chain 1 does not exist") unless(File.exists?(directory_path))
384
+ # dump_file = File.open(File.join(directory_path,'dump'),'r')
385
+ # initial_chain = Marshal.load(dump_file)
386
+ #
387
+ # theory_19 = Theory.load_theory(19)
388
+ #
389
+ # finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
390
+ # assert_equal(true,initial_chain.solvable?(finish,[theory_19]))
391
+ #
392
+ # end
393
+
394
+ # def test_solvable_with_case_1
395
+ # # TODO This works but takes longer than I would expect.
396
+ #
397
+ # # Create the initial starting chain from pre-existing chain
398
+ # directory_path = $LOC+File.join('test','fixtures','chains','3')
399
+ # raise StandardError.new("chain 3 does not exist") unless(File.exists?(directory_path))
400
+ # dump_file = File.open(File.join(directory_path,'dump'),'r')
401
+ # initial_chain = Marshal.load(dump_file)
402
+ #
403
+ # theory_1 = Theory.load_theory(20)
404
+ # theory_2 = Theory.load_theory(14)
405
+ # theory_3 = Theory.load_theory(15)
406
+ # theory_4 = Theory.load_theory(12)
407
+ #
408
+ # finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
409
+ # assert_equal(true,initial_chain.solvable?(finish,[theory_1,theory_2,theory_3,theory_4]))
410
+ #
411
+ # end
412
+ #
413
+ # def test_solvable_with_case_1_and_missing_theory
414
+ #
415
+ # # Create the initial starting chain from pre-existing chain
416
+ # directory_path = $LOC+File.join('test','fixtures','chains','3')
417
+ # raise StandardError.new("chain 3 does not exist") unless(File.exists?(directory_path))
418
+ # dump_file = File.open(File.join(directory_path,'dump'),'r')
419
+ # initial_chain = Marshal.load(dump_file)
420
+ #
421
+ # theory_1 = Theory.load_theory(20)
422
+ # theory_2 = Theory.load_theory(14)
423
+ # theory_3 = Theory.load_theory(15)
424
+ # theory_4 = Theory.load_theory(12)
425
+ #
426
+ # finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
427
+ # assert_equal(false,initial_chain.solvable?(finish,[theory_1,theory_2,theory_3]))
428
+ # assert_equal(false,initial_chain.solvable?(finish,[theory_1,theory_2,theory_4]))
429
+ # assert_equal(false,initial_chain.solvable?(finish,[theory_1,theory_3,theory_4]))
430
+ # assert_equal(false,initial_chain.solvable?(finish,[theory_2,theory_3,theory_4]))
431
+ #
432
+ # end
433
+
434
+ end