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
@@ -0,0 +1,46 @@
1
+ Feature: Cauldron generates single parameter methods
2
+
3
+ Cauldron can generate runtime methods that accepts one parameters
4
+
5
+ NOTE: it creates the file in tmp/aruba/launch.rb - so that loading path needs to be changed
6
+ - use @pause to see if it's working.
7
+
8
+ #TODO Change the method name
9
+
10
+ @announce @slow_process
11
+ Scenario: Method returns the passed in value
12
+ Given a theory named "example_1.yml" with:
13
+ """
14
+ dependents:
15
+ -
16
+ "if RUNTIME_METHOD.kind_of?(RuntimeMethod)
17
+ return true
18
+ end"
19
+ -
20
+ "if ARG_1 == OUTPUT
21
+ return true
22
+ end"
23
+ action:
24
+ statement: "return x"
25
+ values:
26
+ x: ARG_1
27
+ position: RUNTIME_METHOD.first.statement_id
28
+ results:
29
+ -
30
+ RUNTIME_METHOD.all_pass(ARG_1)
31
+ """
32
+ And a file named "launch.rb" with:
33
+ """
34
+ $LOAD_PATH.unshift File.expand_path( File.join('lib') )
35
+ require 'cauldron'
36
+ cauldron = Cauldron::Pot.new
37
+ cauldron.load_theory File.join('theories','example_1.yml')
38
+ cauldron.generate [["sparky","sparky"],["kel","kel"]]
39
+ """
40
+ When I run `ruby launch.rb` interactively
41
+ Then the output should contain:
42
+ """
43
+ def extend_function_test_method(var1)
44
+ return var1
45
+ end
46
+ """
@@ -6,6 +6,17 @@
6
6
  # end
7
7
  # end
8
8
 
