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,20 @@
1
+ # Returns statements that return values
2
+ #
3
+ # Example:
4
+ # return 7
5
+ # return var
6
+ #
7
+ class ReturnStructure < StatementStructure
8
+
9
+ def initialize()
10
+ super()
11
+ end
12
+
13
+ def statements(available=[])
14
+
15
+ # Create return statements using the passed variables
16
+ return available.collect {|x| Statement.new(Return.new,x.copy)}
17
+
18
+ end
19
+
20
+ end
@@ -0,0 +1,11 @@
1
+ class StatementStructure < Array
2
+
3
+ DECLARATION_STATEMENT = 'declaration_statement'
4
+ MODIFYING_STATEMENT = 'modifying_statement'
5
+ RETURN_STATEMENT = 'return_statement'
6
+ USAGE_STATEMENT = 'usage_statement'
7
+ MISC_STATEMENT = 'misc_statement'
8
+ BLANK_STATEMENT = 'blank_statement'
9
+ IF_STATEMENT = 'if_statement'
10
+
11
+ end
@@ -0,0 +1,25 @@
1
+ # TODO Move to InstanceCall
2
+
3
+ class Addition < InstanceCall
4
+
5
+ def initialize
6
+
7
+ end
8
+
9
+ def copy
10
+ return self.class.new
11
+ end
12
+
13
+ def write
14
+ return ' +'
15
+ end
16
+
17
+ def to_literal_string
18
+ return write
19
+ end
20
+
21
+ def closure
22
+ return [' ','']
23
+ end
24
+
25
+ end
@@ -0,0 +1,130 @@
1
+ class BlockContainer < Array
2
+
3
+ def initialize(*parameters)
4
+ super()
5
+
6
+ parameters.each { |x| self.push(x) }
7
+ end
8
+
9
+ def write
10
+ l = '|'
11
+ self.each do |x|
12
+ l += x.write
13
+ l += ', ' unless x.object_id == self.last.object_id
14
+ end
15
+ l += '|'
16
+ return l
17
+ end
18
+
19
+ def describe
20
+ l = '|'
21
+ self.each do |x|
22
+ l += x.describe
23
+ l += ', ' unless x.object_id == self.last.object_id
24
+ end
25
+ l += '|'
26
+ return l
27
+ end
28
+
29
+ def write_with_uniq_id
30
+ l = '|'
31
+ self.each do |x|
32
+ (x.respond_to?('write_with_uniq_id')) ? l += x.write_with_uniq_id : l += x.write
33
+ l += ', ' unless x.object_id == self.last.object_id
34
+ end
35
+ l += '|'
36
+ return l
37
+ end
38
+
39
+ # Returns the block variables but with their values next to them. This
40
+ # presumes that the block container has been realised.
41
+ #
42
+ def write_with_value
43
+ l = '|'
44
+ self.each do |x|
45
+ l += x.write_with_value
46
+ l += ', ' unless x.object_id == self.last.object_id
47
+ end
48
+ l += '|'
49
+ return l
50
+ end
51
+
52
+ # TODO Write tests for this
53
+ def copy
54
+ return BlockContainer.new(*self.collect {|x| x.copy})
55
+ end
56
+
57
+ # Returns true if all the block variables returned true.
58
+ def realised?
59
+
60
+ # Go through each of the block variables and determine if they're realised
61
+ return false if self.any? {|x| x.realised? == false }
62
+ return true
63
+
64
+ end
65
+
66
+ # Returns a block container where all the block variables
67
+ # have been realised.
68
+ #
69
+ # I had previously intended to just work out the values for the block
70
+ # but this would create problems when I have blocks within blocks.
71
+ #
72
+ # NOTE I have copied code here from the history call in RuntimeMethod
73
+ #
74
+ def realise(statement,containing_method)
75
+
76
+ # Create the method to track the change in values of the block variable
77
+ # TODO I shouldn't need to redeclare this runtime method each time
78
+ #tracking_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
79
+ # Create the method that block values are logged to
80
+ instance_tracking_variable = ArrayVariable.new
81
+ instance_tracking_variable.instance_variable = true
82
+ tracking_method = RuntimeTrackingMethod.new(instance_tracking_variable)
83
+
84
+ raise StandardError.new('This should not be used')
85
+ # Create a method to call the method and return the results
86
+ #process_method = RuntimeMethod.new(MethodUsage.new)
87
+ #process_method << Statement.new( DefCall.new(NilVariable.new) )
88
+ #process_method << Statement.new( Return.new,instance_tracking_variable )
89
+
90
+ # CONTINUE Look up the tracking method
91
+ #exit
92
+ end
93
+
94
+ # Returns an updated block container where all the values for the block
95
+ # have been realised through the method map.
96
+ #
97
+ # @param method_map The history of the method that the block container
98
+ # is used in.
99
+ #
100
+ def realise2(method_map)
101
+ return self.copy if realised?
102
+ result = BlockContainer.new
103
+ self.each do |x|
104
+ result.push(x.realise(method_map))
105
+ end
106
+ return result
107
+ end
108
+
109
+ # Returns an array of all the unrealised variables within the
110
+ # block container.
111
+ #
112
+ def unrealised_variables
113
+ return variables.find_all {|x| x.realised? == false}
114
+ end
115
+
116
+ # Returns an array of all the variables within this block container.
117
+ #
118
+ def variables
119
+ return self.collect {|x| x.copy}
120
+ end
121
+
122
+ # Returns each variable used within the block in turn.
123
+ #
124
+ def each_variable
125
+ variables.each do |x|
126
+ yield x
127
+ end
128
+ end
129
+
130
+ end
@@ -0,0 +1,15 @@
1
+ class Boolean
2
+
3
+ def initialize
4
+
5
+ end
6
+
7
+ def copy
8
+ return self.class.new
9
+ end
10
+
11
+ def describe
12
+ write
13
+ end
14
+
15
+ end
@@ -0,0 +1,11 @@
1
+ module Code
2
+
3
+ def initialize
4
+
5
+ end
6
+
7
+ def write(method_context=nil)
8
+ raise StandardError.new('write method needs defined for '+self.class.to_s)
9
+ end
10
+
11
+ end
@@ -0,0 +1,20 @@
1
+ class Do
2
+ include Code
3
+
4
+ def initialize
5
+ super
6
+ end
7
+
8
+ def write(method_context=nil)
9
+ return 'do'
10
+ end
11
+
12
+ def copy
13
+ return Do.new
14
+ end
15
+
16
+ def creation
17
+ return 'Do.new'
18
+ end
19
+
20
+ end
@@ -0,0 +1,12 @@
1
+ class False < Boolean
2
+
3
+ def initialize
4
+ super
5
+ end
6
+
7
+ def write(context=nil)
8
+ return 'false'
9
+ end
10
+
11
+
12
+ end
@@ -0,0 +1,28 @@
1
+ class If
2
+ include Code
3
+
4
+ def initialize
5
+ super
6
+ end
7
+
8
+ def write(tab=0)
9
+ return ("\t"*tab)+'if'
10
+ end
11
+
12
+ def copy
13
+ return If.new
14
+ end
15
+
16
+ def creation
17
+ return 'If.new'
18
+ end
19
+
20
+ end
21
+
22
+ # TODO I need to go over my "if statement" construction
23
+
24
+ # t = OpenStatement.new(
25
+ # Statement.new(
26
+ # If.new,test_cases[0][:params][0], Equivalent.new, test_cases[0][:output]
27
+ # )
28
+ # )
@@ -0,0 +1,100 @@
1
+ # TODO I'm not sure whether to keep the IfContainer class or just drop it
2
+ # and use Statement.new(If.new,Liter.new(9) etc..)
3
+ # if I don't change it IfContainer should probably become a type of Statement
4
+
5
+ class IfContainer < Statement
6
+
7
+ def initialize(*parameters)
8
+ # TODO It would be better to use super here
9
+ #super(*parameters)
10
+ # TODO i think this is just passed a statement - so it only ever has one parameter - I prefer it that way
11
+ #parameters.each { |x| self.push(x) }
12
+ parameters.each do |code|
13
+ self.push(code.copy)
14
+ end
15
+
16
+ # TODO I might change the statement_id to be determined by the structure
17
+ # of the statement.
18
+ @statement_id = @@statement_id
19
+ @@statement_id += 1
20
+
21
+ end
22
+
23
+ # Retunrs the contents of the if_container instance as string contained
24
+ # within paraenthesis e.g.
25
+ #
26
+ # if(var_a == var_b)
27
+ #
28
+ def write(indent=0)
29
+ line = If.new.write(indent)
30
+ line += '('
31
+ self.each do |x|
32
+ line += x.write
33
+ line += ' ' unless x.object_id == last.object_id
34
+ end
35
+ line += ')'
36
+ return line
37
+ end
38
+
39
+ def describe(indent=0)
40
+ line = If.new.write(indent)
41
+ line += '('
42
+ self.each do |x|
43
+ line += x.describe
44
+ line += ' ' unless x.object_id == last.object_id
45
+ end
46
+ line += ')'
47
+ return line
48
+ end
49
+
50
+ def replace_theory_variables!(mapping)
51
+ self.each_with_index do |x,i|
52
+ if x.kind_of?(TheoryVariable) && mapping.has_key?(x.theory_variable_id)
53
+ self[i] = mapping[x.theory_variable_id].copy
54
+ next
55
+ end
56
+ self[i].replace_theory_variables!(mapping)
57
+ end
58
+ end
59
+
60
+ # TODO Doesn't need to be here(duplicated results)
61
+ def select_all(results=[],&block)
62
+ results.push self if block.call(self)
63
+ self.each do |x|
64
+ if block.call(x)
65
+ results.push(x)
66
+ else
67
+ end
68
+ if x.respond_to?(:select_all)
69
+ x.select_all(results,&block)
70
+ end
71
+ end
72
+ return results
73
+ end
74
+
75
+ # Returns a duplicate of this IfContainer instance
76
+ #
77
+ def copy
78
+ a = IfContainer.new(*self.collect {|x| x.copy})
79
+ a.statement_id = @statement_id
80
+ return a
81
+ end
82
+
83
+ # TODO Write tests for this
84
+ # Returns a string containing the syntax for the container but where
85
+ # all the values are literals e.g.
86
+ #
87
+ # if(var_a == var_b) whould become "if(6 == 7)"
88
+ #
89
+ def to_literal_string
90
+ line = If.new.write
91
+ line += '('
92
+ self.each do |x|
93
+ line += x.to_literal_string
94
+ line += ' ' unless x.object_id == last.object_id
95
+ end
96
+ line += ')'
97
+ return line
98
+ end
99
+
100
+ end
@@ -0,0 +1,15 @@
1
+ class Nil
2
+
3
+ def initialize
4
+ end
5
+
6
+ def copy
7
+ return self.class.new
8
+ end
9
+
10
+ def write
11
+ return 'nil'
12
+ end
13
+
14
+
15
+ end
@@ -0,0 +1,33 @@
1
+
2
+ class Return
3
+ include Code
4
+
5
+ def initialize
6
+ super
7
+ end
8
+
9
+ def write(method_context=nil)
10
+ return 'return'
11
+ end
12
+
13
+ def describe
14
+ return write
15
+ end
16
+
17
+ def copy
18
+ return Return.new
19
+ end
20
+
21
+ def creation
22
+ return 'Return.new'
23
+ end
24
+
25
+ def to_declaration
26
+ return VariableDeclaration.new(self.class.to_s)
27
+ end
28
+
29
+ def to_literal_string
30
+ return write
31
+ end
32
+
33
+ end
@@ -0,0 +1,19 @@
1
+ class Subtract < InstanceCall
2
+
3
+ def initialize
4
+
5
+ end
6
+
7
+ def copy
8
+ return self.class.new
9
+ end
10
+
11
+ def write
12
+ return ' -'
13
+ end
14
+
15
+ def closure
16
+ return [' ','']
17
+ end
18
+
19
+ end