cauldron 0.1.3 → 0.1.5

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 (409) hide show
  1. data/.gitignore +51 -0
  2. data/Gemfile +6 -3
  3. data/Gemfile.lock +16 -3
  4. data/Rakefile +94 -92
  5. data/VERSION +1 -1
  6. data/bin/cauldron +2 -2
  7. data/cauldron.gemspec +15 -451
  8. data/features/cauldron_new_approach.feature +46 -0
  9. data/features/step_definitions/cauldron_steps.rb +11 -0
  10. data/features/step_definitions/terminal_steps.rb +0 -2
  11. data/features/support/env.rb +11 -1
  12. data/features/support/hooks.rb +5 -0
  13. data/lib/cauldron.rb +13 -7
  14. data/lib/cauldron/array_reverse_operator.rb +39 -0
  15. data/lib/cauldron/concat_operator.rb +34 -0
  16. data/lib/cauldron/if_relationship.rb +37 -0
  17. data/lib/cauldron/numeric_operator.rb +45 -0
  18. data/lib/cauldron/pot.rb +54 -162
  19. data/lib/cauldron/relationship.rb +5 -0
  20. data/lib/cauldron/terminal.rb +4 -60
  21. data/lib/cauldron/version.rb +3 -0
  22. data/lib/core/string.rb +21 -0
  23. data/sandbox.rb +27 -6
  24. data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
  25. data/spec/cauldron/concat_operator_spec.rb +89 -0
  26. data/spec/cauldron/if_relationship_spec.rb +25 -0
  27. data/spec/cauldron/numeric_operator_spec.rb +70 -0
  28. data/spec/cauldron/pot_spec.rb +81 -151
  29. data/spec/cauldron/terminal_spec.rb +1 -39
  30. data/spec/examples/adding_if_statement.yml +13 -0
  31. data/spec/examples/simple_head_theory.txt +13 -0
  32. data/spec/spec_helper.rb +1 -14
  33. data/tasks/theory_tasks.rake +207 -207
  34. metadata +92 -532
  35. data/cauldron/.autotest +0 -23
  36. data/cauldron/History.txt +0 -6
  37. data/cauldron/Manifest.txt +0 -8
  38. data/cauldron/README.txt +0 -57
  39. data/cauldron/Rakefile +0 -27
  40. data/cauldron/bin/cauldron +0 -3
  41. data/cauldron/lib/cauldron.rb +0 -3
  42. data/cauldron/test/test_cauldron.rb +0 -8
  43. data/features/cauldron_example_cases.feature +0 -13
  44. data/features/cauldron_generates_runtime_method.feature +0 -16
  45. data/features/cauldron_generates_single_paramter_methods.feature +0 -25
  46. data/features/cauldron_interactive_start_terminal.feature +0 -17
  47. data/features/cauldron_quit_terminal.feature +0 -9
  48. data/features/cauldron_start_terminal.feature +0 -12
  49. data/features/support/method_1.example +0 -3
  50. data/features/support/method_2.example +0 -6
  51. data/lib/Chain.rb +0 -771
  52. data/lib/ChainMapping.rb +0 -172
  53. data/lib/CodeHandler.rb +0 -513
  54. data/lib/Mapping.rb +0 -27
  55. data/lib/MappingValues.rb +0 -24
  56. data/lib/PartialChain.rb +0 -253
  57. data/lib/Theory.rb +0 -295
  58. data/lib/UnifiedChain.rb +0 -351
  59. data/lib/cauldron/conversion.rb +0 -15
  60. data/lib/cauldron/demos.rb +0 -280
  61. data/lib/cauldron/env.rb +0 -1
  62. data/lib/cauldron/sexp2cauldron.rb +0 -139
  63. data/lib/cauldron/theory_factory.rb +0 -10
  64. data/lib/cauldron/util/home.rb +0 -21
  65. data/lib/cauldron/util/saver.rb +0 -45
  66. data/lib/core/ActsAsCode.rb +0 -25
  67. data/lib/core/BlockToken.rb +0 -33
  68. data/lib/core/CCall.rb +0 -7
  69. data/lib/core/CTestCase.rb +0 -27
  70. data/lib/core/ClassMethodCallContainer.rb +0 -58
  71. data/lib/core/Container.rb +0 -95
  72. data/lib/core/InstanceCallContainer.rb +0 -298
  73. data/lib/core/MethodUsage.rb +0 -65
  74. data/lib/core/PrintVariables.rb +0 -25
  75. data/lib/core/TheoryGenerator.rb +0 -753
  76. data/lib/core/Token.rb +0 -7
  77. data/lib/core/assignment/Assignment.rb +0 -18
  78. data/lib/core/assignment/Equal.rb +0 -39
  79. data/lib/core/assignment/Equivalent.rb +0 -20
  80. data/lib/core/assignment/NotEqual.rb +0 -14
  81. data/lib/core/call_container/CallContainer.rb +0 -72
  82. data/lib/core/class_method_call/New.rb +0 -15
  83. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
  84. data/lib/core/declaration/Declaration.rb +0 -16
  85. data/lib/core/declaration/LiteralDeclaration.rb +0 -47
  86. data/lib/core/declaration/VariableDeclaration.rb +0 -59
  87. data/lib/core/instance_call/ArrayEach.rb +0 -23
  88. data/lib/core/instance_call/ArrayLength.rb +0 -15
  89. data/lib/core/instance_call/Chop.rb +0 -19
  90. data/lib/core/instance_call/Copy.rb +0 -22
  91. data/lib/core/instance_call/DeclaredVariable.rb +0 -18
  92. data/lib/core/instance_call/InstanceCall.rb +0 -77
  93. data/lib/core/instance_call/Params.rb +0 -15
  94. data/lib/core/instance_call/Push.rb +0 -20
  95. data/lib/core/instance_call/StringLength.rb +0 -32
  96. data/lib/core/instance_call/Times.rb +0 -20
  97. data/lib/core/instance_call/instance_calls.rb +0 -176
  98. data/lib/core/instance_call/length_equal.rb +0 -15
  99. data/lib/core/kernal/EvalCall.rb +0 -15
  100. data/lib/core/kernal/LocalVariablesCall.rb +0 -15
  101. data/lib/core/literal/Literal.rb +0 -111
  102. data/lib/core/literal/Raw.rb +0 -23
  103. data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
  104. data/lib/core/literal/StatementLiteral.rb +0 -28
  105. data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
  106. data/lib/core/method_call/ClassCall.rb +0 -33
  107. data/lib/core/method_call/DefCall.rb +0 -72
  108. data/lib/core/method_call/EvaluateClassCall.rb +0 -29
  109. data/lib/core/method_call/MethodNameCall.rb +0 -27
  110. data/lib/core/method_call/ToDeclarationCall.rb +0 -15
  111. data/lib/core/requirement/Requirement.rb +0 -292
  112. data/lib/core/runtime_class/ArrayClass.rb +0 -19
  113. data/lib/core/runtime_class/ClassCallClass.rb +0 -23
  114. data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
  115. data/lib/core/runtime_class/ClassName.rb +0 -18
  116. data/lib/core/runtime_class/DefCallClass.rb +0 -21
  117. data/lib/core/runtime_class/EqualClass.rb +0 -19
  118. data/lib/core/runtime_class/FixnumClass.rb +0 -15
  119. data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
  120. data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
  121. data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
  122. data/lib/core/runtime_class/LiteralClass.rb +0 -19
  123. data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
  124. data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
  125. data/lib/core/runtime_class/RequirementClass.rb +0 -19
  126. data/lib/core/runtime_class/ReturnClass.rb +0 -21
  127. data/lib/core/runtime_class/RuntimeClass.rb +0 -30
  128. data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
  129. data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
  130. data/lib/core/runtime_class/StatementClass.rb +0 -53
  131. data/lib/core/runtime_class/StringClass.rb +0 -23
  132. data/lib/core/runtime_class/StringLengthClass.rb +0 -19
  133. data/lib/core/runtime_class/StringVariableClass.rb +0 -19
  134. data/lib/core/runtime_class/ThisClass.rb +0 -15
  135. data/lib/core/runtime_class/UnknownClass.rb +0 -23
  136. data/lib/core/runtime_class/class_names.rb +0 -95
  137. data/lib/core/runtime_class/runtime_class.rb +0 -123
  138. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
  139. data/lib/core/runtime_method/ParametersContainer.rb +0 -29
  140. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
  141. data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
  142. data/lib/core/runtime_method/WriteParameters.rb +0 -35
  143. data/lib/core/statement/ActsAsStatement.rb +0 -20
  144. data/lib/core/statement/ArrayAccess.rb +0 -122
  145. data/lib/core/statement/BlockStatement.rb +0 -348
  146. data/lib/core/statement/DeclarationStatement.rb +0 -19
  147. data/lib/core/statement/HackStatement.rb +0 -25
  148. data/lib/core/statement/HashAccess.rb +0 -18
  149. data/lib/core/statement/OpenStatement.rb +0 -178
  150. data/lib/core/statement/RealisedStatement.rb +0 -5
  151. data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
  152. data/lib/core/statement/Statement.rb +0 -1091
  153. data/lib/core/statement/StatementGroup.rb +0 -157
  154. data/lib/core/statement/StatementStructure2.rb +0 -224
  155. data/lib/core/statement/TheoryStatement.rb +0 -68
  156. data/lib/core/statement/TopologicalStatements.rb +0 -34
  157. data/lib/core/syntax/Addition.rb +0 -26
  158. data/lib/core/syntax/BlockContainer.rb +0 -102
  159. data/lib/core/syntax/Boolean.rb +0 -15
  160. data/lib/core/syntax/Code.rb +0 -11
  161. data/lib/core/syntax/Do.rb +0 -20
  162. data/lib/core/syntax/False.rb +0 -12
  163. data/lib/core/syntax/If.rb +0 -36
  164. data/lib/core/syntax/Nil.rb +0 -15
  165. data/lib/core/syntax/Return.rb +0 -33
  166. data/lib/core/syntax/Subtract.rb +0 -19
  167. data/lib/core/syntax/This.rb +0 -40
  168. data/lib/core/syntax/True.rb +0 -20
  169. data/lib/core/syntax/syntax.rb +0 -24
  170. data/lib/core/tracking/ActsAsTrackable.rb +0 -65
  171. data/lib/core/tracking/History.rb +0 -167
  172. data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
  173. data/lib/core/tracking/Step.rb +0 -52
  174. data/lib/core/variable/ArrayVariable.rb +0 -76
  175. data/lib/core/variable/BaseVariable.rb +0 -152
  176. data/lib/core/variable/BlockVariable.rb +0 -92
  177. data/lib/core/variable/FixnumVariable.rb +0 -35
  178. data/lib/core/variable/HistoryVariable.rb +0 -8
  179. data/lib/core/variable/MethodParameter.rb +0 -179
  180. data/lib/core/variable/MethodUsageVariable.rb +0 -60
  181. data/lib/core/variable/NilVariable.rb +0 -29
  182. data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
  183. data/lib/core/variable/StatementVariable.rb +0 -72
  184. data/lib/core/variable/StepVariable.rb +0 -7
  185. data/lib/core/variable/StringVariable.rb +0 -46
  186. data/lib/core/variable/TypeVariable.rb +0 -72
  187. data/lib/core/variable/Unknown.rb +0 -102
  188. data/lib/core/variable/UnknownVariable.rb +0 -29
  189. data/lib/core/variable/Variable.rb +0 -70
  190. data/lib/core/variable/VariableContainer.rb +0 -28
  191. data/lib/core/variable/VariableIncluded.rb +0 -27
  192. data/lib/core/variable/VariableReference.rb +0 -85
  193. data/lib/error/FailedToFindStatementContainerError.rb +0 -7
  194. data/lib/error/FailedToFindStatementError.rb +0 -7
  195. data/lib/error/FailedToFindVariableError.rb +0 -7
  196. data/lib/error/FailedToLiteraliseError.rb +0 -7
  197. data/lib/error/FailedVariableMatch.rb +0 -7
  198. data/lib/error/ImproperStatementUsageError.rb +0 -7
  199. data/lib/error/IncompatiableRequirementsError.rb +0 -7
  200. data/lib/error/InvalidStatementError.rb +0 -7
  201. data/lib/error/MethodSizeError.rb +0 -7
  202. data/lib/error/RuntimeSyntaxError.rb +0 -7
  203. data/lib/error/UnexpectedStatementTypeError.rb +0 -7
  204. data/lib/error/UnknownStatementType.rb +0 -7
  205. data/lib/error/UnliteralisableError.rb +0 -7
  206. data/lib/implemented_chain.rb +0 -35
  207. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
  208. data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
  209. data/lib/intrinsic/IntrinsicObject.rb +0 -22
  210. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
  211. data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
  212. data/lib/logger/StandardLogger.rb +0 -62
  213. data/lib/required.rb +0 -222
  214. data/lib/ruby_code/Array.rb +0 -95
  215. data/lib/ruby_code/Fixnum.rb +0 -39
  216. data/lib/ruby_code/Hash.rb +0 -25
  217. data/lib/ruby_code/NilClass.rb +0 -19
  218. data/lib/ruby_code/Object.rb +0 -24
  219. data/lib/ruby_code/String.rb +0 -63
  220. data/lib/ruby_code/Symbol.rb +0 -7
  221. data/lib/standard_library/Tasks.rb +0 -12
  222. data/lib/theories.rb +0 -166
  223. data/lib/theory/ActionImplementation.rb +0 -17
  224. data/lib/theory/TheoryAction.rb +0 -100
  225. data/lib/theory/TheoryChainValidator.rb +0 -103
  226. data/lib/theory/TheoryComponent.rb +0 -59
  227. data/lib/theory/TheoryConnector.rb +0 -756
  228. data/lib/theory/TheoryDependent.rb +0 -135
  229. data/lib/theory/TheoryImplementation.rb +0 -75
  230. data/lib/theory/TheoryResult.rb +0 -131
  231. data/lib/theory/TheoryVariable.rb +0 -63
  232. data/lib/theory/theory_collection.rb +0 -62
  233. data/lib/util/ClassEvaluation.rb +0 -44
  234. data/lib/util/CodeEvaluation.rb +0 -39
  235. data/lib/util/DeclarationStatementEvaluation.rb +0 -32
  236. data/lib/util/MethodEvaluation.rb +0 -49
  237. data/lib/util/MethodTester.rb +0 -71
  238. data/lib/util/MethodValidation.rb +0 -149
  239. data/lib/util/MethodWriter.rb +0 -66
  240. data/lib/util/Parser.rb +0 -305
  241. data/lib/util/StatementCheck.rb +0 -44
  242. data/lib/util/StringToTheory.rb +0 -142
  243. data/lib/util/System.rb +0 -8
  244. data/spec/cauldron/chain_spec.rb +0 -24
  245. data/spec/cauldron/demos_spec.rb +0 -30
  246. data/spec/cauldron/runtime_method_spec.rb +0 -92
  247. data/spec/cauldron/saver_spec.rb +0 -45
  248. data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
  249. data/spec/cauldron/theory_action_spec.rb +0 -25
  250. data/spec/cauldron/theory_connector_spec.rb +0 -52
  251. data/spec/cauldron/theory_spec.rb +0 -59
  252. data/spec/cauldron/unified_chain_spec.rb +0 -140
  253. data/test/fixtures/chains/1/declaration.txt +0 -26
  254. data/test/fixtures/chains/1/dump +0 -0
  255. data/test/fixtures/chains/2/declaration.txt +0 -26
  256. data/test/fixtures/chains/2/dump +0 -0
  257. data/test/fixtures/chains/3/declaration.txt +0 -26
  258. data/test/fixtures/chains/3/dump +0 -0
  259. data/test/fixtures/implementation_results/0/declaration.txt +0 -3
  260. data/test/fixtures/implementation_results/0/dump +0 -0
  261. data/test/fixtures/theories/0/declaration.txt +0 -9
  262. data/test/fixtures/theories/0/desc +0 -10
  263. data/test/fixtures/theories/0/dump +0 -0
  264. data/test/fixtures/theories/1/declaration.txt +0 -15
  265. data/test/fixtures/theories/1/desc +0 -11
  266. data/test/fixtures/theories/1/dump +0 -0
  267. data/test/fixtures/theories/10/declaration.txt +0 -23
  268. data/test/fixtures/theories/10/desc +0 -17
  269. data/test/fixtures/theories/10/dump +0 -0
  270. data/test/fixtures/theories/11/declaration.txt +0 -20
  271. data/test/fixtures/theories/11/desc +0 -14
  272. data/test/fixtures/theories/11/dump +0 -0
  273. data/test/fixtures/theories/12/declaration.txt +0 -18
  274. data/test/fixtures/theories/12/desc +0 -12
  275. data/test/fixtures/theories/12/dump +0 -0
  276. data/test/fixtures/theories/13/declaration.txt +0 -24
  277. data/test/fixtures/theories/13/desc +0 -20
  278. data/test/fixtures/theories/13/dump +0 -0
  279. data/test/fixtures/theories/14/declaration.txt +0 -26
  280. data/test/fixtures/theories/14/desc +0 -20
  281. data/test/fixtures/theories/14/dump +0 -0
  282. data/test/fixtures/theories/15/declaration.txt +0 -20
  283. data/test/fixtures/theories/15/desc +0 -14
  284. data/test/fixtures/theories/15/dump +0 -0
  285. data/test/fixtures/theories/16/declaration.txt +0 -30
  286. data/test/fixtures/theories/16/desc +0 -14
  287. data/test/fixtures/theories/16/dump +0 -0
  288. data/test/fixtures/theories/17/declaration.txt +0 -25
  289. data/test/fixtures/theories/17/desc +0 -11
  290. data/test/fixtures/theories/17/dump +0 -0
  291. data/test/fixtures/theories/18/declaration.txt +0 -23
  292. data/test/fixtures/theories/18/desc +0 -11
  293. data/test/fixtures/theories/18/dump +0 -0
  294. data/test/fixtures/theories/19/declaration.txt +0 -23
  295. data/test/fixtures/theories/19/desc +0 -11
  296. data/test/fixtures/theories/19/dump +0 -0
  297. data/test/fixtures/theories/2/declaration.txt +0 -12
  298. data/test/fixtures/theories/2/desc +0 -10
  299. data/test/fixtures/theories/2/dump +0 -0
  300. data/test/fixtures/theories/20/declaration.txt +0 -23
  301. data/test/fixtures/theories/20/desc +0 -17
  302. data/test/fixtures/theories/20/dump +0 -0
  303. data/test/fixtures/theories/3/declaration.txt +0 -19
  304. data/test/fixtures/theories/3/desc +0 -11
  305. data/test/fixtures/theories/3/dump +0 -0
  306. data/test/fixtures/theories/4/declaration.txt +0 -11
  307. data/test/fixtures/theories/4/desc +0 -11
  308. data/test/fixtures/theories/4/dump +0 -0
  309. data/test/fixtures/theories/5/declaration.txt +0 -6
  310. data/test/fixtures/theories/5/desc +0 -9
  311. data/test/fixtures/theories/5/dump +0 -0
  312. data/test/fixtures/theories/6/declaration.txt +0 -13
  313. data/test/fixtures/theories/6/desc +0 -11
  314. data/test/fixtures/theories/6/dump +0 -0
  315. data/test/fixtures/theories/7/declaration.txt +0 -19
  316. data/test/fixtures/theories/7/desc +0 -11
  317. data/test/fixtures/theories/7/dump +0 -0
  318. data/test/fixtures/theories/8/declaration.txt +0 -21
  319. data/test/fixtures/theories/8/desc +0 -11
  320. data/test/fixtures/theories/8/dump +0 -0
  321. data/test/fixtures/theories/9/declaration.txt +0 -24
  322. data/test/fixtures/theories/9/desc +0 -20
  323. data/test/fixtures/theories/9/dump +0 -0
  324. data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
  325. data/test/fixtures/theory_implementations/0/desc.txt +0 -9
  326. data/test/fixtures/theory_implementations/0/dump +0 -0
  327. data/test/fixtures/theory_implementations/0/theory_id +0 -1
  328. data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
  329. data/test/fixtures/theory_implementations/1/desc.txt +0 -9
  330. data/test/fixtures/theory_implementations/1/dump +0 -1
  331. data/test/fixtures/theory_implementations/1/theory_id +0 -1
  332. data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
  333. data/test/fixtures/theory_implementations/2/desc.txt +0 -9
  334. data/test/fixtures/theory_implementations/2/dump +0 -0
  335. data/test/fixtures/theory_implementations/2/theory_id +0 -1
  336. data/test/output/simple_method.txt +0 -5
  337. data/test/output/test_method/first_possible_method.txt +0 -6
  338. data/test/output/test_simple_cases/simple_case_01.txt +0 -8
  339. data/test/output/test_simple_cases/simple_case_02.txt +0 -7
  340. data/test/output/test_simple_cases/simple_case_03.txt +0 -8
  341. data/test/output/test_simple_cases/simple_case_04.txt +0 -8
  342. data/test/output/test_simple_cases/simple_case_05.txt +0 -8
  343. data/test/output/test_simple_cases/simple_case_06.txt +0 -9
  344. data/test/output/test_simple_cases/simple_case_07.txt +0 -9
  345. data/test/output/test_simple_cases/simple_case_08.txt +0 -9
  346. data/test/tc_describe.rb +0 -46
  347. data/test/tc_method.rb +0 -130
  348. data/test/tc_requirement.rb +0 -30
  349. data/test/tc_suite_complete.rb +0 -26
  350. data/test/tc_variable.rb +0 -52
  351. data/test/ts_complete.rb +0 -74
  352. data/test/ts_stable.rb +0 -81
  353. data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
  354. data/test/unit/core/method_call/tc_class_call.rb +0 -20
  355. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
  356. data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
  357. data/test/unit/core/statement/tc_array_access.rb +0 -63
  358. data/test/unit/core/statement/tc_block_statement.rb +0 -53
  359. data/test/unit/core/statement/tc_hack_statement.rb +0 -26
  360. data/test/unit/core/statement/tc_open_statement.rb +0 -79
  361. data/test/unit/core/statement/tc_statement.rb +0 -483
  362. data/test/unit/core/statement/tc_statement_group.rb +0 -35
  363. data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
  364. data/test/unit/core/statement/tc_theory_statement.rb +0 -53
  365. data/test/unit/core/syntax/tc_block_container.rb +0 -32
  366. data/test/unit/core/syntax/tc_if_container.rb +0 -39
  367. data/test/unit/core/tc_class_method_call.rb +0 -34
  368. data/test/unit/core/tc_container.rb +0 -41
  369. data/test/unit/core/tc_ctest_case.rb +0 -25
  370. data/test/unit/core/tc_instance_call_container.rb +0 -93
  371. data/test/unit/core/tc_literal.rb +0 -30
  372. data/test/unit/core/tc_theory_generator.rb +0 -336
  373. data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
  374. data/test/unit/core/tracking/tc_history.rb +0 -104
  375. data/test/unit/core/tracking/tc_step.rb +0 -65
  376. data/test/unit/core/variable/tc_array_variable.rb +0 -61
  377. data/test/unit/core/variable/tc_block_variable.rb +0 -17
  378. data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
  379. data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
  380. data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
  381. data/test/unit/core/variable/tc_string_variable.rb +0 -37
  382. data/test/unit/core/variable/tc_unknown.rb +0 -24
  383. data/test/unit/core/variable/tc_variable_reference.rb +0 -28
  384. data/test/unit/ruby_code/tc_array.rb +0 -64
  385. data/test/unit/ruby_code/tc_fixnum.rb +0 -18
  386. data/test/unit/ruby_code/tc_hash.rb +0 -41
  387. data/test/unit/ruby_code/tc_string.rb +0 -38
  388. data/test/unit/tc_chain.rb +0 -434
  389. data/test/unit/tc_chain_mapping.rb +0 -62
  390. data/test/unit/tc_chain_with_case_1.rb +0 -169
  391. data/test/unit/tc_instance_call.rb +0 -40
  392. data/test/unit/tc_method_usage.rb +0 -35
  393. data/test/unit/tc_pot.rb +0 -124
  394. data/test/unit/tc_runtime_tracking_method.rb +0 -40
  395. data/test/unit/tc_theory.rb +0 -531
  396. data/test/unit/tc_variable_declaration.rb +0 -32
  397. data/test/unit/theory/tc_theory_action.rb +0 -108
  398. data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
  399. data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
  400. data/test/unit/theory/tc_theory_connector.rb +0 -361
  401. data/test/unit/theory/tc_theory_dependent.rb +0 -153
  402. data/test/unit/theory/tc_theory_implementation.rb +0 -137
  403. data/test/unit/theory/tc_theory_result.rb +0 -112
  404. data/test/unit/theory/tc_theory_variable.rb +0 -45
  405. data/test/unit/util/tc_method_validation.rb +0 -101
  406. data/test/unit/util/tc_parser.rb +0 -110
  407. data/test/unit/util/tc_string_to_theory.rb +0 -300
  408. data/test/unit/variable/tc_method_usage_variable.rb +0 -25
  409. data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,361 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestTheoryConnector < Test::Unit::TestCase
