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
@@ -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