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,29 @@
1
+ # NOTE FROM VARIABLE REFERENCE
2
+ # I'm not sure if this is the way to go, but I need some way
3
+ # to handle the case where variables reference variables.
4
+ #
5
+ # For example:
6
+ #
7
+ # #
8
+ # #
9
+ # def method_8
10
+ # var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
11
+ # var_570 = var_12.declared_variable
12
+ # end
13
+ #
14
+ # In this case it is difficult to realise var_570 since it references an
15
+ # unrealised variable. I should maybe have created an Unknown class, but
16
+ # it is still an Unknown.
17
+ #
18
+ class UnknownVariable < TypeVariable
19
+
20
+ def initialize(val,id=nil)
21
+ super(val,id)
22
+ end
23
+
24
+ #
25
+ def destructive_instance_calls(available=[])
26
+ return []
27
+ end
28
+
29
+ end
@@ -0,0 +1,70 @@
1
+ # This class represents any variable object used to help generate
2
+ # a method.
3
+ #
4
+
5
+ module Variable
6
+
7
+ include VariableIncluded
8
+
9
+ @@variable_id = 0
10
+
11
+ # The unique id is used to identify actually different variables. This essentially occurs
12
+ # when a destructive method call is used. For example an two array variables might have the
13
+ # same variable_id say '2' so would both be written as 'var_2' but one of them might have had
14
+ # another element pushed into it e.g. 'var_2.push(6)'. The changed variable would then
15
+ # receive a different uniq_id.
16
+ @@uniq_id = 0
17
+
18
+ #CONST_TEST = 'test'
19
+ # 331 Constants are in capitals and accesses Variable::CONST_TEST class variables use @@
20
+
21
+ # Create the declaration for a unique variable id. The unique_variable_id reflects the different
22
+ # values a variable might have. For example if a variable is overwritten it will have the same
23
+ # name as it's predisessor but not the same value.
24
+ attr_reader :uniq_id, :scope_id
25
+ attr_writer :scope_id
26
+
27
+ def self.reset_global_id
28
+ #http://www.zenspider.com/Languages/Ruby/QuickRef.html
29
+ unless $".include?('test/unit.rb')
30
+ StandardLogger.log 'WARNING: Resetting variable id, this should only be done for tests'
31
+ end
32
+ @@variable_id = 0
33
+ @@uniq_id = 0
34
+ end
35
+
36
+ def self.variable_id
37
+ return @@variable_id
38
+ end
39
+
40
+ # TODO This is not a permenant method it is a temporary fix
41
+ # as I migrate away from requirements.
42
+ #
43
+ def meets_requirements? of
44
+ return true if of.literalise.value == self.value
45
+ return false
46
+ end
47
+
48
+ # Change the value of the variables uniq_id
49
+ #
50
+ # @param The new value for the variables uniq_id
51
+ #
52
+ def uniq_id=(value)
53
+ @uniq_id = value
54
+ raise StandardError.new('Should be fixnum') unless value.kind_of?(Fixnum)
55
+ end
56
+
57
+ # Updates the uniq_id for this variable so it can be regarded
58
+ # differently. Uniq_ids are used in the CodeHandler to allow
59
+ # the inclusion of the correct statements to recreate a variable.
60
+ #
61
+ def increament_uniq_id!
62
+ @uniq_id = @@uniq_id
63
+ @@uniq_id += 1
64
+ end
65
+
66
+ def to_var(id=nil)
67
+ raise StandardError.new(self.class.to_s+' is already a Variable - should not call to_var')
68
+ end
69
+
70
+ end
@@ -0,0 +1,28 @@
1
+ class VariableContainer < BaseVariable
2
+
3
+ attr_writer :realised
4
+
5
+ def initialize
6
+ super()
7
+
8
+ @realised = false
9
+ end
10
+
11
+ # Returns a duplicate of this variable container.
12
+ #
13
+ def copy
14
+ result = VariableContainer.new(){{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
15
+ result.instance_variable = @instance_variable
16
+ self.each do |x|
17
+ result.push(x)
18
+ end
19
+ result.realised = @realised
20
+ return result
21
+ end
22
+
23
+ # TODO Write description - hack for instance calls
24
+ def variable
25
+ return self
26
+ end
27
+
28
+ end
@@ -0,0 +1,27 @@
1
+ # Classes that include this module are presumeed to include a variable,
2
+ # this is is used in the following classes.
3
+ #
4
+ # Variable
5
+ # InstanceCallContainer
6
+ # ArrayAccess
7
+ #
8
+ module VariableIncluded
9
+
10
+ # Should have the following methods
11
+ # variable
12
+
13
+ # Returns the variable. This call also exists in the InstanceCallContainer class. It is
14
+ # included to allow access of the variable with the need to disgiush whether it
15
+ # is variable or an instance call.
16
+ #
17
+ def variable
18
+ return self
19
+ end
20
+
21
+ # Returns the actual variable with the specified id.
22
+ #
23
+ def find_actual_variable(id)
24
+ raise StandardError.new('Method needs defined in class')
25
+ end
26
+
27
+ end
@@ -0,0 +1,85 @@
1
+ # I'm not sure if this is the way to go, but I need some way
2
+ # to handle the case where variables reference variables.
3
+ #
4
+ # For example:
5
+ #
6
+ # #
7
+ # #
8
+ # def method_8
9
+ # var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
10
+ # var_570 = var_12.declared_variable
11
+ # end
12
+ #
13
+ # In this case it is difficult to realise var_570 since it references an
14
+ # unrealised variable. I should maybe have created an Unknown class, but
15
+ # it is still an Unknown.
16
+ #
17
+ class VariableReference
18
+ include Variable
19
+
20
+ attr_reader :variable_id
21
+
22
+ #
23
+ # @param referenced_variable_id
24
+ #
25
+ def initialize(var_id,referenced_variable_id)
26
+ @variable_id = var_id
27
+ @referenced_variable_id = referenced_variable_id
28
+ raise StandardError.new('I am getting rid of this')
29
+ end
30
+
31
+ def copy
32
+ return VariableReference.new(@variable_id,@referenced_variable_id)
33
+ end
34
+
35
+ # Returns the variable if the ids matched
36
+ #
37
+ # @param id The id of the variable that is being looked for
38
+ #
39
+ def find_actual_variable(id)
40
+ return self if @variable_id == id
41
+ throw :variable_not_found
42
+ end
43
+
44
+ #
45
+ #
46
+ #
47
+ def write()
48
+ if (@instance_variable)
49
+ return '@var_'+variable_id.to_s
50
+ end
51
+ return 'var_'+variable_id.to_s
52
+ end
53
+
54
+ def to_literal_string
55
+ return 'var'
56
+ end
57
+
58
+ def realised?
59
+ return false
60
+ end
61
+
62
+ # TODO Write tests for this
63
+ # Returns an array of desctructive instance calls given the available
64
+ # variables.
65
+ #
66
+ # @param available An array of other variables that can be used as
67
+ # parameters.
68
+ #
69
+ def destructive_instance_calls(available=[])
70
+
71
+ # Find the variable it references
72
+ available_variables = available.select {|x| x.kind_of?(Variable)}
73
+
74
+ not_found = lambda{raise StandardError.new('Unable to find variable with id '+@referenced_variable_id.to_s)}
75
+ referenced_variable = available_variables.detect(not_found) {|x| x.variable_id == @referenced_variable_id}
76
+
77
+ # Duplicate the referenced variable and update it's variable id
78
+ duplicated_var = referenced_variable.copy
79
+ duplicated_var.variable_id = @variable_id
80
+
81
+ return duplicated_var.destructive_instance_calls(available)
82
+
83
+ end
84
+
85
+ end
@@ -0,0 +1,7 @@
1
+ class FailedToFindStatementContainerError < StandardError
2
+
3
+ def initialize(msg='')
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class FailedToFindStatementError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class FailedToFindVariableError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class FailedToLiteraliseError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class FailedVariableMatch < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class ImproperStatementUsageError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class IncompatiableRequirementsError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class InvalidStatementError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class MethodSizeError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class RuntimeSyntaxError < StandardError
2
+
3
+ def initialize(msg='')
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class UnexpectedStatementTypeError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class UnknownStatementType < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ class UnliteralisableError < StandardError
2
+
3
+ def initialize(msg)
4
+ super(msg)
5
+ end
6
+
7
+ end
@@ -0,0 +1,34 @@
1
+ # This represents a chain that doesn't contain any theory variables. All the variables
2
+ # have been replaced with intrinsic/real values.
3
+ #
4
+ class ImplementedChain
5
+
6
+ #
7
+ #
8
+ #
9
+ def initialize(nodes)
10
+ @nodes = nodes
11
+ end
12
+
13
+ def each(&block)
14
+ @nodes.each(&block)
15
+ end
16
+
17
+ # TODO Note sure how I feel about this direct access
18
+ def [](index)
19
+ return @nodes[index]
20
+ end
21
+
22
+ def length
23
+ return @nodes.length
24
+ end
25
+
26
+ def describe(tab=0)
27
+ return @nodes.inject('') {|total,x| total += x.describe}
28
+ end
29
+
30
+ def write(tab=0)
31
+ return @nodes.inject('') {|total,x| total += x.write}
32
+ end
33
+
34
+ end
@@ -0,0 +1,20 @@
1
+ # This represents any reference to main runtime method instance
2
+ # within theories.
3
+ #
4
+ class IntrinsicLastRuntimeMethod < IntrinsicObject
5
+ include Token
6
+
7
+ def initialize(intrinsic_object_id=nil)
8
+ @intrinsic_object_id = intrinsic_object_id
9
+ super()
10
+ end
11
+
12
+ def write
13
+ return 'last_runtime_method'
14
+ end
15
+
16
+ def describe
17
+ return '<last_runtime_method>'
18
+ end
19
+
20
+ end
@@ -0,0 +1,26 @@
1
+ class IntrinsicLiteral < IntrinsicObject
2
+ include Token
3
+
4
+ def initialize(value,intrinsic_object_id=nil)
5
+ @intrinsic_object_id = intrinsic_object_id
6
+ super()
7
+ @value = value
8
+ end
9
+
10
+ def write
11
+ @value.write
12
+ end
13
+
14
+ def describe
15
+ @value.describe
16
+ end
17
+
18
+ def copy
19
+ return IntrinsicLiteral.new(@value,@intrinsic_object_id)
20
+ end
21
+
22
+ def literal
23
+ return @value
24
+ end
25
+
26
+ end