cauldron 0.1.0

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 (398) hide show
  1. data/.document +5 -0
  2. data/Gemfile +13 -0
  3. data/LICENSE.txt +20 -0
  4. data/README +1 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/bin/cauldron +10 -0
  9. data/cauldron/.autotest +23 -0
  10. data/cauldron/History.txt +6 -0
  11. data/cauldron/Manifest.txt +8 -0
  12. data/cauldron/README.txt +57 -0
  13. data/cauldron/Rakefile +27 -0
  14. data/cauldron/bin/cauldron +3 -0
  15. data/cauldron/lib/cauldron.rb +3 -0
  16. data/cauldron/test/test_cauldron.rb +8 -0
  17. data/features/cauldron_example_cases.feature +13 -0
  18. data/features/cauldron_generates_runtime_method.feature +12 -0
  19. data/features/cauldron_start_terminal.feature +13 -0
  20. data/features/step_definitions/cauldron_steps.rb +16 -0
  21. data/features/step_definitions/terminal_steps.rb +34 -0
  22. data/features/support/env.rb +19 -0
  23. data/lib/Chain.rb +879 -0
  24. data/lib/ChainMapping.rb +172 -0
  25. data/lib/CodeHandler.rb +517 -0
  26. data/lib/Mapping.rb +26 -0
  27. data/lib/MappingValues.rb +24 -0
  28. data/lib/ScopeDependencies.rb +7 -0
  29. data/lib/Theory.rb +274 -0
  30. data/lib/UnifiedChain.rb +110 -0
  31. data/lib/cauldron.rb +6 -0
  32. data/lib/cauldron/conversion.rb +15 -0
  33. data/lib/cauldron/pot.rb +134 -0
  34. data/lib/cauldron/sexp2cauldron.rb +156 -0
  35. data/lib/cauldron/terminal.rb +120 -0
  36. data/lib/cauldron/theory_factory.rb +10 -0
  37. data/lib/core/ActsAsCode.rb +25 -0
  38. data/lib/core/BlockToken.rb +33 -0
  39. data/lib/core/CCall.rb +7 -0
  40. data/lib/core/CTestCase.rb +27 -0
  41. data/lib/core/ClassMethodCallContainer.rb +45 -0
  42. data/lib/core/Container.rb +85 -0
  43. data/lib/core/InstanceCallContainer.rb +272 -0
  44. data/lib/core/MethodUsage.rb +66 -0
  45. data/lib/core/PrintVariables.rb +25 -0
  46. data/lib/core/TheoryGenerator.rb +764 -0
  47. data/lib/core/Token.rb +7 -0
  48. data/lib/core/assignment/Assignment.rb +18 -0
  49. data/lib/core/assignment/Equal.rb +39 -0
  50. data/lib/core/assignment/Equivalent.rb +20 -0
  51. data/lib/core/assignment/NotEqual.rb +14 -0
  52. data/lib/core/call_container/CallContainer.rb +66 -0
  53. data/lib/core/class_method_call/New.rb +15 -0
  54. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +31 -0
  55. data/lib/core/declaration/Declaration.rb +16 -0
  56. data/lib/core/declaration/LiteralDeclaration.rb +47 -0
  57. data/lib/core/declaration/VariableDeclaration.rb +59 -0
  58. data/lib/core/instance_call/ArrayEach.rb +23 -0
  59. data/lib/core/instance_call/ArrayLength.rb +15 -0
  60. data/lib/core/instance_call/Chop.rb +28 -0
  61. data/lib/core/instance_call/Copy.rb +22 -0
  62. data/lib/core/instance_call/DeclaredVariable.rb +18 -0
  63. data/lib/core/instance_call/InstanceCall.rb +77 -0
  64. data/lib/core/instance_call/Params.rb +15 -0
  65. data/lib/core/instance_call/Push.rb +20 -0
  66. data/lib/core/instance_call/StringLength.rb +32 -0
  67. data/lib/core/instance_call/Times.rb +20 -0
  68. data/lib/core/instance_call/instance_calls.rb +168 -0
  69. data/lib/core/instance_call/length_equal.rb +15 -0
  70. data/lib/core/kernal/EvalCall.rb +15 -0
  71. data/lib/core/kernal/LocalVariablesCall.rb +15 -0
  72. data/lib/core/literal/Literal.rb +111 -0
  73. data/lib/core/literal/Raw.rb +23 -0
  74. data/lib/core/literal/RuntimeMethodLiteral.rb +21 -0
  75. data/lib/core/literal/StatementLiteral.rb +28 -0
  76. data/lib/core/method_call/AvailableVariablesCall.rb +25 -0
  77. data/lib/core/method_call/ClassCall.rb +33 -0
  78. data/lib/core/method_call/DefCall.rb +72 -0
  79. data/lib/core/method_call/EvaluateClassCall.rb +29 -0
  80. data/lib/core/method_call/MethodNameCall.rb +27 -0
  81. data/lib/core/method_call/ToDeclarationCall.rb +15 -0
  82. data/lib/core/requirement/Requirement.rb +291 -0
  83. data/lib/core/runtime_class/ArrayClass.rb +19 -0
  84. data/lib/core/runtime_class/ClassCallClass.rb +23 -0
  85. data/lib/core/runtime_class/ClassEvaluationClass.rb +19 -0
  86. data/lib/core/runtime_class/ClassName.rb +18 -0
  87. data/lib/core/runtime_class/DefCallClass.rb +21 -0
  88. data/lib/core/runtime_class/EqualClass.rb +19 -0
  89. data/lib/core/runtime_class/FixnumClass.rb +15 -0
  90. data/lib/core/runtime_class/IfStatementClass.rb +12 -0
  91. data/lib/core/runtime_class/InstanceCallClass.rb +19 -0
  92. data/lib/core/runtime_class/InstanceCallContainerClass.rb +16 -0
  93. data/lib/core/runtime_class/InstanceClassCallClass.rb +19 -0
  94. data/lib/core/runtime_class/LiteralClass.rb +19 -0
  95. data/lib/core/runtime_class/MethodParameterClass.rb +27 -0
  96. data/lib/core/runtime_class/MethodUsageClass.rb +27 -0
  97. data/lib/core/runtime_class/RequirementClass.rb +19 -0
  98. data/lib/core/runtime_class/ReturnClass.rb +21 -0
  99. data/lib/core/runtime_class/RuntimeClass.rb +30 -0
  100. data/lib/core/runtime_class/RuntimeClassClass.rb +19 -0
  101. data/lib/core/runtime_class/RuntimeMethodClass.rb +34 -0
  102. data/lib/core/runtime_class/StatementClass.rb +53 -0
  103. data/lib/core/runtime_class/StringClass.rb +23 -0
  104. data/lib/core/runtime_class/StringLengthClass.rb +19 -0
  105. data/lib/core/runtime_class/StringVariableClass.rb +19 -0
  106. data/lib/core/runtime_class/ThisClass.rb +15 -0
  107. data/lib/core/runtime_class/UnknownClass.rb +23 -0
  108. data/lib/core/runtime_class/class_names.rb +95 -0
  109. data/lib/core/runtime_class/runtime_class.rb +123 -0
  110. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +300 -0
  111. data/lib/core/runtime_method/ParametersContainer.rb +29 -0
  112. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +94 -0
  113. data/lib/core/runtime_method/RuntimeMethod.rb +817 -0
  114. data/lib/core/runtime_method/WriteParameters.rb +35 -0
  115. data/lib/core/statement/ActsAsStatement.rb +116 -0
  116. data/lib/core/statement/ArrayAccess.rb +96 -0
  117. data/lib/core/statement/BlockStatement.rb +348 -0
  118. data/lib/core/statement/DeclarationStatement.rb +19 -0
  119. data/lib/core/statement/HackStatement.rb +25 -0
  120. data/lib/core/statement/HashAccess.rb +18 -0
  121. data/lib/core/statement/OpenStatement.rb +171 -0
  122. data/lib/core/statement/RealisedStatement.rb +5 -0
  123. data/lib/core/statement/SingleLineBlockStatement.rb +39 -0
  124. data/lib/core/statement/Statement.rb +1223 -0
  125. data/lib/core/statement/StatementDependencies.rb +271 -0
  126. data/lib/core/statement/StatementGroup.rb +157 -0
  127. data/lib/core/statement/StatementStructure2.rb +224 -0
  128. data/lib/core/statement/TheoryStatement.rb +60 -0
  129. data/lib/core/statement/TopologicalStatements.rb +34 -0
  130. data/lib/core/structure/DeclareNewInstanceStructure.rb +49 -0
  131. data/lib/core/structure/DeclareRuntimeMethodStructure.rb +34 -0
  132. data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +31 -0
  133. data/lib/core/structure/DeclareVariableAsVariableStructure.rb +52 -0
  134. data/lib/core/structure/FixnumAdditionStructure.rb +56 -0
  135. data/lib/core/structure/InstanceCallContainerStructure.rb +50 -0
  136. data/lib/core/structure/InstanceCallStructure.rb +53 -0
  137. data/lib/core/structure/InstanceMethodCallStructure.rb +21 -0
  138. data/lib/core/structure/ReturnStructure.rb +20 -0
  139. data/lib/core/structure/StatementStructure.rb +11 -0
  140. data/lib/core/syntax/Addition.rb +25 -0
  141. data/lib/core/syntax/BlockContainer.rb +130 -0
  142. data/lib/core/syntax/Boolean.rb +15 -0
  143. data/lib/core/syntax/Code.rb +11 -0
  144. data/lib/core/syntax/Do.rb +20 -0
  145. data/lib/core/syntax/False.rb +12 -0
  146. data/lib/core/syntax/If.rb +28 -0
  147. data/lib/core/syntax/IfContainer.rb +100 -0
  148. data/lib/core/syntax/Nil.rb +15 -0
  149. data/lib/core/syntax/Return.rb +33 -0
  150. data/lib/core/syntax/Subtract.rb +19 -0
  151. data/lib/core/syntax/This.rb +40 -0
  152. data/lib/core/syntax/True.rb +20 -0
  153. data/lib/core/syntax/syntax.rb +24 -0
  154. data/lib/core/tracking/ActsAsTrackable.rb +65 -0
  155. data/lib/core/tracking/History.rb +167 -0
  156. data/lib/core/tracking/RuntimeTrackingMethod.rb +32 -0
  157. data/lib/core/tracking/Step.rb +52 -0
  158. data/lib/core/variable/ArrayVariable.rb +76 -0
  159. data/lib/core/variable/BaseVariable.rb +154 -0
  160. data/lib/core/variable/BlockVariable.rb +92 -0
  161. data/lib/core/variable/FixnumVariable.rb +36 -0
  162. data/lib/core/variable/HistoryVariable.rb +8 -0
  163. data/lib/core/variable/MethodParameter.rb +206 -0
  164. data/lib/core/variable/MethodUsageVariable.rb +60 -0
  165. data/lib/core/variable/NilVariable.rb +29 -0
  166. data/lib/core/variable/RuntimeMethodParameter.rb +67 -0
  167. data/lib/core/variable/StatementVariable.rb +72 -0
  168. data/lib/core/variable/StepVariable.rb +7 -0
  169. data/lib/core/variable/StringVariable.rb +46 -0
  170. data/lib/core/variable/TypeVariable.rb +72 -0
  171. data/lib/core/variable/Unknown.rb +116 -0
  172. data/lib/core/variable/UnknownVariable.rb +29 -0
  173. data/lib/core/variable/Variable.rb +70 -0
  174. data/lib/core/variable/VariableContainer.rb +28 -0
  175. data/lib/core/variable/VariableIncluded.rb +27 -0
  176. data/lib/core/variable/VariableReference.rb +85 -0
  177. data/lib/error/FailedToFindStatementContainerError.rb +7 -0
  178. data/lib/error/FailedToFindStatementError.rb +7 -0
  179. data/lib/error/FailedToFindVariableError.rb +7 -0
  180. data/lib/error/FailedToLiteraliseError.rb +7 -0
  181. data/lib/error/FailedVariableMatch.rb +7 -0
  182. data/lib/error/ImproperStatementUsageError.rb +7 -0
  183. data/lib/error/IncompatiableRequirementsError.rb +7 -0
  184. data/lib/error/InvalidStatementError.rb +7 -0
  185. data/lib/error/MethodSizeError.rb +7 -0
  186. data/lib/error/RuntimeSyntaxError.rb +7 -0
  187. data/lib/error/UnexpectedStatementTypeError.rb +7 -0
  188. data/lib/error/UnknownStatementType.rb +7 -0
  189. data/lib/error/UnliteralisableError.rb +7 -0
  190. data/lib/implemented_chain.rb +34 -0
  191. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +20 -0
  192. data/lib/intrinsic/IntrinsicLiteral.rb +26 -0
  193. data/lib/intrinsic/IntrinsicObject.rb +22 -0
  194. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +27 -0
  195. data/lib/intrinsic/IntrinsicTestCases.rb +17 -0
  196. data/lib/logger/StandardLogger.rb +62 -0
  197. data/lib/required.rb +236 -0
  198. data/lib/ruby_code/Array.rb +95 -0
  199. data/lib/ruby_code/Fixnum.rb +39 -0
  200. data/lib/ruby_code/Hash.rb +25 -0
  201. data/lib/ruby_code/NilClass.rb +19 -0
  202. data/lib/ruby_code/Object.rb +24 -0
  203. data/lib/ruby_code/String.rb +86 -0
  204. data/lib/ruby_code/Symbol.rb +7 -0
  205. data/lib/standard_library/Tasks.rb +12 -0
  206. data/lib/theories.rb +143 -0
  207. data/lib/theory/ActionImplementation.rb +17 -0
  208. data/lib/theory/TheoryAction.rb +70 -0
  209. data/lib/theory/TheoryChainValidator.rb +101 -0
  210. data/lib/theory/TheoryComponent.rb +42 -0
  211. data/lib/theory/TheoryConnector.rb +755 -0
  212. data/lib/theory/TheoryDependent.rb +135 -0
  213. data/lib/theory/TheoryImplementation.rb +74 -0
  214. data/lib/theory/TheoryResult.rb +131 -0
  215. data/lib/theory/TheoryVariable.rb +63 -0
  216. data/lib/theory/theory_collection.rb +62 -0
  217. data/lib/util/ClassEvaluation.rb +68 -0
  218. data/lib/util/CodeEvaluation.rb +35 -0
  219. data/lib/util/DeclarationStatementEvaluation.rb +31 -0
  220. data/lib/util/MethodEvaluation.rb +49 -0
  221. data/lib/util/MethodTester.rb +71 -0
  222. data/lib/util/MethodValidation.rb +145 -0
  223. data/lib/util/MethodWriter.rb +66 -0
  224. data/lib/util/Parser.rb +299 -0
  225. data/lib/util/StatementCheck.rb +42 -0
  226. data/lib/util/StringToTheory.rb +119 -0
  227. data/lib/util/System.rb +8 -0
  228. data/spec/cauldron/pot_spec.rb +6 -0
  229. data/spec/cauldron/runtime_method_spec.rb +36 -0
  230. data/spec/cauldron/sexp_2_cauldron_spec.rb +26 -0
  231. data/spec/cauldron/terminal_spec.rb +38 -0
  232. data/spec/cauldron/theory_action_spec.rb +5 -0
  233. data/spec/spec_helper.rb +4 -0
  234. data/test/fixtures/chains/1/declaration.txt +26 -0
  235. data/test/fixtures/chains/1/dump +0 -0
  236. data/test/fixtures/chains/2/declaration.txt +26 -0
  237. data/test/fixtures/chains/2/dump +0 -0
  238. data/test/fixtures/chains/3/declaration.txt +26 -0
  239. data/test/fixtures/chains/3/dump +0 -0
  240. data/test/fixtures/implementation_results/0/declaration.txt +3 -0
  241. data/test/fixtures/implementation_results/0/dump +0 -0
  242. data/test/fixtures/theories/0/declaration.txt +9 -0
  243. data/test/fixtures/theories/0/desc +10 -0
  244. data/test/fixtures/theories/0/dump +0 -0
  245. data/test/fixtures/theories/1/declaration.txt +15 -0
  246. data/test/fixtures/theories/1/desc +11 -0
  247. data/test/fixtures/theories/1/dump +0 -0
  248. data/test/fixtures/theories/10/declaration.txt +23 -0
  249. data/test/fixtures/theories/10/desc +17 -0
  250. data/test/fixtures/theories/10/dump +0 -0
  251. data/test/fixtures/theories/11/declaration.txt +20 -0
  252. data/test/fixtures/theories/11/desc +14 -0
  253. data/test/fixtures/theories/11/dump +0 -0
  254. data/test/fixtures/theories/12/declaration.txt +18 -0
  255. data/test/fixtures/theories/12/desc +12 -0
  256. data/test/fixtures/theories/12/dump +0 -0
  257. data/test/fixtures/theories/13/declaration.txt +24 -0
  258. data/test/fixtures/theories/13/desc +20 -0
  259. data/test/fixtures/theories/13/dump +0 -0
  260. data/test/fixtures/theories/14/declaration.txt +26 -0
  261. data/test/fixtures/theories/14/desc +20 -0
  262. data/test/fixtures/theories/14/dump +0 -0
  263. data/test/fixtures/theories/15/declaration.txt +20 -0
  264. data/test/fixtures/theories/15/desc +14 -0
  265. data/test/fixtures/theories/15/dump +0 -0
  266. data/test/fixtures/theories/16/declaration.txt +30 -0
  267. data/test/fixtures/theories/16/desc +14 -0
  268. data/test/fixtures/theories/16/dump +0 -0
  269. data/test/fixtures/theories/17/declaration.txt +25 -0
  270. data/test/fixtures/theories/17/desc +11 -0
  271. data/test/fixtures/theories/17/dump +0 -0
  272. data/test/fixtures/theories/18/declaration.txt +23 -0
  273. data/test/fixtures/theories/18/desc +11 -0
  274. data/test/fixtures/theories/18/dump +0 -0
  275. data/test/fixtures/theories/19/declaration.txt +23 -0
  276. data/test/fixtures/theories/19/desc +11 -0
  277. data/test/fixtures/theories/19/dump +0 -0
  278. data/test/fixtures/theories/2/declaration.txt +12 -0
  279. data/test/fixtures/theories/2/desc +10 -0
  280. data/test/fixtures/theories/2/dump +0 -0
  281. data/test/fixtures/theories/20/declaration.txt +23 -0
  282. data/test/fixtures/theories/20/desc +17 -0
  283. data/test/fixtures/theories/20/dump +0 -0
  284. data/test/fixtures/theories/3/declaration.txt +19 -0
  285. data/test/fixtures/theories/3/desc +11 -0
  286. data/test/fixtures/theories/3/dump +0 -0
  287. data/test/fixtures/theories/4/declaration.txt +11 -0
  288. data/test/fixtures/theories/4/desc +11 -0
  289. data/test/fixtures/theories/4/dump +0 -0
  290. data/test/fixtures/theories/5/declaration.txt +6 -0
  291. data/test/fixtures/theories/5/desc +9 -0
  292. data/test/fixtures/theories/5/dump +0 -0
  293. data/test/fixtures/theories/6/declaration.txt +13 -0
  294. data/test/fixtures/theories/6/desc +11 -0
  295. data/test/fixtures/theories/6/dump +0 -0
  296. data/test/fixtures/theories/7/declaration.txt +19 -0
  297. data/test/fixtures/theories/7/desc +11 -0
  298. data/test/fixtures/theories/7/dump +0 -0
  299. data/test/fixtures/theories/8/declaration.txt +21 -0
  300. data/test/fixtures/theories/8/desc +11 -0
  301. data/test/fixtures/theories/8/dump +0 -0
  302. data/test/fixtures/theories/9/declaration.txt +24 -0
  303. data/test/fixtures/theories/9/desc +20 -0
  304. data/test/fixtures/theories/9/dump +0 -0
  305. data/test/fixtures/theory_implementations/0/declaration.txt +11 -0
  306. data/test/fixtures/theory_implementations/0/desc.txt +9 -0
  307. data/test/fixtures/theory_implementations/0/dump +0 -0
  308. data/test/fixtures/theory_implementations/0/theory_id +1 -0
  309. data/test/fixtures/theory_implementations/1/desc.txt +9 -0
  310. data/test/fixtures/theory_implementations/1/dump +0 -0
  311. data/test/fixtures/theory_implementations/1/theory_id +1 -0
  312. data/test/fixtures/theory_implementations/2/desc.txt +9 -0
  313. data/test/fixtures/theory_implementations/2/dump +0 -0
  314. data/test/fixtures/theory_implementations/2/theory_id +1 -0
  315. data/test/output/simple_method.txt +6 -0
  316. data/test/output/test_method/first_possible_method.txt +6 -0
  317. data/test/output/test_simple_cases/simple_case_01.txt +8 -0
  318. data/test/output/test_simple_cases/simple_case_02.txt +7 -0
  319. data/test/output/test_simple_cases/simple_case_03.txt +8 -0
  320. data/test/output/test_simple_cases/simple_case_04.txt +8 -0
  321. data/test/output/test_simple_cases/simple_case_05.txt +8 -0
  322. data/test/output/test_simple_cases/simple_case_06.txt +9 -0
  323. data/test/output/test_simple_cases/simple_case_07.txt +9 -0
  324. data/test/output/test_simple_cases/simple_case_08.txt +9 -0
  325. data/test/tc_contextual_variables.rb +87 -0
  326. data/test/tc_describe.rb +47 -0
  327. data/test/tc_method.rb +133 -0
  328. data/test/tc_requirement.rb +30 -0
  329. data/test/tc_suite_complete.rb +26 -0
  330. data/test/tc_variable.rb +52 -0
  331. data/test/ts_complete.rb +84 -0
  332. data/test/ts_stable.rb +81 -0
  333. data/test/unit/core/declaration/tc_literal_declaration.rb +34 -0
  334. data/test/unit/core/method_call/tc_class_call.rb +20 -0
  335. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +129 -0
  336. data/test/unit/core/runtime_method/tc_runtime_method.rb +616 -0
  337. data/test/unit/core/statement/tc_array_access.rb +63 -0
  338. data/test/unit/core/statement/tc_block_statement.rb +51 -0
  339. data/test/unit/core/statement/tc_hack_statement.rb +26 -0
  340. data/test/unit/core/statement/tc_open_statement.rb +70 -0
  341. data/test/unit/core/statement/tc_statement.rb +681 -0
  342. data/test/unit/core/statement/tc_statement_dependencies.rb +146 -0
  343. data/test/unit/core/statement/tc_statement_group.rb +35 -0
  344. data/test/unit/core/statement/tc_statement_replace_variable.rb +61 -0
  345. data/test/unit/core/statement/tc_theory_statement.rb +51 -0
  346. data/test/unit/core/structure/tc_declare_new_instance_structure.rb +41 -0
  347. data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +41 -0
  348. data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +66 -0
  349. data/test/unit/core/structure/tc_instance_call_container_structure.rb +41 -0
  350. data/test/unit/core/structure/tc_return_structure.rb +32 -0
  351. data/test/unit/core/syntax/tc_block_container.rb +32 -0
  352. data/test/unit/core/syntax/tc_if_container.rb +39 -0
  353. data/test/unit/core/tc_class_method_call.rb +34 -0
  354. data/test/unit/core/tc_container.rb +41 -0
  355. data/test/unit/core/tc_ctest_case.rb +25 -0
  356. data/test/unit/core/tc_instance_call_container.rb +93 -0
  357. data/test/unit/core/tc_literal.rb +30 -0
  358. data/test/unit/core/tc_theory_generator.rb +336 -0
  359. data/test/unit/core/tc_theory_generator_heavy.rb +42 -0
  360. data/test/unit/core/tracking/tc_history.rb +102 -0
  361. data/test/unit/core/tracking/tc_step.rb +65 -0
  362. data/test/unit/core/variable/tc_array_variable.rb +61 -0
  363. data/test/unit/core/variable/tc_block_variable.rb +17 -0
  364. data/test/unit/core/variable/tc_fixnum_variable.rb +54 -0
  365. data/test/unit/core/variable/tc_method_parameter_variable.rb +22 -0
  366. data/test/unit/core/variable/tc_runtime_method_variable.rb +32 -0
  367. data/test/unit/core/variable/tc_string_variable.rb +37 -0
  368. data/test/unit/core/variable/tc_unknown.rb +24 -0
  369. data/test/unit/core/variable/tc_variable_reference.rb +28 -0
  370. data/test/unit/ruby_code/tc_array.rb +64 -0
  371. data/test/unit/ruby_code/tc_fixnum.rb +18 -0
  372. data/test/unit/ruby_code/tc_hash.rb +41 -0
  373. data/test/unit/ruby_code/tc_string.rb +38 -0
  374. data/test/unit/tc_chain.rb +434 -0
  375. data/test/unit/tc_chain_mapping.rb +62 -0
  376. data/test/unit/tc_chain_with_case_1.rb +169 -0
  377. data/test/unit/tc_instance_call.rb +40 -0
  378. data/test/unit/tc_instance_call_structure.rb +35 -0
  379. data/test/unit/tc_method_usage.rb +35 -0
  380. data/test/unit/tc_pot.rb +124 -0
  381. data/test/unit/tc_runtime_tracking_method.rb +40 -0
  382. data/test/unit/tc_statement_structure_2.rb +43 -0
  383. data/test/unit/tc_theory.rb +533 -0
  384. data/test/unit/tc_variable_declaration.rb +32 -0
  385. data/test/unit/theory/tc_theory_action.rb +80 -0
  386. data/test/unit/theory/tc_theory_action_implementation.rb +23 -0
  387. data/test/unit/theory/tc_theory_chain_validator.rb +340 -0
  388. data/test/unit/theory/tc_theory_connector.rb +396 -0
  389. data/test/unit/theory/tc_theory_dependent.rb +151 -0
  390. data/test/unit/theory/tc_theory_implementation.rb +133 -0
  391. data/test/unit/theory/tc_theory_result.rb +111 -0
  392. data/test/unit/theory/tc_theory_variable.rb +45 -0
  393. data/test/unit/util/tc_method_validation.rb +98 -0
  394. data/test/unit/util/tc_parser.rb +108 -0
  395. data/test/unit/util/tc_string_to_theory.rb +299 -0
  396. data/test/unit/variable/tc_method_usage_variable.rb +25 -0
  397. data/tmp/runtime_method_evaluation.rb +10 -0
  398. metadata +522 -0
