cauldron 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (409) hide show
  1. data/.gitignore +51 -0
  2. data/Gemfile +6 -3
  3. data/Gemfile.lock +16 -3
  4. data/Rakefile +94 -92
  5. data/VERSION +1 -1
  6. data/bin/cauldron +2 -2
  7. data/cauldron.gemspec +15 -451
  8. data/features/cauldron_new_approach.feature +46 -0
  9. data/features/step_definitions/cauldron_steps.rb +11 -0
  10. data/features/step_definitions/terminal_steps.rb +0 -2
  11. data/features/support/env.rb +11 -1
  12. data/features/support/hooks.rb +5 -0
  13. data/lib/cauldron.rb +13 -7
  14. data/lib/cauldron/array_reverse_operator.rb +39 -0
  15. data/lib/cauldron/concat_operator.rb +34 -0
  16. data/lib/cauldron/if_relationship.rb +37 -0
  17. data/lib/cauldron/numeric_operator.rb +45 -0
  18. data/lib/cauldron/pot.rb +54 -162
  19. data/lib/cauldron/relationship.rb +5 -0
  20. data/lib/cauldron/terminal.rb +4 -60
  21. data/lib/cauldron/version.rb +3 -0
  22. data/lib/core/string.rb +21 -0
  23. data/sandbox.rb +27 -6
  24. data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
  25. data/spec/cauldron/concat_operator_spec.rb +89 -0
  26. data/spec/cauldron/if_relationship_spec.rb +25 -0
  27. data/spec/cauldron/numeric_operator_spec.rb +70 -0
  28. data/spec/cauldron/pot_spec.rb +81 -151
  29. data/spec/cauldron/terminal_spec.rb +1 -39
  30. data/spec/examples/adding_if_statement.yml +13 -0
  31. data/spec/examples/simple_head_theory.txt +13 -0
  32. data/spec/spec_helper.rb +1 -14
  33. data/tasks/theory_tasks.rake +207 -207
  34. metadata +92 -532
  35. data/cauldron/.autotest +0 -23
  36. data/cauldron/History.txt +0 -6
  37. data/cauldron/Manifest.txt +0 -8
  38. data/cauldron/README.txt +0 -57
  39. data/cauldron/Rakefile +0 -27
  40. data/cauldron/bin/cauldron +0 -3
  41. data/cauldron/lib/cauldron.rb +0 -3
  42. data/cauldron/test/test_cauldron.rb +0 -8
  43. data/features/cauldron_example_cases.feature +0 -13
  44. data/features/cauldron_generates_runtime_method.feature +0 -16
  45. data/features/cauldron_generates_single_paramter_methods.feature +0 -25
  46. data/features/cauldron_interactive_start_terminal.feature +0 -17
  47. data/features/cauldron_quit_terminal.feature +0 -9
  48. data/features/cauldron_start_terminal.feature +0 -12
  49. data/features/support/method_1.example +0 -3
  50. data/features/support/method_2.example +0 -6
  51. data/lib/Chain.rb +0 -771
  52. data/lib/ChainMapping.rb +0 -172
  53. data/lib/CodeHandler.rb +0 -513
  54. data/lib/Mapping.rb +0 -27
  55. data/lib/MappingValues.rb +0 -24
  56. data/lib/PartialChain.rb +0 -253
  57. data/lib/Theory.rb +0 -295
  58. data/lib/UnifiedChain.rb +0 -351
  59. data/lib/cauldron/conversion.rb +0 -15
  60. data/lib/cauldron/demos.rb +0 -280
  61. data/lib/cauldron/env.rb +0 -1
  62. data/lib/cauldron/sexp2cauldron.rb +0 -139
  63. data/lib/cauldron/theory_factory.rb +0 -10
  64. data/lib/cauldron/util/home.rb +0 -21
  65. data/lib/cauldron/util/saver.rb +0 -45
  66. data/lib/core/ActsAsCode.rb +0 -25
  67. data/lib/core/BlockToken.rb +0 -33
  68. data/lib/core/CCall.rb +0 -7
  69. data/lib/core/CTestCase.rb +0 -27
  70. data/lib/core/ClassMethodCallContainer.rb +0 -58
  71. data/lib/core/Container.rb +0 -95
  72. data/lib/core/InstanceCallContainer.rb +0 -298
  73. data/lib/core/MethodUsage.rb +0 -65
  74. data/lib/core/PrintVariables.rb +0 -25
  75. data/lib/core/TheoryGenerator.rb +0 -753
  76. data/lib/core/Token.rb +0 -7
  77. data/lib/core/assignment/Assignment.rb +0 -18
  78. data/lib/core/assignment/Equal.rb +0 -39
  79. data/lib/core/assignment/Equivalent.rb +0 -20
  80. data/lib/core/assignment/NotEqual.rb +0 -14
  81. data/lib/core/call_container/CallContainer.rb +0 -72
  82. data/lib/core/class_method_call/New.rb +0 -15
  83. data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
  84. data/lib/core/declaration/Declaration.rb +0 -16
  85. data/lib/core/declaration/LiteralDeclaration.rb +0 -47
  86. data/lib/core/declaration/VariableDeclaration.rb +0 -59
  87. data/lib/core/instance_call/ArrayEach.rb +0 -23
  88. data/lib/core/instance_call/ArrayLength.rb +0 -15
  89. data/lib/core/instance_call/Chop.rb +0 -19
  90. data/lib/core/instance_call/Copy.rb +0 -22
  91. data/lib/core/instance_call/DeclaredVariable.rb +0 -18
  92. data/lib/core/instance_call/InstanceCall.rb +0 -77
  93. data/lib/core/instance_call/Params.rb +0 -15
  94. data/lib/core/instance_call/Push.rb +0 -20
  95. data/lib/core/instance_call/StringLength.rb +0 -32
  96. data/lib/core/instance_call/Times.rb +0 -20
  97. data/lib/core/instance_call/instance_calls.rb +0 -176
  98. data/lib/core/instance_call/length_equal.rb +0 -15
  99. data/lib/core/kernal/EvalCall.rb +0 -15
  100. data/lib/core/kernal/LocalVariablesCall.rb +0 -15
  101. data/lib/core/literal/Literal.rb +0 -111
  102. data/lib/core/literal/Raw.rb +0 -23
  103. data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
  104. data/lib/core/literal/StatementLiteral.rb +0 -28
  105. data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
  106. data/lib/core/method_call/ClassCall.rb +0 -33
  107. data/lib/core/method_call/DefCall.rb +0 -72
  108. data/lib/core/method_call/EvaluateClassCall.rb +0 -29
  109. data/lib/core/method_call/MethodNameCall.rb +0 -27
  110. data/lib/core/method_call/ToDeclarationCall.rb +0 -15
  111. data/lib/core/requirement/Requirement.rb +0 -292
  112. data/lib/core/runtime_class/ArrayClass.rb +0 -19
  113. data/lib/core/runtime_class/ClassCallClass.rb +0 -23
  114. data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
  115. data/lib/core/runtime_class/ClassName.rb +0 -18
  116. data/lib/core/runtime_class/DefCallClass.rb +0 -21
  117. data/lib/core/runtime_class/EqualClass.rb +0 -19
  118. data/lib/core/runtime_class/FixnumClass.rb +0 -15
  119. data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
  120. data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
  121. data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
  122. data/lib/core/runtime_class/LiteralClass.rb +0 -19
  123. data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
  124. data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
  125. data/lib/core/runtime_class/RequirementClass.rb +0 -19
  126. data/lib/core/runtime_class/ReturnClass.rb +0 -21
  127. data/lib/core/runtime_class/RuntimeClass.rb +0 -30
  128. data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
  129. data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
  130. data/lib/core/runtime_class/StatementClass.rb +0 -53
  131. data/lib/core/runtime_class/StringClass.rb +0 -23
  132. data/lib/core/runtime_class/StringLengthClass.rb +0 -19
  133. data/lib/core/runtime_class/StringVariableClass.rb +0 -19
  134. data/lib/core/runtime_class/ThisClass.rb +0 -15
  135. data/lib/core/runtime_class/UnknownClass.rb +0 -23
  136. data/lib/core/runtime_class/class_names.rb +0 -95
  137. data/lib/core/runtime_class/runtime_class.rb +0 -123
  138. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
  139. data/lib/core/runtime_method/ParametersContainer.rb +0 -29
  140. data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
  141. data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
  142. data/lib/core/runtime_method/WriteParameters.rb +0 -35
  143. data/lib/core/statement/ActsAsStatement.rb +0 -20
  144. data/lib/core/statement/ArrayAccess.rb +0 -122
  145. data/lib/core/statement/BlockStatement.rb +0 -348
  146. data/lib/core/statement/DeclarationStatement.rb +0 -19
  147. data/lib/core/statement/HackStatement.rb +0 -25
  148. data/lib/core/statement/HashAccess.rb +0 -18
  149. data/lib/core/statement/OpenStatement.rb +0 -178
  150. data/lib/core/statement/RealisedStatement.rb +0 -5
  151. data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
  152. data/lib/core/statement/Statement.rb +0 -1091
  153. data/lib/core/statement/StatementGroup.rb +0 -157
  154. data/lib/core/statement/StatementStructure2.rb +0 -224
  155. data/lib/core/statement/TheoryStatement.rb +0 -68
  156. data/lib/core/statement/TopologicalStatements.rb +0 -34
  157. data/lib/core/syntax/Addition.rb +0 -26
  158. data/lib/core/syntax/BlockContainer.rb +0 -102
  159. data/lib/core/syntax/Boolean.rb +0 -15
  160. data/lib/core/syntax/Code.rb +0 -11
  161. data/lib/core/syntax/Do.rb +0 -20
  162. data/lib/core/syntax/False.rb +0 -12
  163. data/lib/core/syntax/If.rb +0 -36
  164. data/lib/core/syntax/Nil.rb +0 -15
  165. data/lib/core/syntax/Return.rb +0 -33
  166. data/lib/core/syntax/Subtract.rb +0 -19
  167. data/lib/core/syntax/This.rb +0 -40
  168. data/lib/core/syntax/True.rb +0 -20
  169. data/lib/core/syntax/syntax.rb +0 -24
  170. data/lib/core/tracking/ActsAsTrackable.rb +0 -65
  171. data/lib/core/tracking/History.rb +0 -167
  172. data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
  173. data/lib/core/tracking/Step.rb +0 -52
  174. data/lib/core/variable/ArrayVariable.rb +0 -76
  175. data/lib/core/variable/BaseVariable.rb +0 -152
  176. data/lib/core/variable/BlockVariable.rb +0 -92
  177. data/lib/core/variable/FixnumVariable.rb +0 -35
  178. data/lib/core/variable/HistoryVariable.rb +0 -8
  179. data/lib/core/variable/MethodParameter.rb +0 -179
  180. data/lib/core/variable/MethodUsageVariable.rb +0 -60
  181. data/lib/core/variable/NilVariable.rb +0 -29
  182. data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
  183. data/lib/core/variable/StatementVariable.rb +0 -72
  184. data/lib/core/variable/StepVariable.rb +0 -7
  185. data/lib/core/variable/StringVariable.rb +0 -46
  186. data/lib/core/variable/TypeVariable.rb +0 -72
  187. data/lib/core/variable/Unknown.rb +0 -102
  188. data/lib/core/variable/UnknownVariable.rb +0 -29
  189. data/lib/core/variable/Variable.rb +0 -70
  190. data/lib/core/variable/VariableContainer.rb +0 -28
  191. data/lib/core/variable/VariableIncluded.rb +0 -27
  192. data/lib/core/variable/VariableReference.rb +0 -85
  193. data/lib/error/FailedToFindStatementContainerError.rb +0 -7
  194. data/lib/error/FailedToFindStatementError.rb +0 -7
  195. data/lib/error/FailedToFindVariableError.rb +0 -7
  196. data/lib/error/FailedToLiteraliseError.rb +0 -7
  197. data/lib/error/FailedVariableMatch.rb +0 -7
  198. data/lib/error/ImproperStatementUsageError.rb +0 -7
  199. data/lib/error/IncompatiableRequirementsError.rb +0 -7
  200. data/lib/error/InvalidStatementError.rb +0 -7
  201. data/lib/error/MethodSizeError.rb +0 -7
  202. data/lib/error/RuntimeSyntaxError.rb +0 -7
  203. data/lib/error/UnexpectedStatementTypeError.rb +0 -7
  204. data/lib/error/UnknownStatementType.rb +0 -7
  205. data/lib/error/UnliteralisableError.rb +0 -7
  206. data/lib/implemented_chain.rb +0 -35
  207. data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
  208. data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
  209. data/lib/intrinsic/IntrinsicObject.rb +0 -22
  210. data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
  211. data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
  212. data/lib/logger/StandardLogger.rb +0 -62
  213. data/lib/required.rb +0 -222
  214. data/lib/ruby_code/Array.rb +0 -95
  215. data/lib/ruby_code/Fixnum.rb +0 -39
  216. data/lib/ruby_code/Hash.rb +0 -25
  217. data/lib/ruby_code/NilClass.rb +0 -19
  218. data/lib/ruby_code/Object.rb +0 -24
  219. data/lib/ruby_code/String.rb +0 -63
  220. data/lib/ruby_code/Symbol.rb +0 -7
  221. data/lib/standard_library/Tasks.rb +0 -12
  222. data/lib/theories.rb +0 -166
  223. data/lib/theory/ActionImplementation.rb +0 -17
  224. data/lib/theory/TheoryAction.rb +0 -100
  225. data/lib/theory/TheoryChainValidator.rb +0 -103
  226. data/lib/theory/TheoryComponent.rb +0 -59
  227. data/lib/theory/TheoryConnector.rb +0 -756
  228. data/lib/theory/TheoryDependent.rb +0 -135
  229. data/lib/theory/TheoryImplementation.rb +0 -75
  230. data/lib/theory/TheoryResult.rb +0 -131
  231. data/lib/theory/TheoryVariable.rb +0 -63
  232. data/lib/theory/theory_collection.rb +0 -62
  233. data/lib/util/ClassEvaluation.rb +0 -44
  234. data/lib/util/CodeEvaluation.rb +0 -39
  235. data/lib/util/DeclarationStatementEvaluation.rb +0 -32
  236. data/lib/util/MethodEvaluation.rb +0 -49
  237. data/lib/util/MethodTester.rb +0 -71
  238. data/lib/util/MethodValidation.rb +0 -149
  239. data/lib/util/MethodWriter.rb +0 -66
  240. data/lib/util/Parser.rb +0 -305
  241. data/lib/util/StatementCheck.rb +0 -44
  242. data/lib/util/StringToTheory.rb +0 -142
  243. data/lib/util/System.rb +0 -8
  244. data/spec/cauldron/chain_spec.rb +0 -24
  245. data/spec/cauldron/demos_spec.rb +0 -30
  246. data/spec/cauldron/runtime_method_spec.rb +0 -92
  247. data/spec/cauldron/saver_spec.rb +0 -45
  248. data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
  249. data/spec/cauldron/theory_action_spec.rb +0 -25
  250. data/spec/cauldron/theory_connector_spec.rb +0 -52
  251. data/spec/cauldron/theory_spec.rb +0 -59
  252. data/spec/cauldron/unified_chain_spec.rb +0 -140
  253. data/test/fixtures/chains/1/declaration.txt +0 -26
  254. data/test/fixtures/chains/1/dump +0 -0
  255. data/test/fixtures/chains/2/declaration.txt +0 -26
  256. data/test/fixtures/chains/2/dump +0 -0
  257. data/test/fixtures/chains/3/declaration.txt +0 -26
  258. data/test/fixtures/chains/3/dump +0 -0
  259. data/test/fixtures/implementation_results/0/declaration.txt +0 -3
  260. data/test/fixtures/implementation_results/0/dump +0 -0
  261. data/test/fixtures/theories/0/declaration.txt +0 -9
  262. data/test/fixtures/theories/0/desc +0 -10
  263. data/test/fixtures/theories/0/dump +0 -0
  264. data/test/fixtures/theories/1/declaration.txt +0 -15
  265. data/test/fixtures/theories/1/desc +0 -11
  266. data/test/fixtures/theories/1/dump +0 -0
  267. data/test/fixtures/theories/10/declaration.txt +0 -23
  268. data/test/fixtures/theories/10/desc +0 -17
  269. data/test/fixtures/theories/10/dump +0 -0
  270. data/test/fixtures/theories/11/declaration.txt +0 -20
  271. data/test/fixtures/theories/11/desc +0 -14
  272. data/test/fixtures/theories/11/dump +0 -0
  273. data/test/fixtures/theories/12/declaration.txt +0 -18
  274. data/test/fixtures/theories/12/desc +0 -12
  275. data/test/fixtures/theories/12/dump +0 -0
  276. data/test/fixtures/theories/13/declaration.txt +0 -24
  277. data/test/fixtures/theories/13/desc +0 -20
  278. data/test/fixtures/theories/13/dump +0 -0
  279. data/test/fixtures/theories/14/declaration.txt +0 -26
  280. data/test/fixtures/theories/14/desc +0 -20
  281. data/test/fixtures/theories/14/dump +0 -0
  282. data/test/fixtures/theories/15/declaration.txt +0 -20
  283. data/test/fixtures/theories/15/desc +0 -14
  284. data/test/fixtures/theories/15/dump +0 -0
  285. data/test/fixtures/theories/16/declaration.txt +0 -30
  286. data/test/fixtures/theories/16/desc +0 -14
  287. data/test/fixtures/theories/16/dump +0 -0
  288. data/test/fixtures/theories/17/declaration.txt +0 -25
  289. data/test/fixtures/theories/17/desc +0 -11
  290. data/test/fixtures/theories/17/dump +0 -0
  291. data/test/fixtures/theories/18/declaration.txt +0 -23
  292. data/test/fixtures/theories/18/desc +0 -11
  293. data/test/fixtures/theories/18/dump +0 -0
  294. data/test/fixtures/theories/19/declaration.txt +0 -23
  295. data/test/fixtures/theories/19/desc +0 -11
  296. data/test/fixtures/theories/19/dump +0 -0
  297. data/test/fixtures/theories/2/declaration.txt +0 -12
  298. data/test/fixtures/theories/2/desc +0 -10
  299. data/test/fixtures/theories/2/dump +0 -0
  300. data/test/fixtures/theories/20/declaration.txt +0 -23
  301. data/test/fixtures/theories/20/desc +0 -17
  302. data/test/fixtures/theories/20/dump +0 -0
  303. data/test/fixtures/theories/3/declaration.txt +0 -19
  304. data/test/fixtures/theories/3/desc +0 -11
  305. data/test/fixtures/theories/3/dump +0 -0
  306. data/test/fixtures/theories/4/declaration.txt +0 -11
  307. data/test/fixtures/theories/4/desc +0 -11
  308. data/test/fixtures/theories/4/dump +0 -0
  309. data/test/fixtures/theories/5/declaration.txt +0 -6
  310. data/test/fixtures/theories/5/desc +0 -9
  311. data/test/fixtures/theories/5/dump +0 -0
  312. data/test/fixtures/theories/6/declaration.txt +0 -13
  313. data/test/fixtures/theories/6/desc +0 -11
  314. data/test/fixtures/theories/6/dump +0 -0
  315. data/test/fixtures/theories/7/declaration.txt +0 -19
  316. data/test/fixtures/theories/7/desc +0 -11
  317. data/test/fixtures/theories/7/dump +0 -0
  318. data/test/fixtures/theories/8/declaration.txt +0 -21
  319. data/test/fixtures/theories/8/desc +0 -11
  320. data/test/fixtures/theories/8/dump +0 -0
  321. data/test/fixtures/theories/9/declaration.txt +0 -24
  322. data/test/fixtures/theories/9/desc +0 -20
  323. data/test/fixtures/theories/9/dump +0 -0
  324. data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
  325. data/test/fixtures/theory_implementations/0/desc.txt +0 -9
  326. data/test/fixtures/theory_implementations/0/dump +0 -0
  327. data/test/fixtures/theory_implementations/0/theory_id +0 -1
  328. data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
  329. data/test/fixtures/theory_implementations/1/desc.txt +0 -9
  330. data/test/fixtures/theory_implementations/1/dump +0 -1
  331. data/test/fixtures/theory_implementations/1/theory_id +0 -1
  332. data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
  333. data/test/fixtures/theory_implementations/2/desc.txt +0 -9
  334. data/test/fixtures/theory_implementations/2/dump +0 -0
  335. data/test/fixtures/theory_implementations/2/theory_id +0 -1
  336. data/test/output/simple_method.txt +0 -5
  337. data/test/output/test_method/first_possible_method.txt +0 -6
  338. data/test/output/test_simple_cases/simple_case_01.txt +0 -8
  339. data/test/output/test_simple_cases/simple_case_02.txt +0 -7
  340. data/test/output/test_simple_cases/simple_case_03.txt +0 -8
  341. data/test/output/test_simple_cases/simple_case_04.txt +0 -8
  342. data/test/output/test_simple_cases/simple_case_05.txt +0 -8
  343. data/test/output/test_simple_cases/simple_case_06.txt +0 -9
  344. data/test/output/test_simple_cases/simple_case_07.txt +0 -9
  345. data/test/output/test_simple_cases/simple_case_08.txt +0 -9
  346. data/test/tc_describe.rb +0 -46
  347. data/test/tc_method.rb +0 -130
  348. data/test/tc_requirement.rb +0 -30
  349. data/test/tc_suite_complete.rb +0 -26
  350. data/test/tc_variable.rb +0 -52
  351. data/test/ts_complete.rb +0 -74
  352. data/test/ts_stable.rb +0 -81
  353. data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
  354. data/test/unit/core/method_call/tc_class_call.rb +0 -20
  355. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
  356. data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
  357. data/test/unit/core/statement/tc_array_access.rb +0 -63
  358. data/test/unit/core/statement/tc_block_statement.rb +0 -53
  359. data/test/unit/core/statement/tc_hack_statement.rb +0 -26
  360. data/test/unit/core/statement/tc_open_statement.rb +0 -79
  361. data/test/unit/core/statement/tc_statement.rb +0 -483
  362. data/test/unit/core/statement/tc_statement_group.rb +0 -35
  363. data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
  364. data/test/unit/core/statement/tc_theory_statement.rb +0 -53
  365. data/test/unit/core/syntax/tc_block_container.rb +0 -32
  366. data/test/unit/core/syntax/tc_if_container.rb +0 -39
  367. data/test/unit/core/tc_class_method_call.rb +0 -34
  368. data/test/unit/core/tc_container.rb +0 -41
  369. data/test/unit/core/tc_ctest_case.rb +0 -25
  370. data/test/unit/core/tc_instance_call_container.rb +0 -93
  371. data/test/unit/core/tc_literal.rb +0 -30
  372. data/test/unit/core/tc_theory_generator.rb +0 -336
  373. data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
  374. data/test/unit/core/tracking/tc_history.rb +0 -104
  375. data/test/unit/core/tracking/tc_step.rb +0 -65
  376. data/test/unit/core/variable/tc_array_variable.rb +0 -61
  377. data/test/unit/core/variable/tc_block_variable.rb +0 -17
  378. data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
  379. data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
  380. data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
  381. data/test/unit/core/variable/tc_string_variable.rb +0 -37
  382. data/test/unit/core/variable/tc_unknown.rb +0 -24
  383. data/test/unit/core/variable/tc_variable_reference.rb +0 -28
  384. data/test/unit/ruby_code/tc_array.rb +0 -64
  385. data/test/unit/ruby_code/tc_fixnum.rb +0 -18
  386. data/test/unit/ruby_code/tc_hash.rb +0 -41
  387. data/test/unit/ruby_code/tc_string.rb +0 -38
  388. data/test/unit/tc_chain.rb +0 -434
  389. data/test/unit/tc_chain_mapping.rb +0 -62
  390. data/test/unit/tc_chain_with_case_1.rb +0 -169
  391. data/test/unit/tc_instance_call.rb +0 -40
  392. data/test/unit/tc_method_usage.rb +0 -35
  393. data/test/unit/tc_pot.rb +0 -124
  394. data/test/unit/tc_runtime_tracking_method.rb +0 -40
  395. data/test/unit/tc_theory.rb +0 -531
  396. data/test/unit/tc_variable_declaration.rb +0 -32
  397. data/test/unit/theory/tc_theory_action.rb +0 -108
  398. data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
  399. data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
  400. data/test/unit/theory/tc_theory_connector.rb +0 -361
  401. data/test/unit/theory/tc_theory_dependent.rb +0 -153
  402. data/test/unit/theory/tc_theory_implementation.rb +0 -137
  403. data/test/unit/theory/tc_theory_result.rb +0 -112
  404. data/test/unit/theory/tc_theory_variable.rb +0 -45
  405. data/test/unit/util/tc_method_validation.rb +0 -101
  406. data/test/unit/util/tc_parser.rb +0 -110
  407. data/test/unit/util/tc_string_to_theory.rb +0 -300
  408. data/test/unit/variable/tc_method_usage_variable.rb +0 -25
  409. data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,27 +0,0 @@
