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,11 @@
1
+ if:
2
+ if(var1.realise2(var2[var3][:params]).params[var3].value.length == var2[var3][:output])
3
+ return true
4
+ end
5
+
6
+ action:
7
+ <runtime_method>.add_statement_at(Statement.new(Return.new, var1.params[0]),var1.statement_id)
8
+ result:
9
+ if(var1.all_pass?(var2))
10
+ return true
11
+ end
Binary file
@@ -0,0 +1,19 @@
1
+
2
+ dependent_one = TheoryDependent.new(
3
+ StringToTheory.run(
4
+ "if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])\nreturn true\nend"
5
+ )
6
+ )
7
+ action_one = TheoryAction.new(
8
+ TheoryStatement.new(
9
+ StringToTheory.run(
10
+ 'Statement.new(Return.new,InstanceCallContainer.new(var1.params[var4],StringLength.new))'
11
+ )
12
+ ),
13
+ StringToTheory.run('var1.statement_id')
14
+ )
15
+ result_one = TheoryResult.new(
16
+ StringToTheory.run("if(var1.pass?(var2[var3]))\nreturn true\nend")
17
+ )
18
+ Theory.new([dependent_one],action_one,[result_one])
19
+
@@ -0,0 +1,11 @@
1
+ if:
2
+ if(var1.realise2(var2[var3][:params]).params[var4].value.length == var2[var3][:output])
3
+ return true
4
+ end
5
+
6
+ action:
7
+ <runtime_method>.add_statement_at(Statement.new(Return.new, InstanceCallContainer.new(var1.params[var4], StringLength.new)),var1.statement_id)
8
+ result:
9
+ if(var1.pass?(var2[var3]))
10
+ return true
11
+ end
Binary file
@@ -0,0 +1,21 @@
1
+
2
+ dependent_one = TheoryDependent.new(
3
+ StringToTheory.run(
4
+ "if((var1[var2][:params][var2] + var1[var2][:params][var3]) == var1[var2][:output])\nreturn true\nend"
5
+ )
6
+ )
7
+ action_one = TheoryAction.new(
8
+ TheoryStatement.new(
9
+ StringToTheory.run(
10
+ 'Statement.new(Unknown.new,Equal.new,var4.params[var2],Addition.new,var4.params[var3])'
11
+ )
12
+ ),
13
+ StringToTheory.run('var4.statement_id')
14
+ )
15
+ result_one = TheoryResult.new(
16
+ StringToTheory.run(
17
+ "if(var4.all_pass?(var1))\nreturn true\nend"
18
+ ),true
19
+ )
20
+ Theory.new([dependent_one],action_one,[result_one])
21
+
@@ -0,0 +1,11 @@
1
+ if:
2
+ if(var1[var2][:params][var2] + var1[var2][:params][var3] == var1[var2][:output])
3
+ return true
4
+ end
5
+
6
+ action:
7
+ <runtime_method>.add_statement_at(Statement.new(Unknown.new, Equal.new, var4.params[var2], Addition.new, var4.params[var3]),var4.statement_id)
8
+ result:
9
+ if(var4.all_pass?(var1))
10
+ return true
11
+ end
Binary file
@@ -0,0 +1,24 @@
1
+
2
+ dependent_one = TheoryDependent.new(StringToTheory.run("if(var2[var3].kind_of?(CTestCase))\nreturn true\nend"))
3
+ dependent_two = TheoryDependent.new(StringToTheory.run("if(var6.kind_of?(Fixnum))\nreturn true\nend"))
4
+ dependent_three = TheoryDependent.new(
5
+ StringToTheory.run("if((var2[var3][:params][var6] == var2[var4][:params][var6])==false)\nreturn true\nend")
6
+ )
7
+ action = TheoryAction.new(
8
+ TheoryStatement.new(StringToTheory.run(
9
+ 'IfStatement.new(var2[var3][:params][var6],Equivalent.new,var2[var3][:output])'
10
+ )),
11
+ StringToTheory.run('var1.statement_id')
12
+ )
13
+ result_one = TheoryResult.new(StringToTheory.run(
14
+ "if(var1.history(var2[var3][:params]).any? { |x| x.statement_id == var1.last.statement_id })\nreturn true\nend"
15
+ ))
16
+ result_two = TheoryResult.new(StringToTheory.run(
17
+ "if((var1.history(var2[var4][:params]).any? { |x| x.statement_id == var1.last.statement_id })==false)\nreturn true\nend"
18
+ ))
19
+ Theory.new(
20
+ [dependent_one,dependent_two,dependent_three],
21
+ action,
22
+ [result_one,result_two]
23
+ )
24
+
@@ -0,0 +1,20 @@
1
+ if:
2
+ if(var2[var3].kind_of?(CTestCase))
3
+ return true
4
+ end
5
+ if(var6.kind_of?(Fixnum))
6
+ return true
7
+ end
8
+ if((var2[var3][:params][var6] == var2[var4][:params][var6]) == false)
9
+ return true
10
+ end
11
+
12
+ action:
13
+ <runtime_method>.add_statement_at(IfStatement.new(var2[var3][:params][var6], Equivalent.new, var2[var3][:output]),var1.statement_id)
14
+ result:
15
+ if(var1.history(var2[var3][:params]).any?{ |x| x.statement_id == var1.last.statement_id} )
16
+ return true
17
+ end
18
+ if((var1.history(var2[var4][:params]).any?{ |x| x.statement_id == var1.last.statement_id} ) == false)
19
+ return true
20
+ end
Binary file
@@ -0,0 +1,11 @@
1
+
2
+ theory = Theory.load_theory(1)
3
+ potential_values = [
4
+ Parser.run('0'),
5
+ Parser.run('test_cases'),
6
+ Parser.run('runtime_method')
7
+ ]
8
+ results = theory.rewrite_permutations(potential_values)
9
+ # NOTE: Rember use grep -A and -B to match particular cases
10
+ results[5]
11
+
@@ -0,0 +1,9 @@
1
+ if:
2
+ if(runtime_method.realise2(test_cases[0][:params]).params[0].value.length == test_cases[0][:output].length)
3
+ end
4
+ action:
5
+ <runtime_method>.add_statement_at(Statement.new(Return.new, runtime_method.params[0]),0)
6
+ result:
7
+ if(runtime_method.all_pass?(test_cases))
8
+ end
9
+ returns true
@@ -0,0 +1,9 @@
1
+ if:
2
+ if(test_cases[0][:params][0] + test_cases[0][:params][1] == test_cases[0][:output])
3
+ end
4
+ action:
5
+ <runtime_method>.add_statement_at(Statement.new(Unknown.new, Equal.new, runtime_method.params[0], Addition.new, runtime_method.params[1]),0)
6
+ result:
7
+ if(runtime_method.all_pass?(test_cases))
8
+ end
9
+ returns true
@@ -0,0 +1,9 @@
1
+ if:
2
+ if(runtime_method.realise2(test_cases[0][:params]).params[0].value.length == test_cases[0][:output])
3
+ end
4
+ action:
5
+ <runtime_method>.add_statement_at(Statement.new(Return.new, test_cases[0][:output]),0)
6
+ result:
7
+ if(runtime_method.pass?(test_cases[0]))
8
+ end
9
+ returns true
@@ -0,0 +1,6 @@
1
+
2
+ #
3
+ #
4
+ def method_0
5
+
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ #
3
+ #
4
+ def method_0
5
+ var_0 = 8
6
+ end
@@ -0,0 +1,8 @@
1
+
2
+ #
3
+ # @param var_0 = 8
4
+ #
5
+ def method_0(var_0)
6
+ var_4 = var_0
7
+ return var_4
8
+ end
@@ -0,0 +1,7 @@
1
+ #
2
+ # @param var_0 = 'test'
3
+ #
4
+ def method_0(var_0)
5
+ var_4 = var_0
6
+ return var_4
7
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # @param var_0 = 'tests'
3
+ #
4
+ def method_0(var_0)
5
+ var_5 = var_0.chop
6
+ var_4 = var_5
7
+ return var_4
8
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # @param var_0 = 'tests'
3
+ #
4
+ def method_0(var_0)
5
+ var_7 = var_0.length
6
+ var_4 = var_7
7
+ return var_4
8
+ end
@@ -0,0 +1,8 @@
1
+ #
2
+ # @param var_0 = 'tested'
3
+ #
4
+ def method_0(var_0)
5
+ var_5 = var_0.chop
6
+ var_4 = var_5
7
+ return var_4
8
+ end
@@ -0,0 +1,9 @@
1
+ #
2
+ # @param var_0 = 'tested'
3
+ #
4
+ def method_0(var_0)
5
+ var_31 = var_0.chop
6
+ var_35 = var_31.chop
7
+ var_34 = var_35
8
+ return var_34
9
+ end
@@ -0,0 +1,9 @@
1
+ #
2
+ # @param var_0 = 'tested'
3
+ # @param var_1 = 'warren'
4
+ #
5
+ def method_0(var_0, var_1)
6
+ var_7 = var_0.chop
7
+ var_6 = var_7
8
+ return var_6
9
+ end
@@ -0,0 +1,9 @@
1
+ #
2
+ # @param var_0 = 6
3
+ # @param var_1 = 4
4
+ #
5
+ def method_0(var_0, var_1)
6
+ var_11 = var_0 - var_1
7
+ var_6 = var_11
8
+ return var_6
9
+ end
@@ -0,0 +1,87 @@
1
+ # This meant to test that the variables requirements change to reflect
2
+ # the context they are accessed.
3
+ #
4
+
5
+ require 'required'
6
+ require 'test/unit'
7
+
8
+ class TestContextualVariable < Test::Unit::TestCase
9
+
10
+ def setup
11
+
12
+ end
13
+
14
+ def teardown
15
+ System.reset
16
+ RuntimeMethod.reset_global_id
17
+ end
18
+
19
+ # This test checks that variables taken on the appropriate requirements
20
+ # based on their position within a statement and then method.
21
+ #
22
+ # def method_1(param_1)
23
+ # var1 = param1.chop
24
+ # var2 = var1.length
25
+ # end
26
+ #
27
+ # where param_1 = 'test'
28
+ #
29
+ def test_method_describtion
30
+
31
+ # Create the var1 - this should haven't any requirements individually
32
+ var1 = Unknown.new()
33
+ assert_equal(0,var1.length)
34
+
35
+ # Create the first statement with var1 in it e.g. var2 = var1.chop
36
+ chop_call = InstanceCallContainer.new(Unknown.new,Chop.new)
37
+ first_statement = DeclarationStatement.new(var1,Equal.new,chop_call)
38
+
39
+ # Check that the variables inside the first statement don't have any requirements
40
+ assert_equal(0,first_statement[0].length)
41
+ assert_equal(0,first_statement[2].subject.length)
42
+
43
+ # Check that the instance call includes a requirement
44
+ assert_equal(1,chop_call.find_variable(chop_call.variable_id).length)
45
+
46
+ # Check that they have the correct requirements in the context of the statement
47
+ # TODO I think the whole Unknown class is redundent
48
+ assert_equal(2,first_statement.find_variable(chop_call.subject.variable_id).length)
49
+
50
+ # Confirm the length of the variable hasn't changed
51
+ assert_equal(0,var1.length)
52
+
53
+ # Create the second scope variable
54
+ var2 = Unknown.new()
55
+ assert_equal(0,var2.length)
56
+ assert_not_equal(var1.variable_id,var2.variable_id)
57
+
58
+ end
59
+
60
+ # This test checks the the declared variable in the following statement
61
+ #
62
+ # varA = varB-varC
63
+ #
64
+ # has the contextual requirement
65
+ #
66
+ # self = varB-varC
67
+ #
68
+ def test_declared_variables_in_statement_with_multiple_variables
69
+
70
+ # Create the statement
71
+ declared_variable = Unknown.new
72
+ varB = Unknown.new
73
+ varC = Unknown.new
74
+ statement = Statement.new(declared_variable,Equal.new,varB,Subtract.new,varC)
75
+
76
+ # Check the number of elmements in the statement
77
+ assert_equal(5,statement.length)
78
+
79
+ # Retrieve the contextual declared variable
80
+ contextual_variable = statement.contextual_variable(declared_variable.variable_id)
81
+
82
+ # Confirm a variable was returned
83
+ assert(contextual_variable.kind_of?(Variable))
84
+
85
+ end
86
+
87
+ end
@@ -0,0 +1,47 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestDescribe < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ end
9
+
10
+ def teardown
11
+ System.reset
12
+ RuntimeMethod.reset_global_id
13
+ end
14
+
15
+ # There was a bug occuring requirements were added to a variable via
16
+ # the describe call. This shouldn't be the case.
17
+ #
18
+ def test_nothing_is_added
19
+
20
+ # Create the method variable for the method (self = 'test')
21
+ requirement = Requirement.new(This.new,Equal.new,Literal.new('test'))
22
+ method_variable = MethodParameter.new(requirement)
23
+
24
+ # # Create runtime method with one parameter ('test')
25
+ # runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
26
+ # #runtime_method.parameters = [method_variable]
27
+ #
28
+ # # Start by considering the statement varA = varB.chop
29
+ # varB = Unknown.new
30
+ # varC = Unknown.new
31
+ # consider_statement = DeclarationStatement.new(varC,Equal.new,InstanceCallContainer.new(varB,Chop.new))
32
+ # #populated_method = runtime_method.consider(consider_statement).shift
33
+ #
34
+ # # There should be two variables, one the method variable - what was varB, and the newly declared variable
35
+ # assert(populated_method.available_variables[0].kind_of?(MethodParameter))
36
+ # assert(populated_method.available_variables[1].kind_of?(Variable))
37
+ #
38
+ # # The declared variable shouldn't have any actual requirements - I think
39
+ # assert(populated_method.available_variables[1].empty?)
40
+ #
41
+ # # Describe the variable and confirm that the variable still doesn't have any requirements
42
+ # populated_method.available_variables[1].describe(populated_method)
43
+ # assert(populated_method.available_variables[1].empty?)
44
+
45
+ end
46
+
47
+ end
data/test/tc_method.rb ADDED
@@ -0,0 +1,133 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestMethod < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ # Creates the statement to be inlcuded in the method
9
+ @declaration_statement = DeclarationStatement.new(Unknown.new,Equal.new,Literal.new(8))
10
+
11
+ # Create the usage for the simple method (it doesn't take any parameters
12
+ @simple_method_usage = MethodUsage.new()
13
+
14
+ # Create the simple runtime method
15
+ @simple_method = RuntimeMethod.new(@simple_method_usage)
16
+
17
+ # Create the usage for a method with two paramters
18
+ param_1 = MethodParameter.new
19
+ @parameter_method_usage = MethodUsage.new(param_1)
20
+
21
+ # Create the method with paramaters
22
+ @method_with_paramaters = RuntimeMethod.new(@parameter_method_usage)
23
+
24
+ # Setting the method paramaters
25
+ #@method_with_paramaters.parameters = [MethodParameter.new(Requirement.new(This.new,Equal.new,Literal.new('test')))]
26
+
27
+ end
28
+
29
+ def teardown
30
+ System.reset
31
+ RuntimeMethod.reset_global_id
32
+ end
33
+
34
+ def test_simple_statement_inclusion
35
+
36
+ # Test statement is valid
37
+ assert_equal(true,@declaration_statement.valid_syntax?)
38
+
39
+ # Test the method is empty
40
+ assert_equal(0,@simple_method.length)
41
+
42
+ # Test the output of the written method
43
+ file_dump = ""
44
+ f = File.open($LOC+File.join(['test','output','simple_method.txt']),'r')
45
+ f.each_line do |l|
46
+ file_dump << l
47
+ end
48
+ f.close()
49
+
50
+ assert_equal(file_dump,@simple_method.write)
51
+
52
+ # Add the statement to the method
53
+ # assert_nothing_raised() {@simple_method.consider @declaration_statement}
54
+
55
+ # Retrieve the possible methods that could use the @declaration_statement
56
+ # possible_methods = @simple_method.consider @declaration_statement
57
+
58
+ # Confirm that there is only one possible method
59
+ # assert_equal(1,possible_methods.length)
60
+
61
+ # Confirm that a runtime method was returned
62
+ # assert_equal(true,possible_methods.first.kind_of?(RuntimeMethod),'Error: Expected RuntimeMethod class')
63
+
64
+ # new_file_dump = ""
65
+ # f = File.open($LOC+File.join(['test','output','test_method','first_possible_method.txt']),'r')
66
+ # f.each_line do |l|
67
+ # new_file_dump << l
68
+ # end
69
+ # f.close()
70
+ # assert_equal(new_file_dump,possible_methods.first.write)
71
+
72
+ end
73
+
74
+ def test_method_copy
75
+
76
+ # Create the usage for a method with a parameter
77
+ param_1 = MethodParameter.new()
78
+ parameter_method_usage = MethodUsage.new(param_1)
79
+
80
+ # Create the method
81
+ original_method = RuntimeMethod.new(parameter_method_usage)
82
+
83
+ # Add parameters to the method
84
+ param_values = MethodParameter.new(Requirement.new(This.new,Equal.new,Literal.new('test')))
85
+ #original_method.parameters = [param_values]
86
+
87
+ # Check the number of paramaters
88
+ #assert_equal(1,original_method.parameters.length)
89
+
90
+ # Copy the method
91
+ assert_nothing_raised(){copied_method = original_method.copy}
92
+ copied_method = original_method.copy
93
+
94
+ # Confirm class of copied method
95
+ assert_equal(true,copied_method.class==RuntimeMethod)
96
+
97
+ # Check that the correct number of parameters were copied
98
+ #assert_equal(original_method.parameters.length,copied_method.parameters.length)
99
+
100
+ end
101
+
102
+ def test_statement_inclusion_with_not_declared_variables
103
+
104
+ # Test the method is empty
105
+ assert_equal(0,@method_with_paramaters.length)
106
+
107
+ # Create the statement with unknown variables in them
108
+ chop_statement = DeclarationStatement.new(Unknown.new,Equal.new,InstanceCallContainer.new(Unknown.new,Chop.new))
109
+ assert_equal(false,chop_statement.valid_syntax?)
110
+
111
+ # Test the number of paramaters
112
+ #assert_equal(1,@method_with_paramaters.parameters.length)
113
+
114
+ # Check the paramters description
115
+ #assert_equal("var_4\t\t= 'test'\n",@method_with_paramaters.parameters.first.describe)
116
+
117
+ # Retrieve the two possible methods
118
+ #possible_methods = @method_with_paramaters.consider chop_statement
119
+
120
+ # # Confirm that an array of results was returned
121
+ # assert_equal(true,possible_methods.class == Array)
122
+ #
123
+ # # Confirm the total number of results
124
+ # assert_equal(1,possible_methods.length)
125
+ #
126
+ # # Check the data type of all the returned methods
127
+ # possible_methods.each do |m|
128
+ # assert_equal(true,m.class == RuntimeMethod)
129
+ # end
130
+
131
+ end
132
+
133
+ end