cauldron 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
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