1
- # TODO I'm not sure I like this approach? - maybe just a hash would be clearer
2
- class Mapping
3
-
4
- attr_reader :hash
5
-
6
- def initialize(hash={})
7
- super()
8
- raise StandardError.new('This should be a hash not a '+hash.class.to_s) unless hash.kind_of?(Hash)
9
- @hash = hash
10
- end
11
-
12
- def values
13
- return MappingValues.new(@hash.values)
14
- end
15
-
16
- def merge(mapping)
17
- return Mapping.new(@hash.merge(mapping.hash))
18
- end
19
-
20
- # TODO Come back to this and include responds_to etc
21
- # http://stackoverflow.com/questions/291132/method-missing-gotchas-in-ruby
22
- def method_missing(sym, *args, &block)
23
- return @hash.send(sym, *args, &block) if @hash.respond_to?(sym)
24
- super(sym, *args, &block)
25
- end
26
-
27
- end
@@ -1,24 +0,0 @@
1
- class MappingValues < Array
2
-
3
- def initialize(array=[])
4
- super(array)
5
- end
6
-
7
- # TODO This approach isn't needed anymore
8
- def -(val)
9
- if val.kind_of?(MappingValues)
10
- m = MappingValues.new
11
- self.each do |x|
12
- next if val.any? {|y| x.intrinsic_object_id == y.intrinsic_object_id}
13
- m << x
14
- end
15
- return m
16
- end
17
- return super
18
- end
19
-
20
- def copy
21
- return MappingValues.new(self.collect {|x| x.copy})
22
- end
23
-
24
- end
@@ -1,253 +0,0 @@
1
- # => TODO This is a duplicate of of UnifiedChain - it needs stripped down allot - probably shouldn't exist
2
-
3
- class PartialChain
4
-
5
- def initialize(nodes)
6
- @nodes = nodes
7
- end
8
-
9
- def write(tab=0)
10
- return @nodes.inject('') {|total,x| total += x.write}
11
- end
12
-
13
- def describe(tab=0)
14
- return @nodes.inject('') {|total,x| total += x.describe}
15
- end
16
-
17
- def copy
18
- #return Chain.new(@nodes.copy)
19
- return Marshal.load(Marshal.dump(self))
20
- end
21
-
22
- # Returns an array of all the theory variables in the chain. All the
23
- # theory variables should be global across the chain.
24
- #
25
- def theory_variables
26
- results = @nodes.inject([]) do |total,theory|
27
- total += theory.all_theory_variables.collect {|x| x}
28
- total
29
- end
30
- return results.uniq
31
- end
32
-
33
- def length
34
- return @nodes.length
35
- end
36
-
37
- # Return an implemented version of the chain where all the theory variables have
38
- # been replaced with read values.
39
- #
40
- def implement(mapping)
41
- implemented_nodes = @nodes.inject([]) do |total,theory|
42
- total << theory.map_to(mapping)
43
- end
44
- return ImplementedChain.new(implemented_nodes,mapping)
45
- end
46
-
47
- def implementation_permuatations2(runtime_method,test_cases,mapping)
48
-
49
- more_mapping = valid_mapping_permutations(runtime_method.copy,test_cases.copy)
50
-
51
- return more_mapping.inject([]) { |total,mapping| total << self.copy.implement(mapping) }
52
-
53
- end
54
-
55
- def has_all_variables_been_found?(component,mappings)
56
- component.theory_variables.each do |var|
57
- mappings.each do |mapping|
58
- return false unless mapping.has_key? var.theory_variable_id
59
- end
60
- end
61
- return true
62
- end
63
-
64
- def identify_uniq_mappings(mappings)
65
- uniq_mappings = []
66
- count = mappings.length
67
- until mappings.empty?
68
- mapping = mappings.shift
69
- already_exists = mappings.any? do |x|
70
- next false unless x.length == mapping.length
71
- next false unless x.keys.sort == mapping.keys.sort
72
- all_values_the_same = true
73
- x.each do |key,value|
74
- if mapping[key].class != value.class
75
- all_values_the_same = false
76
- end
77
- if mapping[key].class == value.class
78
- if mapping[key].kind_of?(IntrinsicLiteral)
79
- if mapping[key].write != value.write
80
- all_values_the_same = false
81
- end
82
- end
83
- end
84
- end
85
- next false unless all_values_the_same
86
- next true
87
- end
88
- unless already_exists
89
- uniq_mappings << mapping
90
- end
91
- end
92
- if uniq_mappings.length == 0 && count != 0
93
- raise StandardError.new('uniq_mappings should not be 0')
94
- end
95
- return uniq_mappings
96
- end
97
-
98
- def intrinsic_values_for_variable(id,component,mapping,runtime_method,test_cases,intrinsic_values)
99
-
100
- values = []
101
- component.statements_with_variable(id).each do |statement|
102
- reg = eval('/^var'+id.to_s+'\./')
103
- if statement.write.match(reg)
104
-
105
- intrinsic_values.each do |value|
106
- temp_mapping = mapping.copy
107
- temp_mapping[id] = value
108
- # => TODO Not validating the component - e.g. if(var1.kind_of?(RuntimeMethod))
109
- if valid_mapping?(runtime_method.copy,test_cases.copy,statement,temp_mapping)
110
- values << value
111
- end
112
- end
113
- next
114
- end
115
-
116
- # values for index
117
- index_values = []
118
- intrinsic_statement = statement.map_to(mapping)
119
- if intrinsic_statement.select_all {|z| z.kind_of?(TheoryVariable)}.length > 0
120
- if m = intrinsic_statement.write.match(/([\w\.]+)\[var(\d)+\]/)
121
- method_call = $1
122
- if m2 = method_call.match(/var(\d+)/)
123
- next
124
- end
125
- literal = evaluate_statement(method_call,runtime_method.copy,test_cases.copy)
126
- literal.length.times do |n|
127
- index_values << IntrinsicLiteral.new(n)
128
- end
129
- end
130
- end
131
- values += index_values
132
-
133
- #variable_values = []
134
- #result.statements_with_variable(var.theory_variable_id).each do |statement|
135
- #variable_values += values_for_variable_as_argument(var,statement,mapping,intrinsic_values,implemented_runtime_method.copy,test_cases.copy)
136
- #end
137
- #values += variable_values
138
-
139
- #intrinsic_statement = statement.map_to(mapping)
140
- variable_values = []
141
- intrinsic_values.each do |value|
142
- literal = intrinsic_statement.write.gsub(/var(\d)+/,value.write)
143
- begin
144
- eval literal
145
- variable_values << value
146
- rescue
147
- next
148
- end
149
- end
150
- #return results
151
- values += variable_values
152
-
153
-
154
- end
155
- return values
156
- end
157
-
158
- def mapping_permutations(keys,values)
159
- values.permutation(keys.length).to_a.inject([]) do |total,value_permutation|
160
- total << Hash[*keys.zip(value_permutation).flatten]
161
- end
162
- end
163
-
164
- def valid_mapping?(runtime_method,test_cases,statement,mapping)
165
- intrinsic_statement = statement.map_to(mapping)
166
- return false unless intrinsic_statement.select_all {|z| z.kind_of?(TheoryVariable)}.length == 0
167
- valid_statement?(intrinsic_statement,runtime_method.copy,test_cases.copy)
168
- end
169
-
170
- def evaluate_statement(statement,runtime_method,test_cases)
171
- eval statement
172
- end
173
-
174
- def valid_statement?(statement,runtime_method,test_cases)
175
- eval statement.write
176
- return true
177
- rescue NoMethodError
178
- return false
179
- end
180
-
181
- # Returns an array of implemented chains using the various value
182
- # permutations. Essential what it is looking for is mapping to convert
183
- # all the theory variables to intrinsic variables.
184
- #
185
- # @param runtime_method The runtime method instance that will be populated to
186
- # create the solution.<#RuntimeMethod >
187
- # @param test_cases The test cases instance containing real values.
188
- #
189
- def implementation_permuatations(runtime_method,test_cases,mapping)
190
-
191
- return implementation_permuatations2(runtime_method,test_cases,mapping)
192
-
193
- # Determine the number of variables without intrinsic values
194
- theory_variable_ids = theory_variables.collect {|x| x.theory_variable_id}
195
-
196
- # Collect the theory variables without intrinsic values
197
- missing_intrinsic_values = theory_variable_ids-mapping.keys
198
-
199
- # Take the first theory and identify all the accessors
200
- # (need to work out what is the runtime method and what the test cases)
201
-
202
- # TEMP: Why are these implemented theories
203
- # @nodes.first.all_theory_variables
204
-
205
- # Create the theory generator
206
- generator = TheoryGenerator.new()
207
-
208
- #accessors, temp_mapping = generator.generate_accessors_and_mapping(test_cases,runtime_method,1)
209
- accessors, temp_mapping = generator.generate_accessors_and_mapping(test_cases,runtime_method,3)
210
-
211
- if temp_mapping.length > missing_intrinsic_values.length
212
-
213
- # Now to assign real values to the chain
214
-
215
- # Apply the values in the various permutaions
216
- # (this is very crude and means that odd calls )
217
- #theory_variable_ids = @nodes.first.all_theory_variables.collect {|x| x.theory_variable_id }
218
-
219
- theory_variable_ids = self.theory_variables.collect {|x| x.theory_variable_id }
220
-
221
- # Get the posible sets for values in an array so that non of the arrays contain all the same values
222
- res = temp_mapping.values.collect {|x| x}
223
-
224
- # TODO This is a complete hack but I think I should be using intrinsic values rather than real
225
- intrinsic_res = res.collect {|x| x.to_intrinsic}
226
- value_permutaions = intrinsic_res.permutation(theory_variable_ids.length).to_a
227
- uniq_value_permutations = value_permutaions.collect {|x| x.to_set}.uniq
228
- possible_mappings = []
229
-
230
- theory_variable_id_permutations = theory_variable_ids.permutation(theory_variable_ids.length).to_a
231
-
232
- possible_mappings = []
233
- theory_variable_id_permutations.each do |theory_variable_id_permutation|
234
- uniq_value_permutations.each do |value_permutation|
235
- m = Mapping.new
236
- theory_variable_id_permutation.zip(value_permutation.to_a) do |key,value|
237
- m[key] = value
238
- end
239
- possible_mappings << m
240
- end
241
-
242
- end
243
-
244
- # Implemented changes
245
- return possible_mappings.inject([]) { |total,mapping| total << self.copy.implement(mapping) }
246
-
247
- else
248
- raise StandardError.new('Could not generate enough real vlaues to test theory - try increasing the itterations')
249
- end
250
-
251
- end
252
-
253
- end
@@ -1,295 +0,0 @@
1
- class Theory
2
- attr_reader :dependents, :action, :results, :theory_id, :example_runtime_method
3
-
4
- # TODO This is only temporaily accessible for debug
5
- attr_writer :results
6
-
7
- attr_accessor :theory_instance_id
8
-
9
- @@theory_id = nil
10
- #
11
- # @param example_runtime_method A runtime method instance with this theories action applied to it and
12
- # which meets the theories dependents with a certain set of test cases.
13
- #
14
- def initialize(dependents,action,results,example_runtime_method=nil)
15
- @dependents, @action, @results, @example_runtime_method = dependents, action, results, example_runtime_method
16
- @theory_id = Theory.next_theory_id
17
- end
18
-
19
- def copy
20
- #return Theory.new(@dependents.copy,@action.copy,@results.copy)
21
- return Marshal.load(Marshal.dump(self))
22
- end
23
-
24
- def self.next_theory_id
25
- if @@theory_id.nil?
26
- FileUtils.mkdir(theories_directory) unless File.exists?(theories_directory)
27
- highest_integer = 0
28
- Dir.glob(File.join(theories_directory,'*')).each do |filename|
29
- if filename.match(/(\d+)/)
30
- highest_integer = $1.to_i if $1.to_i > highest_integer
31
- end
32
- end
33
- @@theory_id = highest_integer
34
- end
35
- @@theory_id += 1
36
- return @@theory_id
37
- end
38
-
39
- def self.theories_directory
40
- # the home directory code is duplicated
41
- realHome = ["HOME", "HOMEPATH"].detect {|h| ENV[h] != nil}
42
- if not realHome
43
- StandardLogger.instance.warning "Couldn't detect a home directory"
44
- end
45
- # => TODO Should use proper version
46
- return File.join(ENV[realHome],'cauldron','0-1-1','theories')
47
- end
48
-
49
- def irrelevant?
50
- dependents.empty? and results.empty? and action.nil?
51
- end
52
-
53
- # Identify the dependents and actions that haven't changed between adding the action.
54
- #
55
- def identify_unchanged
56
-
57
- # Identify the dependents that change after the action is added
58
- changing_dependents = []
59
- @dependents.each do |dependent|
60
- next if @results.any? {|x| x.write == dependent.write}
61
- changing_dependents << dependent
62
- end
63
-
64
- # Identify the results that don't occur in the dependents
65
- changing_results = []
66
- @results.each do |result|
67
- # TODO Should this use the changing_dependents
68
- next if @dependents.any? {|x| x.write == result.write}
69
- changing_results << result
70
- end
71
-
72
- # TODO Stripping out the dependents will mean that they won't be
73
- # met and the theory might be dismissed unfairly. e.g. it
74
- # needs var1.kind_of?(RuntimeMethod). It should probably start
75
- # with the minimum and work backwards - e.g. adding the dependents
76
- # until it doesn't fail.
77
-
78
- # Create a new runtime method with the irrelevant changes removed
79
- return Theory.new(changing_dependents,action.copy,changing_results,example_runtime_method.copy)
80
- end
81
-
82
- # Loads a particular theory that has been saved to a file
83
- #
84
- def self.load_theory(theory_id)
85
- directory_path = $LOC+File.join('test','fixtures','theories',theory_id.to_s)
86
- raise StandardError.new("Theory fixture #{theory_id} does not exist") unless(File.exists?(directory_path))
87
- dump_file = File.open(File.join(directory_path,'dump'),'r')
88
- return Marshal.load(dump_file)
89
- end
90
-
91
- # Returns a new theory where all the theory variables ids start from
92
- # the supplied value.
93
- #
94
- def uniq_theory_variables(min_id)
95
-
96
- ids = all_theory_variables.inject([]) {|total,x| total << x.theory_variable_id}
97
-
98
- # Pair the olds with the new ones
99
- map = ids.inject(Mapping.new) {|total,x| total[x] = TheoryVariable.new(min_id); min_id += 1; total}
100
-
101
- # Duplicate the current theory and sustute the theory variables
102
- # TODO Maybe shouldn't be a TheoryImplementation at this point
103
- return self.map_to(map)
104
-
105
- end
106
-
107
- # Returns the component with the id supplied
108
- #
109
- def find_component(component_id)
110
- return (dependents+results).find {|x| x.theory_component_id == component_id}
111
- end
112
-
113
- # Returns true if the theory contains a result that's structure is similar
114
- # to that of the supplied result implementation.
115
- #
116
- # @param structure The theory result implementation that's structure is compared
117
- # with this theorie's results.
118
- #
119
- def has_result_structure?(structure)
120
- return @results.any? {|x| x.same_structure?(structure)}
121
- end
122
-
123
- # Returns the results thats structure matches that provided.
124
- #
125
- def select_result_structure(structure)
126
- return @results.select {|x| x.same_structure?(structure)}
127
- end
128
-
129
- # Returns an array of any variables that only exist in the action. These
130
- # are important for determining global ids, the results and dependents global
131
- # id is determined my what they are connected to, these action variables aren't
132
- # connected to anything.
133
- #
134
- def orphan_action_variables
135
- return [] if @action.nil?
136
- excluded_variables = (@dependents+@results).inject([]) {|total,x| total += x.theory_variables }
137
- orphans = @action.theory_variables - excluded_variables
138
- # TODO Should probably raise an error for this situation.
139
- # TODO Actually as long as I include context when the value is added and the value it should
140
- # be fine e.g. var2[:params][var3] for var3
141
- StandardLogger.instance.warning "You really should not have variables that are not in dependents - there is no context for the value"
142
- return orphans
143
- end
144
-
145
- # @param mapping { 1=>[],
146
- # 2=>#<IntrinsicTestCases:0xb712d13c>,
147
- # 3=>#<IntrinsicRuntimeMethod:0xb712c980>
148
- # }
149
- # @param values {
150
- # 1=>0,
151
- # 2=><#TestCases>
152
- # 3=><#Runtime Method>
153
- # }
154
- #
155
- def map_to(mapping,values={})
156
- raise StandardError.new('Please use the maping datatype') unless mapping.kind_of?(Mapping)
157
- # return TheoryImplementation.new(
158
- # @dependents.collect {|y| y.map_to(mapping)},
159
- # @action ? @action.map_to(mapping) : nil,
160
- # @results.collect {|y| y.map_to(mapping)},
161
- # mapping,
162
- # values
163
- # )
164
- return TheoryImplementation.new(
165
- @dependents.collect {|y| y.map_to(mapping)},
166
- @action ? @action.map_to(mapping) : nil,
167
- @results.collect {|y| y.map_to(mapping)},
168
- mapping,
169
- values
170
- )
171
- end
172
-
173
- # TODO Need to write tests for this that use the mapping
174
- def rewrite_permutations(realisable_variables,partial_mapping=Mapping.new())
175
-
176
- # Get an array of all the theory variables
177
- a = all_theory_variables
178
-
179
- # Strip out the theory variables that have already been accounted for
180
- free_theory_variables = a.select {|x| !partial_mapping.has_key?(x.theory_variable_id) }
181
-
182
- # If all the mapping has been determines just return the single permutation
183
- return [self.map_to(partial_mapping)] if free_theory_variables.length == 0
184
- # TODO This doesn't currentlt remove the initial finish values
185
- arrangements = (realisable_variables - partial_mapping.values).permutation(free_theory_variables.length).to_a
186
-
187
- # Map the arrangements to specific theory variables ids.
188
- remaining_mapping = arrangements.inject([]) do |total,x|
189
- # TODO I can probably get the 0 value to be the correct value
190
- hash_table = Mapping.new(Hash[*free_theory_variables.collect { |v| [v.theory_variable_id,0] }.flatten])
191
- free_theory_variables.zip(x) do |y,z|
192
- hash_table[y.theory_variable_id] = z
193
- end
194
- total << hash_table
195
- end
196
- return remaining_mapping.inject([]) do |total,x|
197
- total << self.map_to(x.merge(partial_mapping))
198
- end
199
-
200
- raise StandardError.new('Need to complete the rest of the mapping with the available realisable variables')
201
-
202
- end
203
-
204
- # Returns the highest theory variable id used by the theory
205
- def highest_theory_variable_id
206
- return all_theory_variables.sort {|y,z| y.theory_variable_id <=> z.theory_variable_id }.reverse.first.theory_variable_id
207
- end
208
-
209
- # Returns an array of all the theory variables used within the theory.
210
- #
211
- def all_theory_variables
212
-
213
- # Get all the theory variables used in the @action, dependents and results
214
- a = ([@action]+@dependents+@results).select{|x| x != nil}.inject([]) {|total,x| total += x.theory_variables }
215
-
216
- # Filter out only the uniq theory vairables
217
- # http://stackoverflow.com/questions/109781/uniq-by-object-attribute-in-ruby
218
- return a.inject({}) {|total,x| total[x.theory_variable_id]=x; total}.values
219
-
220
- end
221
-
222
- # Returns an abstract description of theory with colour matching
223
- # for common variables.
224
- #
225
- # TODO Include example here
226
- #
227
- def describe
228
-
229
- # TODO include - theory_instance_id
230
- # Describe the despendencies
231
- description = 'if: '+"\n"
232
- @dependents.inject(description) {|description, x| description += x.describe(1) }
233
-
234
- # Describe the action
235
- unless @action.nil?
236
- description += "\n"+"action: \n"
237
- description += @action.describe(1)
238
- end
239
-
240
- # Describe the result
241
- description += "\n"+"result: \n"
242
- @results.inject(description) {|description, x| description += x.describe(1) }
243
- return description
244
-
245
- end
246
-
247
- def write
248
-
249
- # Describe the despendencies
250
- description = 'if: '+"\n"
251
- @dependents.inject(description) {|description, x| description += x.write(1)+"\n" }
252
-
253
- # Describe the action
254
- unless @action.nil?
255
- description += "\n"+"action: \n"
256
- description += @action.write(1)
257
- end
258
-
259
- # Describe the result
260
- description += "\n"+"result: \n"
261
- @results.inject(description) {|description, x| description += x.write(1)+"\n" }
262
- return description
263
- end
264
-
265
- def highlight(component_ids=[])
266
-
267
- # Describe the despendencies
268
- description = 'if: '+"\n"
269
- @dependents.inject(description) do |description, x|
270
- if component_ids.include?(x.theory_component_id)
271
- description += "\033[0;31m\ "+x.write(1)+"\033[00m\ "+"\n"
272
- else
273
- description += x.write(1)+"\n"
274
- end
275
- end
276
-
277
- # Describe the action
278
- unless @action.nil?
279
- description += "\n"+"action: \n"
280
- description += @action.write(1)
281
- end
282
-
283
- # Describe the result
284
- description += "\n"+"result: \n"
285
- @results.inject(description) {|description, x| description += x.write(1)+"\n" }
286
- return description
287
- end
288
-
289
- # Returns an array of all the theory components used in the theory.
290
- #
291
- def components
292
- return ([@action]+@dependents+@results).select{|x| x != nil}
293
- end
294
-
295
- end