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,5 @@
1
+ class Relationship
2
+
3
+
4
+
5
+ end
@@ -1,67 +1,11 @@
1
1
  module Cauldron
2
2
 
3
3
  class Terminal
4
-
5
- include Cauldron::Conversion
6
- include Cauldron::Demos
7
-
8
- attr_reader :cases
9
-
10
- def initialize(output,auto=true)
11
- @output, @cases, @auto = output, [], auto
12
-
13
- # Create a logger for the user inputs
14
- #file = File.open('user-input.log', File::WRONLY | File::APPEND)
15
- file = File.open('user-input.log', 'w+')
16
- # To create new (and to remove old) logfile, add File::CREAT like;
17
- # file = open('foo.log', File::WRONLY | File::APPEND | File::CREAT)
18
- @user_logger = Logger.new(file)
19
-
4
+
5
+ def initialize(output = STDOUT)
6
+ @output = output
20
7
  end
21
-
22
- def start
23
- @output.puts 'Starting....'
24
- @pot = Cauldron::Pot.new
25
- @pot.clear
26
- @output.puts '* Adding example case'
27
- @pot.simmer(demo_one)
28
- @pot.simmer(demo_two)
29
-
30
- @output.puts "Thanks for trying Cauldron - it's at really early stage right now"
31
- @output.puts "in fact it can only generate a method that returns the parameter passed through"
32
- @output.puts ""
33
- @output.puts "To start enter your first test like this"
34
- @output.puts "input,input,output"
35
- @output.puts "For example "
36
- @output.puts "'fish','animal'"
37
- @output.puts "'carrot','vegtable'"
38
- @output.puts "and when you're done just type RUN"
39
-
40
- # Wait for the user's inputs
41
- unless @auto
42
- loop do
43
- submit gets
44
- end
45
- end
46
-
47
- end
48
-
49
- def submit(input)
50
-
51
- @user_logger.info input
52
-
53
- if input =~ /^RUN$/
54
- @output.puts @pot.brew(@cases).reset_ids!.basic_write
55
- elsif input =~ /^QUIT$/
56
- # => TODO Include 'bye' output too
57
- #Process.exit!(true)
58
- at_exit {0}
59
- exit
60
- else
61
- @cases << convert_to_example(separate_values(input))
62
- end
63
- end
64
-
8
+
65
9
  end
66
10
 
67
11
  end