@@ -0,0 +1,23 @@
1
+ class StringClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'String'
9
+ end
10
+
11
+ def copy
12
+ return StringClass.new
13
+ end
14
+
15
+ def value
16
+ return String
17
+ end
18
+
19
+ def declaration_statement
20
+ return ClassMethodCallContainer.new(StringClass.new,New.new)
21
+ end
22
+
23
+ end
@@ -0,0 +1,19 @@
1
+ class StringLengthClass
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write
8
+ return 'StringLength'
9
+ end
10
+
11
+ def describe
12
+ return 'StringLength'
13
+ end
14
+
15
+ def copy
16
+ return StringLengthClass.new
17
+ end
18
+
19
+ end
@@ -0,0 +1,19 @@
1
+ class StringVariableClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'StringVariable'
9
+ end
10
+
11
+ def copy
12
+ return StringVariableClass.new
13
+ end
14
+
15
+ def value
16
+ return StringVariable
17
+ end
18
+
19
+ end
@@ -0,0 +1,15 @@
1
+ class ThisClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write
8
+ return 'This'
9
+ end
10
+
11
+ def copy
12
+ return ThisClass.new
13
+ end
14
+
15
+ end
@@ -0,0 +1,23 @@
1
+ class UnknownClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'Unknown'
9
+ end
10
+
11
+ def copy
12
+ return UnknownClass.new
13
+ end
14
+
15
+ def value
16
+ return Unknown
17
+ end
18
+
19
+ def declaration_statement
20
+ return ClassMethodCallContainer.new(Unknown.new,New.new)
21
+ end
22
+
23
+ end
@@ -0,0 +1,95 @@
1
+ class EquivalentClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'Equivalent'
9
+ end
10
+
11
+ end
12
+
13
+ class OpenStatementClass < ClassName
14
+
15
+ def initialize
16
+ super
17
+ end
18
+
19
+ def write(context=nil)
20
+ return 'OpenStatement'
21
+ end
22
+
23
+ end
24
+
25
+ class IfContainerClass < ClassName
26
+
27
+ def initialize
28
+ super
29
+ end
30
+
31
+ def write(context=nil)
32
+ return 'IfContainer'
33
+ end
34
+
35
+ end
36
+
37
+ class BlockStatementClass < ClassName
38
+
39
+ def initialize
40
+ super
41
+ end
42
+
43
+ def write(tab=0)
44
+ return 'BlockStatement'
45
+ end
46
+
47
+ end
48
+
49
+ class ContainerClass < ClassName
50
+
51
+ def initialize
52
+ super
53
+ end
54
+
55
+ def write(tab=0)
56
+ return 'Container'
57
+ end
58
+
59
+ end
60
+
61
+ class SubtractClass < ClassName
62
+
63
+ def initialize
64
+ super
65
+ end
66
+
67
+ def write(tab=0)
68
+ return 'Subtract'
69
+ end
70
+
71
+ end
72
+
73
+ class TimesClass < ClassName
74
+
75
+ def initialize
76
+ super
77
+ end
78
+
79
+ def write(tab=0)
80
+ return 'Times'
81
+ end
82
+
83
+ end
84
+
85
+ class ChopClass < ClassName
86
+
87
+ def initialize
88
+ super
89
+ end
90
+
91
+ def write(tab=0)
92
+ return 'Chop'
93
+ end
94
+
95
+ end
@@ -0,0 +1,123 @@
1
+ class TheoryStatementClass < ClassName
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'TheoryStatement'
9
+ end
10
+
11
+ def copy
12
+ return TheoryStatementClass.new
13
+ end
14
+
15
+ def value
16
+ return TheoryStatement
17
+ end
18
+
19
+ # TODO I'm not sure if this is needed
20
+ def declaration_statement
21
+ return ClassMethodCallContainer.new(TheoryStatementClass.new,New.new)
22
+ end
23
+
24
+ def class_method_calls(available=[])
25
+ end
26
+
27
+ end
28
+
29
+ class ParserClass < ClassName
30
+
31
+ def initialize
32
+ super
33
+ end
34
+
35
+ def write(context=nil)
36
+ return 'Parser'
37
+ end
38
+
39
+ def copy
40
+ return ParserClass.new
41
+ end
42
+
43
+ def value
44
+ return parser
45
+ end
46
+
47
+ # TODO I'm not sure if this is needed
48
+ def declaration_statement
49
+ return ClassMethodCallContainer.new(ParserClass.new,New.new)
50
+ end
51
+
52
+ def class_method_calls(available=[])
53
+ end
54
+
55
+ end
56
+
57
+ class AdditionClass < ClassName
58
+
59
+ def initialize
60
+ super
61
+ end
62
+
63
+ def write(context=nil)
64
+ return 'Addition'
65
+ end
66
+
67
+ def copy
68
+ return AdditionClass.new
69
+ end
70
+
71
+ def value
72
+ return Addition.class
73
+ end
74
+
75
+ def declaration_statement
76
+ return ClassMethodCallContainer.new(AdditionClass.new,New.new)
77
+ end
78
+
79
+ def class_method_calls(available=[])
80
+ end
81
+
82
+ end
83
+
84
+ class CTestCaseClass < ClassName
85
+
86
+ def initialize
87
+ super
88
+ end
89
+
90
+ def write(context=nil)
91
+ return 'CTestCase'
92
+ end
93
+
94
+ def value
95
+ return CTestCase.class
96
+ end
97
+
98
+ def declaration_statement
99
+ return ClassMethodCallContainer.new(CTestCaseClass.new,New.new)
100
+ end
101
+
102
+ end
103
+
104
+ class FixnumClass < ClassName
105
+
106
+ def initialize
107
+ super
108
+ end
109
+
110
+ def write(context=nil)
111
+ return 'Fixnum'
112
+ end
113
+
114
+ def value
115
+ return CTestCase.class
116
+ end
117
+
118
+ def declaration_statement
119
+ return ClassMethodCallContainer.new(FixnumClass.new,New.new)
120
+ end
121
+
122
+ end
123
+
@@ -0,0 +1,300 @@
1
+
2
+ module ActsAsRuntimeMethod
3
+ include WriteParameters
4
+
5
+ # TODO Write tests
6
+ # Returns a variable instance with the id specified. This essential just finds the varialbe
7
+ # at the last line of the method.
8
+ #
9
+ # @param id The uniq id of the variable that is being looked for - this should be the unique
10
+ # variable id.
11
+ #
12
+ def find_variable(uniq_id)
13
+ #return find_variable_at_line(id,self.length)
14
+ #statement_count
15
+ # TODO I don't know whether I should be using statement_count, self.length or line_count
16
+ #return find_variable_at_line(id,self.length)
17
+
18
+ # TODO I don't know if progressively building up the method is necessary now
19
+
20
+ # TODO This method can probably be just used in StatementGroup and shared between nested statement
21
+ # and runtime method.
22
+ self.each do |x|
23
+
24
+ # TODO SHould be unique variable id
25
+ if x.kind_of?(Statement)
26
+ if x.created_variable.uniq_id == uniq_id
27
+ temp = x.find_actual_variable(uniq_id)
28
+ return temp.copy
29
+ end
30
+ next
31
+ end
32
+ if x.kind_of?(BlockStatement)
33
+ begin
34
+ # TODO Write tests for this using uniq_id
35
+ return x.find_variable(uniq_id)
36
+ # TODO Should have a custom FailedToFindVariable error or similar
37
+ rescue StandardError
38
+ next
39
+ end
40
+ end
41
+ end
42
+ raise FailedToFindVariableError.new('Unable to find variable '+uniq_id.to_s+' in method '+method_id.to_s)
43
+ end
44
+
45
+ # TODO Write tests esp when I start to bring out varients of the same variable
46
+ #
47
+ def find_statement_that_declares_variable(variable_id)
48
+ self.each do |x|
49
+ if x.kind_of?(Statement)
50
+ if x.declared_variable_id == variable_id then return x.copy end
51
+ next
52
+ end
53
+ if x.kind_of?(BlockStatement)
54
+ begin
55
+ return x.find_statement_that_declares_variable(variable_id)
56
+ rescue StandardError
57
+ next
58
+ end
59
+ end
60
+ end
61
+ raise StandardError.new('Failed to find statement that declared variable '+variable_id.to_s)
62
+ end
63
+
64
+ # TODO Write tests
65
+ def find_statement_that_created_variable(uniq_id)
66
+ self.each do |x|
67
+ if x.kind_of?(Statement)
68
+ if x.created_variable.uniq_id == uniq_id then return x.copy end
69
+ next
70
+ end
71
+ if x.kind_of?(BlockStatement)
72
+ begin
73
+ return x.find_statement_that_created_variable(variable_id)
74
+ rescue StandardError
75
+ next
76
+ end
77
+ end
78
+ end
79
+ raise StandardError.new('Failed to find statement that created variable with uniq id '+uniq_id.to_s)
80
+ end
81
+
82
+ def method_name
83
+ return 'method_'+@method_id.to_s
84
+ end
85
+
86
+ # Writes out the runtime method for general use. If the parameters are supplied
87
+ # then they are used, otherwise the methods usage parameters are used.
88
+ #
89
+ # @param params
90
+ # @param tab
91
+ # @param additional_comments
92
+ #
93
+ def write(params=nil,tab=0,additional_comments=nil)
94
+
95
+ # Check that the paramters have been defined for the method before it can be written
96
+ # raise_if_parameters_missing
97
+ raise StandardError.new('Incorrect use of write ') if params.kind_of?(Fixnum)
98
+
99
+ line = "\n"
100
+ tab.times {|x| line += "\t" }
101
+ line += "#\n"
102
+
103
+ if params.nil?
104
+
105
+ @usage.each_with_index do |var,i|
106
+
107
+ tab.times {|x| line += "\t" }
108
+ line += "#\t@param\t"
109
+
110
+ # Get a description of the requirements (this can multiple lines)
111
+ line_prefix = ''
112
+ desc = var.describe(tab)
113
+ desc.each_line do |l|
114
+ line += line_prefix+l
115
+
116
+ # Assides the first line pre-fix a "# " to the start
117
+ (tab-1).times {|x| line += "\t" }
118
+ line_prefix = "#\t\t\t"
119
+
120
+ end
121
+
122
+ end
123
+
124
+ else
125
+
126
+ params.each_with_index do |var,i|
127
+ tab.times {|x| line += "\t" }
128
+ line += "#\t@param\t"
129
+
130
+ # Get a description of the requirements (this can multiple lines)
131
+ line_prefix = ''
132
+
133
+ desc = var.describe(tab)
134
+ desc.each_line do |l|
135
+ line += line_prefix+l
136
+
137
+ # Assides the first line pre-fix a "# " to the start
138
+ (tab-1).times {|x| line += "\t" }
139
+ line_prefix = "#\t\t\t"
140
+
141
+ end
142
+
143
+ end
144
+
145
+ end
146
+
147
+ # Add some some additional comment if supplied
148
+ unless additional_comments.nil?
149
+ tab.times {|x| line += "\t" }
150
+ line += "#"
151
+ tab.times {|x| line += "\t" }
152
+ line += additional_comments+"\n"
153
+ end
154
+
155
+ tab.times {|x| line += "\t" }
156
+ line += "#\n"
157
+
158
+ tab.times {|x| line += "\t"}
159
+ line += basic_write(tab)
160
+
161
+ end
162
+
163
+ def basic_write(tab=0)
164
+ line = ''
165
+ line += 'def '+method_name
166
+
167
+ #line += write_params(@parameters)
168
+ line += write_params(@usage)
169
+ line += "\n"
170
+
171
+ # Write out any statements within the method
172
+ self.each do |statement|
173
+ line += statement.write(tab+1)+"\n"
174
+ end
175
+ line += "\n" if self.empty?
176
+
177
+ # Close the method
178
+ tab.times {|x| line += "\t" }
179
+ line += "end"+"\n"
180
+
181
+ return line
182
+ end
183
+
184
+ # [DEBUG] Does the same as the write method but includes the uniq_id
185
+ #
186
+ # TODO This duplicates allot of the code in write
187
+ #
188
+ def write_with_uniq_id(params=nil,tab=0,additional_comments=nil)
189
+
190
+ # Check that the paramters have been defined for the method before it can be written
191
+ # raise_if_parameters_missing
192
+ raise StandardError.new('Incorrect use of write ') if params.kind_of?(Fixnum)
193
+
194
+ line = "\n"
195
+ tab.times {|x| line += "\t" }
196
+ line += "#\n"
197
+
198
+ if params.nil?
199
+
200
+ @usage.each_with_index do |var,i|
201
+
202
+ tab.times {|x| line += "\t" }
203
+ line += "#\t@param\t"
204
+
205
+ # Get a description of the requirements (this can multiple lines)
206
+ line_prefix = ''
207
+ desc = var.describe(tab)
208
+ desc.each_line do |l|
209
+ line += line_prefix+l
210
+
211
+ # Assides the first line pre-fix a "# " to the start
212
+ (tab-1).times {|x| line += "\t" }
213
+ line_prefix = "#\t\t\t"
214
+
215
+ end
216
+
217
+ end
218
+
219
+ else
220
+
221
+ params.each_with_index do |var,i|
222
+ tab.times {|x| line += "\t" }
223
+ line += "#\t@param\t"
224
+
225
+ # Get a description of the requirements (this can multiple lines)
226
+ line_prefix = ''
227
+
228
+ desc = var.describe(tab)
229
+ desc.each_line do |l|
230
+ line += line_prefix+l
231
+
232
+ # Assides the first line pre-fix a "# " to the start
233
+ (tab-1).times {|x| line += "\t" }
234
+ line_prefix = "#\t\t\t"
235
+
236
+ end
237
+
238
+ end
239
+
240
+ end
241
+
242
+ # Add some some additional comment if supplied
243
+ unless additional_comments.nil?
244
+ tab.times {|x| line += "\t" }
245
+ line += "#"
246
+ tab.times {|x| line += "\t" }
247
+ line += additional_comments+"\n"
248
+ end
249
+
250
+ tab.times {|x| line += "\t" }
251
+ line += "#\n"
252
+
253
+ tab.times {|x| line += "\t"}
254
+ line += 'def '+method_name
255
+
256
+ #line += write_params(@parameters)
257
+ line += write_params(@usage)
258
+ line += "\n"
259
+
260
+ # Write out any statements within the method
261
+ self.each do |statement|
262
+ line += statement.write_with_uniq_id(tab+1)+"\n"
263
+ end
264
+ line += "\n" if self.empty?
265
+
266
+ # Close the method
267
+ tab.times {|x| line += "\t" }
268
+ line += "end"+"\n"
269
+
270
+ return line
271
+
272
+ end
273
+
274
+ # Returns an array of variables currently available in the
275
+ # method. Essentially this is all the variables after the
276
+ # last statement. This is a little crude since it doesn't
277
+ # take into account if statements or loops.
278
+ #
279
+ def available_variables(params=[])
280
+
281
+ # raise StandardError.new('The parameters have not been set for this method') if @parameters.nil?
282
+ collected_variables = []
283
+ collected_variables += params
284
+ self.each do |statement|
285
+
286
+ # Nested statements don't provide any variables for the end of the method
287
+ next if statement.kind_of?(BlockStatement)
288
+ next if statement.kind_of?(OpenStatement)
289
+
290
+ statement.each_variable do |var|
291
+ unless collected_variables.any? {|known_var| known_var.variable_id == var.variable_id}
292
+ collected_variables.push(var.copy)
293
+ end
294
+ end
295
+ end
296
+ return collected_variables
297
+
298
+ end
299
+
300
+ end