5
- include ContainsTheories
6
-
7
- def setup
8
- super
9
- @potential_values = [
10
- Parser.run('0'),
11
- Parser.run('test_cases'),
12
- Parser.run('runtime_method')
13
- ]
14
- @connector = TheoryConnector.new(@potential_values)
15
- end
16
-
17
- def teardown
18
- System.reset
19
- RuntimeMethod.reset_global_id
20
- end
21
-
22
- def test_initialize
23
- assert_nothing_raised(){TheoryConnector.new(@potential_values)}
24
- end
25
-
26
- def test_chain_with_a_easy_problem_and_only_one_theory
27
-
28
- # Create the simple runtime method to be populated
29
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
30
- sparky = CTestCase.new
31
- sparky[:params] = ['sparky']
32
- sparky[:output] = 'sparky'
33
- pip = CTestCase.new
34
- pip[:params] = ['pip']
35
- pip[:output] = 'pip'
36
- test_cases = [
37
- sparky,pip
38
- ]
39
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
40
-
41
- # NOTE: To solve this it just needs to include an action that returns the first variable
42
- # Create the VERY simple theory to solve this.
43
- theory_action = TheoryAction.new(
44
- TheoryStatement.new(StringToTheory.run('Statement.new(Return.new,var1.params[0])')),
45
- StringToTheory.run('var1.statement_id')
46
- )
47
- result_one = TheoryResult.new(
48
- StringToTheory.run("if(var1.all_pass?(var2))\nreturn true\nend")
49
- )
50
- solution_theory = Theory.new([],theory_action,[result_one])
51
- assert(@connector.chain(runtime_method,test_cases,finish,[solution_theory]).kind_of?(Array))
52
- assert_equal(1,@connector.chain(runtime_method,test_cases,finish,[solution_theory]).length)
53
- assert(@connector.chain(runtime_method,test_cases,finish,[solution_theory]).all? {|x| x.kind_of?(Chain)})
54
- assert(@connector.chain(runtime_method,test_cases,finish,[solution_theory]).all? {|x| x.length == 2})
55
-
56
- # Check that the generated chain works
57
- implemented = @connector.chain(runtime_method,test_cases,finish,[solution_theory]).first.implement
58
- result = TheoryChainValidator.new.build(
59
- runtime_method,
60
- test_cases,
61
- [implemented],
62
- []
63
- )
64
- assert_equal(
65
- true,
66
- result.kind_of?(RuntimeMethod)
67
- )
68
-
69
- end
70
-
71
- def test_create_possible_chain_extensions_with_a_very_simple_problem
72
-
73
- directory_path = $LOC+File.join('test','fixtures','chains','1')
74
- raise StandardError.new("chain 1 does not exist") unless(File.exists?(directory_path))
75
- dump_file = File.open(File.join(directory_path,'dump'),'r')
76
-
77
- initial_chain = Marshal.load(dump_file)
78
- theory_6 = Theory.load_theory(6)
79
-
80
- # Create the simple runtime method to be populated
81
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
82
- sparky = CTestCase.new
83
- sparky[:params] = ['sparky']
84
- sparky[:output] = 'sparky'
85
- pip = CTestCase.new
86
- pip[:params] = ['pip']
87
- pip[:output] = 'pip'
88
- test_cases = [
89
- sparky,pip
90
- ]
91
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
92
-
93
- # TEMPORARY Hack remove all the results that don't resemble at least one of the theories
94
- # dependents.
95
- theory_dependents = [theory_6].inject([]) {|total,x| total += x.dependents}
96
- new_results = []
97
- initial_chain.first.results.each do |r|
98
- if theory_dependents.any? {|x| r.same_structure?(x)}
99
- new_results.push(r)
100
- end
101
- end
102
- assert_equal(
103
- 1,
104
- @connector.create_possible_chain_extensions(runtime_method,test_cases,finish,[theory_6],initial_chain).length
105
- )
106
- assert_equal(
107
- true,
108
- @connector.chain(runtime_method,test_cases,finish,[theory_6]).all? {|x| x.kind_of?(Chain)}
109
- )
110
-
111
- end
112
-
113
- def test_chain_with_a_marginally_more_complicated_problem
114
-
115
- # Create the simple runtime method to be populated
116
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
117
- test_cases = [
118
- {:params=>['sparky'], :output=>3},
119
- {:params=>['pip'], :output=>3},
120
- ]
121
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
122
- assert_equal(
123
- true,
124
- @connector.chain(runtime_method,test_cases,finish,[@theory_3]).kind_of?(Array)
125
- )
126
- assert_equal(
127
- true,
128
- @connector.chain(runtime_method,test_cases,finish,[@theory_3]).all? {|x| x.all? {|y| y.kind_of?(Theory)}}
129
- )
130
-
131
- end
132
-
133
- def test_chain_with_addition_theory
134
-
135
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new,MethodParameter.new))
136
- test_cases = [
137
- {:params=>['left 4','dead'], :output=>'left 4 dead'}
138
- ]
139
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nend")
140
-
141
- end
142
-
143
- def test_chain_with_2_theories
144
-
145
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
146
- sparky = CTestCase.new
147
- sparky[:params] = ['sparky']
148
- sparky[:output] = 6
149
- kel = CTestCase.new
150
- kel[:params] = ['kel']
151
- kel[:output] = 3
152
- test_cases = [
153
- sparky,kel
154
- ]
155
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
156
- theory_7 = Theory.load_theory(7)
157
- theory_5 = Theory.load_theory(5)
158
-
159
- directory_path = $LOC+File.join('test','fixtures','chains','2')
160
- raise StandardError.new("chain 2 does not exist") unless(File.exists?(directory_path))
161
- dump_file = File.open(File.join(directory_path,'dump'),'r')
162
- initial_chain = Marshal.load(dump_file)
163
-
164
- # Temporary Hack remove all the results that don't resemble at least one of the theories
165
- # dependents.
166
- theory_dependents = [theory_7,theory_5].inject([]) {|total,x| total += x.dependents}
167
- new_results = []
168
- initial_chain.first.results.each do |r|
169
- if theory_dependents.any? {|x| r.same_structure?(x)}
170
- new_results.push(r)
171
- end
172
- end
173
- #initial_chain.first.results = new_results
174
- initial_chain.first.results = [new_results[0]]
175
-
176
-
177
- #exit
178
- # TEMP - Removing most of the dependents
179
- # initial_chain.first.results.each_with_index do |x,i|
180
- # #if x.write.include?('if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])')
181
- # if x.write.include?('if(var1.realise2(var2[var3][:params]).params[var8].value.length == var2[var3][:output])')
182
- # end
183
- # end
184
- # exit
185
- #initial_chain.first.results = initial_chain.first.results = [initial_chain.first.results[429]]
186
- #initial_chain.first.results = initial_chain.first.results[0..1]
187
- #if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])
188
-
189
-
190
- # # Quicker version thath uses pre-generated head
191
- # assert_equal(
192
- # true,
193
- # @connector.create_possible_chain_extensions(
194
- # runtime_method,
195
- # test_cases,
196
- # finish,
197
- # [theory_4,theory_5],
198
- # initial_chain
199
- # ).kind_of?(Array)
200
- # )
201
-
202
- # assert_equal(
203
- # true,
204
- # @connector.chain(runtime_method,test_cases,finish,[theory_4,theory_5]).kind_of?(Array)
205
- # )
206
-
207
- # assert_equal(
208
- # true,
209
- # @connector.chain(runtime_method,test_cases,finish,[@theory_3]).all? do |x|
210
- # x.all? {|y| y.kind_of?(Theory)}
211
- # end
212
- # )
213
- # assert_equal(
214
- # true,
215
- # @connector.chain(runtime_method,test_cases,finish,[theory_4,theory_5]).all? do |x|
216
- # x.all? {|y| y.kind_of?(Theory)}
217
- # end
218
- # )
219
- # assert(@connector.chain(runtime_method,test_cases,finish,[theory_4,theory_5]).length > 0)
220
- #
221
-
222
- assert_equal(
223
- true,
224
- @connector.create_possible_chain_extensions(
225
- runtime_method,
226
- test_cases,
227
- finish,
228
- [theory_7,theory_5],
229
- initial_chain
230
- ).any? {|x| x.length > 1 }
231
- )
232
-
233
- end
234
-
235
- def test_with_case_1
236
- theory_1 = Theory.load_theory(20)
237
- # TODO Do I really want theories with out actions I should maybe move the result
238
- # for theory_4 to theory 3. - UPDATE I'm pretty sure I need theories with out
239
- # actions need to confirm.
240
- theory_2 = Theory.load_theory(14)
241
- theory_3 = Theory.load_theory(15)
242
- theory_4 = Theory.load_theory(12)
243
-
244
- # Create the initial starting chain from pre-existing chain
245
- directory_path = $LOC+File.join('test','fixtures','chains','3')
246
- raise StandardError.new("chain 3 does not exist") unless(File.exists?(directory_path))
247
- dump_file = File.open(File.join(directory_path,'dump'),'r')
248
- initial_chain = Marshal.load(dump_file)
249
-
250
- # Create the empty runtime method and test cases
251
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
252
- test_case_1 = CTestCase.new
253
- test_case_1[:params] = ['something']
254
- test_case_1[:output] = 'exists'
255
- test_case_2 = CTestCase.new
256
- test_case_2[:params] = ['my willpower']
257
- test_case_2[:output] = 'does not exist'
258
- test_cases = [
259
- test_case_1,test_case_2
260
- ]
261
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
262
-
263
- initial_chain.remove_superfluous_head_results!([theory_1,theory_2,theory_3,theory_4])
264
-
265
- # Check that at least one complete chain is created
266
- assert_equal(
267
- true,
268
- @connector.create_possible_chain_extensions(
269
- runtime_method,
270
- test_cases,
271
- finish,
272
- [theory_1,theory_2,theory_3,theory_4],
273
- initial_chain
274
- ).any? {|x| x.length > 1 }
275
- )
276
-
277
- end
278
-
279
- def test_unify_chain_with_a_very_simple_problem
280
-
281
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
282
- test_cases = [
283
- {:params=>['sparky'], :output=>6},
284
- {:params=>['kel'], :output=>3}
285
- ]
286
- finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
287
-
288
- theory_4 = Theory.load_theory(4)
289
- theory_5 = Theory.load_theory(5)
290
-
291
- # Update the theries so their variables don't match to start
292
- theory_4 = theory_4.map_to(Mapping.new({1=>TheoryVariable.new(8),2=>TheoryVariable.new(9),3=>TheoryVariable.new(10)}))
293
- theory_5 = theory_5.map_to(Mapping.new({1=>TheoryVariable.new(109),2=>TheoryVariable.new(85),3=>TheoryVariable.new(23)}))
294
-
295
- assert_equal(
296
- Array,
297
- TheoryConnector.new([]).unify_chain([theory_4,theory_5]).class
298
- )
299
- assert_equal(
300
- 1,
301
- TheoryConnector.new([]).unify_chain([theory_4,theory_5].reverse).length
302
- )
303
- TheoryConnector.new([]).unify_chain([theory_4,theory_5].reverse).each do |chain|
304
- chain.each do |theory|
305
- end
306
- end
307
- TheoryConnector.new([]).unify_chain([theory_4,theory_5].reverse).each do |chain|
308
- assert_equal(
309
- 2,
310
- chain.length
311
- )
312
- end
313
- TheoryConnector.new([]).unify_chain([theory_4,theory_5].reverse).each do |chain|
314
- assert_equal(
315
- 3,
316
- chain.uniq_theory_variable_ids.length
317
- )
318
- end
319
-
320
- end
321
-
322
-
323
- def test_chain_with_chop_chop
324
-
325
- theory_1 = Theory.load_theory(16)
326
- theory_2 = Theory.load_theory(17)
327
- theory_3 = Theory.load_theory(18)
328
- #finish = Parser.run("if(runtime_method.pass?(test_cases[0]))\nreturn true\nend")
329
- # [:params = [‘Belfast’], ‘result’ = ‘B’]
330
- test_case_1 = CTestCase.new
331
- test_case_1[:params] = ['Belfast']
332
- test_case_1[:output] = 'B'
333
- test_cases = [
334
- test_case_1
335
- ]
336
- tc = Parser.run('test_cases')
337
- tc_index_0 = IntrinsicLiteral.new(0)
338
- real_method = Parser.run('runtime_method')
339
-
340
- finish = OpenStatement.new(
341
- Statement.new(If.new,Container.new(InstanceCallContainer.new(real_method,Pass.new,ArrayAccess.new(tc,tc_index_0))))
342
- )
343
- finish << Statement.new(Return.new,True.new)
344
- potential_values = MappingValues.new([
345
- tc,
346
- real_method,
347
- tc_index_0,
348
- IntrinsicLiteral.new(0),
349
- Parser.run('last_runtime_method')
350
- ])
351
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
352
-
353
- connector = TheoryConnector.new(potential_values)
354
- assert_equal(
355
- 2,
356
- connector.chain(runtime_method,test_cases,finish,[theory_1,theory_2,theory_3]).length
357
- )
358
-
359
- end
360
-
361
- end
@@ -1,153 +0,0 @@
1
- $LOAD_PATH << File.expand_path('../../../../lib',__FILE__)
2
-
3
- require 'required'
4
- require 'test/unit'
5
-
6
- class TestTheoryDependent < Test::Unit::TestCase
7
-
8
- def setup
9
- # TODO Need to include restriction so that theory dependents are always converted to if statements
10
- # @dependent_one = TheoryDependent.new("var1.length = var2.length") - > WRONG!
11
- @dependent_one = TheoryDependent.new(StringToTheory.run("if(var1.length = var2.length)\nend"))
12
- @dependent_two = TheoryDependent.new(StringToTheory.run("if(var1.value.length = var2.length)\nend"))
13
- end
14
-
15
- def teardown
16
- System.reset
17
- RuntimeMethod.reset_global_id
18
- end
19
-
20
- def test_intialize
21
- assert_nothing_raised(){TheoryDependent.new(StringToTheory.run("if(var6 = 7)\nend"))}
22
- assert_nothing_raised(){TheoryDependent.new(StringToTheory.run("if(var6 == 7)\nend"))}
23
- end
24
-
25
- def test_intialize_kind_of_statements
26
- assert_nothing_raised(){TheoryDependent.new(StringToTheory.run("if(var1.kind_of?(RuntimeMethod))\nreturn true\nend"))}
27
- assert_equal(
28
- true,
29
- TheoryDependent.new(StringToTheory.run("if(var1.kind_of?(RuntimeMethod))\nreturn true\nend")).describe.include?('return true')
30
- )
31
- end
32
-
33
- def test_intialize_with_addition_and_comparison
34
- assert_nothing_raised(){
35
- TheoryDependent.new(StringToTheory.run("if((var1 + var2) == var3)\nend"))
36
- }
37
- assert_equal(
38
- 3,
39
- TheoryDependent.new(StringToTheory.run("if((var1 + var2) == var3)\nend")).theory_variables.length
40
- )
41
- end
42
-
43
- def test_intialize_with_block_statements
44
- assert_nothing_raised(){
45
- TheoryDependent.new(StringToTheory.run("if(var1.any? { |x| x.include? var2.statement_id })\nreturn true\nend"))
46
- }
47
- assert_equal(
48
- 2,
49
- TheoryDependent.new(StringToTheory.run("if(var1.any? { |x| x.include? var2.statement_id })\nreturn true\nend")).theory_variables.length
50
- )
51
- end
52
-
53
- def test_intialize_with_if_statement_example
54
- assert_nothing_raised(){
55
- TheoryDependent.new(
56
- StringToTheory.run("if((var1.history(var2[var4][:params]).any?{ |x| x.statement_id == var8.statement_id} ) == false)\nend")
57
- )
58
- }
59
- assert_equal(
60
- 4,
61
- TheoryDependent.new(
62
- StringToTheory.run("if((var1.history(var2[var4][:params]).any?{ |x| x.statement_id == var8.statement_id} ) == false)\nend")
63
- ).theory_variables.length
64
- )
65
- end
66
-
67
- def test_theory_variables
68
- assert_equal(2,@dependent_one.theory_variables.length)
69
- assert_equal(2,@dependent_two.theory_variables.length)
70
- end
71
-
72
- def test_copy
73
- a = StringToTheory.run("if(var1.length = var2.length)\nend")
74
-
75
- end
76
-
77
- def test_rewrite_with
78
- assert_raises(StandardError) {@dependent_one.rewrite_with([])}
79
- assert_equal(
80
- "if(runtime_method.params[0].length = test_cases[0][:output].length)\nend",
81
- @dependent_one.rewrite_with([
82
- InstanceCallContainer.new(IntrinsicRuntimeMethod.new,ArrayAccess.new(Params.new,0)),
83
- HashAccess.new(
84
- ArrayAccess.new(
85
- IntrinsicTestCases.new,
86
- 0
87
- ),
88
- Literal.new(:output)
89
- )
90
- ]).write
91
- )
92
- end
93
-
94
- def test_rewrite_with_using_a_long_replacement
95
- assert_equal(
96
- "if(runtime_method.params[0].value.length = test_cases[0][:output].length)\nend",
97
- @dependent_one.rewrite_with([
98
- Parser.run('runtime_method.params[0].value'),
99
- Parser.run('test_cases[0][:output]')
100
- ]).write
101
- )
102
- end
103
-
104
- def test_rewrite_with_too_few_replacements
105
- assert_raises(StandardError){
106
- @dependent_one.rewrite_with([
107
- Parser.run('runtime_method.params[0].value')
108
- ])
109
- }
110
- end
111
-
112
- def test_rewrite_permutations
113
- base_value_desc = [
114
- Parser.run('runtime_method[:params][0]'),
115
- Parser.run('test_cases[0][:params][0]'),
116
- Parser.run('test_cases[0][:output]'),
117
- Parser.run('test_cases[0][:params][0]'),
118
- Parser.run('test_cases[1][:output]')
119
- ]
120
- assert_equal(20,@dependent_one.rewrite_permutations(base_value_desc).length)
121
- assert_equal(OpenStatement,@dependent_one.rewrite_permutations(base_value_desc).first.class)
122
- end
123
-
124
- def test_map_to_1
125
- dependent_one = TheoryDependent.new(StringToTheory.run("if(var2[var3].kind_of?(CTestCase))\nreturn true\nend"))
126
- mapping = {2=>IntrinsicTestCases.new,3=>Literal.new(0)}
127
- assert_equal(
128
- "if(<test_cases>[0].kind_of?(CTestCase))\n return true\nend\n",
129
- dependent_one.map_to(mapping).describe
130
- )
131
- end
132
-
133
- def test_map_to_2
134
- dependent_two = TheoryDependent.new(StringToTheory.run("if(var6.kind_of?(Fixnum))\nreturn true\nend"))
135
- mapping = {6 => 0.to_literal}
136
- assert_equal(
137
- "if(0.kind_of?(Fixnum))\n return true\nend\n",
138
- dependent_two.map_to(mapping).describe
139
- )
140
- end
141
-
142
- def test_map_to_3
143
- dependent_three = TheoryDependent.new(
144
- StringToTheory.run("if((var2[var3][:params][var6] == var2[var4][:params][var6])==false)\nreturn true\nend")
145
- )
146
- mapping = {2=>IntrinsicTestCases.new,3=>Literal.new(0),6=>0.to_literal,4=>1.to_literal}
147
- assert_equal(
148
- "if((<test_cases>[0][:params][0] == <test_cases>[1][:params][0]) == false)\n return true\nend\n",
149
- dependent_three.map_to(mapping).describe
150
- )
151
- end
152
-
153
- end