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,42 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestTheoryGenerator < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ test_case_1 = CTestCase.new
9
+ test_case_1[:params] = ['something']
10
+ test_case_1[:output] = 'exists'
11
+ test_case_2 = CTestCase.new
12
+ test_case_2[:params] = ['my willpower']
13
+ test_case_2[:output] = 'does not exist'
14
+ @set_1_test_cases = [
15
+ test_case_1,test_case_2
16
+ ]
17
+ @runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
18
+
19
+ end
20
+
21
+ def teardown
22
+ System.reset
23
+ RuntimeMethod.reset_global_id
24
+ end
25
+
26
+ # Checks that the first statement "if(var == 'my willpower')" can be generated
27
+ #
28
+ # test time: 37mins
29
+ #
30
+ def test_generate_theories_with_case_1_statement_1
31
+
32
+ accessors, mapping = TheoryGenerator.new.generate_accessors_and_mapping(@set_1_test_cases,@runtime_method,3)
33
+ theories = TheoryGenerator.new.generate_theories(@set_1_test_cases,@runtime_method,accessors,mapping)
34
+ assert_equal(
35
+ true,
36
+ theories.any? do |x|
37
+ x.write == '<runtime_method>.add_statement_at(OpenStatement.new(IfContainer.new(var1.params[var5], Equivalent.new, var2[var3][:params][var5])),var1.statement_id)'
38
+ end
39
+ )
40
+ end
41
+
42
+ end
@@ -0,0 +1,102 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestHistory < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ # Create the initial runtime method instance for testing
9
+ @simple_runtime_method = RuntimeMethod.new(MethodUsage.new,nil.to_var)
10
+
11
+ # Create a method that is passed a string
12
+ @grim_fandango_method_var = MethodParameter.new('Grim Fandango'.to_requirement)
13
+ @grim_fandango = 'Grim Fandango'.to_var(@grim_fandango_method_var.variable_id)
14
+ @string_runtime_method = RuntimeMethod.new(MethodUsage.new(@grim_fandango_method_var),nil)
15
+
16
+ end
17
+
18
+ def teardown
19
+ System.reset
20
+ RuntimeMethod.reset_global_id
21
+ end
22
+
23
+ def test_initialize
24
+
25
+ end
26
+
27
+ def test_find_steps_with_variable
28
+
29
+ # Add 'var_b = var_a.chop'
30
+ b_equals_A_chop = Statement.new(Unknown.new,Equal.new,InstanceCallContainer.new(@grim_fandango_method_var,Chop.new))
31
+ @string_runtime_method.push(b_equals_A_chop)
32
+ assert_equal(
33
+ 2,
34
+ @string_runtime_method.history([@grim_fandango]).find_steps_with_variable(
35
+ @grim_fandango_method_var.variable_id
36
+ ).length
37
+ )
38
+ assert_equal(1,@string_runtime_method.history(ParametersContainer.new(@grim_fandango)).find_steps_with_variable(b_equals_A_chop.declared_variable_id).length)
39
+
40
+ end
41
+
42
+ # ================= CUSTOM ====================
43
+
44
+ def test_history_call_through_runtime_method
45
+
46
+ # Check that a essentially empty history object is returned
47
+ assert(@simple_runtime_method.history(ParametersContainer.new).kind_of?(History))
48
+
49
+ # Check that a runtime method that includes a string returns properly
50
+ assert(@string_runtime_method.history(ParametersContainer.new(@grim_fandango)).kind_of?(History))
51
+ assert_equal(1,@string_runtime_method.history(ParametersContainer.new(@grim_fandango)).length)
52
+
53
+ # Add 'var_b = var_a.chop'
54
+ b = Unknown.new
55
+ b_equals_A_chop = Statement.new(b,Equal.new,InstanceCallContainer.new(@grim_fandango_method_var,Chop.new))
56
+ @string_runtime_method.push(b_equals_A_chop)
57
+ after_one_statement = @string_runtime_method.history(ParametersContainer.new(@grim_fandango))
58
+ assert_equal(2,after_one_statement.length)
59
+
60
+ # Check that the correct number of variables are retained at each stage
61
+ assert_equal(1,after_one_statement[0]['variables'].length)
62
+ assert_equal(2,after_one_statement[1]['variables'].length)
63
+
64
+ # Check that the variable has the correct id
65
+ assert_equal(true,after_one_statement[1]['variables'].any? {|x| x['id']== b_equals_A_chop.declared_variable_id})
66
+
67
+ # Confirm that all the saved variables have the correct ids
68
+ found_steps = after_one_statement.find_steps_with_variable(@grim_fandango.variable_id)
69
+ found_steps.each do |x|
70
+ found_steps.each do |y|
71
+ assert_equal(x.find_data_for_variable(@grim_fandango.variable_id)['abs_id'],y.find_data_for_variable(@grim_fandango.variable_id)['abs_id'])
72
+ end
73
+ end
74
+
75
+ # Add a length statement
76
+ c = Unknown.new
77
+ c_equals_a_length = Statement.new(c,Equal.new,InstanceCallContainer.new(b,StringLength.new))
78
+ @string_runtime_method.push(c_equals_a_length)
79
+
80
+ # Confirm that there are now 3 steps in the history
81
+ assert_equal(3,@string_runtime_method.history(ParametersContainer.new(@grim_fandango)).length)
82
+
83
+ # Add the first nested statement to the method.
84
+ c_times = Statement.new(InstanceCallContainer.new(c,Times.new))
85
+ c_time_do = BlockStatement.new(c_times)
86
+ @string_runtime_method.push(c_time_do)
87
+
88
+ # Confirm that each part of the statement is tracked
89
+ assert_equal(16,@string_runtime_method.history(ParametersContainer.new(@grim_fandango)).length)
90
+
91
+ end
92
+
93
+ def test_history_call_through_runtime_method_using_complex_method
94
+
95
+ # Add a length statement
96
+ c = Unknown.new
97
+ c_equals_a_length = Statement.new(c,Equal.new,InstanceCallContainer.new(@grim_fandango,StringLength.new))
98
+ @string_runtime_method.push(c_equals_a_length)
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,65 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestStep < Test::Unit::TestCase
5
+
6
+ def setup
7
+ # "variables"=>[
8
+ # {"id"=>3, "value"=>"Grim Fandang", "abs_id"=>-606538658, :uniq_id=>3},
9
+ # {"id"=>1, "value"=>"Grim Fandango", "abs_id"=>-606538498, :uniq_id=>2}
10
+ # ],
11
+ # "line"=>1,
12
+ # "statement_id"=>625,
13
+ # "action"=>"var='Grim Fandango'.chop"}
14
+ @basic_step = Step.new(
15
+ 1,
16
+ 625,
17
+ [ {"id"=>3, "value"=>"Grim Fandang", "abs_id"=>-606538658, :uniq_id=>3},
18
+ {"id"=>1, "value"=>"Grim Fandango", "abs_id"=>-606538498, :uniq_id=>2}],
19
+ "var='Grim Fandango'.chop"
20
+ )
21
+
22
+ end
23
+
24
+ def teardown
25
+ System.reset
26
+ end
27
+
28
+ def test_initialize
29
+ assert_nothing_raised(){
30
+ basic_step = Step.new(
31
+ 1,
32
+ 625,
33
+ [ {"id"=>3, "value"=>"Grim Fandang", "abs_id"=>-606538658, :uniq_id=>3},
34
+ {"id"=>1, "value"=>"Grim Fandango", "abs_id"=>-606538498, :uniq_id=>2}],
35
+ "var='Grim Fandango'.chop"
36
+ )
37
+ }
38
+ end
39
+
40
+ def test_find_data_for_variable
41
+
42
+ end
43
+
44
+ def test_to_var
45
+ assert_nothing_raised(){@basic_step.to_var}
46
+ assert_kind_of(StepVariable,@basic_step.to_var)
47
+ end
48
+
49
+ def test_copy
50
+ assert_nothing_raised(){@basic_step.copy}
51
+ assert_equal(
52
+ @basic_step['line'],
53
+ @basic_step.copy['line']
54
+ )
55
+ assert_equal(
56
+ @basic_step['variables'][0]['abs_id'],
57
+ @basic_step.copy['variables'][0]['abs_id']
58
+ )
59
+ assert_equal(
60
+ @basic_step['variables'][1]['abs_id'],
61
+ @basic_step.copy['variables'][1]['abs_id']
62
+ )
63
+ end
64
+
65
+ end
@@ -0,0 +1,61 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestArrayVariable < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @animals = ['spider','bear','rat'].to_var
8
+ @games = ['Grim Fandango','Fallout'].to_var
9
+ @games.instance_variable = true
10
+ end
11
+
12
+ def teardown
13
+ System.reset
14
+ end
15
+
16
+ def test_to_declaration
17
+ assert(@animals.to_declaration.kind_of?(VariableDeclaration))
18
+ assert_not_nil(@animals.to_declaration.write,'Should write out command to create array variable')
19
+ end
20
+
21
+ def test_initialize
22
+ assert_equal(3,@animals.length)
23
+ end
24
+
25
+ def test_literalise
26
+ assert(@animals.literalise.value.instance_of?(Array))
27
+ assert_equal(3,@animals.literalise.value.length)
28
+ assert_equal('spider',@animals.literalise.value.first)
29
+ end
30
+
31
+ def test_copy
32
+ assert_equal(@animals.length,@animals.copy.length)
33
+ assert_equal(@animals.variable_id,@animals.copy.variable_id)
34
+ assert_equal(@animals.first,@animals.copy.first)
35
+ assert_equal('@var_'+@games.variable_id.to_s,@games.copy.write)
36
+ assert_not_nil(@animals.uniq_id)
37
+ assert_equal(@animals.uniq_id,@animals.copy.uniq_id)
38
+ end
39
+
40
+ # Find the following access calls for the array .length [0],[1],[2]
41
+ def test_instance_calls
42
+ assert_equal(4,@animals.instance_calls.length)
43
+ assert_equal(4,@animals.instance_calls.find_all {|x| x.kind_of?(InstanceCallContainer)}.length)
44
+ assert_equal(3,@animals.instance_calls.find_all {|x| x.kind_of?(ArrayAccess)}.length)
45
+ end
46
+
47
+ def test_write
48
+ assert_equal('var_'+@animals.variable_id.to_s,@animals.write)
49
+ assert_equal('@var_'+@games.variable_id.to_s,@games.write)
50
+ end
51
+
52
+ def test_instance_variable
53
+ tmp = ['bad','science'].to_var
54
+ assert_equal(false,tmp.instance_variable)
55
+ tmp.instance_variable = true
56
+ assert_equal(true,tmp.instance_variable)
57
+ assert_equal(false,@animals.instance_variable)
58
+ assert_equal(true,@games.instance_variable)
59
+ end
60
+
61
+ end
@@ -0,0 +1,17 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestBlockVariable < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ System.reset
11
+ end
12
+
13
+ def test_copy
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,54 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestFixnumVariable < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ # Create a simple fixnum for testing
9
+ @var_8 = FixnumVariable.new(8)
10
+
11
+ end
12
+
13
+ def teardown
14
+ System.reset
15
+ end
16
+
17
+ def test_copy
18
+
19
+ # Test a simple fixnum example cap be copied
20
+ assert_nothing_raised(){@var_8.copy}
21
+ assert_equal(@var_8.variable_id,@var_8.copy.variable_id)
22
+ assert_not_nil(@var_8.uniq_id)
23
+ assert_equal(@var_8.uniq_id,@var_8.copy.uniq_id)
24
+
25
+ end
26
+
27
+ def test_variable_id=
28
+
29
+ # Checks that non fixnum instances can edit the variable id
30
+ assert_nothing_raised(){@var_8.variable_id = 3}
31
+
32
+ end
33
+
34
+ # Checks that the description is written correctly. It should contain
35
+ # a newline character at the end because the description will probably
36
+ # require an each_line call made to it.
37
+ #
38
+ def test_describe
39
+ assert_equal("[FixnumVariable] 8\n",@var_8.describe)
40
+ end
41
+
42
+ # Check the instance calls a single fixnum variable can create. Currently
43
+ # there aren't any but that might change.
44
+ #
45
+ def test_instance_calls
46
+ assert_equal(0,@var_8.instance_calls().length)
47
+ end
48
+
49
+ def test_to_declaration
50
+ assert_nothing_raised() {@var_8.to_declaration}
51
+ assert_equal('FixnumVariable.new(8)',@var_8.to_declaration.write)
52
+ end
53
+
54
+ end
@@ -0,0 +1,22 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestMethodParameterVariable < Test::Unit::TestCase
5
+
6
+ def setup
7
+ end
8
+
9
+ def teardown
10
+ System.reset
11
+ RuntimeMethod.reset_global_id
12
+ end
13
+
14
+ def test_initialize
15
+ assert_nothing_raised(){MethodParameter.new('Grim'.to_requirement)}
16
+ end
17
+
18
+ def test_initialize_variable_id_is_created
19
+ assert(MethodParameter.new('Grim'.to_requirement).variable_id.kind_of?(Fixnum))
20
+ end
21
+
22
+ end
@@ -0,0 +1,32 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestRuntimeMethodParameter < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ # Create a simple runtime method instance for testing
9
+ @empty_runtime_method = RuntimeMethod.new(MethodUsage.new).to_var
10
+
11
+ end
12
+
13
+ def teardown
14
+ System.reset
15
+ end
16
+
17
+ def test_copy
18
+ assert_equal(@empty_runtime_method.copy.variable_id,@empty_runtime_method.variable_id)
19
+ assert_equal(@empty_runtime_method.copy.uniq_id,@empty_runtime_method.uniq_id)
20
+ end
21
+
22
+ def test_instance_calls
23
+
24
+ # Check that a .push instance call can be created
25
+ statement_var = Statement.new().to_var
26
+ possible_instance_calls = @empty_runtime_method.instance_calls([statement_var])
27
+ assert_equal(1,possible_instance_calls.length)
28
+ assert_equal(@empty_runtime_method.write+'.push('+statement_var.write+')',possible_instance_calls.first.write)
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,37 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestStringVariable < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ # Create a simple fixnum for testing
9
+ @var_manny = StringVariable.new('manny')
10
+
11
+ end
12
+
13
+ def teardown
14
+ System.reset
15
+ RuntimeMethod.reset_global_id
16
+ end
17
+
18
+ def test_copy
19
+
20
+ # Test a simple fixnum example cap be copied
21
+ assert_nothing_raised(){@var_manny.copy}
22
+ assert_equal(@var_manny.variable_id,@var_manny.copy.variable_id)
23
+
24
+ end
25
+
26
+ #
27
+ def test_instance_calls
28
+
29
+ # Confirm the datatype of all the returned elements in an array
30
+ assert(@var_manny.instance_calls.kind_of?(Array))
31
+ @var_manny.instance_calls.each do |instance_call|
32
+ assert(instance_call.kind_of?(InstanceCallContainer))
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,24 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestUnknown < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ end
9
+
10
+ def teardown
11
+ System.reset
12
+ end
13
+
14
+ def test_initialize
15
+ end
16
+
17
+ #
18
+ def test_to_var
19
+ assert_nothing_raised(){Unknown.new.to_var}
20
+ assert_equal(89,Unknown.new.to_var(89).variable_id)
21
+ assert_equal(99,Unknown.new.to_var(89,99).uniq_id)
22
+ end
23
+
24
+ end