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,305 +0,0 @@
1
- # Allows string to be converted into object code.
2
- #
3
- # Currently it can only generate objects as complex as statements, so it can't
4
- # generate whole runtime methods or populated nested statements.
5
- #
6
- # http://rubydoc.info/gems/ruby_parser/2.0.5/frames
7
- #
8
- # http://www.rubyinside.com/treetop-powerful-but-easy-ruby-parser-library-701.html
9
- # http://en.wikipedia.org/wiki/Yacc
10
- # http://thingsaaronmade.com/blog/writing-an-s-expression-parser-in-ruby.html
11
- #
12
- # use StringScanner
13
- #
14
- # Ruby2Ruby 'ruby code' -> s-expression -> 'ruby code'
15
- #
16
- # 'test'
17
- # s(:str, "test")
18
- #
19
- # var8
20
- # s(:call, nil, :var8, s(:arglist))
21
- #
22
- # var8.length
23
- # s(:call, s(:call, nil, :var8, s(:arglist)), :length, s(:arglist))
24
- #
25
- # 'new vegas'.length
26
- # s(:call, s(:str, "new vegas"), :length, s(:arglist))
27
- #
28
- # runtime_method.params
29
- # s(:call, s(:call, nil, :runtime_method, s(:arglist)), :params, s(:arglist))
30
- #
31
- # var_6[8]
32
- # s(:call, s(:call, nil, :var_6, s(:arglist)), :[], s(:arglist, s(:lit, 8)))
33
- #
34
- # 'runtime_method.all_pass?(test_cases)'
35
- # s(:call, s(:call, nil, :runtime_method, s(:arglist)), :all_pass?, s(:arglist, s(:call, nil, :test_cases, s(:arglist))))
36
- #
37
- # 'var_1 = var_2 + var_3'
38
- # s(:lasgn, :var1, s(:call, s(:call, nil, :var2, s(:arglist)), :+, s(:arglist, s(:call, nil, :var3, s(:arglist)))))
39
- #
40
- # var_2 = var_5.chop + var_2
41
- # s(:lasgn, :var2, s(:call, s(:call, s(:call, nil, :var5, s(:arglist)), :chop, s(:arglist)), :+, s(:arglist, s(:lvar, :var2))))
42
- # TODO I need to move away from my instance call structure and more towards this -
43
- # this + contains the arg ment so it just goes deeper down the stack.
44
- #
45
- # var1 != var2
46
- # s(:not, s(:call, s(:call, nil, :var1, s(:arglist)), :==, s(:arglist, s(:call, nil, :var2, s(:arglist)))))
47
- #
48
- #
49
- class Parser
50
-
51
- def self.run(code)
52
- parser = RubyParser.new
53
- #ruby2ruby = Ruby2Ruby.new
54
- sexp = parser.process(code)
55
-
56
- return parse_token(sexp,true,0)
57
- end
58
-
59
- def self.parse_token(sexp,affirmative=true,depth=0)
60
- unless sexp.kind_of?(Sexp)
61
- return parse_simple_token(sexp)
62
- end
63
-
64
- # Generate any single literals
65
- if sexp[0] == :lit || sexp[0] == :str
66
- return Literal.new(sexp[1])
67
- end
68
-
69
- if sexp[0] == :call
70
- if sexp[1].kind_of?(Sexp)
71
- if sexp[2] == :[]
72
- # TODO This doesn't identity hash containers - I don't know if that matters
73
- #return ArrayAccess.new(parse_token(sexp[1]),self.parse_token(sexp[3]).pop)
74
- return ArrayAccess.new(parse_token(sexp[1]),*self.parse_token(sexp[3]))
75
- elsif sexp[2] == :==
76
- # TODO This should be a Statement - and TheoryStatemetn StringToTheory
77
-
78
- # Only have one statement per level
79
- if depth > 0
80
- #c = Container.new(*(1...sexp.length).collect {|x| parse_token(sexp[x],true,depth+1)})
81
- c = Container.new(parse_token(sexp[1],true,depth+1),parse_token(sexp[2],true,depth+1),*parse_token(sexp[3],true,depth+1))
82
- return c
83
- else
84
- return TheoryStatement.new(
85
- parse_token(sexp[1],true,depth+1),self.identify_method(sexp[2],affirmative),*parse_token(sexp[3])
86
- )
87
- end
88
- else
89
-
90
- if parse_token(sexp[1]).kind_of?(ClassName)
91
- return ClassMethodCallContainer.new(parse_token(sexp[1]),self.identify_method(sexp[2],affirmative),*parse_token(sexp[3]))
92
- else
93
- return InstanceCallContainer.new(
94
- parse_token(sexp[1]),
95
- self.identify_method(sexp[2],affirmative),
96
- *parse_token(sexp[3])
97
- )
98
- end
99
-
100
- end
101
- else
102
- return self.parse_custom_token(sexp)
103
- end
104
- end
105
-
106
- if sexp[0] == :arglist
107
- if sexp[1].nil?
108
- return []
109
- end
110
- return (1...sexp.length).collect {|x| parse_token(sexp[x])}
111
- end
112
-
113
- # Catch if it is a statement
114
- if sexp[0] == :lasgn
115
- return parse_lasgn(sexp)
116
- end
117
- if sexp[0] == :return
118
- return self.parse_return(sexp)
119
- end
120
-
121
- if sexp[0] == :if
122
- return self.parse_if(sexp)
123
- end
124
-
125
- if sexp[0] == :attrasgn
126
- return parse_attrasgn(sexp)
127
- end
128
-
129
- if sexp[0] == :true
130
- return True.new
131
- end
132
-
133
- if sexp[0] == :false
134
- return False.new
135
- end
136
-
137
- if sexp[0] == :next
138
- return Next.new
139
- end
140
-
141
- if sexp[0] == :const
142
- return parse_const(sexp[1])
143
- end
144
-
145
- if sexp[0] == :lvar
146
- return parse_simple_token(sexp[1])
147
- end
148
-
149
- if sexp[0] == :not
150
- return parse_token(sexp[1],false)
151
- end
152
-
153
- # NOTE: This relates to blocks
154
- # var1.any? { |x| x.include? var2.id } => [ [1] => :call, [2] => :lasgn, [3] => :call ]
155
- # var1.any? do |x| var2 = var1.chop end => [ [1] => :call, [2] => :lasgn, [3] => :lasgn ]
156
- if sexp[0] == :iter
157
- if depth > 0
158
- return Container.new(parse_iter(sexp))
159
- else
160
- return parse_iter(sexp)
161
- end
162
- end
163
-
164
- raise StandardError.new("Could not find sexp '#{sexp[0].to_s}'")
165
- end
166
-
167
- def self.parse_if(sexp)
168
- # TODO Look into the change in the nil position
169
- #
170
- # "if(var2 == var3)\nreturn true\nend"
171
- # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), s(:return, s(:true)), nil)
172
- #
173
- # "if(var2 != var3)\nreturn true\nend"
174
- # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), nil, s(:return, s(:true)))
175
- #
176
- internal_statements = (2...sexp.length).inject([]) do |total,x|
177
- total << sexp[x] unless sexp[x].nil?
178
- total
179
- end
180
- return OpenStatement.new(
181
- Statement.new(
182
- If.new,
183
- Container.new(parse_token(sexp[1]))
184
- ),
185
- *internal_statements.collect {|x| parse_token(x)}
186
- )
187
-
188
- end
189
-
190
- def self.parse_simple_token(token)
191
- if token.to_s.match(/^var(\d+)$/)
192
- id = token.to_s.match(/^var(\d+)$/)[1].to_i
193
- return Unknown.new(id)
194
- end
195
- return Equal.new if token == '='
196
- return Return.new if token == :return
197
- return LengthEqual.new if token == :length=
198
- raise StandardError.new("Could not identify simple token '#{token.to_s}':#{token.class.to_s}")
199
- end
200
-
201
- def self.parse_iter(sexp)
202
- # TODO Only supports one BlockVariable
203
-
204
- # TODO Not sure this is the best way to detmine whether to use "do end" or "{}"
205
- if sexp.length == 4
206
- s= SingleLineBlockStatement.new(
207
- parse_token(sexp[1]),
208
- BlockContainer.new(parse_simple_token(sexp[2][1])),
209
- *(3...sexp.length).collect {|x| parse_token(sexp[x])}
210
- )
211
- return s
212
- else
213
- return BlockStatement.new(
214
- parse_token(sexp[1]),
215
- BlockContainer.new(parse_simple_token(sexp[2][1])),
216
- *(3...sexp.length).collect {|x| parse_token(sexp[x])}
217
- )
218
- end
219
- end
220
-
221
- def self.parse_const(token)
222
- constants = {'Statement'=>'StatementClass','Return'=>'ReturnClass'}
223
- raise StandardError.new('Unkown constant '+token.to_s) unless constants.has_key?(token.to_s)
224
- eval(constants[token.to_s]+'.new')
225
- end
226
-
227
- def self.parse_lasgn(sexp)
228
- return TheoryStatement.new(
229
- *[sexp[1],'=',sexp[2]].collect {|x| parse_token(x)}
230
- )
231
- end
232
-
233
- def self.parse_return(sexp)
234
- return Statement.new(
235
- *[sexp[0],sexp[1]].collect {|x| parse_token(x)}
236
- )
237
- end
238
-
239
- def self.parse_attrasgn(sexp)
240
-
241
- # TODO Make a note of this change - the equal(=) is with the method call here
242
- return Statement.new(
243
- InstanceCallContainer.new(
244
- parse_token(sexp[1]),
245
- parse_token(sexp[2])
246
- ),
247
- *parse_token(sexp[3])
248
- )
249
-
250
- end
251
-
252
- def self.parse_custom_token(sexp)
253
- if sexp[2].to_s.match(/^var(\d+)$/)
254
- id = sexp[2].to_s.match(/^var(\d+)$/)[1].to_i
255
- return Unknown.new {{:variable_id=>id}}
256
- elsif sexp[2].to_s.match(/^var_(\d+)$/)
257
- id = sexp[2].to_s.match(/^var_(\d+)$/)[1].to_i
258
- return Unknown.new {{:variable_id=>id}}
259
- elsif sexp[2].to_s.match(/^runtime_method$/)
260
- return IntrinsicRuntimeMethod.new
261
- elsif sexp[2].to_s.match(/^test_cases$/)
262
- return IntrinsicTestCases.new
263
- elsif sexp[2].to_s.match(/^last_runtime_method$/)
264
- return IntrinsicLastRuntimeMethod.new
265
- else
266
- raise StandardError.new('Could not match '+sexp[2].to_s)
267
- end
268
- end
269
-
270
- def self.identify_method(method_name,affirmative=true)
271
- method_calls = {
272
- 'length'=>'StringLength',
273
- 'params'=>'Params',
274
- 'value'=> 'Value',
275
- 'all_pass?'=>'AllPass',
276
- 'pass?'=>'Pass',
277
- 'push'=>'Push',
278
- '+'=>'Addition',
279
- '==' => 'Equivalent',
280
- 'chop' => 'Chop',
281
- 'realise2' => 'Realise',
282
- 'new' => 'New',
283
- 'run' => 'Run',
284
- 'kind_of?' => 'KindOf',
285
- 'history' => 'HistoryCall',
286
- 'history2' => 'History2Call',
287
- 'any?' => 'Any',
288
- 'include?' => 'Include',
289
- 'statement_id' => 'StatementID',
290
- 'last' => 'Last',
291
- 'select' => 'Select',
292
- '-' => 'Subtract',
293
- 'first' => 'First'
294
- }
295
- # TODO Need to re-structure code to better suit the parser and how it handles != statements
296
- if not affirmative
297
- method_calls = {
298
- '==' => 'NotEqual',
299
- }
300
- end
301
- raise StandardError.new('Unkown method call "'+method_name.to_s+'"') unless method_calls.has_key?(method_name.to_s)
302
- eval(method_calls[method_name.to_s]+'.new')
303
- end
304
-
305
- end
@@ -1,44 +0,0 @@
1
- class StatementCheck
2
-
3
- # This writes and evalutes the syntax of a statement to
4
- # determine whether it can be used by it self.
5
- #
6
- # So something like var1 = var0.chop would fail since
7
- # var0 doesn't exist. It needs to write to a different
8
- # class to avoid the situation where the statement
9
- # 'return false' would perceived as invalid syntax.
10
- #
11
- def valid_syntax?(statement)
12
-
13
- # Create file to include the test method
14
- file = Tempfile.new("runtime_statement_check.rb")
15
-
16
- # Include the sytax for the statement in the file
17
- file << 'class RuntimeStatementCheck'+"\n"
18
- file << "\t"+'def check'+"\n"
19
- file << "\t\t"+statement+"\n"
20
- file << "\t"+'end'+"\n"
21
- file << 'end'
22
- file.close
23
-
24
- # Load the newly created class and check the statement
25
- begin
26
- load file.path
27
- RuntimeStatementCheck.new.check
28
- rescue NameError => e
29
- return false
30
- rescue StandardError => e
31
- StandardLogger.log e
32
- return false
33
- rescue SyntaxError => e
34
- StandardLogger.log e
35
- return false
36
- end
37
- return true
38
-
39
- ensure
40
- file.close
41
- file.unlink
42
- end
43
-
44
- end
@@ -1,142 +0,0 @@
1
- #
2
- # var6 = 8
3
- # s(:lasgn, :var6, s(:lit, 8))
4
- #
5
- # var6.length = 8
6
- # s(:attrasgn, s(:call, nil, :var6, s(:arglist)), :length=, s(:arglist, s(:lit, 8)))
7
- #
8
- # return var8
9
- # s(:return, s(:call, nil, :var8, s(:arglist)))
10
- #
11
- # var6[7]
12
- # s(:call, s(:call, nil, :var6, s(:arglist)), :[], s(:arglist, s(:lit, 7)))
13
- #
14
- # var1.length = var2.length
15
- # s(:attrasgn, s(:call, nil, :var1, s(:arglist)), :length=, s(:arglist, s(:call, s(:call, nil, :var2, s(:arglist)), :length, s(:arglist))))
16
- #
17
- # var6 == 7
18
- # s(:call, s(:call, nil, :var6, s(:arglist)), :==, s(:arglist, s(:lit, 7)))
19
- #
20
- # if(var6 == 7)
21
- # end
22
- # s(:if, s(:call, s(:call, nil, :var6, s(:arglist)), :==, s(:arglist, s(:lit, 7))), nil, nil)
23
- #
24
- # Statement.new(Return.new,var1.params[0])
25
- # s(:call, s(:const, :Statement), :new, s(:arglist, s(:call, s(:const, :Return), :new, s(:arglist)), s(:call, s(:call, s(:call, nil, :var1, s(:arglist)), :params, s(:arglist)), :[], s(:arglist, s(:lit, 0)))))
26
- #
27
- # var1.any? { |x| x.include? var2.id }
28
- # s(:iter, s(:call, s(:call, nil, :var1, s(:arglist)), :any?, s(:arglist)), s(:lasgn, :x), s(:call, s(:lvar, :x), :include?, s(:arglist, s(:call, s(:call, nil, :var2, s(:arglist)), :id, s(:arglist)))))
29
- #
30
- # var1.any? do |x|
31
- # var2 = var1.chop
32
- # end
33
- # s(:iter, s(:call, s(:call, nil, :var1, s(:arglist)), :any?, s(:arglist)), s(:lasgn, :x), s(:lasgn, :var2, s(:call, s(:call, nil, :var1, s(:arglist)), :chop, s(:arglist))))
34
- #
35
- class StringToTheory < Parser
36
-
37
- # Converts a string into a theory statement.
38
- #
39
- # e.g. "var8 = 7" -> TheoryStatement.new(...)
40
- #
41
- def self.run(statement_string)
42
- statement_string.gsub!(/<runtime_method>/,'runtime_method')
43
- return super(statement_string)
44
-
45
- end
46
-
47
- # TODO This method is very similar to the Parser
48
- def self.parse_simple_token(token)
49
- if token.to_s.match(/^var(\d+)$/)
50
- id = token.to_s.match(/^var(\d+)$/)[1].to_i
51
- return TheoryVariable.new(id)
52
- end
53
- if token.to_s.match(/^[x|y|z]$/) then return BlockToken.new(token.to_s) end
54
- return Equal.new if token == '='
55
- return Return.new if token == :return
56
- return LengthEqual.new if token == :length=
57
- return Equivalent.new if token == :==
58
- raise StandardError.new("Could not identify simple token '#{token.to_s}'")
59
- end
60
-
61
- def self.parse_const(token)
62
- constants = {
63
- 'Statement'=>'StatementClass',
64
- 'Return'=>'ReturnClass',
65
- 'InstanceCallContainer'=>'InstanceCallContainerClass',
66
- 'StringLength'=>'StringLengthClass',
67
- 'Parser'=>'ParserClass',
68
- 'Unknown'=>'UnknownClass',
69
- 'Addition'=>'AdditionClass',
70
- 'Equal'=>'EqualClass',
71
- 'If'=>'IfClass',
72
- 'RuntimeMethod'=>'RuntimeMethodClass',
73
- 'CTestCase'=>'CTestCaseClass',
74
- 'Fixnum'=>'FixnumClass',
75
- 'Equivalent'=>'EquivalentClass',
76
- 'OpenStatement'=>'OpenStatementClass',
77
- 'BlockStatement'=> 'BlockStatementClass',
78
- 'Container'=> 'ContainerClass',
79
- 'Subtract'=> 'SubtractClass',
80
- 'Times'=> 'TimesClass',
81
- 'Chop'=> 'ChopClass',
82
- 'TheoryStatement'=> 'TheoryStatementClass'
83
- }
84
- raise StandardError.new('Unkown constant '+token.to_s) unless constants.has_key?(token.to_s)
85
- eval(constants[token.to_s]+'.new')
86
- end
87
-
88
- def self.parse_custom_token(sexp)
89
- if sexp[2].to_s.match(/^var(\d+)$/)
90
- id = sexp[2].to_s.match(/^var(\d+)$/)[1].to_i
91
- return TheoryVariable.new(id)
92
- elsif sexp[2].to_s.match(/^runtime_method$/)
93
- return IntrinsicRuntimeMethod.new
94
- elsif sexp[2].to_s.match(/^test_cases$/)
95
- return IntrinsicTestCases.new
96
- else
97
- raise StandardError.new('Could not match '+sexp[2].to_s)
98
- end
99
- end
100
-
101
- def self.parse_if(sexp)
102
- # TODO Look into the change in the nil position
103
- #
104
- # "if(var2 == var3)\nreturn true\nend"
105
- # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), s(:return, s(:true)), nil)
106
- #
107
- # "if(var2 != var3)\nreturn true\nend"
108
- # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), nil, s(:return, s(:true)))
109
- #
110
- internal_statements = (2...sexp.length).inject([]) do |total,x|
111
- total << sexp[x] unless sexp[x].nil?
112
- total
113
- end
114
- return OpenStatement.new(
115
- TheoryStatement.new(
116
- If.new,
117
- Container.new(parse_token(sexp[1]))
118
- ),
119
- *internal_statements.collect {|x| parse_token(x)}
120
- )
121
-
122
- end
123
-
124
- def self.parse_return(sexp)
125
- return TheoryStatement.new(
126
- *[sexp[0],sexp[1]].collect {|x| parse_token(x)}
127
- )
128
- end
129
-
130
- def self.parse_attrasgn(sexp)
131
- # TODO Make a note of this change - the equal(=) is with the method call here
132
- return TheoryStatement.new(
133
- InstanceCallContainer.new(
134
- parse_token(sexp[1]),
135
- parse_token(sexp[2])
136
- ),
137
- *parse_token(sexp[3])
138
- )
139
-
140
- end
141
-
142
- end