cauldron 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (409) hide show
  1. data/.gitignore +51 -0
  2. data/Gemfile +6 -3
  3. data/Gemfile.lock +16 -3
  4. data/Rakefile +94 -92
  5. data/VERSION +1 -1
  6. data/bin/cauldron +2 -2
  7. data/cauldron.gemspec +15 -451
  8. data/features/cauldron_new_approach.feature +46 -0
  9. data/features/step_definitions/cauldron_steps.rb +11 -0
  10. data/features/step_definitions/terminal_steps.rb +0 -2
  11. data/features/support/env.rb +11 -1
  12. data/features/support/hooks.rb +5 -0
  13. data/lib/cauldron.rb +13 -7
  14. data/lib/cauldron/array_reverse_operator.rb +39 -0
  15. data/lib/cauldron/concat_operator.rb +34 -0
  16. data/lib/cauldron/if_relationship.rb +37 -0
  17. data/lib/cauldron/numeric_operator.rb +45 -0
  18. data/lib/cauldron/pot.rb +54 -162
  19. data/lib/cauldron/relationship.rb +5 -0
  20. data/lib/cauldron/terminal.rb +4 -60
  21. data/lib/cauldron/version.rb +3 -0
  22. data/lib/core/string.rb +21 -0
  23. data/sandbox.rb +27 -6
  24. data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
  25. data/spec/cauldron/concat_operator_spec.rb +89 -0
  26. data/spec/cauldron/if_relationship_spec.rb +25 -0
  27. data/spec/cauldron/numeric_operator_spec.rb +70 -0
  28. data/spec/cauldron/pot_spec.rb +81 -151
  29. data/spec/cauldron/terminal_spec.rb +1 -39
  30. data/spec/examples/adding_if_statement.yml +13 -0
  31. data/spec/examples/simple_head_theory.txt +13 -0
  32. data/spec/spec_helper.rb +1 -14
  33. data/tasks/theory_tasks.rake +207 -207
  34. metadata +92 -532
  35. data/cauldron/.autotest +0 -23
  36. data/cauldron/History.txt +0 -6
  37. data/cauldron/Manifest.txt +0 -8
  38. data/cauldron/README.txt +0 -57
  39. data/cauldron/Rakefile +0 -27
  40. data/cauldron/bin/cauldron +0 -3
  41. data/cauldron/lib/cauldron.rb +0 -3
  42. data/cauldron/test/test_cauldron.rb +0 -8
  43. data/features/cauldron_example_cases.feature +0 -13
  44. data/features/cauldron_generates_runtime_method.feature +0 -16
  45. data/features/cauldron_generates_single_paramter_methods.feature +0 -25
  46. data/features/cauldron_interactive_start_terminal.feature +0 -17
  47. data/features/cauldron_quit_terminal.feature +0 -9
  48. data/features/cauldron_start_terminal.feature +0 -12
  49. data/features/support/method_1.example +0 -3
  50. data/features/support/method_2.example +0 -6
  51. data/lib/Chain.rb +0 -771
  52. data/lib/ChainMapping.rb +0 -172
  53. data/lib/CodeHandler.rb +0 -513
  54. data/lib/Mapping.rb +0 -27
  55. data/lib/MappingValues.rb +0 -24
  56. data/lib/PartialChain.rb +0 -253
  57. data/lib/Theory.rb +0 -295
  58. data/lib/UnifiedChain.rb +0 -351
  59. data/lib/cauldron/conversion.rb +0 -15
  60. data/lib/cauldron/demos.rb +0 -280
  61. data/lib/cauldron/env.rb +0 -1
  62. data/lib/cauldron/sexp2cauldron.rb +0 -139
  63. data/lib/cauldron/theory_factory.rb +0 -10
  64. data/lib/cauldron/util/home.rb +0 -21
  65. data/lib/cauldron/util/saver.rb +0 -45
  66. data/lib/core/ActsAsCode.rb +0 -25
  67. data/lib/core/BlockToken.rb +0 -33
  68. data/lib/core/CCall.rb +0 -7
  69. data/lib/core/CTestCase.rb +0 -27
  70. data/lib/core/ClassMethodCallContainer.rb +0 -58
  71. data/lib/core/Container.rb +0 -95
  72. data/lib/core/InstanceCallContainer.rb +0 -298
  73. data/lib/core/MethodUsage.rb +0 -65
  74. data/lib/core/PrintVariables.rb +0 -25
  75. data/lib/core/TheoryGenerator.rb +0 -753
  76. data/lib/core/Token.rb +0 -7
  77. data/lib/core/assignment/Assignment.rb +0 -18
  78. data/lib/core/assignment/Equal.rb +0 -39
  79. data/lib/core/assignment/Equivalent.rb +0 -20
  80. data/lib/core/assignment/NotEqual.rb +0 -14
  81. data/lib/core/call_container/CallContainer.rb +0 -72
  82. data/lib/core/class_method_call/New.rb +0 -15
  83. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
  84. data/lib/core/declaration/Declaration.rb +0 -16
  85. data/lib/core/declaration/LiteralDeclaration.rb +0 -47
  86. data/lib/core/declaration/VariableDeclaration.rb +0 -59
  87. data/lib/core/instance_call/ArrayEach.rb +0 -23
  88. data/lib/core/instance_call/ArrayLength.rb +0 -15
  89. data/lib/core/instance_call/Chop.rb +0 -19
  90. data/lib/core/instance_call/Copy.rb +0 -22
  91. data/lib/core/instance_call/DeclaredVariable.rb +0 -18
  92. data/lib/core/instance_call/InstanceCall.rb +0 -77
  93. data/lib/core/instance_call/Params.rb +0 -15
  94. data/lib/core/instance_call/Push.rb +0 -20
  95. data/lib/core/instance_call/StringLength.rb +0 -32
  96. data/lib/core/instance_call/Times.rb +0 -20
  97. data/lib/core/instance_call/instance_calls.rb +0 -176
  98. data/lib/core/instance_call/length_equal.rb +0 -15
  99. data/lib/core/kernal/EvalCall.rb +0 -15
  100. data/lib/core/kernal/LocalVariablesCall.rb +0 -15
  101. data/lib/core/literal/Literal.rb +0 -111
  102. data/lib/core/literal/Raw.rb +0 -23
  103. data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
  104. data/lib/core/literal/StatementLiteral.rb +0 -28
  105. data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
  106. data/lib/core/method_call/ClassCall.rb +0 -33
  107. data/lib/core/method_call/DefCall.rb +0 -72
  108. data/lib/core/method_call/EvaluateClassCall.rb +0 -29
  109. data/lib/core/method_call/MethodNameCall.rb +0 -27
  110. data/lib/core/method_call/ToDeclarationCall.rb +0 -15
  111. data/lib/core/requirement/Requirement.rb +0 -292
  112. data/lib/core/runtime_class/ArrayClass.rb +0 -19
  113. data/lib/core/runtime_class/ClassCallClass.rb +0 -23
  114. data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
  115. data/lib/core/runtime_class/ClassName.rb +0 -18
  116. data/lib/core/runtime_class/DefCallClass.rb +0 -21
  117. data/lib/core/runtime_class/EqualClass.rb +0 -19
  118. data/lib/core/runtime_class/FixnumClass.rb +0 -15
  119. data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
  120. data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
  121. data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
  122. data/lib/core/runtime_class/LiteralClass.rb +0 -19
  123. data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
  124. data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
  125. data/lib/core/runtime_class/RequirementClass.rb +0 -19
  126. data/lib/core/runtime_class/ReturnClass.rb +0 -21
  127. data/lib/core/runtime_class/RuntimeClass.rb +0 -30
  128. data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
  129. data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
  130. data/lib/core/runtime_class/StatementClass.rb +0 -53
  131. data/lib/core/runtime_class/StringClass.rb +0 -23
  132. data/lib/core/runtime_class/StringLengthClass.rb +0 -19
  133. data/lib/core/runtime_class/StringVariableClass.rb +0 -19
  134. data/lib/core/runtime_class/ThisClass.rb +0 -15
  135. data/lib/core/runtime_class/UnknownClass.rb +0 -23
  136. data/lib/core/runtime_class/class_names.rb +0 -95
  137. data/lib/core/runtime_class/runtime_class.rb +0 -123
  138. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
  139. data/lib/core/runtime_method/ParametersContainer.rb +0 -29
  140. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
  141. data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
  142. data/lib/core/runtime_method/WriteParameters.rb +0 -35
  143. data/lib/core/statement/ActsAsStatement.rb +0 -20
  144. data/lib/core/statement/ArrayAccess.rb +0 -122
  145. data/lib/core/statement/BlockStatement.rb +0 -348
  146. data/lib/core/statement/DeclarationStatement.rb +0 -19
  147. data/lib/core/statement/HackStatement.rb +0 -25
  148. data/lib/core/statement/HashAccess.rb +0 -18
  149. data/lib/core/statement/OpenStatement.rb +0 -178
  150. data/lib/core/statement/RealisedStatement.rb +0 -5
  151. data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
  152. data/lib/core/statement/Statement.rb +0 -1091
  153. data/lib/core/statement/StatementGroup.rb +0 -157
  154. data/lib/core/statement/StatementStructure2.rb +0 -224
  155. data/lib/core/statement/TheoryStatement.rb +0 -68
  156. data/lib/core/statement/TopologicalStatements.rb +0 -34
  157. data/lib/core/syntax/Addition.rb +0 -26
  158. data/lib/core/syntax/BlockContainer.rb +0 -102
  159. data/lib/core/syntax/Boolean.rb +0 -15
  160. data/lib/core/syntax/Code.rb +0 -11
  161. data/lib/core/syntax/Do.rb +0 -20
  162. data/lib/core/syntax/False.rb +0 -12
  163. data/lib/core/syntax/If.rb +0 -36
  164. data/lib/core/syntax/Nil.rb +0 -15
  165. data/lib/core/syntax/Return.rb +0 -33
  166. data/lib/core/syntax/Subtract.rb +0 -19
  167. data/lib/core/syntax/This.rb +0 -40
  168. data/lib/core/syntax/True.rb +0 -20
  169. data/lib/core/syntax/syntax.rb +0 -24
  170. data/lib/core/tracking/ActsAsTrackable.rb +0 -65
  171. data/lib/core/tracking/History.rb +0 -167
  172. data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
  173. data/lib/core/tracking/Step.rb +0 -52
  174. data/lib/core/variable/ArrayVariable.rb +0 -76
  175. data/lib/core/variable/BaseVariable.rb +0 -152
  176. data/lib/core/variable/BlockVariable.rb +0 -92
  177. data/lib/core/variable/FixnumVariable.rb +0 -35
  178. data/lib/core/variable/HistoryVariable.rb +0 -8
  179. data/lib/core/variable/MethodParameter.rb +0 -179
  180. data/lib/core/variable/MethodUsageVariable.rb +0 -60
  181. data/lib/core/variable/NilVariable.rb +0 -29
  182. data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
  183. data/lib/core/variable/StatementVariable.rb +0 -72
  184. data/lib/core/variable/StepVariable.rb +0 -7
  185. data/lib/core/variable/StringVariable.rb +0 -46
  186. data/lib/core/variable/TypeVariable.rb +0 -72
  187. data/lib/core/variable/Unknown.rb +0 -102
  188. data/lib/core/variable/UnknownVariable.rb +0 -29
  189. data/lib/core/variable/Variable.rb +0 -70
  190. data/lib/core/variable/VariableContainer.rb +0 -28
  191. data/lib/core/variable/VariableIncluded.rb +0 -27
  192. data/lib/core/variable/VariableReference.rb +0 -85
  193. data/lib/error/FailedToFindStatementContainerError.rb +0 -7
  194. data/lib/error/FailedToFindStatementError.rb +0 -7
  195. data/lib/error/FailedToFindVariableError.rb +0 -7
  196. data/lib/error/FailedToLiteraliseError.rb +0 -7
  197. data/lib/error/FailedVariableMatch.rb +0 -7
  198. data/lib/error/ImproperStatementUsageError.rb +0 -7
  199. data/lib/error/IncompatiableRequirementsError.rb +0 -7
  200. data/lib/error/InvalidStatementError.rb +0 -7
  201. data/lib/error/MethodSizeError.rb +0 -7
  202. data/lib/error/RuntimeSyntaxError.rb +0 -7
  203. data/lib/error/UnexpectedStatementTypeError.rb +0 -7
  204. data/lib/error/UnknownStatementType.rb +0 -7
  205. data/lib/error/UnliteralisableError.rb +0 -7
  206. data/lib/implemented_chain.rb +0 -35
  207. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
  208. data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
  209. data/lib/intrinsic/IntrinsicObject.rb +0 -22
  210. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
  211. data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
  212. data/lib/logger/StandardLogger.rb +0 -62
  213. data/lib/required.rb +0 -222
  214. data/lib/ruby_code/Array.rb +0 -95
  215. data/lib/ruby_code/Fixnum.rb +0 -39
  216. data/lib/ruby_code/Hash.rb +0 -25
  217. data/lib/ruby_code/NilClass.rb +0 -19
  218. data/lib/ruby_code/Object.rb +0 -24
  219. data/lib/ruby_code/String.rb +0 -63
  220. data/lib/ruby_code/Symbol.rb +0 -7
  221. data/lib/standard_library/Tasks.rb +0 -12
  222. data/lib/theories.rb +0 -166
  223. data/lib/theory/ActionImplementation.rb +0 -17
  224. data/lib/theory/TheoryAction.rb +0 -100
  225. data/lib/theory/TheoryChainValidator.rb +0 -103
  226. data/lib/theory/TheoryComponent.rb +0 -59
  227. data/lib/theory/TheoryConnector.rb +0 -756
  228. data/lib/theory/TheoryDependent.rb +0 -135
  229. data/lib/theory/TheoryImplementation.rb +0 -75
  230. data/lib/theory/TheoryResult.rb +0 -131
  231. data/lib/theory/TheoryVariable.rb +0 -63
  232. data/lib/theory/theory_collection.rb +0 -62
  233. data/lib/util/ClassEvaluation.rb +0 -44
  234. data/lib/util/CodeEvaluation.rb +0 -39
  235. data/lib/util/DeclarationStatementEvaluation.rb +0 -32
  236. data/lib/util/MethodEvaluation.rb +0 -49
  237. data/lib/util/MethodTester.rb +0 -71
  238. data/lib/util/MethodValidation.rb +0 -149
  239. data/lib/util/MethodWriter.rb +0 -66
  240. data/lib/util/Parser.rb +0 -305
  241. data/lib/util/StatementCheck.rb +0 -44
  242. data/lib/util/StringToTheory.rb +0 -142
  243. data/lib/util/System.rb +0 -8
  244. data/spec/cauldron/chain_spec.rb +0 -24
  245. data/spec/cauldron/demos_spec.rb +0 -30
  246. data/spec/cauldron/runtime_method_spec.rb +0 -92
  247. data/spec/cauldron/saver_spec.rb +0 -45
  248. data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
  249. data/spec/cauldron/theory_action_spec.rb +0 -25
  250. data/spec/cauldron/theory_connector_spec.rb +0 -52
  251. data/spec/cauldron/theory_spec.rb +0 -59
  252. data/spec/cauldron/unified_chain_spec.rb +0 -140
  253. data/test/fixtures/chains/1/declaration.txt +0 -26
  254. data/test/fixtures/chains/1/dump +0 -0
  255. data/test/fixtures/chains/2/declaration.txt +0 -26
  256. data/test/fixtures/chains/2/dump +0 -0
  257. data/test/fixtures/chains/3/declaration.txt +0 -26
  258. data/test/fixtures/chains/3/dump +0 -0
  259. data/test/fixtures/implementation_results/0/declaration.txt +0 -3
  260. data/test/fixtures/implementation_results/0/dump +0 -0
  261. data/test/fixtures/theories/0/declaration.txt +0 -9
  262. data/test/fixtures/theories/0/desc +0 -10
  263. data/test/fixtures/theories/0/dump +0 -0
  264. data/test/fixtures/theories/1/declaration.txt +0 -15
  265. data/test/fixtures/theories/1/desc +0 -11
  266. data/test/fixtures/theories/1/dump +0 -0
  267. data/test/fixtures/theories/10/declaration.txt +0 -23
  268. data/test/fixtures/theories/10/desc +0 -17
  269. data/test/fixtures/theories/10/dump +0 -0
  270. data/test/fixtures/theories/11/declaration.txt +0 -20
  271. data/test/fixtures/theories/11/desc +0 -14
  272. data/test/fixtures/theories/11/dump +0 -0
  273. data/test/fixtures/theories/12/declaration.txt +0 -18
  274. data/test/fixtures/theories/12/desc +0 -12
  275. data/test/fixtures/theories/12/dump +0 -0
  276. data/test/fixtures/theories/13/declaration.txt +0 -24
  277. data/test/fixtures/theories/13/desc +0 -20
  278. data/test/fixtures/theories/13/dump +0 -0
  279. data/test/fixtures/theories/14/declaration.txt +0 -26
  280. data/test/fixtures/theories/14/desc +0 -20
  281. data/test/fixtures/theories/14/dump +0 -0
  282. data/test/fixtures/theories/15/declaration.txt +0 -20
  283. data/test/fixtures/theories/15/desc +0 -14
  284. data/test/fixtures/theories/15/dump +0 -0
  285. data/test/fixtures/theories/16/declaration.txt +0 -30
  286. data/test/fixtures/theories/16/desc +0 -14
  287. data/test/fixtures/theories/16/dump +0 -0
  288. data/test/fixtures/theories/17/declaration.txt +0 -25
  289. data/test/fixtures/theories/17/desc +0 -11
  290. data/test/fixtures/theories/17/dump +0 -0
  291. data/test/fixtures/theories/18/declaration.txt +0 -23
  292. data/test/fixtures/theories/18/desc +0 -11
  293. data/test/fixtures/theories/18/dump +0 -0
  294. data/test/fixtures/theories/19/declaration.txt +0 -23
  295. data/test/fixtures/theories/19/desc +0 -11
  296. data/test/fixtures/theories/19/dump +0 -0
  297. data/test/fixtures/theories/2/declaration.txt +0 -12
  298. data/test/fixtures/theories/2/desc +0 -10
  299. data/test/fixtures/theories/2/dump +0 -0
  300. data/test/fixtures/theories/20/declaration.txt +0 -23
  301. data/test/fixtures/theories/20/desc +0 -17
  302. data/test/fixtures/theories/20/dump +0 -0
  303. data/test/fixtures/theories/3/declaration.txt +0 -19
  304. data/test/fixtures/theories/3/desc +0 -11
  305. data/test/fixtures/theories/3/dump +0 -0
  306. data/test/fixtures/theories/4/declaration.txt +0 -11
  307. data/test/fixtures/theories/4/desc +0 -11
  308. data/test/fixtures/theories/4/dump +0 -0
  309. data/test/fixtures/theories/5/declaration.txt +0 -6
  310. data/test/fixtures/theories/5/desc +0 -9
  311. data/test/fixtures/theories/5/dump +0 -0
  312. data/test/fixtures/theories/6/declaration.txt +0 -13
  313. data/test/fixtures/theories/6/desc +0 -11
  314. data/test/fixtures/theories/6/dump +0 -0
  315. data/test/fixtures/theories/7/declaration.txt +0 -19
  316. data/test/fixtures/theories/7/desc +0 -11
  317. data/test/fixtures/theories/7/dump +0 -0
  318. data/test/fixtures/theories/8/declaration.txt +0 -21
  319. data/test/fixtures/theories/8/desc +0 -11
  320. data/test/fixtures/theories/8/dump +0 -0
  321. data/test/fixtures/theories/9/declaration.txt +0 -24
  322. data/test/fixtures/theories/9/desc +0 -20
  323. data/test/fixtures/theories/9/dump +0 -0
  324. data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
  325. data/test/fixtures/theory_implementations/0/desc.txt +0 -9
  326. data/test/fixtures/theory_implementations/0/dump +0 -0
  327. data/test/fixtures/theory_implementations/0/theory_id +0 -1
  328. data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
  329. data/test/fixtures/theory_implementations/1/desc.txt +0 -9
  330. data/test/fixtures/theory_implementations/1/dump +0 -1
  331. data/test/fixtures/theory_implementations/1/theory_id +0 -1
  332. data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
  333. data/test/fixtures/theory_implementations/2/desc.txt +0 -9
  334. data/test/fixtures/theory_implementations/2/dump +0 -0
  335. data/test/fixtures/theory_implementations/2/theory_id +0 -1
  336. data/test/output/simple_method.txt +0 -5
  337. data/test/output/test_method/first_possible_method.txt +0 -6
  338. data/test/output/test_simple_cases/simple_case_01.txt +0 -8
  339. data/test/output/test_simple_cases/simple_case_02.txt +0 -7
  340. data/test/output/test_simple_cases/simple_case_03.txt +0 -8
  341. data/test/output/test_simple_cases/simple_case_04.txt +0 -8
  342. data/test/output/test_simple_cases/simple_case_05.txt +0 -8
  343. data/test/output/test_simple_cases/simple_case_06.txt +0 -9
  344. data/test/output/test_simple_cases/simple_case_07.txt +0 -9
  345. data/test/output/test_simple_cases/simple_case_08.txt +0 -9
  346. data/test/tc_describe.rb +0 -46
  347. data/test/tc_method.rb +0 -130
  348. data/test/tc_requirement.rb +0 -30
  349. data/test/tc_suite_complete.rb +0 -26
  350. data/test/tc_variable.rb +0 -52
  351. data/test/ts_complete.rb +0 -74
  352. data/test/ts_stable.rb +0 -81
  353. data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
  354. data/test/unit/core/method_call/tc_class_call.rb +0 -20
  355. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
  356. data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
  357. data/test/unit/core/statement/tc_array_access.rb +0 -63
  358. data/test/unit/core/statement/tc_block_statement.rb +0 -53
  359. data/test/unit/core/statement/tc_hack_statement.rb +0 -26
  360. data/test/unit/core/statement/tc_open_statement.rb +0 -79
  361. data/test/unit/core/statement/tc_statement.rb +0 -483
  362. data/test/unit/core/statement/tc_statement_group.rb +0 -35
  363. data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
  364. data/test/unit/core/statement/tc_theory_statement.rb +0 -53
  365. data/test/unit/core/syntax/tc_block_container.rb +0 -32
  366. data/test/unit/core/syntax/tc_if_container.rb +0 -39
  367. data/test/unit/core/tc_class_method_call.rb +0 -34
  368. data/test/unit/core/tc_container.rb +0 -41
  369. data/test/unit/core/tc_ctest_case.rb +0 -25
  370. data/test/unit/core/tc_instance_call_container.rb +0 -93
  371. data/test/unit/core/tc_literal.rb +0 -30
  372. data/test/unit/core/tc_theory_generator.rb +0 -336
  373. data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
  374. data/test/unit/core/tracking/tc_history.rb +0 -104
  375. data/test/unit/core/tracking/tc_step.rb +0 -65
  376. data/test/unit/core/variable/tc_array_variable.rb +0 -61
  377. data/test/unit/core/variable/tc_block_variable.rb +0 -17
  378. data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
  379. data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
  380. data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
  381. data/test/unit/core/variable/tc_string_variable.rb +0 -37
  382. data/test/unit/core/variable/tc_unknown.rb +0 -24
  383. data/test/unit/core/variable/tc_variable_reference.rb +0 -28
  384. data/test/unit/ruby_code/tc_array.rb +0 -64
  385. data/test/unit/ruby_code/tc_fixnum.rb +0 -18
  386. data/test/unit/ruby_code/tc_hash.rb +0 -41
  387. data/test/unit/ruby_code/tc_string.rb +0 -38
  388. data/test/unit/tc_chain.rb +0 -434
  389. data/test/unit/tc_chain_mapping.rb +0 -62
  390. data/test/unit/tc_chain_with_case_1.rb +0 -169
  391. data/test/unit/tc_instance_call.rb +0 -40
  392. data/test/unit/tc_method_usage.rb +0 -35
  393. data/test/unit/tc_pot.rb +0 -124
  394. data/test/unit/tc_runtime_tracking_method.rb +0 -40
  395. data/test/unit/tc_theory.rb +0 -531
  396. data/test/unit/tc_variable_declaration.rb +0 -32
  397. data/test/unit/theory/tc_theory_action.rb +0 -108
  398. data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
  399. data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
  400. data/test/unit/theory/tc_theory_connector.rb +0 -361
  401. data/test/unit/theory/tc_theory_dependent.rb +0 -153
  402. data/test/unit/theory/tc_theory_implementation.rb +0 -137
  403. data/test/unit/theory/tc_theory_result.rb +0 -112
  404. data/test/unit/theory/tc_theory_variable.rb +0 -45
  405. data/test/unit/util/tc_method_validation.rb +0 -101
  406. data/test/unit/util/tc_parser.rb +0 -110
  407. data/test/unit/util/tc_string_to_theory.rb +0 -300
  408. data/test/unit/variable/tc_method_usage_variable.rb +0 -25
  409. data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,167 +0,0 @@
