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,35 +0,0 @@
1
- module WriteParameters
2
-
3
- def write_params(params,parenthesis=['(',')'])
4
- line = ''
5
- unless params.empty?
6
- line += parenthesis[0]
7
- params.each_with_index do |var,i|
8
- line += var.write
9
- unless var.object_id ==params.last.object_id
10
- line += ', '
11
- end
12
- end
13
- line += parenthesis[1]
14
- return line
15
- end
16
- return ''
17
- end
18
-
19
- def describe_params(params,parenthesis=['(',')'])
20
- line = ''
21
- unless params.empty?
22
- line += parenthesis[0]
23
- params.each_with_index do |var,i|
24
- line += var.describe
25
- unless var.object_id ==params.last.object_id
26
- line += ', '
27
- end
28
- end
29
- line += parenthesis[1]
30
- return line
31
- end
32
- return ''
33
- end
34
-
35
- end
@@ -1,20 +0,0 @@
1
- # This module is shared between the Statement and BlockStatement classes. It
2
- # ensures that both those classes have a statement id and a structure type.
3
- #
4
- module ActsAsStatement
5
-
6
- # Returns true if the statement (treated as an array) has all the
7
- # same classes as the array supplied.
8
- #
9
- # @param classes An array of classes that this statement is
10
- # compared to.
11
- #
12
- def classes_match?(*classes)
13
- return false unless classes.length == self.length
14
- @nodes.zip(classes) do |x,y|
15
- return false unless x.instance_of?(y)
16
- end
17
- return true
18
- end
19
-
20
- end
@@ -1,122 +0,0 @@
1
- # TODO I'm sure Container could replace ArrayAccess InstanceCallCOntainer etc.
2
-
3
- # TODO I am duplicating variables here with array, index, subject and method_call
4
- class ArrayAccess < InstanceCallContainer
5
- include VariableIncluded
6
-
7
- attr_reader :array, :index
8
-
9
- def initialize(array,index)
10
- @array = array
11
- @index = index
12
- super(@array,'[Array Access]',index)
13
- end
14
-
15
- def write
16
- return @array.write+'['+@index.write+']'
17
- end
18
-
19
- def describe
20
- return @array.describe+'['+@index.describe+']'
21
- end
22
-
23
- def response
24
- return eval(@array.literalise.write+'['+@index.write+']').to_var
25
- end
26
-
27
- def cauldron_method_calls
28
- return @array[@index].cauldron_method_calls
29
- end
30
-
31
- def copy
32
- return ArrayAccess.new(@array.copy,@index.copy)
33
- end
34
-
35
- def variable
36
- return @array.copy
37
- end
38
-
39
- def closure
40
- return ['[',']']
41
- end
42
-
43
- # Returns all the elements that match the selection criteria just
44
- # like the select method. However is this contains an array it
45
- # will seach the array.
46
- #
47
- # @param results An array of current results that match the requirement
48
- # of the block.
49
- # @param block .
50
- #
51
- def select_all(results=[],&block)
52
- results.push(@array) if block.call(@array)
53
- results.push(@index) if block.call(@index)
54
- if @array.respond_to?(:select_all)
55
- @array.select_all(results,&block)
56
- end
57
- if @index.respond_to?(:select_all)
58
- @index.select_all(results,&block)
59
- end
60
- return results
61
- end
62
-
63
- # Returns true if the passed argument is the same kind of ArrayAccess - in
64
- # that it is the same class, array and index.
65
- #
66
- # @param to The array access that is being compared with this array access
67
- # instance to determine if their equivalent.
68
- #
69
- def equivalent?(to)
70
- return false if to.class != self.class
71
- return false unless to.array.equivalent?(@array)
72
- return false unless to.index.equivalent?(@index)
73
- return true
74
- end
75
-
76
- # Returns a string calling the specfied index. e.g. "[4]"
77
- #
78
- def to_literal_string
79
- return write
80
- end
81
-
82
- def replace_theory_variables!(mapping)
83
- if @array.kind_of?(TheoryVariable) && mapping.has_key?(@array.theory_variable_id)
84
- @array = mapping[@array.theory_variable_id].copy
85
- elsif @array.respond_to?(:replace_theory_variables!)
86
- @array.replace_theory_variables!(mapping)
87
- end
88
- if @index.kind_of?(TheoryVariable) && mapping.has_key?(@index.theory_variable_id)
89
- @index = mapping[@index.theory_variable_id].copy
90
- elsif @index.respond_to?(:replace_theory_variables!)
91
- @index.replace_theory_variables!(mapping)
92
- end
93
-
94
- end
95
-
96
- def replace_variables_alt!(map)
97
- if @array.kind_of?(TheoryVariable)
98
- map.each do |key,value|
99
- if @array.theory_variable_id == key.theory_variable_id
100
- @array = value
101
- break
102
- end
103
- end
104
- else
105
- @array.replace_variables_alt!(map)
106
- end
107
-
108
- #
109
- if @index.kind_of?(TheoryVariable)
110
- map.each do |key,value|
111
- if @index.theory_variable_id == key.theory_variable_id
112
- @index = value
113
- break
114
- end
115
- end
116
- elsif(@index.kind_of?(Literal))
117
- else
118
- @index.replace_variables_alt!(map)
119
- end
120
- end
121
-
122
- end
@@ -1,348 +0,0 @@
1
- # A nested statement is a special kind of statement group that contains
2
- # a opening statement. For example the .each method of an array would
3
- # be a nested statement.
4
- #
5
- # Below is the parser intrepretaiton for var1.any? { |x| x.include? var2.id }
6
- #
7
- # var1.any? do |x|
8
- # var2 = var1.chop
9
- # end
10
- #
11
- # s(:iter,
12
- # s(:call,
13
- # s(:call, nil, :var1, s(:arglist)),
14
- # :any?,
15
- # s(:arglist)
16
- # ),
17
- # s(:lasgn, :x),
18
- # s(:lasgn,
19
- # :var2,
20
- # s(:call,
21
- # s(:call, nil, :var1, s(:arglist)),
22
- # :chop,
23
- # s(:arglist)
24
- # )
25
- # )
26
- # )
27
- #
28
- # =========================
29
- #
30
- # var1.any? { |x| x.include? var2.id }
31
- #
32
- # s(:iter,
33
- # s(:call,
34
- # s(:call, nil, :var1, s(:arglist)),
35
- # :any?,
36
- # s(:arglist)
37
- # ),
38
- # s(:lasgn, :x),
39
- # s(:call,
40
- # s(:lvar, :x),
41
- # :include?,
42
- # s(:arglist,
43
- # s(:call,
44
- # s(:call, nil, :var2, s(:arglist)),
45
- # :id,
46
- # s(:arglist)
47
- # )
48
- # )
49
- # )
50
- # )
51
- #
52
- # TODO I might just combine BlockStatement and StatementGroup since you
53
- # all groups of statements have a containing statement even if
54
- # that statement is a method.
55
- #
56
- # e.g. ['garrus','wrex'].each do |x|
57
- # # internal_statements
58
- # end
59
- #
60
- # This is equivalent to :iter of the parser
61
- #
62
- class BlockStatement < OpenStatement
63
- include ActsAsTrackable
64
- include ActsAsStatement
65
-
66
- # TODO I'm not sure whether I need to use a statement since a instance call will generally do. Although
67
- # I'll need to fix the tabbing in "write" if I stop it from using statements.
68
- #
69
- def initialize(statement,block_container=BlockContainer.new(BlockVariable.new),*internal_statements)
70
- super(statement,*internal_statements)
71
- #@statement = statement
72
-
73
- raise StandardError.new('Expecting block_container ') unless block_container.kind_of?(BlockContainer)
74
- @block_container = block_container
75
-
76
- end
77
-
78
- def write(tab=0)
79
- l = @statement.write(tab)+' '+Do.new.write+" "+@block_container.write+"\n"
80
- self.each do |x|
81
- l += x.write(tab+1)+"\n"
82
- end
83
- tab.times {l += " " }
84
- l += 'end'+"\n"
85
- return l
86
- end
87
-
88
- def write_with_uniq_id(tab=0)
89
- # Check the file type of tab
90
- raise StandardError.new('Unexpexted class "'+tab.class.to_s+'" for Fixnum (number of tabs)') unless tab.kind_of? Fixnum
91
-
92
- line = @statement.write_with_uniq_id(tab)+Do.new.write+" "+@block_container.write_with_uniq_id+"\n"
93
- self.each do |x|
94
- if x.respond_to?('write_with_uniq_id')
95
- line += x.write_with_uniq_id(tab+1)+"\n"
96
- else
97
- line += x.write(tab+1)+"\n"
98
- end
99
- end
100
- tab.times {line += "\t" }
101
- line += 'end'+"\n"
102
- return line
103
-
104
- end
105
-
106
- # Writes out the nested statement with the appropriate tabbing but
107
- # also includes the value of variables within the output. This
108
- # method presumes that the nested statement has been realised.
109
- #
110
- def write_with_value(tab=0)
111
- l = @statement.write_with_value(tab)+" "+Do.new.write+" "+@block_container.write_with_value+"\n"
112
- self.each do |x|
113
- l += x.write_with_value(tab+1)+"\n"
114
- end
115
- tab.times {l += "\t" }
116
- l += 'end'+"\n"
117
- return l
118
- end
119
-
120
- def copy
121
-
122
- result = BlockStatement.new(@statement.copy,@block_container.copy,*self.collect {|x| x.copy})
123
- # TODO This means the scope id is being incremented for statements only exist for the declaration
124
- result.scope_id = scope_id
125
- result.scope = scope.copy
126
- result.statement_level = statement_level
127
- return result
128
- end
129
-
130
- # Creates a copy of the current nested statement but without any statements
131
- #
132
- def copy_base
133
- result = BlockStatement.new(@statement.copy,@block_container.copy)
134
- # TODO This means the scope id is being incremented for statements only exist for the declaration
135
- result.scope_id = scope_id
136
- return result
137
- end
138
-
139
- # This is a quick check that really only applies to standard statements. It checks
140
- # that the statement doesn't just re-declare an existing variable e.g.
141
- # var_a = var_b would be classed as simple.
142
- #
143
- def is_simple?
144
- return false
145
- end
146
-
147
- # Returns all the variables used in the statement since the
148
- # statement should never declare new variables.
149
- #
150
- def not_declared_variables
151
- return @statement.variables
152
- end
153
-
154
- # Returns the id of the block variable - although the terminolgy
155
- # of declared might imply a = sign essential it is declared here.
156
- # TODO My approach implies only one block variable but there could
157
- # be more than that. I should allow multiple block variables.
158
- def declared_variable_id
159
- raise StandardError.new('Not allowing multiple block variables just yet') if @block_container.length > 1
160
- return @block_container.first.variable_id
161
- end
162
-
163
- # Returns an unpdated nested statement that has been fully realised.
164
- #
165
- # @param method_map A history object for the nested statement or method the
166
- # nested statement resides.
167
- #
168
- def realise2(method_map)
169
-
170
- # Start by realising the containing method
171
- opening_statement = @statement.realise2(method_map)
172
-
173
- # Now realise the block container
174
- block_container = @block_container.realise2(method_map)
175
-
176
- # Finally realise the internal statements
177
- copied_internal_statements = []
178
- self.each do |x|
179
- copied_internal_statements.push(x.realise2(method_map))
180
- end
181
-
182
- # Now create a duplicate nested statement
183
- result = BlockStatement.new(opening_statement,block_container,*copied_internal_statements)
184
- result.scope_id = scope_id
185
- result.scope = scope.copy
186
- result.statement_level = statement_level
187
- return result
188
-
189
- end
190
-
191
- # TODO This seems wrong there is no block or opening statement
192
- def to_literal_string
193
- a = ''
194
- self.each do |x|
195
- a += x.to_literal_string
196
- end
197
- return a
198
- end
199
-
200
- # Returns true if the opening statement and all internal statements
201
- # have been realised.
202
- #
203
- def realised?
204
- return false unless @statement.realised?
205
- return false unless @block_container.realised?
206
- return false unless self.all? {|x| x.realised? }
207
- return true
208
- end
209
-
210
- # Returns an array of all the unrealised variables in the nested statement
211
- #
212
- def unrealised_variables
213
- results = []
214
- results += @statement.unrealised_variables
215
- results += @block_container.unrealised_variables
216
- self.each do |x|
217
- results += x.unrealised_variables
218
- end
219
- return results
220
- end
221
-
222
- # Returns each unrealised variable
223
- #
224
- def each_unrealised_variable
225
- unrealised_variables.each do |x|
226
- yield x
227
- end
228
- end
229
-
230
- # Returns the number of statements represented by this nested statement.
231
- #
232
- # NOTE I have been counting the opening statement and closing statement
233
- # as separate statements. I'm not sure if this is the write
234
- # approach though. I might have line_count and statement_count
235
- #
236
- def statement_count
237
- return self.inject(2) {|count,x| count += x.statement_count}
238
- end
239
-
240
- # Returns the first copy of a variable it can find.
241
- #
242
- # TODO Really it should find the latest version of the variable
243
- # working backwards like the RuntimeMethod call. Although
244
- # this might be a redundant concept since I don't think there
245
- # can ever be more than one variable with the exact id.
246
- #
247
- def find_variable(id)
248
- failed_to_find = lambda{raise StandardError.new("Unable to find variable with id "+id.to_s) }
249
- return variables.detect(failed_to_find) {|x| x.variable_id == id}
250
- end
251
-
252
- # Returns an array of all the variables contained within the nested
253
- # statement.
254
- #
255
- def variables
256
- results = []
257
- results += @statement.variables.collect {|x| x.copy}
258
- results += @block_container.variables.collect {|x| x.copy}
259
- self.each {|x| results += x.variables}
260
- return results
261
- end
262
-
263
- def find_statement_that_declares_variable(id)
264
- @block_container.each do |x|
265
- if x.variable_id == id
266
- return self.copy
267
- end
268
- end
269
- self.each do |y|
270
- if y.kind_of?(Statement)
271
- if y.declared_variable_id == id then return y.copy end
272
- next
273
- end
274
- if y.kind_of?(BlockStatement)
275
- y.find_statement_that_declares_variable(variable_id)
276
- end
277
- end
278
- # TODO I would rather a custom error
279
- raise StandardError.new('Failed to find statement that declared variable id '+id.to_s)
280
- end
281
-
282
- # TODO This duplicates allot of the calls in the super.trackify method
283
- # Returns a new block statement that has been trackified. A
284
- # trackified block statement has a statement call after each
285
- # line.
286
- #
287
- # @param tracking_method A runtime tracking method instance
288
- # @param line An array thats length represents the current line.
289
- #
290
- def trackify(tracking_method,line)
291
-
292
- # First copy the base nested statement and repopulate it
293
- result = copy_base
294
-
295
- # Start by trackifying the opening statement
296
- opening_variables = abstract_variables_for_tracking(@statement,@block_container)
297
- result.push(tracking_statement(tracking_method,line,@statement,opening_variables))
298
-
299
- # For each line in the nested statement include a tracking call
300
- # TODO I don't think this would trackify further open statements
301
- self.each do |x|
302
- result.push(x.copy)
303
-
304
- # Now include a tracking call for after the statement
305
- line_variables = abstract_variables_for_tracking(x)
306
- # TODO Check that the line is going up
307
- result.push tracking_statement(tracking_method,line,x,line_variables)
308
- end
309
-
310
- return result
311
-
312
- end
313
-
314
- # Returns a duplicate of this nested statement up until the
315
- # the specified limt.
316
- #
317
- # TODO I need to use an array rather than a fixnum for the limit
318
- # since scope is lost otherwise. This seems a bit of hack
319
- # and I should revise.
320
- #
321
- def partial(limit)
322
-
323
- # Check that limit is greater 0
324
- raise StandardError.new('At least one line is required to create nested statement') if limit == 0
325
-
326
- # Add the nested statement and reduce the limit
327
- result = copy_base
328
- limit.pop
329
-
330
- # Goes through each statement contained in the nested statement and adds it
331
- # to the returned nested method until the limit has been reached or this
332
- # nested statement has exhausted its statements.
333
- index = 0
334
- while(limit.length >0 && index < self.length)
335
- x = self[index]
336
- if x.kind_of?(Statement)
337
- result.push(x.copy)
338
- index += 1
339
- limit.pop
340
- elsif x.kind_of(BlockStatement)
341
- result.push(x.partial(limit))
342
- index += 1
343
- end
344
- end
345
- return result
346
- end
347
-
348
- end