@@ -0,0 +1,3 @@
1
+ module Cauldron
2
+ VERSION = "0.1.5"
3
+ end
@@ -0,0 +1,21 @@
1
+ # TODO Really want a nice indent solution - like cucumber
2
+ # http://stackoverflow.com/questions/3350648/ruby-indented-multiline-strings
3
+ # Personally, I think that Ruby's indented heredocs are useless and they should work more like Bash indented heredocs and also strip whitespace inside the string …
4
+
5
+ # Anyway, there are a couple of libraries that try to deal with this situation. There is a wide array of libraries that try to fix this problem:
6
+
7
+ # Martin Aumont's Unindent library which is also part of the Facets library
8
+ # Facets also provides String#margin
9
+ # Sunlight Labs' Unindentable library
10
+ # Samuel Dana's Indentation library
11
+
12
+ # https://github.com/Mynyml/Unindent/
13
+ class String
14
+ def unindent
15
+ indent = self.split("\n").select {|line| !line.strip.empty? }.map {|line| line.index(/[^\s]/) }.compact.min || 0
16
+ self.gsub(/^[[:blank:]]{#{indent}}/, '')
17
+ end
18
+ def unindent!
19
+ self.replace(self.unindent)
20
+ end
21
+ end
data/sandbox.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../lib',__FILE__)
2
2
 
3
3
  require 'cauldron'
4
+ require 'ruby_debug'
5
+ require 'yaml'
6
+
4
7
 
5
8
  # unified_chain = Cauldron::Util::Saver.load(1)
6
9
  #
@@ -10,14 +13,32 @@ require 'cauldron'
10
13
  # puts 'Working'
11
14
 
12
15
 
13
- unified_chain = Cauldron::Util::Saver.load(33)
14
- runtime_method = Cauldron::Util::Saver.load(31)
15
- test_cases = Cauldron::Util::Saver.load(32)
16
-
17
- puts unified_chain.describe
16
+ # unified_chain = Cauldron::Util::Saver.load(298)
17
+ # runtime_method = Cauldron::Util::Saver.load(31)
18
+ # test_cases = Cauldron::Util::Saver.load(32)
19
+ #
20
+ # puts unified_chain.describe
18
21
 
19
22
 
20
23
  #unified_chain.valid_mapping_permutations(runtime_method,test_cases)
21
24
 
22
-
25
+ string = <<-EOF
26
+ blah blah
27
+ blah blah
28
+ EOF
29
+ puts string
30
+
31
+ module YAML
32
+
33
+ require 'rspec'
34
+
35
+ def YAML.load_file( filepath )
36
+ File.open( filepath ) do |f|
37
+ f = double(:file)
38
+ load( double(:file) )
39
+ end
40
+ end
41
+
42
+ end
23
43
 
44
+ details = YAML.load_file("loaded_file.yaml")
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ module Cauldron
4
+
5
+ describe 'ArrayReverseOperator' do
6
+
7
+ describe '.viable?' do
8
+
9
+ context 'the arguments are not arrays' do
10
+
11
+ it 'is false' do
12
+ ArrayReverseOperator.viable?([8], ['lions','tigers','bears']).should be_false
13
+ end
14
+
15
+ end
16
+
17
+ context 'using more than 1 argument' do
18
+
19
+ it 'is false' do
20
+ ArrayReverseOperator.viable?([['lions'],['tigers']], ['lions','tigers']).should be_false
21
+ end
22
+
23
+ end
24
+
25
+ context 'response is not an array' do
26
+
27
+ it 'is false' do
28
+ ArrayReverseOperator.viable?([['lions','tigers']], 'lions').should be_false
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ describe '#successful?' do
36
+
37
+ context 'using array that needs reversed' do
38
+
39
+ it 'is true' do
40
+ operator = ArrayReverseOperator.new
41
+ operator.successful?([['lions','tigers']],['tigers','lions']).should be_true
42
+ end
43
+
44
+ end
45
+
46
+ context "using array that can't be reversed" do
47
+
48
+ it 'is false' do
49
+ operator = ArrayReverseOperator.new
50
+ operator.successful?([['lions','tigers']],['lions','tigers']).should be_false
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ module Cauldron
4
+
5
+ describe 'ConcatOperator' do
6
+
7
+ describe '.viable?' do
8
+
9
+ context 'the arguments are not string' do
10
+
11
+ it 'is false' do
12
+ ConcatOperator.viable?([8], 'foobar').should be_false
13
+ end
14
+
15
+ end
16
+
17
+ context 'the reponse is not a string' do
18
+
19
+ it 'is false' do
20
+ ConcatOperator.viable?(['foo'],8).should be_false
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ describe '.find_constants' do
28
+
29
+ context 'argument is "foo"' do
30
+
31
+ context 'response is "foobar"' do
32
+
33
+ it 'return "[bar]"' do
34
+ problems = [
35
+ { arguments: ['foo'], response: 'foobar'}
36
+ ]
37
+ ConcatOperator.find_constants(problems).should == ['bar']
38
+ end
39
+
40
+ end
41
+
42
+ context 'response is "barfoo"' do
43
+
44
+ it 'returns "[]"' do
45
+ problems = [
46
+ { arguments: ['foo'], response: 'barfoo'}
47
+ ]
48
+ ConcatOperator.find_constants(problems).should == []
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ describe '#successful?' do
58
+
59
+ context 'all arguments end with "bar"' do
60
+
61
+ it 'returns true' do
62
+ problems = [
63
+ {arguments: ['foo'], response: 'foobar'},
64
+ {arguments: ['goo'], response: 'goobar'}
65
+ ]
66
+ operator = ConcatOperator.new('bar')
67
+ problems.all? {|x| operator.successful?(x) }.should == true
68
+ end
69
+
70
+ end
71
+
72
+ end
73
+
74
+ describe '#to_ruby' do
75
+
76
+ context 'using the constant "bar"' do
77
+
78
+ it 'returns "var0.concat("bar")"' do
79
+ operator = ConcatOperator.new('bar')
80
+ operator.to_ruby.should == " var0.concat('bar')"+"\n"
81
+ end
82
+
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ module Cauldron
4
+
5
+ describe 'IfRelationship' do
6
+
7
+ describe '.match?' do
8
+
9
+ context 'any valid collection of problems' do
10
+
11
+ it 'is true' do
12
+ problem = [
13
+ {arguments: [7], response: 'seven'},
14
+ {arguments: [8], response: 'eight'}
15
+ ]
16
+ IfRelationship.match?(problem).should be_true
17
+ end
18
+
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ module Cauldron
4
+
5
+ describe 'NumericOperator' do
6
+
7
+ describe '.viable?' do
8
+
9
+ context 'consistent difference between argument and response' do
10
+
11
+ it 'is true' do
12
+ problem = [
13
+ {arguments: [7], response: 8},
14
+ {arguments: [10], response: 11}
15
+ ]
16
+ #NumericOperator.viable?(problem).should be_true
17
+ problem.all? {|x| NumericOperator.viable?(x[:arguments], x[:response]) }.should be_true
18
+ end
19
+
20
+ end
21
+
22
+ context 'arguments are not numeric' do
23
+
24
+ it 'is false' do
25
+ problem = [
26
+ {arguments: ["ted"], response: 8},
27
+ {arguments: ["ben"], response: 11}
28
+ ]
29
+ #NumericValueRelationship.match?(problem).should be_false
30
+ problem.all? {|x| NumericOperator.viable?(x[:arguments], x[:response]) }.should be_false
31
+ end
32
+
33
+ end
34
+
35
+ context 'responses are not numeric' do
36
+
37
+ it 'is false' do
38
+ problem = [
39
+ {arguments: [7], response: 'ben'},
40
+ {arguments: [10], response: 'ted'}
41
+ ]
42
+ #NumericValueRelationship.match?(problem).should be_false
43
+ problem.all? {|x| NumericOperator.viable?(x[:arguments], x[:response]) }.should be_false
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ describe '#successful?' do
51
+
52
+ context 'no consistent difference between values' do
53
+
54
+ it 'is false' do
55
+ problem = [
56
+ {arguments: [7], response: 24},
57
+ {arguments: [10], response: 11}
58
+ ]
59
+ operator = NumericOperator.new(17)
60
+ #NumericValueRelationship.match?(problem).should be_false
61
+ problem.all? {|x| operator.successful?(x) }.should be_false
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -2,163 +2,93 @@ require 'spec_helper'
2
2
 
3
3
  module Cauldron
4
4
 
5
- describe 'Pot' do
6
-
7
- describe '#simmer' do
8
- before(:each) {
9
- @pot = Cauldron::Pot.new
10
- @pot.clear
11
- }
12
- it 'can simmer with demo one' do
13
- lambda {@pot.simmer(demo_one)}.should_not raise_error
14
- end
15
- it 'can simmer with demo two' do
16
- lambda {@pot.simmer(demo_two)}.should_not raise_error
17
- end
18
- it 'can simmer with both demo one and two' do
19
- lambda {@pot.simmer(demo_one)}.should_not raise_error
20
- lambda {@pot.simmer(demo_two)}.should_not raise_error
21
- end
22
- end
23
-
24
- describe '#brew' do
25
- it 'can come up with a solution after it has been given demo_one' do
26
- pot = Cauldron::Pot.new
27
- pot.clear
28
- pot.simmer(demo_one)
29
- cases = []
30
- cases << convert_to_example(separate_values("'sparky','sparky'"))
31
- cases << convert_to_example(separate_values("'kel','kel'"))
32
-
33
- ruby = "
34
- def method_0(var_0)
35
- \treturn var_0
36
- end
37
- "
38
- parser = RubyParser.new
39
- sexp = parser.process(ruby)
40
- sexp2cauldron = Sexp2Cauldron.new
41
- pot.brew(cases).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
42
- end
43
-
44
- it 'can come up with a solution that fits demo two' do
45
- pot = Cauldron::Pot.new
46
- pot.clear
47
- pot.simmer(demo_two)
48
- cases = []
49
- cases << convert_to_example(separate_values("'carrot','vegtable'"))
50
- cases << convert_to_example(separate_values("'fish','animal'"))
51
-
52
- ruby = "
53
- def method_0(var_0)
54
- \tif(var_0 == 'carrot')
55
- \t\treturn 'vegtable'
56
- \tend
57
- \treturn 'animal'
58
- end
59
- "
60
- parser = RubyParser.new
61
- sexp = parser.process(ruby)
62
- sexp2cauldron = Sexp2Cauldron.new
63
- pot.brew(cases).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
64
- end
65
-
66
- context 'it has both demo one and two loaded' do
67
- before(:each) {
68
- @pot = Cauldron::Pot.new
69
- @pot.clear
70
- @pot.simmer(demo_one)
71
- @pot.simmer(demo_two)
72
- }
73
- it 'can generate a solution like demo 1' do
74
- cases = []
75
- cases << convert_to_example(separate_values("'pip','pip'"))
76
- cases << convert_to_example(separate_values("'rowiage','rowiage'"))
77
- ruby = "
78
- def method_0(var_0)
79
- \treturn var_0
80
- end
81
- "
82
- parser = RubyParser.new
83
- sexp = parser.process(ruby)
84
- sexp2cauldron = Sexp2Cauldron.new
85
- @pot.brew(cases).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
5
+ describe 'Pot' do
6
+
7
+ describe '#solve' do
8
+
9
+ context 'passed simple if statement problem' do
10
+
11
+ it 'returns a valid statement' do
12
+ pot = Pot.new
13
+ pot.solve(
14
+ [
15
+ {arguments: [7], response: 'seven'},
16
+ {arguments: [8], response: 'eight'}
17
+ ]
18
+ ).should ==
19
+ %q{
20
+ def function(var0)
21
+ if var0 == 7
22
+ return 'seven'
23
+ end
24
+ if var0 == 8
25
+ return 'eight'
26
+ end
27
+ end
28
+ }.strip
86
29
  end
87
- it 'can repeatedly generate a demo 1 solution' do
88
- case_set_one = []
89
- case_set_one << convert_to_example(separate_values("'pip','pip'"))
90
- case_set_one << convert_to_example(separate_values("'rowiage','rowiage'"))
91
-
92
- case_set_two = []
93
- case_set_two << convert_to_example(separate_values("'andy','andy'"))
94
- case_set_two << convert_to_example(separate_values("'kel','kel'"))
95
-
96
- ruby = "
97
- def method_0(var_0)
98
- \treturn var_0
99
- end
100
- "
101
- sexp2cauldron = Sexp2Cauldron.new
102
- @pot.brew(case_set_one).reset_ids!.basic_write.should == sexp2cauldron.process(RubyParser.new.process(ruby)).basic_write
103
- @pot.brew(case_set_two).reset_ids!.basic_write.should == sexp2cauldron.process(RubyParser.new.process(ruby)).basic_write
30
+
31
+ end
32
+
33
+ context 'passed +1 problem' do
34
+
35
+ it 'returns a function that adds 1 to total' do
36
+ pot = Pot.new
37
+ pot.solve(
38
+ [
39
+ {arguments: [7], response: 8},
40
+ {arguments: [10], response: 11}
41
+ ]
42
+ ).should ==
43
+ %q{
44
+ def function(var0)
45
+ var0 + 1
46
+ end
47
+ }.strip
104
48
  end
105
- it 'can generate a solution like demo 2(it needs to discount the demo 1 solution)' do
106
- cases = []
107
- cases << convert_to_example(separate_values("'sparky','bro'"))
108
- cases << convert_to_example(separate_values("'kel','sis'"))
109
- ruby = "
110
- def method_0(var_0)
111
- \tif(var_0 == 'sparky')
112
- \t\treturn 'bro'
113
- \tend
114
- \treturn 'sis'
115
- end
116
- "
117
- parser = RubyParser.new
118
- sexp = parser.process(ruby)
119
- sexp2cauldron = Sexp2Cauldron.new
120
- @pot.brew(cases).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
49
+
50
+ end
51
+
52
+ context 'passed "foo" and return "foobar"' do
53
+
54
+ it 'returns a concat function' do
55
+ pot = Pot.new
56
+ pot.solve(
57
+ [
58
+ {arguments: ['foo'], response: 'foobar'},
59
+ {arguments: ['bar'], response: 'barbar'}
60
+ ]
61
+ ).should ==
62
+ %q{
63
+ def function(var0)
64
+ var0.concat('bar')
65
+ end
66
+ }.strip
121
67
  end
122
- it 'can repeatedly generate a demo 2 solution' do
123
- case_set_one = []
124
- case_set_one << convert_to_example(separate_values("'sparky','bro'"))
125
- case_set_one << convert_to_example(separate_values("'kel','sis'"))
126
-
127
- ruby = "
128
- def method_0(var_0)
129
- \tif(var_0 == 'sparky')
130
- \t\treturn 'bro'
131
- \tend
132
- \treturn 'sis'
133
- end
134
- "
135
- parser = RubyParser.new
136
- sexp = parser.process(ruby)
137
- sexp2cauldron = Sexp2Cauldron.new
138
- @pot.brew(case_set_one).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
139
-
140
- case_set_two = []
141
- case_set_two << convert_to_example(separate_values("'carrot','vegtable'"))
142
- case_set_two << convert_to_example(separate_values("'apple','fruit'"))
143
-
144
- ruby = "
145
- def method_0(var_0)
146
- \tif(var_0 == 'carrot')
147
- \t\treturn 'vegtable'
148
- \tend
149
- \treturn 'fruit'
150
- end
151
- "
152
- parser = RubyParser.new
153
- sexp = parser.process(ruby)
154
- sexp2cauldron = Sexp2Cauldron.new
155
- @pot.brew(case_set_two).reset_ids!.basic_write.should == sexp2cauldron.process(sexp).basic_write
156
-
68
+
69
+ end
70
+
71
+ context 'passed ["lion","bear"] and return ["bear","lion"]' do
72
+
73
+ it 'returns a reverse function' do
74
+ pot = Pot.new
75
+ pot.solve(
76
+ [
77
+ { arguments: [['lion','bear']], response: ['bear','lion'] },
78
+ { arguments: [['foo','bar']], response: ['bar','foo'] }
79
+ ]
80
+ ).should ==
81
+ %q{
82
+ def function(var0)
83
+ var0.reverse
84
+ end
85
+ }.strip
157
86
  end
87
+
158
88
  end
159
-
89
+
160
90
  end
161
91
 
162
92
  end
163
-
93
+
164
94
  end