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,27 +0,0 @@
1
- # TODO I'm not sure I like this approach? - maybe just a hash would be clearer
2
- class Mapping
3
-
4
- attr_reader :hash
5
-
6
- def initialize(hash={})
7
- super()
8
- raise StandardError.new('This should be a hash not a '+hash.class.to_s) unless hash.kind_of?(Hash)
9
- @hash = hash
10
- end
11
-
12
- def values
13
- return MappingValues.new(@hash.values)
14
- end
15
-
16
- def merge(mapping)
17
- return Mapping.new(@hash.merge(mapping.hash))
18
- end
19
-
20
- # TODO Come back to this and include responds_to etc
21
- # http://stackoverflow.com/questions/291132/method-missing-gotchas-in-ruby
22
- def method_missing(sym, *args, &block)
23
- return @hash.send(sym, *args, &block) if @hash.respond_to?(sym)
24
- super(sym, *args, &block)
25
- end
26
-
27
- end
@@ -1,24 +0,0 @@
1
- class MappingValues < Array
2
-
3
- def initialize(array=[])
4
- super(array)
5
- end
6
-
7
- # TODO This approach isn't needed anymore
8
- def -(val)
9
- if val.kind_of?(MappingValues)
10
- m = MappingValues.new
11
- self.each do |x|
12
- next if val.any? {|y| x.intrinsic_object_id == y.intrinsic_object_id}
13
- m << x
14
- end
15
- return m
16
- end
17
- return super
18
- end
19
-
20
- def copy
21
- return MappingValues.new(self.collect {|x| x.copy})
22
- end
23
-
24
- end
@@ -1,253 +0,0 @@
1
- # => TODO This is a duplicate of of UnifiedChain - it needs stripped down allot - probably shouldn't exist
2
-
3
- class PartialChain
4
-
5
- def initialize(nodes)
6
- @nodes = nodes
7
- end
8
-
9
- def write(tab=0)
10
- return @nodes.inject('') {|total,x| total += x.write}
11
- end
12
-
13
- def describe(tab=0)
14
- return @nodes.inject('') {|total,x| total += x.describe}
15
- end
16
-
17
- def copy
18
- #return Chain.new(@nodes.copy)
19
- return Marshal.load(Marshal.dump(self))
20
- end
21
-
22
- # Returns an array of all the theory variables in the chain. All the
23
- # theory variables should be global across the chain.
24
- #
25
- def theory_variables
26
- results = @nodes.inject([]) do |total,theory|
27
- total += theory.all_theory_variables.collect {|x| x}
28
- total
29
- end
30
- return results.uniq
31
- end
32
-
33
- def length
34
- return @nodes.length
35
- end
36
-
37
- # Return an implemented version of the chain where all the theory variables have
38
- # been replaced with read values.
39
- #
40
- def implement(mapping)
41
- implemented_nodes = @nodes.inject([]) do |total,theory|
42
- total << theory.map_to(mapping)
43
- end
44
- return ImplementedChain.new(implemented_nodes,mapping)
45
- end
46
-
47
- def implementation_permuatations2(runtime_method,test_cases,mapping)
48
-
49
- more_mapping = valid_mapping_permutations(runtime_method.copy,test_cases.copy)
50
-
51
- return more_mapping.inject([]) { |total,mapping| total << self.copy.implement(mapping) }
52
-
53
- end
54
-
55
- def has_all_variables_been_found?(component,mappings)
56
- component.theory_variables.each do |var|
57
- mappings.each do |mapping|
58
- return false unless mapping.has_key? var.theory_variable_id
59
- end
60
- end
61
- return true
62
- end
63
-
64
- def identify_uniq_mappings(mappings)
65
- uniq_mappings = []
66
- count = mappings.length
67
- until mappings.empty?
68
- mapping = mappings.shift
69
- already_exists = mappings.any? do |x|
70
- next false unless x.length == mapping.length
71
- next false unless x.keys.sort == mapping.keys.sort
72
- all_values_the_same = true
73
- x.each do |key,value|
74
- if mapping[key].class != value.class
75
- all_values_the_same = false
76
- end
77
- if mapping[key].class == value.class
78
- if mapping[key].kind_of?(IntrinsicLiteral)
79
- if mapping[key].write != value.write
80
- all_values_the_same = false
81
- end
82
- end
83
- end
84
- end
85
- next false unless all_values_the_same
86
- next true
87
- end
88
- unless already_exists
89
- uniq_mappings << mapping
90
- end
91
- end
92
- if uniq_mappings.length == 0 && count != 0
93
- raise StandardError.new('uniq_mappings should not be 0')
94
- end
95
- return uniq_mappings
96
- end
97
-
98
- def intrinsic_values_for_variable(id,component,mapping,runtime_method,test_cases,intrinsic_values)
99
-
100
- values = []
101
- component.statements_with_variable(id).each do |statement|
102
- reg = eval('/^var'+id.to_s+'\./')
103
- if statement.write.match(reg)
104
-
105
- intrinsic_values.each do |value|
106
- temp_mapping = mapping.copy
107
- temp_mapping[id] = value
108
- # => TODO Not validating the component - e.g. if(var1.kind_of?(RuntimeMethod))
109
- if valid_mapping?(runtime_method.copy,test_cases.copy,statement,temp_mapping)
110
- values << value
111
- end
112
- end
113
- next
114
- end
115
-
116
- # values for index
117
- index_values = []
118
- intrinsic_statement = statement.map_to(mapping)
119
- if intrinsic_statement.select_all {|z| z.kind_of?(TheoryVariable)}.length > 0
120
- if m = intrinsic_statement.write.match(/([\w\.]+)\[var(\d)+\]/)
121
- method_call = $1
122
- if m2 = method_call.match(/var(\d+)/)
123
- next
124
- end
125
- literal = evaluate_statement(method_call,runtime_method.copy,test_cases.copy)
126
- literal.length.times do |n|
127
- index_values << IntrinsicLiteral.new(n)
128
- end
129
- end
130
- end
131
- values += index_values
132
-
133
- #variable_values = []
134
- #result.statements_with_variable(var.theory_variable_id).each do |statement|
135
- #variable_values += values_for_variable_as_argument(var,statement,mapping,intrinsic_values,implemented_runtime_method.copy,test_cases.copy)
136
- #end
137
- #values += variable_values
138
-
139
- #intrinsic_statement = statement.map_to(mapping)
140
- variable_values = []
141
- intrinsic_values.each do |value|
142
- literal = intrinsic_statement.write.gsub(/var(\d)+/,value.write)
143
- begin
144
- eval literal
145
- variable_values << value
146
- rescue
147
- next
148
- end
149
- end
150
- #return results
151
- values += variable_values
152
-
153
-
154
- end
155
- return values
156
- end
157
-
158
- def mapping_permutations(keys,values)
159
- values.permutation(keys.length).to_a.inject([]) do |total,value_permutation|
160
- total << Hash[*keys.zip(value_permutation).flatten]
161
- end
162
- end
163
-
164
- def valid_mapping?(runtime_method,test_cases,statement,mapping)
165
- intrinsic_statement = statement.map_to(mapping)
166
- return false unless intrinsic_statement.select_all {|z| z.kind_of?(TheoryVariable)}.length == 0
167
- valid_statement?(intrinsic_statement,runtime_method.copy,test_cases.copy)
168
- end
169
-
170
- def evaluate_statement(statement,runtime_method,test_cases)
171
- eval statement
172
- end
173
-
174
- def valid_statement?(statement,runtime_method,test_cases)
175
- eval statement.write
176
- return true
177
- rescue NoMethodError
178
- return false
179
- end
180
-
181
- # Returns an array of implemented chains using the various value
182
- # permutations. Essential what it is looking for is mapping to convert
183
- # all the theory variables to intrinsic variables.
184
- #
185
- # @param runtime_method The runtime method instance that will be populated to
186
- # create the solution.<#RuntimeMethod >
187
- # @param test_cases The test cases instance containing real values.
188
- #
189
- def implementation_permuatations(runtime_method,test_cases,mapping)
190
-
191
- return implementation_permuatations2(runtime_method,test_cases,mapping)
192
-
193
- # Determine the number of variables without intrinsic values
194
- theory_variable_ids = theory_variables.collect {|x| x.theory_variable_id}
195
-
196
- # Collect the theory variables without intrinsic values
197
- missing_intrinsic_values = theory_variable_ids-mapping.keys
198
-
199
- # Take the first theory and identify all the accessors
200
- # (need to work out what is the runtime method and what the test cases)
201
-
202
- # TEMP: Why are these implemented theories
203
- # @nodes.first.all_theory_variables
204
-
205
- # Create the theory generator
206
- generator = TheoryGenerator.new()
207
-
208
- #accessors, temp_mapping = generator.generate_accessors_and_mapping(test_cases,runtime_method,1)
209
- accessors, temp_mapping = generator.generate_accessors_and_mapping(test_cases,runtime_method,3)
210
-
211
- if temp_mapping.length > missing_intrinsic_values.length
212
-
213
- # Now to assign real values to the chain
214
-
215
- # Apply the values in the various permutaions
216
- # (this is very crude and means that odd calls )
217
- #theory_variable_ids = @nodes.first.all_theory_variables.collect {|x| x.theory_variable_id }
218
-
219
- theory_variable_ids = self.theory_variables.collect {|x| x.theory_variable_id }
220
-
221
- # Get the posible sets for values in an array so that non of the arrays contain all the same values
222
- res = temp_mapping.values.collect {|x| x}
223
-
224
- # TODO This is a complete hack but I think I should be using intrinsic values rather than real
225
- intrinsic_res = res.collect {|x| x.to_intrinsic}
226
- value_permutaions = intrinsic_res.permutation(theory_variable_ids.length).to_a
227
- uniq_value_permutations = value_permutaions.collect {|x| x.to_set}.uniq
228
- possible_mappings = []
229
-
230
- theory_variable_id_permutations = theory_variable_ids.permutation(theory_variable_ids.length).to_a
231
-
232
- possible_mappings = []
233
- theory_variable_id_permutations.each do |theory_variable_id_permutation|
234
- uniq_value_permutations.each do |value_permutation|
235
- m = Mapping.new
236
- theory_variable_id_permutation.zip(value_permutation.to_a) do |key,value|
237
- m[key] = value
238
- end
239
- possible_mappings << m
240
- end
241
-
242
- end
243
-
244
- # Implemented changes
245
- return possible_mappings.inject([]) { |total,mapping| total << self.copy.implement(mapping) }
246
-
247
- else
248
- raise StandardError.new('Could not generate enough real vlaues to test theory - try increasing the itterations')
249
- end
250
-
251
- end
252
-
253
- end
@@ -1,295 +0,0 @@
1
- class Theory
2
- attr_reader :dependents, :action, :results, :theory_id, :example_runtime_method
3
-
4
- # TODO This is only temporaily accessible for debug
5
- attr_writer :results
6
-
7
- attr_accessor :theory_instance_id
8
-
9
- @@theory_id = nil
10
- #
11
- # @param example_runtime_method A runtime method instance with this theories action applied to it and
12
- # which meets the theories dependents with a certain set of test cases.
13
- #
14
- def initialize(dependents,action,results,example_runtime_method=nil)
15
- @dependents, @action, @results, @example_runtime_method = dependents, action, results, example_runtime_method
16
- @theory_id = Theory.next_theory_id
17
- end
18
-
19
- def copy
20
- #return Theory.new(@dependents.copy,@action.copy,@results.copy)
21
- return Marshal.load(Marshal.dump(self))
22
- end
23
-
24
- def self.next_theory_id
25
- if @@theory_id.nil?
26
- FileUtils.mkdir(theories_directory) unless File.exists?(theories_directory)
27
- highest_integer = 0
28
- Dir.glob(File.join(theories_directory,'*')).each do |filename|
29
- if filename.match(/(\d+)/)
30
- highest_integer = $1.to_i if $1.to_i > highest_integer
31
- end
32
- end
33
- @@theory_id = highest_integer
34
- end
35
- @@theory_id += 1
36
- return @@theory_id
37
- end
38
-
39
- def self.theories_directory
40
- # the home directory code is duplicated
41
- realHome = ["HOME", "HOMEPATH"].detect {|h| ENV[h] != nil}
42
- if not realHome
43
- StandardLogger.instance.warning "Couldn't detect a home directory"
44
- end
45
- # => TODO Should use proper version
46
- return File.join(ENV[realHome],'cauldron','0-1-1','theories')
47
- end
48
-
49
- def irrelevant?
50
- dependents.empty? and results.empty? and action.nil?
51
- end
52
-
53
- # Identify the dependents and actions that haven't changed between adding the action.
54
- #
55
- def identify_unchanged
56
-
57
- # Identify the dependents that change after the action is added
58
- changing_dependents = []
59
- @dependents.each do |dependent|
60
- next if @results.any? {|x| x.write == dependent.write}
61
- changing_dependents << dependent
62
- end
63
-
64
- # Identify the results that don't occur in the dependents
65
- changing_results = []
66
- @results.each do |result|
67
- # TODO Should this use the changing_dependents
68
- next if @dependents.any? {|x| x.write == result.write}
69
- changing_results << result
70
- end
71
-
72
- # TODO Stripping out the dependents will mean that they won't be
73
- # met and the theory might be dismissed unfairly. e.g. it
74
- # needs var1.kind_of?(RuntimeMethod). It should probably start
75
- # with the minimum and work backwards - e.g. adding the dependents
76
- # until it doesn't fail.
77
-
78
- # Create a new runtime method with the irrelevant changes removed
79
- return Theory.new(changing_dependents,action.copy,changing_results,example_runtime_method.copy)
80
- end
81
-
82
- # Loads a particular theory that has been saved to a file
83
- #
84
- def self.load_theory(theory_id)
85
- directory_path = $LOC+File.join('test','fixtures','theories',theory_id.to_s)
86
- raise StandardError.new("Theory fixture #{theory_id} does not exist") unless(File.exists?(directory_path))
87
- dump_file = File.open(File.join(directory_path,'dump'),'r')
88
- return Marshal.load(dump_file)
89
- end
90
-
91
- # Returns a new theory where all the theory variables ids start from
92
- # the supplied value.
93
- #
94
- def uniq_theory_variables(min_id)
95
-
96
- ids = all_theory_variables.inject([]) {|total,x| total << x.theory_variable_id}
97
-
98
- # Pair the olds with the new ones
99
- map = ids.inject(Mapping.new) {|total,x| total[x] = TheoryVariable.new(min_id); min_id += 1; total}
100
-
101
- # Duplicate the current theory and sustute the theory variables
102
- # TODO Maybe shouldn't be a TheoryImplementation at this point
103
- return self.map_to(map)
104
-
105
- end
106
-
107
- # Returns the component with the id supplied
108
- #
109
- def find_component(component_id)
110
- return (dependents+results).find {|x| x.theory_component_id == component_id}
111
- end
112
-
113
- # Returns true if the theory contains a result that's structure is similar
114
- # to that of the supplied result implementation.
115
- #
116
- # @param structure The theory result implementation that's structure is compared
117
- # with this theorie's results.
118
- #
119
- def has_result_structure?(structure)
120
- return @results.any? {|x| x.same_structure?(structure)}
121
- end
122
-
123
- # Returns the results thats structure matches that provided.
124
- #
125
- def select_result_structure(structure)
126
- return @results.select {|x| x.same_structure?(structure)}
127
- end
128
-
129
- # Returns an array of any variables that only exist in the action. These
130
- # are important for determining global ids, the results and dependents global
131
- # id is determined my what they are connected to, these action variables aren't
132
- # connected to anything.
133
- #
134
- def orphan_action_variables
135
- return [] if @action.nil?
136
- excluded_variables = (@dependents+@results).inject([]) {|total,x| total += x.theory_variables }
137
- orphans = @action.theory_variables - excluded_variables
138
- # TODO Should probably raise an error for this situation.
139
- # TODO Actually as long as I include context when the value is added and the value it should
140
- # be fine e.g. var2[:params][var3] for var3
141
- StandardLogger.instance.warning "You really should not have variables that are not in dependents - there is no context for the value"
142
- return orphans
143
- end
144
-
145
- # @param mapping { 1=>[],
146
- # 2=>#<IntrinsicTestCases:0xb712d13c>,
147
- # 3=>#<IntrinsicRuntimeMethod:0xb712c980>
148
- # }
149
- # @param values {
150
- # 1=>0,
151
- # 2=><#TestCases>
152
- # 3=><#Runtime Method>
153
- # }
154
- #
155
- def map_to(mapping,values={})
156
- raise StandardError.new('Please use the maping datatype') unless mapping.kind_of?(Mapping)
157
- # return TheoryImplementation.new(
158
- # @dependents.collect {|y| y.map_to(mapping)},
159
- # @action ? @action.map_to(mapping) : nil,
160
- # @results.collect {|y| y.map_to(mapping)},
161
- # mapping,
162
- # values
163
- # )
164
- return TheoryImplementation.new(
165
- @dependents.collect {|y| y.map_to(mapping)},
166
- @action ? @action.map_to(mapping) : nil,
167
- @results.collect {|y| y.map_to(mapping)},
168
- mapping,
169
- values
170
- )
171
- end
172
-
173
- # TODO Need to write tests for this that use the mapping
174
- def rewrite_permutations(realisable_variables,partial_mapping=Mapping.new())
175
-
176
- # Get an array of all the theory variables
177
- a = all_theory_variables
178
-
179
- # Strip out the theory variables that have already been accounted for
180
- free_theory_variables = a.select {|x| !partial_mapping.has_key?(x.theory_variable_id) }
181
-
182
- # If all the mapping has been determines just return the single permutation
183
- return [self.map_to(partial_mapping)] if free_theory_variables.length == 0
184
- # TODO This doesn't currentlt remove the initial finish values
185
- arrangements = (realisable_variables - partial_mapping.values).permutation(free_theory_variables.length).to_a
186
-
187
- # Map the arrangements to specific theory variables ids.
188
- remaining_mapping = arrangements.inject([]) do |total,x|
189
- # TODO I can probably get the 0 value to be the correct value
190
- hash_table = Mapping.new(Hash[*free_theory_variables.collect { |v| [v.theory_variable_id,0] }.flatten])
191
- free_theory_variables.zip(x) do |y,z|
192
- hash_table[y.theory_variable_id] = z
193
- end
194
- total << hash_table
195
- end
196
- return remaining_mapping.inject([]) do |total,x|
197
- total << self.map_to(x.merge(partial_mapping))
198
- end
199
-
200
- raise StandardError.new('Need to complete the rest of the mapping with the available realisable variables')
201
-
202
- end
203
-
204
- # Returns the highest theory variable id used by the theory
205
- def highest_theory_variable_id
206
- return all_theory_variables.sort {|y,z| y.theory_variable_id <=> z.theory_variable_id }.reverse.first.theory_variable_id
207
- end
208
-
209
- # Returns an array of all the theory variables used within the theory.
210
- #
211
- def all_theory_variables
212
-
213
- # Get all the theory variables used in the @action, dependents and results
214
- a = ([@action]+@dependents+@results).select{|x| x != nil}.inject([]) {|total,x| total += x.theory_variables }
215
-
216
- # Filter out only the uniq theory vairables
217
- # http://stackoverflow.com/questions/109781/uniq-by-object-attribute-in-ruby
218
- return a.inject({}) {|total,x| total[x.theory_variable_id]=x; total}.values
219
-
220
- end
221
-
222
- # Returns an abstract description of theory with colour matching
223
- # for common variables.
224
- #
225
- # TODO Include example here
226
- #
227
- def describe
228
-
229
- # TODO include - theory_instance_id
230
- # Describe the despendencies
231
- description = 'if: '+"\n"
232
- @dependents.inject(description) {|description, x| description += x.describe(1) }
233
-
234
- # Describe the action
235
- unless @action.nil?
236
- description += "\n"+"action: \n"
237
- description += @action.describe(1)
238
- end
239
-
240
- # Describe the result
241
- description += "\n"+"result: \n"
242
- @results.inject(description) {|description, x| description += x.describe(1) }
243
- return description
244
-
245
- end
246
-
247
- def write
248
-
249
- # Describe the despendencies
250
- description = 'if: '+"\n"
251
- @dependents.inject(description) {|description, x| description += x.write(1)+"\n" }
252
-
253
- # Describe the action
254
- unless @action.nil?
255
- description += "\n"+"action: \n"
256
- description += @action.write(1)
257
- end
258
-
259
- # Describe the result
260
- description += "\n"+"result: \n"
261
- @results.inject(description) {|description, x| description += x.write(1)+"\n" }
262
- return description
263
- end
264
-
265
- def highlight(component_ids=[])
266
-
267
- # Describe the despendencies
268
- description = 'if: '+"\n"
269
- @dependents.inject(description) do |description, x|
270
- if component_ids.include?(x.theory_component_id)
271
- description += "\033[0;31m\ "+x.write(1)+"\033[00m\ "+"\n"
272
- else
273
- description += x.write(1)+"\n"
274
- end
275
- end
276
-
277
- # Describe the action
278
- unless @action.nil?
279
- description += "\n"+"action: \n"
280
- description += @action.write(1)
281
- end
282
-
283
- # Describe the result
284
- description += "\n"+"result: \n"
285
- @results.inject(description) {|description, x| description += x.write(1)+"\n" }
286
- return description
287
- end
288
-
289
- # Returns an array of all the theory components used in the theory.
290
- #
291
- def components
292
- return ([@action]+@dependents+@results).select{|x| x != nil}
293
- end
294
-
295
- end