9
+ Given /^a theory named "([^"]*)" with:$/ do |file_name, string|
10
+ steps %Q{
11
+ Given a file named "#{file_name}" with:
12
+ """
13
+ #{string}
14
+ """
15
+ }
16
+ FileUtils.mkdir_p(File.join(home,'cauldron','tmp'))
17
+ FileUtils.cp File.join('.',file_name), File.join(home,'cauldron','tmp',file_name)
18
+ end
19
+
9
20
  When /^I add a case with a param "([^"]*)" and an expected output of "([^"]*)"$/ do |param, output|
10
21
  #@terminal.submit("'"+param+,"'+output+'"')
11
22
  @terminal.submit("'#{param}','#{output}'")
@@ -1,6 +1,4 @@
1
1
 
2
- include Cauldron::Conversion
3
-
4
2
  Given /^that the terminal has been created$/ do
5
3
  @terminal = Cauldron::Terminal.new(output)
6
4
  @terminal.start
@@ -1,8 +1,10 @@
1
1
  $LOAD_PATH << File.expand_path('../../../lib',__FILE__)
2
2
 
3
+ #require 'ruby-debug'
3
4
  require 'cauldron'
4
5
 
5
6
  require 'aruba/cucumber'
7
+ # See https://github.com/cucumber/aruba/blob/master/lib/aruba/cucumber.rb for the available steps
6
8
 
7
9
  class Output
8
10
 
@@ -18,4 +20,12 @@ end
18
20
 
19
21
  def output
20
22
  @output ||= Output.new
21
- end
23
+ end
24
+
25
+ def home
26
+ realHome = ["HOME", "HOMEPATH"].detect {|h| ENV[h] != nil}
27
+ if not realHome
28
+ raise "Couldn't detect a home directory"
29
+ end
30
+ return ENV[realHome]
31
+ end
@@ -12,4 +12,9 @@ end
12
12
 
13
13
  Before do
14
14
  @dirs = ["."]
15
+ end
16
+
17
+ After do
18
+ tmp_directory = File.join(home,'cauldron','tmp')
19
+ FileUtils.rm_r(tmp_directory) if File.exists?(tmp_directory)
15
20
  end
@@ -1,12 +1,18 @@
1
1
  require 'rubygems'
2
- require 'tempfile'
2
+ require "bundler/setup"
3
3
 
4
- require 'cauldron/util/home'
5
- require 'cauldron/util/saver'
4
+ require 'logger'
5
+ require 'yaml'
6
+ require 'ruby2ruby'
7
+ require 'ruby_parser'
8
+ #require 'ruby-debug'
6
9
 
7
- require 'required'
10
+ require 'core/string'
8
11
 
9
- require 'cauldron/sexp2cauldron'
10
- require 'cauldron/conversion'
11
- require 'cauldron/demos'
12
+ require 'cauldron/pot'
12
13
  require 'cauldron/terminal'
14
+ require 'cauldron/relationship'
15
+ require 'cauldron/if_relationship'
16
+ require 'cauldron/numeric_operator'
17
+ require 'cauldron/concat_operator'
18
+ require 'cauldron/array_reverse_operator'
@@ -0,0 +1,39 @@
1
+ class ArrayReverseOperator
2
+
3
+ #Arra
4
+
5
+ def initialize
6
+ end
7
+
8
+ # Matching in
9
+ def successful?(input,output)
10
+ # NOTE - for the future - like the idea of not actually calling the method
11
+ # input.length.each do |i|
12
+ # does input[0] == output[input.length-0]
13
+ # does input[1] == output[input.length-1]
14
+ # does input[3] == output[input.length-3]
15
+ # end
16
+
17
+ # in this case x.reverse will work
18
+ return true if input.first.reverse == output
19
+ false
20
+ end
21
+
22
+ # 1. Only has one argument value
23
+ # 2. Argument is an array value
24
+ # 3. Response is an array
25
+ def self.viable?(arguments,output)
26
+ return false unless arguments.length == 1
27
+ return false unless arguments.all? { |x| x.kind_of?(Array) }
28
+ return false unless output.kind_of?(Array)
29
+ true
30
+ end
31
+
32
+ def self.find_constants(problems)
33
+ []
34
+ end
35
+
36
+ # def describe -
37
+ # should be able to describe the x.object_id moving to the different locations
38
+
39
+ end
@@ -0,0 +1,34 @@
1
+ class ConcatOperator
2
+
3
+ def initialize(constant)
4
+ @constant = constant
5
+ end
6
+
7
+ def self.viable?(arguments, response)
8
+ return false unless arguments.all? { |x| x.kind_of?(String) }
9
+ return false unless response.kind_of?(String)
10
+ # TODO - Only accpets one argument
11
+ true
12
+ end
13
+
14
+ def self.find_constants(problems)
15
+ problems.inject([]) do |total, x|
16
+ result = x[:response].gsub( Regexp.new('^'+x[:arguments].first),'')
17
+ total << result unless result == x[:response]
18
+ total
19
+ end.uniq
20
+ end
21
+
22
+ # Operator for "x.concat("bar")"
23
+ def successful?(problem)
24
+ if (problem[:arguments].first + @constant) == problem[:response]
25
+ return true
26
+ end
27
+ return false
28
+ end
29
+
30
+ def to_ruby
31
+ ' var0.concat(\''+@constant.to_s+'\')'+"\n"
32
+ end
33
+
34
+ end
@@ -0,0 +1,37 @@
1
+ class IfRelationship < Relationship
2
+
3
+ # TODO Need to change to IfSolution probably
4
+
5
+ def initialize(problems)
6
+ @problems = problems
7
+ end
8
+
9
+ def to_ruby
10
+
11
+ # Add the arguments
12
+ args = @problems.first[:arguments]
13
+ variables = (0...args.length).collect {|x| 'var'+x.to_s}
14
+ result = ''
15
+ @problems.each_with_index do |x,i|
16
+ result += ' if '+variables[0].to_s+' == '+quote(x[:arguments][0])+"\n"
17
+ result += ' return '+quote(x[:response])+"\n"
18
+ result += ' end'+"\n"
19
+ end
20
+ result
21
+ end
22
+
23
+ def self.match?(problems)
24
+ true
25
+ end
26
+
27
+ protected
28
+
29
+ # TODO Not Dry - method used in Pot
30
+ def quote(value)
31
+ if value.kind_of?(String)
32
+ return "'#{value}'"
33
+ end
34
+ value.to_s
35
+ end
36
+
37
+ end
@@ -0,0 +1,45 @@
1
+ class NumericOperator
2
+
3
+ # Maybe NumericOperation
4
+
5
+ def initialize(constant)
6
+ @constant = constant
7
+ end
8
+
9
+ # Is the problem suitable for a numeric operatio?
10
+ # e.g. can the .find_contants call be called without error
11
+ def self.viable?(arguments,output)
12
+
13
+ # 1. Only has one argument value
14
+ # 2. Argument is a numeric value
15
+ # 3. Response is numeric
16
+
17
+ # TODO Need to save these viablility tests in shared (easily comparable) state.
18
+ # e.g. so all viable operations can be found in one go.
19
+
20
+ return false unless arguments.all? { |x| x.kind_of?(Numeric) }
21
+ return false unless output.kind_of?(Numeric)
22
+ true
23
+
24
+ end
25
+
26
+ def to_ruby
27
+ ' var0 + '+@constant.to_s+"\n"
28
+ end
29
+
30
+ # Operator for "x + n" e.g. x + 1
31
+ def successful?(problem)
32
+ # Does the input match the answer
33
+ #problem.collect {|x| x[:response] - x[:arguments].first }.uniq.length == 1
34
+ if (problem[:arguments].first + @constant) == problem[:response]
35
+ return true
36
+ end
37
+ return false
38
+ end
39
+
40
+ def self.find_constants(problems)
41
+ problems.collect {|x| x[:response] - x[:arguments].first }.uniq
42
+
43
+ end
44
+
45
+ end
@@ -1,174 +1,66 @@
1
1
  module Cauldron
2
2
 
3
3
  class Pot
4
-
5
- include Cauldron::Util::Home
6
- include ContainsTheories
7
-
8
-
9
- VERSION = '0-1-1'
10
-
11
- def initialize()
12
- StandardLogger.instance.level = Logger::FATAL
13
- end
14
-
15
- # Returns a runtime method that meets the requirements of the test cases.
16
- def brew(test_cases)
17
-
18
- exclude = []
19
- chains = next_chains(test_cases,exclude)
20
- if chains.empty?
21
- raise StandardError.new('Failed to generate a chain for this problem A')
22
- end
23
-
24
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
25
- chains.each do |chain|
26
- if chain_valid?(chain,test_cases.copy)
27
- validator = TheoryChainValidator.new
28
- unified_chain = chain.unify_chain
29
- implementation_permutations = unified_chain.implementation_permuatations(runtime_method.copy,test_cases.copy,Mapping.new)
30
- return validator.build(runtime_method.copy,test_cases.copy,implementation_permutations)
31
- end
32
- end
33
- chains.each do |chain|
34
- exclude << chain.theories_sequence
35
- end
36
4
 
37
- chains = next_chains(test_cases,exclude)
38
- if chains.empty?
39
- raise StandardError.new('Failed to generate a chain for this problem')
40
- end
41
- chains.each do |chain|
42
- if chain_valid?(chain,test_cases.copy)
43
- validator = TheoryChainValidator.new
44
- unified_chain = chain.unify_chain
45
- implementation_permutations = unified_chain.implementation_permuatations(runtime_method.copy,test_cases.copy,Mapping.new)
46
- return validator.build(runtime_method.copy,test_cases.copy,implementation_permutations)
47
- end
48
- end
49
- raise StandardError.new('Failed to generate a valid runtime method C '+chains.length.to_s)
50
-
51
- end
52
-
53
- def chain_valid?(chain,test_cases)
54
- if chain.kind_of?(Array)
55
- raise StandardError.new('should be a chain '+chain.first.class.to_s)
56
- end
57
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
58
- unified_chain = chain.unify_chain
59
- implementation_permutations = unified_chain.implementation_permuatations(runtime_method.copy,test_cases.copy,Mapping.new)
60
-
61
- # Go through each of the permutations and create the runtime method for the chain
62
- validator = TheoryChainValidator.new
63
- begin
64
- result = validator.build(runtime_method.copy,test_cases.copy,implementation_permutations)
65
- rescue StandardError => e
66
- StandardLogger.instance.warning e
67
- return false
68
- end
69
- return true
70
- end
71
-
72
- def next_chains(test_cases,exclude=[])
73
- theories = saved_theories
74
-
75
- res = theories.collect {|x| x.theory_id }
76
- runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
77
-
78
- potential_values = MappingValues.new([])
79
- connector = TheoryConnector.new(potential_values)
80
-
81
- # Attempt to generate a complete chain for the solution
82
- chains = connector.generate_chains(runtime_method,test_cases,theories,exclude)
83
- return chains
5
+ def solve(problems)
6
+
7
+ # Identify the relationship
8
+ relationship = find_relationship(problems)
9
+
10
+ # Generate if statements
11
+ result = ''
12
+
13
+ # Add the arguments
14
+ args = problems.first[:arguments]
15
+ variables = (0...args.length).collect {|x| 'var'+x.to_s}
16
+ result = 'def function('+variables.join(',')+')'+"\n"
17
+ result << relationship.to_ruby
18
+ result += 'end'
19
+
20
+ result
21
+
84
22
  end
85
-
86
- def saved_theories
87
- # => TODO This needs to cached to prevent error
88
- if @cached_saved_theories.nil?
89
- saved_theory_file_paths = Dir.glob(File.join(theory_repository_path,'*','dump'))
90
- @cached_saved_theories = saved_theory_file_paths.collect {|x| Marshal.load(File.open(x,'r'))}
23
+
24
+ protected
25
+
26
+ def quote(value)
27
+ if value.kind_of?(String)
28
+ return "'#{value}'"
91
29
  end
92
- @cached_saved_theories
93
- end
94
-
95
- def simmer(demo)
96
- raise StandardError.new('This demo does not work') unless demo_works?(demo)
97
-
98
- # Generate a master theory for each stage of the runtime method when following the theory chains
99
- # generator = TheoryGenerator.new
100
- # master_theories = generator.master_theories(
101
- # demo[:chain],
102
- # demo[:initial_method],
103
- # demo[:test_cases]
104
- # )
105
-
106
- # Add each of the theories in the chain to cauldron
107
- #master_theories.each {|x| save_theory(x,master_repository_path)}
108
-
109
- # Save each of the simple versions of the theory
110
- demo[:chain].each {|x| save_theory(x,theory_repository_path)}
111
-
30
+ value.to_s
112
31
  end
113
-
114
- # Uses the chain in the demo to construct a runtime method and then checks that
115
- # the runtime method indeed solves the example supplied.
116
- #
117
- def demo_works?(demo)
118
- begin
119
- runtime_method = TheoryChainValidator.new.build(
120
- demo[:initial_method],
121
- demo[:test_cases],
122
- [demo[:chain].implement]
123
- )
124
- rescue StandardError => e
125
- StandardLogger.instance.warning e
126
- return false
32
+
33
+ def find_relationship(problems)
34
+
35
+ operations = [NumericOperator, ConcatOperator, ArrayReverseOperator]
36
+
37
+ # Try each possible operation
38
+ operations.each do |operation_class|
39
+
40
+ # Are all the problems viable for this operation
41
+ if problems.all? {|x| operation_class.viable?(x[:arguments],x[:response]) }
42
+ possible_constants = operation_class.find_constants(problems)
43
+ possible_constants.each do |constant|
44
+ operator = operation_class.new(constant)
45
+
46
+ # Does the operator always result in the correct solution
47
+ if problems.all? {|x| operator.successful?(x) }
48
+ return operator
49
+ end
50
+ end
51
+ end
52
+
127
53
  end
128
- return true
129
- end
130
-
131
- # Removes all the saved theories to start a fresh
132
- def clear
133
- cauldron_repository_paths = File.join(home,'cauldron',VERSION,'*')
134
- FileUtils.rm_r Dir.glob(cauldron_repository_paths)
135
- end
136
-
137
- private
138
-
139
- # Saves the generic theory to file. This theory will have minimal
140
- # dependents and results.
141
- #
142
- def save_theory(theory,repository)
143
-
144
- # Define the theory's directory
145
- theory_path = File.join(repository,theory.theory_id.to_s)
146
- if File.exists?(theory_path)
147
- StandardLogger.instance.warning theory_path+' already exists'
148
- #raise StandardError.new('Directory already exists - how as this happened? '+theory.theory_id.to_s) if File.exists?(theory_path)
149
- return
54
+
55
+ if IfRelationship.match? problems
56
+ return IfRelationship.new(problems)
150
57
  end
151
-
152
- # Save a file containing the theory
153
- FileUtils.mkdir_p(theory_path)
154
- dump_file = File.open(File.join(theory_path,'dump'),'w+')
155
- data = Marshal.dump(theory)
156
- dump_file << data
157
- dump_file.close
158
-
159
- desc_file = File.open(File.join(theory_path,'desc'),'w+')
160
- desc_file << theory.write
161
- desc_file.close
162
-
163
- end
164
-
165
- def master_repository_path
166
- File.join(home,'cauldron',VERSION,'master-theories')
58
+ IfRelationShip.new(problems)
167
59
  end
168
60
 
169
- def theory_repository_path
170
- File.join(home,'cauldron',VERSION,'theories')
171
- end
172
-
173
61
  end
174
- end
62
+
63
+ end
64
+
65
+ # Package Gem
66
+ # http://www.zenspider.com/projects/hoe.html