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,133 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestTheoryImplementation < Test::Unit::TestCase
5
+ include ContainsTheories
6
+
7
+ def setup
8
+ super
9
+
10
+ demo_1_test_case_1 = CTestCase.new
11
+ demo_1_test_case_1[:params] = ['sparky']
12
+ demo_1_test_case_1[:output] = 'sparky'
13
+ demo_1_test_case_2 = CTestCase.new
14
+ demo_1_test_case_2[:params] = ['kel']
15
+ demo_1_test_case_2[:output] = 'kel'
16
+ @case_1_test_cases = [
17
+ demo_1_test_case_1,demo_1_test_case_2
18
+ ]
19
+ @case_1_runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
20
+
21
+ end
22
+
23
+ def teardown
24
+ System.reset
25
+ RuntimeMethod.reset_global_id
26
+ end
27
+
28
+ def test_leads_to
29
+
30
+ # TODO I need a better way to rebuild the implementations - I need to be able to save the declaration probably
31
+ # It could grep the desc.txt for those in the theory - I need to be able to rebuild them.
32
+ implementation_0 = load_theory_implementation(0)
33
+ finish = Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")
34
+ assert_equal(
35
+ true,
36
+ implementation_0.leads_to?(finish)
37
+ )
38
+ end
39
+
40
+ def test_copy
41
+ implementation_0 = load_theory_implementation(0)
42
+ assert_equal(
43
+ implementation_0.describe,
44
+ implementation_0.copy.describe
45
+ )
46
+ end
47
+
48
+ # Test the creation of a very simple theory action that just adds a
49
+ # return statement to the runtime method.
50
+ #
51
+ def test_theory_three_implementations
52
+ # TODO Need to raise error if number of values available doesn't meet
53
+ # the theory. This just doesn't return an permutations if you only
54
+ # supply.
55
+ # TODO Also need a quick check that all the theories are included in the test suite
56
+ values = [
57
+ Parser.run('runtime_method'),
58
+ Parser.run('test_cases'),
59
+ Parser.run('0')
60
+ ]
61
+ assert_nothing_raised(){@theory_3.rewrite_permutations(values)}
62
+ assert_equal(6,@theory_3.rewrite_permutations(values).length)
63
+
64
+ #first_imlementation = @theory_3.rewrite_permutations(values).first
65
+ # if:
66
+ # if(runtime_method.params[0].value.length == test_cases[0][:output])
67
+ # end
68
+ # action:
69
+ # <runtime_method>.add_statement_at(Statement.new(Return.new(), InstanceCallContainer.new(runtime_method.params[0], StringLength.new())),0)
70
+ # result:
71
+ # runtime_method.all_pass?(test_cases) = true
72
+ runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
73
+ test_cases = [
74
+ {:params=>['sparky'], :output=>6}
75
+ ]
76
+ first_imlementation = @theory_3.rewrite_permutations(values).first
77
+ assert_equal(true,first_imlementation.meets_dependencies?(runtime_method.copy,test_cases))
78
+
79
+ test_cases = [
80
+ {:params=>['pip'], :output=>3}
81
+ ]
82
+ first_imlementation = @theory_3.rewrite_permutations(values).first
83
+ assert_equal(true,first_imlementation.meets_dependencies?(runtime_method.copy,test_cases))
84
+
85
+ # NOTE: Although the theory is strickly speaking wrong here because it only uses the
86
+ # first paramter - this fine here though because this method only checks the
87
+ # dependencies are met.
88
+ test_cases = [
89
+ {:params=>['sparky'], :output=>6},
90
+ {:params=>['pip'], :output=>3},
91
+ ]
92
+ first_imlementation = @theory_3.rewrite_permutations(values).first
93
+ assert_equal(true,first_imlementation.meets_dependencies?(runtime_method.copy,test_cases))
94
+
95
+ end
96
+
97
+ def test_meets_dependencies__with_theory_17
98
+ # #TODO Uncomment this - it is a valid test
99
+ # theory = Theory.load_theory(17)
100
+ #
101
+ # # Create the runtime method and test cases that should pass the theories dependents
102
+ # test_case_1 = CTestCase.new
103
+ # test_case_1[:params] = ['waz']
104
+ # test_case_1[:output] = 'B'
105
+ # test_cases = [
106
+ # test_case_1
107
+ # ]
108
+ # runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
109
+ #
110
+ # # Create the mapping for the theory
111
+ # m = Mapping.new(
112
+ # {
113
+ # 1=>IntrinsicRuntimeMethod.new,
114
+ # 2=>IntrinsicLiteral.new(0),
115
+ # 3=>IntrinsicTestCases.new,
116
+ # 4=>IntrinsicLiteral.new(0),
117
+ # 5=>Parser.run('last_runtime_method')
118
+ # }
119
+ # )
120
+ #
121
+ # # Add the statement to the runtime method to make the dependent correct
122
+ # s = BlockStatement.new(Statement.new(InstanceCallContainer.new(Container.new(InstanceCallContainer.new(runtime_method.params[0], StringLength.new), Subtract.new, 1), Times.new)))
123
+ # runtime_method.push(s)
124
+ #
125
+ # implementation = theory.map_to(m)
126
+ # pp runtime_method.history2(test_cases[0][:params])
127
+ # assert_equal(
128
+ # true,
129
+ # implementation.meets_dependencies?(runtime_method,test_cases)
130
+ # )
131
+ end
132
+
133
+ end
@@ -0,0 +1,111 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestTheoryResult < Test::Unit::TestCase
5
+ include ContainsTheories
6
+
7
+ def setup
8
+
9
+ end
10
+
11
+ def teardown
12
+ System.reset
13
+ RuntimeMethod.reset_global_id
14
+ end
15
+
16
+ def test_intialize_1
17
+ # assert_equal(
18
+ # "if(<runtime_method>.all_pass?(<test_cases>))\nreturn true\nend",
19
+ # TheoryResult.new(Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend")).describe
20
+ # )
21
+ end
22
+
23
+ def test_intialize_3
24
+ assert_equal(
25
+ "if(#{TheoryVariable.variable_colour(1)}var1#{TheoryVariable::NORMAL}.length == #{TheoryVariable.variable_colour(2)}var2#{TheoryVariable::NORMAL})\n\treturn true\nend\n",
26
+ TheoryResult.new(
27
+ StringToTheory.run("if(var1.length == var2)\n\treturn true\nend")
28
+ ).describe
29
+ )
30
+ end
31
+
32
+ def test_validates_2
33
+
34
+ implementation = load_theory_implementation(2)
35
+
36
+ # TODO Should have the runtime method as a fixture so this evaluation isn't necessary
37
+ runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
38
+ test_cases = [
39
+ {:params=>['sparky'], :output=>'sparky'.length},
40
+ {:params=>['pip'], :output=>'pip'.length},
41
+ {:params=>['roweIAGE'], :output=>'roweIAGE'.length},
42
+ ]
43
+ evaluation_code = ''
44
+ evaluation_code += "test_cases = #{test_cases.write}"+"\n"
45
+ evaluation_code += "runtime_method = #{runtime_method.to_declaration.write}"+"\n"
46
+ evaluation_code += 'runtime_method.add_statement_at(Statement.new(Return.new, runtime_method.params[0]),runtime_method.statement_id)'+"\n"
47
+
48
+ evaluation_code += 'return runtime_method'+"\n"
49
+ result = CodeEvaluation.new.evaluate_code(evaluation_code)
50
+ assert(true,implementation.results.all? {|x| x.validates?(result,test_cases)})
51
+
52
+ end
53
+
54
+ def test_same_structure_1
55
+ # TODO Fixtures should include implemented TheoryResult and TheoryResults - I don't like using first
56
+ implementation = load_theory_implementation(1)
57
+ theory = Theory.load_theory(1)
58
+
59
+ implemented_result = load_implementation_result(0)
60
+ theory_result = theory.results.first
61
+
62
+ assert_equal(
63
+ true,
64
+ theory_result.same_structure?(implemented_result.statement)
65
+ )
66
+ end
67
+
68
+ def test_same_structure_4
69
+ # TODO Fixtures should include implemented TheoryResult and TheoryResults - I don't like using first
70
+ theory = Theory.load_theory(4)
71
+
72
+ implemented_result = load_implementation_result(0)
73
+ theory_result = theory.results.first
74
+ assert_equal(
75
+ false,
76
+ theory_result.same_structure?(implemented_result.statement)
77
+ )
78
+ end
79
+
80
+ def test_map_to_with_case_1_theory_1
81
+ result_one = TheoryResult.new(StringToTheory.run(
82
+ "if(var1.history(var2[var3][:params]).any? { |x| x.statement_id == var1.last.statement_id })\nreturn true\nend"
83
+ ))
84
+ mapping = {
85
+ 1=>IntrinsicRuntimeMethod.new,
86
+ 2=>IntrinsicTestCases.new,
87
+ 3=>Literal.new(0),
88
+ 4=>1.to_literal,
89
+ 6=>0.to_literal
90
+ }
91
+ assert_equal(
92
+ "if(<runtime_method>.history(<test_cases>[0][:params]).any?{ |x| x.statement_id == <runtime_method>.last.statement_id} )\n\treturn true\nend\n",
93
+ result_one.map_to(mapping).describe
94
+ )
95
+ end
96
+
97
+ def test_map_to_with_example_1
98
+ result = TheoryResult.new(
99
+ StringToTheory.run("if((var1.params[var3].length == var1) == false)\nreturn true\nend")
100
+ )
101
+ mapping = {
102
+ 1=>IntrinsicRuntimeMethod.new,
103
+ 3=>IntrinsicLiteral.new(0)
104
+ }
105
+ assert_equal(
106
+ "if((runtime_method.params[0].length == runtime_method) == false)\n\treturn true\nend",
107
+ result.map_to(mapping).write
108
+ )
109
+ end
110
+
111
+ end
@@ -0,0 +1,45 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestTheoryVariable < 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
+ def test_initialize
16
+ assert_nothing_raised(){TheoryVariable.new(8)}
17
+ assert_raise(ArgumentError) {TheoryVariable.new}
18
+ end
19
+
20
+ def test_write
21
+ assert_equal(
22
+ TheoryVariable.new(7).describe,
23
+ "#{TheoryVariable.variable_colour(7)}var7#{TheoryVariable::NORMAL}"
24
+ )
25
+ assert_not_equal(
26
+ TheoryVariable.new(14).write,
27
+ "#{TheoryVariable.variable_colour(7)}var7#{TheoryVariable::NORMAL}"
28
+ )
29
+ end
30
+
31
+ def test_to_declaration
32
+ assert_equal(TheoryVariable.new(9).to_declaration.write,'TheoryVariable.new(9)')
33
+ assert_not_equal(TheoryVariable.new(10).to_declaration.write,'TheoryVariable.new(9)')
34
+ end
35
+
36
+ def test_subtacting_arrays
37
+ var8 = TheoryVariable.new(8)
38
+ var7 = TheoryVariable.new(7)
39
+ varX = TheoryVariable.new(8)
40
+ assert_equal(varX.theory_variable_id,var8.theory_variable_id)
41
+ assert_equal(var7.theory_variable_id,7)
42
+ assert_equal(1, ([var8,var7]-[varX]).length)
43
+ end
44
+
45
+ end
@@ -0,0 +1,98 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestMethodValidation < 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_self_generate
15
+
16
+ # Check that a simple method to check the class of a runtime method instance can be created
17
+ validation_test_1 = MethodValidation.generate_attribute_test('.class.to_s == "RuntimeMethod"' )
18
+ assert(validation_test_1.kind_of?(RuntimeMethod))
19
+ assert_equal(
20
+ true,
21
+ MethodValidation.new.use_runtime_method(
22
+ validation_test_1,ParametersContainer.new(RuntimeMethod.new(MethodUsage.new).to_declaration)
23
+ )
24
+ )
25
+
26
+ # Create the method that should be evaluated correctly
27
+ test_2_method = RuntimeMethod.new(MethodUsage.new)
28
+ test_2_method.push Statement.new(Return.new,'Lilly'.to_literal)
29
+
30
+ # Test that a runtime method returns 'Lilly'
31
+ validation_test_2 = MethodValidation.generate_response_test(" == 'Lilly'",[])
32
+ assert(validation_test_2.kind_of?(RuntimeMethod))
33
+ assert_equal(
34
+ true,
35
+ MethodValidation.new.use_runtime_method_2(validation_test_2,test_2_method)
36
+ )
37
+ validation_test_3 = MethodValidation.generate_response_test(" != 'Lilly'",[])
38
+ assert_equal(
39
+ false,
40
+ MethodValidation.new.use_runtime_method_2(validation_test_3,test_2_method)
41
+ )
42
+ #
43
+ # # Test that a runtime method returns the value it is passed
44
+ # test_3_param_1 = MethodParameter.new
45
+ # test_3_method = RuntimeMethod.new(MethodUsage.new(test_3_param_1))
46
+ # test_3_method.push(Statement.new(Return.new,test_3_param_1))
47
+ # test_3_validation = MethodValidation.generate(
48
+ # {:condition=>' == "Pip"',:target=>'response',:params=>['Pip'.to_literal],:runtime_method=>test_3_method})
49
+ # assert_equal(
50
+ # 'Pip',
51
+ # MethodValidation.new.use_runtime_method(
52
+ # test_3_validation,ParametersContainer.new(test_3_method.to_declaration)
53
+ # )
54
+ # )
55
+
56
+
57
+ end
58
+
59
+
60
+ def test_use_runtime_method
61
+
62
+ # Test that the following runtime method returns true
63
+ # def method_0
64
+ # return true
65
+ # end
66
+ method_0 = RuntimeMethod.new(MethodUsage.new)
67
+ method_0.push Statement.new(Return.new,True.new)
68
+ assert_equal(true,MethodValidation.new.use_runtime_method(method_0))
69
+
70
+ # Test that the following runtime method returns 'Kelly'
71
+ # def method_1
72
+ # return 'Kelly'
73
+ # end
74
+ method_1 = RuntimeMethod.new(MethodUsage.new)
75
+ method_1.push Statement.new(Return.new,'Kelly'.to_literal)
76
+ assert_equal('Kelly',MethodValidation.new.use_runtime_method(method_1))
77
+ assert_not_equal('kelly',MethodValidation.new.use_runtime_method(method_1))
78
+
79
+ # Test that this method returns the string passed to it
80
+ # def method_2(param_1)
81
+ # return param_1
82
+ # end
83
+ method_2_param_1 = MethodParameter.new
84
+ method_2 = RuntimeMethod.new(MethodUsage.new(method_2_param_1))
85
+ method_2.push Statement.new(Return.new,method_2_param_1)
86
+ assert_equal('Marc',MethodValidation.new.use_runtime_method(method_2,ParametersContainer.new('Marc'.to_literal)))
87
+
88
+ # Test that this method adds both of the numbers and returns it
89
+ method_3_param_1, method_3_param_2 = MethodParameter.new, MethodParameter.new
90
+ method_3 = RuntimeMethod.new(MethodUsage.new(method_3_param_1,method_3_param_2))
91
+ method_3_unknown_1 = Unknown.new
92
+ method_3.push Statement.new(method_3_unknown_1,Equal.new,method_3_param_1,Addition.new,method_3_param_2)
93
+ assert_equal(8,MethodValidation.new.use_runtime_method(method_3,ParametersContainer.new(2.to_literal,6.to_literal)))
94
+ assert_not_equal(9,MethodValidation.new.use_runtime_method(method_3,ParametersContainer.new(2.to_literal,6.to_literal)))
95
+
96
+ end
97
+
98
+ end
@@ -0,0 +1,108 @@
1
+ require 'required'
2
+ require 'test/unit'
3
+
4
+ class TestParser < Test::Unit::TestCase
5
+
6
+ def setup
7
+
8
+ end
9
+
10
+ def teardown
11
+
12
+ end
13
+
14
+ def test_run_with_literal_number_conversion
15
+ assert_equal('9',Parser.run('9').write)
16
+ assert_not_equal('9',Parser.run('10').write)
17
+ end
18
+
19
+ def test_run_with_literal_string_conversion
20
+ assert_equal("'test'",Parser.run("'test'").write)
21
+ assert_equal("'10 million fireflies'",Parser.run("'10 million fireflies'").write)
22
+ end
23
+
24
+ def test_run_with_single_variable
25
+ assert_equal('var_8',Parser.run('var8').write)
26
+ end
27
+
28
+ def test_run_with_a_instance_method_call
29
+ assert_equal('var_8.length',Parser.run('var8.length').write)
30
+ assert(Parser.run('var8.length').kind_of?(InstanceCallContainer))
31
+ end
32
+
33
+ def test_run_with_a_literal_method_call
34
+ assert_equal("'new vegas'.length",Parser.run("'new vegas'.length").write)
35
+ end
36
+
37
+ def test_run_with_intrinsic_runtime_method
38
+ assert_equal('runtime_method.params',Parser.run('runtime_method.params').write)
39
+ assert_equal('runtime_method.params[0]',Parser.run('runtime_method.params[0]').write)
40
+ assert_equal('test_cases[0]',Parser.run('test_cases[0]').write)
41
+ assert_equal('test_cases[0][:output]',Parser.run('test_cases[0][:output]').write)
42
+ assert_equal('test_cases[0].params[0]',Parser.run('test_cases[0].params[0]').write)
43
+ assert_equal('runtime_method.params[0].value',Parser.run('runtime_method.params[0].value').write)
44
+ end
45
+
46
+ def test_run_with_array_elements
47
+ assert_equal('var_6[8]',Parser.run('var6[8]').write)
48
+ end
49
+
50
+ def test_run_with_return_statement
51
+ assert_equal('return true',Parser.run('return true').write)
52
+ assert_equal('Statement',Parser.run('return true').class.to_s)
53
+ end
54
+
55
+ def test_run_with_theory_result_1
56
+ assert_equal(
57
+ 'runtime_method.all_pass?(test_cases)',
58
+ Parser.run('runtime_method.all_pass?(test_cases)').write
59
+ )
60
+ end
61
+
62
+ def test_run_with_next
63
+ assert_equal(
64
+ 'next',
65
+ Parser.run('next').write
66
+ )
67
+ end
68
+
69
+ def test_run_with_push
70
+ assert_equal(
71
+ 'var_1.push(8)',
72
+ Parser.run('var1.push(8)').write
73
+ )
74
+ end
75
+
76
+ def test_run_adding_two_variables
77
+ assert_equal(
78
+ 'var_1 = var_2 + var_3',
79
+ Parser.run('var1 = var2 + var3').write
80
+ )
81
+ end
82
+
83
+ def test_run_with_history_call
84
+ assert_equal(
85
+ 'var_1.history(var_2)',
86
+ Parser.run('var1.history(var2)').write
87
+ )
88
+ end
89
+
90
+ def test_run_with_a_populated_if_statement
91
+ assert_equal(
92
+ "if(runtime_method.all_pass?(test_cases))\nend",
93
+ Parser.run("if(runtime_method.all_pass?(test_cases))\nend").write
94
+ )
95
+ assert_equal(
96
+ "if(runtime_method.all_pass?(test_cases))\n\treturn true\nend",
97
+ Parser.run("if(runtime_method.all_pass?(test_cases))\nreturn true\nend").write
98
+ )
99
+ end
100
+
101
+ def test_run_when_adding_a_number_and_fixnum
102
+ assert_equal(
103
+ "var_2 = var_5.chop + var_2",
104
+ Parser.run("var2 = var5.chop + var2").write
105
+ )
106
+ end
107
+
108
+ end