1
- # Contains the usage history of a method, or a statement group etc. The current structure is
2
- # something like the following:
3
- #
4
- # [0] = {line:1,available_variables:[var_0,var_1],action:"'test'"}
5
- # [1] = {line:2,available_variables:[var_0,var_1,var_2],action:"'test'.chop"}
6
- #
7
- # Actually the history object should probably save what happens to variables at
8
- # each line aswell. Although I should frame this in a example so I rember.
9
- #
10
- # One of the purposes of the history object is to refactor code. So
11
- # if I have three chop statements.
12
- #
13
- # var_0 = 'test'
14
- # var_1 = var_0.chop
15
- # var_2 = var_1.chop
16
- # var_3 = var_2.chop (ending with var_3 = 't')
17
- #
18
- # Now I'm to abstract that process so I come up with the method
19
- #
20
- # var_0 = 'test'
21
- # 3.times do |i|
22
- # var_0 = var_0.chop
23
- # end
24
- #
25
- # In both cases they end up with a value of 't' but how can we be sure that
26
- # replacing one process with the other is equivalent? Well of course they're
27
- # not identical and I am tempted to just use there final value but I would
28
- # be concerned with the likes of numbers for example the number 2.
29
- #
30
- # What about if I consider them as literal values. Then their history can be
31
- # expressed.
32
- #
33
- # 'test' -> 'test'.chop -> 'tes'.chop -> 'te'.chop -> 't'
34
- #
35
- class History < Array
36
-
37
- def initialize(*paramaters)
38
- super()
39
- self.each do |x|
40
- self.push(x)
41
- end
42
- end
43
-
44
- # Create a copy of the history instance.
45
- #
46
- def copy
47
- return History.new(*self.collect {|x| x.copy} )
48
- end
49
-
50
- def cauldron_method_calls
51
- result = ['.length','.any?']
52
- return result
53
- end
54
-
55
- # Returns an array of steps that include the variable
56
- # specified.
57
- #
58
- # @param id The id of the variable that should be included in all the
59
- # returned steps.
60
- #
61
- def find_steps_with_variable(id)
62
- results = []
63
- self.each do |x|
64
- results.push(x) if x['variables'].any? {|y| y['id'] == id}
65
- end
66
- return results
67
- end
68
-
69
- # Returns the values for the unique variable id specified. NOTE
70
- # it is important to use the unique variable id to avoid any
71
- # mistaken interpretation.
72
- #
73
- # TODO This should be using unique_variable id to avoid the risk of
74
- # miss interpretation
75
- #
76
- def find_value_for(variable_id)
77
- results = []
78
-
79
- # Find all the values for the particular id
80
- self.each do |x|
81
- results += x['variables'].find_all {|y| y['id']==variable_id}
82
- end
83
- return results.first['value']
84
-
85
- end
86
-
87
- # Returns a realised variable reflecting the id supplied. It
88
- # can be either a VariableContainer, TypedVariable and BlockVariable.
89
- #
90
- # TODO I still havn't properly worked how to distinguish between types of variables
91
- #
92
- # @param variable_id The variable id that should be realised and returned
93
- # @param variable_type A string indicating the type of variable that is being
94
- # realised. This is basically used to distinguish between
95
- # block variables and variable containers. NOTE if the variable
96
- # doesn't have multiple values it won't be VariableContainer - just
97
- # a type variable.
98
- #
99
- def find_realised_variable(variable_id,uniq_id,variable_type='VariableContainer')
100
-
101
- raise StandardError.new('Expecting Fixnum') unless uniq_id.kind_of?(Fixnum)
102
-
103
- # Find all the values for the particular id
104
- # TODO Because there is a step class I could use more custom methods
105
- results = self.inject([]) do |total,x|
106
- total += x['variables'].select {|y| y['uniq_id'] == uniq_id}
107
- total
108
- end
109
-
110
- # If all values have the same absolute id return a type variable.
111
- # (this means the value of the variable doesn't change through the method)
112
- if results.all? {|x| x['abs_id']==results.first['abs_id']}
113
- raise StandardError.new('Unable to find variable with id '+variable_id.to_s+' and uniq_id '+uniq_id.to_s) if results.empty?
114
-
115
- # TODO I don't know how to handle the situation where I have a reference to
116
- # a variable. So the value of var_570 points to the UnkownVariable. In
117
- # which case we have a UnknownVariable - which is just getting
118
- # a bit rediculous.
119
- # #
120
- # #
121
- # def method_8
122
- # var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
123
- # var_570 = var_12.declared_variable
124
- # end
125
- # TODO This better track mulitple values - I should at least indicate them
126
- return results.first['value'].to_var(variable_id,uniq_id)
127
-
128
- end
129
-
130
- raise StandardError.new('variable '+variable_id.to_s+' has multiple values but no variable_type was supplied') if variable_type.nil?
131
-
132
- case variable_type
133
- when 'BlockVariable'
134
-
135
- # Find all the unique variable ids
136
- unique_results = []
137
- results.each do |x|
138
- unique_results.push(x) unless unique_results.any? {|y| y[:abs_id] == x[:abs_id]}
139
- end
140
-
141
- # Convert each result into a variable and return a new block variable
142
- new_block_variable = BlockVariable.new() {{:variable_id=>variable_id,:uniq_id=>uniq_id}}
143
- unique_results.each do |x|
144
- new_block_variable.push(x[:value].to_var(variable_id))
145
- end
146
- return new_block_variable
147
-
148
- when 'VariableContainer'
149
-
150
- # Find all the unique variable ids
151
- unique_results = []
152
- results.each do |x|
153
- unique_results.push(x) unless unique_results.any? {|y| y[:abs_id] == x[:abs_id]}
154
- end
155
-
156
- # Convert each result into a variable and return a new block variable
157
- # TODO This should probable include the uniq_id as well
158
- new_container_variable = VariableContainer.new() {{:variable_id=>variable_id,:uniq_id=>uniq_id}}
159
- unique_results.each do |x|
160
- new_container_variable.push(x[:value].to_var(variable_id))
161
- end
162
- return new_container_variable
163
- end
164
- raise StandardError.new('Method not able to handle different type of variables')
165
- end
166
-
167
- end
@@ -1,32 +0,0 @@
1
- # This is a special runtime method that is used to track changes in a method
2
- # as it is being run.
3
- #
4
- # The call to the tracking method looks something like this:
5
- #
6
- # tracking_method(line,action,variables=[])
7
- #
8
- class RuntimeTrackingMethod < RuntimeMethod
9
-
10
- #
11
- # @param instance_tracking_variable The instance variable that contains each tracked event.
12
- #
13
- def initialize(instance_tracking_variable)
14
- @line = MethodParameter.new
15
- @statement_id = MethodParameter.new
16
- @variables = MethodParameter.new
17
- @action = MethodParameter.new
18
- super( MethodUsage.new(@line,@statement_id,@variables,@action) )
19
-
20
- # Add the statements that are used in the tracking method
21
- self.push HackStatement.new(instance_tracking_variable.write+' = History.new if '+instance_tracking_variable.write+'.nil?')
22
- x = instance_tracking_variable.write+".push(Step.new(
23
- #{@line.write},
24
- #{@statement_id.write},
25
- #{@variables.write},
26
- #{@action.write}
27
- ))"
28
- self.push HackStatement.new(x)
29
-
30
- end
31
-
32
- end
@@ -1,52 +0,0 @@
1
- # This class represents one of the steps inside a history object. It will look something
2
- # like the following:
3
- #
4
- # {
5
- # "variables"=>[
6
- # {"id"=>3, "value"=>"Grim Fandang", "abs_id"=>-606538658, :uniq_id=>3},
7
- # {"id"=>1, "value"=>"Grim Fandango", "abs_id"=>-606538498, :uniq_id=>2}
8
- # ],
9
- # "line"=>1,
10
- # "statement_id"=>625,
11
- # "action"=>"var='Grim Fandango'.chop"}
12
- #
13
- class Step < Hash
14
-
15
- #
16
- # @param variables TODO I'm not sure whether this should be the variables that have changed or just
17
- # the ones available on this line. I think it is only the variables that change value.
18
- #
19
- def initialize(line,statement_id,variables,action)
20
- super()
21
- self['variables'] = variables
22
- self['line'] = line
23
- self['statement_id'] = statement_id
24
- # TODO action can proably be dropped - or just replaced with statement.write - I don't
25
- # think to_literal_string is useful.
26
- self['action'] = action
27
- end
28
-
29
- # Returns the data for the variable thats id was specified.
30
- #
31
- # @param id The id of the variable thats id should be returned
32
- #
33
- def find_data_for_variable(id)
34
- missing_variable = lambda { raise StandardError.new('Couldn\'t find information on variable '+id.to_s) }
35
- return self['variables'].detect(missing_variable) {|x| x['id']==id}
36
- end
37
-
38
- def to_var(id=nil,uniq_id=nil)
39
- # TODO I don't know if the the block is used anymore
40
- return StepVariable.new(self,id) {{:variable_id => id,:uniq_id=>uniq_id}}
41
- end
42
-
43
- def copy
44
- # TODO Don't use Marshal - do it properly
45
- return Marshal.load(Marshal.dump(self))
46
- end
47
-
48
- def cauldron_method_calls
49
- return ["['statement_id']"]
50
- end
51
-
52
- end
@@ -1,76 +0,0 @@
1
-
2
- class ArrayVariable < TypeVariable
3
- attr_reader :variable_id
4
-
5
- # TODO Presumes that all parameters extends TypeVariable some are literals
6
- def initialize(*parameters)
7
- super(parameters)
8
- parameters.each { |x| self.push(x) }
9
- end
10
-
11
- # TODO Temporary overwrite - I'm not sure how to apply select_all for array variables.
12
- # When you write the variable it's var5 but it still contains addition variables.
13
- def select_all(results=[],&block)
14
- #results.push(self) if block.call(self)
15
- return results
16
- end
17
-
18
- #TODO Write tests for all variables to maintain uniq_id_history
19
- def copy
20
- result = ArrayVariable.new(*self.collect {|x| x.copy} ) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id,:uniq_id_history=>@uniq_id_history.copy}}
21
- #result.variable_id = variable_id
22
- result.instance_variable = @instance_variable
23
- # TODO I need to check uniq_id for 'copy' accross all the variables
24
- #result.uniq_id = @uniq_id
25
- return result
26
- end
27
-
28
- def to_declaration
29
- return VariableDeclaration.new('ArrayVariable',*@value.collect {|x| x.to_declaration})
30
- end
31
-
32
- # Only let this method be called from fellow Fixnum classes or Unknowns
33
- def variable_id=(id)
34
- # TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
35
- unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
36
- unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/ruby_code/Array.rb'
37
- raise StandardError.new('Illegal attempt to set variable_id')
38
- end
39
- end
40
- @variable_id = id
41
- end
42
-
43
- # Returns an array of instance calls for the particular type
44
- # variable. For example:
45
- #
46
- # StringVariable.new('test').instance_calls
47
- #
48
- # might return [var.chop,var.length]
49
- #
50
- def instance_calls(available=[])
51
-
52
- # Add the chop instance call
53
- results = []
54
- results.push InstanceCallContainer.new(self.copy,ArrayLength.new)
55
-
56
- # Attempt to create access calls - firstly with index
57
- self.length.times do |i|
58
- results.push ArrayAccess.new(self.copy,Literal.new(i))
59
- end
60
-
61
- return results
62
-
63
- end
64
-
65
- def to_literal_string
66
- l = '['
67
- self.each do |x|
68
- l += x.to_literal_string
69
- unless x.object_id == self.last.object_id
70
- l += ','
71
- end
72
- end
73
- l += ']'
74
- end
75
-
76
- end
@@ -1,152 +0,0 @@
1
- #require "set"
2
- # This was introduced so I could maintain the use of the class variable
3
- # @@variable_id with the ArrayVarialble without having to include
4
- # requirements with the array.
5
- #
6
- class BaseVariable < Array
7
- attr_reader :variable_id , :instance_variable, :value, :uniq_id_history
8
- attr_writer :instance_variable, :uniq_id_history
9
-
10
- include Variable
11
- include Token
12
-
13
- # TODO I think I'll get rid of the id parameter and just use blocks
14
- #
15
- # NOTE: You can set the variable ids by passing it in a block
16
- # e.g. BaseVariable.new {[8,9]}
17
- # where 8 is the variable_id and unique_id is 9
18
- #
19
- def initialize(id=nil)
20
- super()
21
-
22
- # TODO I should maybe include a check on all .copy methods to ensure a block is provided
23
- # Set the variable id for the newly created variable
24
- if block_given?
25
- # TEMP
26
- if yield.kind_of?(Fixnum)
27
- raise StandardError.new('Expecting array')
28
- end
29
- unless yield[:variable_id].nil?
30
- @variable_id = yield[:variable_id]
31
- else
32
- @variable_id = @@variable_id
33
- @@variable_id += 1
34
- # TODO Should have a separate call that returns @@variable_id and increaments @@variable_id
35
- end
36
- unless yield[:uniq_id].nil?
37
- raise StandardError.new('Expecting Fixnum') unless yield[:uniq_id].kind_of?(Fixnum)
38
- @uniq_id = yield[:uniq_id]
39
- else
40
- @uniq_id = @@uniq_id
41
- @@uniq_id += 1
42
- end
43
-
44
- @uniq_id_history = yield[:uniq_id_history] unless yield[:uniq_id_history].nil?
45
-
46
- else
47
- if id.nil?
48
- @variable_id = @@variable_id
49
- @@variable_id += 1
50
- else
51
- @variable_id = id
52
- end
53
-
54
- end
55
-
56
- # Give the variable an unique id
57
- if @uniq_id.nil?
58
- @uniq_id = @@uniq_id
59
- #raise StandardError.new('Uniq id change point') if (@uniq_id+1) == 86
60
- @@uniq_id += 1
61
- end
62
-
63
- @uniq_id_history ||= []
64
-
65
- # Flag indicating if this is a scope variable or a instance variable
66
- @instance_variable = false
67
-
68
- end
69
-
70
- def self.reset_global_id
71
- #http://www.zenspider.com/Languages/Ruby/QuickRef.html
72
- unless $".include?('test/unit.rb')
73
- StandardLogger.log 'WARNING: Resetting variable id, this should only be done for tests'
74
- end
75
- @@variable_id = 0
76
- end
77
-
78
- # Returns the variable if the ids matched
79
- #
80
- # @param id The uniq_id of the variable that is being looked for
81
- #
82
- def find_actual_variable(uniq_id)
83
- return self if @uniq_id == uniq_id
84
- throw :variable_not_found
85
- end
86
-
87
- # Returns an array of instance calls that can be created from
88
- # this variable.
89
- #
90
- # NOTE: I checked that instance_calls wasn't a intrinsic method.
91
- #
92
- # TODO Test this (esp with ArrayVariable)
93
- #
94
- def instance_calls(with=[])
95
- return [] unless self.realised?
96
-
97
- # Attempt to retrieve the literal value for the variable
98
- #val = self.literalise.value
99
- val = self.value
100
-
101
- # TODO I suspect this method is redundant since it is always overwritten
102
-
103
- # Now retrieve all the possible instance call structures for that value
104
- results = []
105
- val.instance_call_structures.each do |struct|
106
-
107
- if struct.instance_class != self.class then raise StandardError.new('Unexpected class type: - expecting '+val.class.to_s+' but was '+struct.instance_class.to_s) end
108
-
109
- # Now create a method call of the instance call
110
- inst_call = InstanceCallContainer.new(self.copy,struct.method_call.copy)
111
- results.push inst_call
112
-
113
- end
114
- return results
115
- end
116
-
117
- # Returns an array of instances calls that return a value and are
118
- # therefore approriate for declaration statements.
119
- #
120
- def returning_instance_calls(available=[])
121
- return instance_calls(available)
122
- end
123
-
124
- def destructive_instance_calls(with=[])
125
- raise StandardError.new(" 'destructive_instance_calls' method should be overridden for "+self.class.to_s)
126
- end
127
-
128
- #
129
- #
130
- #
131
- def write()
132
- if (@instance_variable)
133
- return '@var_'+variable_id.to_s
134
- end
135
- return 'var_'+variable_id.to_s
136
- end
137
-
138
- def write_with_uniq_id
139
- if (@instance_variable)
140
- return '@var_'+variable_id.to_s+'_u'+uniq_id.to_s
141
- end
142
- return 'var_'+variable_id.to_s+'_u'+uniq_id.to_s
143
- end
144
-
145
- # Always returns true since realised variables should extend this class
146
- # but overwrite this method.
147
- #
148
- def realised?
149
- return false
150
- end
151
-
152
- end