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.
- data/.document +5 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +20 -0
- data/README +1 -0
- data/README.rdoc +19 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/cauldron +10 -0
- data/cauldron/.autotest +23 -0
- data/cauldron/History.txt +6 -0
- data/cauldron/Manifest.txt +8 -0
- data/cauldron/README.txt +57 -0
- data/cauldron/Rakefile +27 -0
- data/cauldron/bin/cauldron +3 -0
- data/cauldron/lib/cauldron.rb +3 -0
- data/cauldron/test/test_cauldron.rb +8 -0
- data/features/cauldron_example_cases.feature +13 -0
- data/features/cauldron_generates_runtime_method.feature +12 -0
- data/features/cauldron_start_terminal.feature +13 -0
- data/features/step_definitions/cauldron_steps.rb +16 -0
- data/features/step_definitions/terminal_steps.rb +34 -0
- data/features/support/env.rb +19 -0
- data/lib/Chain.rb +879 -0
- data/lib/ChainMapping.rb +172 -0
- data/lib/CodeHandler.rb +517 -0
- data/lib/Mapping.rb +26 -0
- data/lib/MappingValues.rb +24 -0
- data/lib/ScopeDependencies.rb +7 -0
- data/lib/Theory.rb +274 -0
- data/lib/UnifiedChain.rb +110 -0
- data/lib/cauldron.rb +6 -0
- data/lib/cauldron/conversion.rb +15 -0
- data/lib/cauldron/pot.rb +134 -0
- data/lib/cauldron/sexp2cauldron.rb +156 -0
- data/lib/cauldron/terminal.rb +120 -0
- data/lib/cauldron/theory_factory.rb +10 -0
- data/lib/core/ActsAsCode.rb +25 -0
- data/lib/core/BlockToken.rb +33 -0
- data/lib/core/CCall.rb +7 -0
- data/lib/core/CTestCase.rb +27 -0
- data/lib/core/ClassMethodCallContainer.rb +45 -0
- data/lib/core/Container.rb +85 -0
- data/lib/core/InstanceCallContainer.rb +272 -0
- data/lib/core/MethodUsage.rb +66 -0
- data/lib/core/PrintVariables.rb +25 -0
- data/lib/core/TheoryGenerator.rb +764 -0
- data/lib/core/Token.rb +7 -0
- data/lib/core/assignment/Assignment.rb +18 -0
- data/lib/core/assignment/Equal.rb +39 -0
- data/lib/core/assignment/Equivalent.rb +20 -0
- data/lib/core/assignment/NotEqual.rb +14 -0
- data/lib/core/call_container/CallContainer.rb +66 -0
- data/lib/core/class_method_call/New.rb +15 -0
- data/lib/core/class_method_call/RuntimeClassMethodCall.rb +31 -0
- data/lib/core/declaration/Declaration.rb +16 -0
- data/lib/core/declaration/LiteralDeclaration.rb +47 -0
- data/lib/core/declaration/VariableDeclaration.rb +59 -0
- data/lib/core/instance_call/ArrayEach.rb +23 -0
- data/lib/core/instance_call/ArrayLength.rb +15 -0
- data/lib/core/instance_call/Chop.rb +28 -0
- data/lib/core/instance_call/Copy.rb +22 -0
- data/lib/core/instance_call/DeclaredVariable.rb +18 -0
- data/lib/core/instance_call/InstanceCall.rb +77 -0
- data/lib/core/instance_call/Params.rb +15 -0
- data/lib/core/instance_call/Push.rb +20 -0
- data/lib/core/instance_call/StringLength.rb +32 -0
- data/lib/core/instance_call/Times.rb +20 -0
- data/lib/core/instance_call/instance_calls.rb +168 -0
- data/lib/core/instance_call/length_equal.rb +15 -0
- data/lib/core/kernal/EvalCall.rb +15 -0
- data/lib/core/kernal/LocalVariablesCall.rb +15 -0
- data/lib/core/literal/Literal.rb +111 -0
- data/lib/core/literal/Raw.rb +23 -0
- data/lib/core/literal/RuntimeMethodLiteral.rb +21 -0
- data/lib/core/literal/StatementLiteral.rb +28 -0
- data/lib/core/method_call/AvailableVariablesCall.rb +25 -0
- data/lib/core/method_call/ClassCall.rb +33 -0
- data/lib/core/method_call/DefCall.rb +72 -0
- data/lib/core/method_call/EvaluateClassCall.rb +29 -0
- data/lib/core/method_call/MethodNameCall.rb +27 -0
- data/lib/core/method_call/ToDeclarationCall.rb +15 -0
- data/lib/core/requirement/Requirement.rb +291 -0
- data/lib/core/runtime_class/ArrayClass.rb +19 -0
- data/lib/core/runtime_class/ClassCallClass.rb +23 -0
- data/lib/core/runtime_class/ClassEvaluationClass.rb +19 -0
- data/lib/core/runtime_class/ClassName.rb +18 -0
- data/lib/core/runtime_class/DefCallClass.rb +21 -0
- data/lib/core/runtime_class/EqualClass.rb +19 -0
- data/lib/core/runtime_class/FixnumClass.rb +15 -0
- data/lib/core/runtime_class/IfStatementClass.rb +12 -0
- data/lib/core/runtime_class/InstanceCallClass.rb +19 -0
- data/lib/core/runtime_class/InstanceCallContainerClass.rb +16 -0
- data/lib/core/runtime_class/InstanceClassCallClass.rb +19 -0
- data/lib/core/runtime_class/LiteralClass.rb +19 -0
- data/lib/core/runtime_class/MethodParameterClass.rb +27 -0
- data/lib/core/runtime_class/MethodUsageClass.rb +27 -0
- data/lib/core/runtime_class/RequirementClass.rb +19 -0
- data/lib/core/runtime_class/ReturnClass.rb +21 -0
- data/lib/core/runtime_class/RuntimeClass.rb +30 -0
- data/lib/core/runtime_class/RuntimeClassClass.rb +19 -0
- data/lib/core/runtime_class/RuntimeMethodClass.rb +34 -0
- data/lib/core/runtime_class/StatementClass.rb +53 -0
- data/lib/core/runtime_class/StringClass.rb +23 -0
- data/lib/core/runtime_class/StringLengthClass.rb +19 -0
- data/lib/core/runtime_class/StringVariableClass.rb +19 -0
- data/lib/core/runtime_class/ThisClass.rb +15 -0
- data/lib/core/runtime_class/UnknownClass.rb +23 -0
- data/lib/core/runtime_class/class_names.rb +95 -0
- data/lib/core/runtime_class/runtime_class.rb +123 -0
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +300 -0
- data/lib/core/runtime_method/ParametersContainer.rb +29 -0
- data/lib/core/runtime_method/RealisedRuntimeMethod.rb +94 -0
- data/lib/core/runtime_method/RuntimeMethod.rb +817 -0
- data/lib/core/runtime_method/WriteParameters.rb +35 -0
- data/lib/core/statement/ActsAsStatement.rb +116 -0
- data/lib/core/statement/ArrayAccess.rb +96 -0
- data/lib/core/statement/BlockStatement.rb +348 -0
- data/lib/core/statement/DeclarationStatement.rb +19 -0
- data/lib/core/statement/HackStatement.rb +25 -0
- data/lib/core/statement/HashAccess.rb +18 -0
- data/lib/core/statement/OpenStatement.rb +171 -0
- data/lib/core/statement/RealisedStatement.rb +5 -0
- data/lib/core/statement/SingleLineBlockStatement.rb +39 -0
- data/lib/core/statement/Statement.rb +1223 -0
- data/lib/core/statement/StatementDependencies.rb +271 -0
- data/lib/core/statement/StatementGroup.rb +157 -0
- data/lib/core/statement/StatementStructure2.rb +224 -0
- data/lib/core/statement/TheoryStatement.rb +60 -0
- data/lib/core/statement/TopologicalStatements.rb +34 -0
- data/lib/core/structure/DeclareNewInstanceStructure.rb +49 -0
- data/lib/core/structure/DeclareRuntimeMethodStructure.rb +34 -0
- data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +31 -0
- data/lib/core/structure/DeclareVariableAsVariableStructure.rb +52 -0
- data/lib/core/structure/FixnumAdditionStructure.rb +56 -0
- data/lib/core/structure/InstanceCallContainerStructure.rb +50 -0
- data/lib/core/structure/InstanceCallStructure.rb +53 -0
- data/lib/core/structure/InstanceMethodCallStructure.rb +21 -0
- data/lib/core/structure/ReturnStructure.rb +20 -0
- data/lib/core/structure/StatementStructure.rb +11 -0
- data/lib/core/syntax/Addition.rb +25 -0
- data/lib/core/syntax/BlockContainer.rb +130 -0
- data/lib/core/syntax/Boolean.rb +15 -0
- data/lib/core/syntax/Code.rb +11 -0
- data/lib/core/syntax/Do.rb +20 -0
- data/lib/core/syntax/False.rb +12 -0
- data/lib/core/syntax/If.rb +28 -0
- data/lib/core/syntax/IfContainer.rb +100 -0
- data/lib/core/syntax/Nil.rb +15 -0
- data/lib/core/syntax/Return.rb +33 -0
- data/lib/core/syntax/Subtract.rb +19 -0
- data/lib/core/syntax/This.rb +40 -0
- data/lib/core/syntax/True.rb +20 -0
- data/lib/core/syntax/syntax.rb +24 -0
- data/lib/core/tracking/ActsAsTrackable.rb +65 -0
- data/lib/core/tracking/History.rb +167 -0
- data/lib/core/tracking/RuntimeTrackingMethod.rb +32 -0
- data/lib/core/tracking/Step.rb +52 -0
- data/lib/core/variable/ArrayVariable.rb +76 -0
- data/lib/core/variable/BaseVariable.rb +154 -0
- data/lib/core/variable/BlockVariable.rb +92 -0
- data/lib/core/variable/FixnumVariable.rb +36 -0
- data/lib/core/variable/HistoryVariable.rb +8 -0
- data/lib/core/variable/MethodParameter.rb +206 -0
- data/lib/core/variable/MethodUsageVariable.rb +60 -0
- data/lib/core/variable/NilVariable.rb +29 -0
- data/lib/core/variable/RuntimeMethodParameter.rb +67 -0
- data/lib/core/variable/StatementVariable.rb +72 -0
- data/lib/core/variable/StepVariable.rb +7 -0
- data/lib/core/variable/StringVariable.rb +46 -0
- data/lib/core/variable/TypeVariable.rb +72 -0
- data/lib/core/variable/Unknown.rb +116 -0
- data/lib/core/variable/UnknownVariable.rb +29 -0
- data/lib/core/variable/Variable.rb +70 -0
- data/lib/core/variable/VariableContainer.rb +28 -0
- data/lib/core/variable/VariableIncluded.rb +27 -0
- data/lib/core/variable/VariableReference.rb +85 -0
- data/lib/error/FailedToFindStatementContainerError.rb +7 -0
- data/lib/error/FailedToFindStatementError.rb +7 -0
- data/lib/error/FailedToFindVariableError.rb +7 -0
- data/lib/error/FailedToLiteraliseError.rb +7 -0
- data/lib/error/FailedVariableMatch.rb +7 -0
- data/lib/error/ImproperStatementUsageError.rb +7 -0
- data/lib/error/IncompatiableRequirementsError.rb +7 -0
- data/lib/error/InvalidStatementError.rb +7 -0
- data/lib/error/MethodSizeError.rb +7 -0
- data/lib/error/RuntimeSyntaxError.rb +7 -0
- data/lib/error/UnexpectedStatementTypeError.rb +7 -0
- data/lib/error/UnknownStatementType.rb +7 -0
- data/lib/error/UnliteralisableError.rb +7 -0
- data/lib/implemented_chain.rb +34 -0
- data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +20 -0
- data/lib/intrinsic/IntrinsicLiteral.rb +26 -0
- data/lib/intrinsic/IntrinsicObject.rb +22 -0
- data/lib/intrinsic/IntrinsicRuntimeMethod.rb +27 -0
- data/lib/intrinsic/IntrinsicTestCases.rb +17 -0
- data/lib/logger/StandardLogger.rb +62 -0
- data/lib/required.rb +236 -0
- data/lib/ruby_code/Array.rb +95 -0
- data/lib/ruby_code/Fixnum.rb +39 -0
- data/lib/ruby_code/Hash.rb +25 -0
- data/lib/ruby_code/NilClass.rb +19 -0
- data/lib/ruby_code/Object.rb +24 -0
- data/lib/ruby_code/String.rb +86 -0
- data/lib/ruby_code/Symbol.rb +7 -0
- data/lib/standard_library/Tasks.rb +12 -0
- data/lib/theories.rb +143 -0
- data/lib/theory/ActionImplementation.rb +17 -0
- data/lib/theory/TheoryAction.rb +70 -0
- data/lib/theory/TheoryChainValidator.rb +101 -0
- data/lib/theory/TheoryComponent.rb +42 -0
- data/lib/theory/TheoryConnector.rb +755 -0
- data/lib/theory/TheoryDependent.rb +135 -0
- data/lib/theory/TheoryImplementation.rb +74 -0
- data/lib/theory/TheoryResult.rb +131 -0
- data/lib/theory/TheoryVariable.rb +63 -0
- data/lib/theory/theory_collection.rb +62 -0
- data/lib/util/ClassEvaluation.rb +68 -0
- data/lib/util/CodeEvaluation.rb +35 -0
- data/lib/util/DeclarationStatementEvaluation.rb +31 -0
- data/lib/util/MethodEvaluation.rb +49 -0
- data/lib/util/MethodTester.rb +71 -0
- data/lib/util/MethodValidation.rb +145 -0
- data/lib/util/MethodWriter.rb +66 -0
- data/lib/util/Parser.rb +299 -0
- data/lib/util/StatementCheck.rb +42 -0
- data/lib/util/StringToTheory.rb +119 -0
- data/lib/util/System.rb +8 -0
- data/spec/cauldron/pot_spec.rb +6 -0
- data/spec/cauldron/runtime_method_spec.rb +36 -0
- data/spec/cauldron/sexp_2_cauldron_spec.rb +26 -0
- data/spec/cauldron/terminal_spec.rb +38 -0
- data/spec/cauldron/theory_action_spec.rb +5 -0
- data/spec/spec_helper.rb +4 -0
- data/test/fixtures/chains/1/declaration.txt +26 -0
- data/test/fixtures/chains/1/dump +0 -0
- data/test/fixtures/chains/2/declaration.txt +26 -0
- data/test/fixtures/chains/2/dump +0 -0
- data/test/fixtures/chains/3/declaration.txt +26 -0
- data/test/fixtures/chains/3/dump +0 -0
- data/test/fixtures/implementation_results/0/declaration.txt +3 -0
- data/test/fixtures/implementation_results/0/dump +0 -0
- data/test/fixtures/theories/0/declaration.txt +9 -0
- data/test/fixtures/theories/0/desc +10 -0
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/declaration.txt +15 -0
- data/test/fixtures/theories/1/desc +11 -0
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/declaration.txt +23 -0
- data/test/fixtures/theories/10/desc +17 -0
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/declaration.txt +20 -0
- data/test/fixtures/theories/11/desc +14 -0
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/declaration.txt +18 -0
- data/test/fixtures/theories/12/desc +12 -0
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/declaration.txt +24 -0
- data/test/fixtures/theories/13/desc +20 -0
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/declaration.txt +26 -0
- data/test/fixtures/theories/14/desc +20 -0
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/declaration.txt +20 -0
- data/test/fixtures/theories/15/desc +14 -0
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/declaration.txt +30 -0
- data/test/fixtures/theories/16/desc +14 -0
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/declaration.txt +25 -0
- data/test/fixtures/theories/17/desc +11 -0
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/declaration.txt +23 -0
- data/test/fixtures/theories/18/desc +11 -0
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/declaration.txt +23 -0
- data/test/fixtures/theories/19/desc +11 -0
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/declaration.txt +12 -0
- data/test/fixtures/theories/2/desc +10 -0
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/declaration.txt +23 -0
- data/test/fixtures/theories/20/desc +17 -0
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/declaration.txt +19 -0
- data/test/fixtures/theories/3/desc +11 -0
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/declaration.txt +11 -0
- data/test/fixtures/theories/4/desc +11 -0
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/declaration.txt +6 -0
- data/test/fixtures/theories/5/desc +9 -0
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/declaration.txt +13 -0
- data/test/fixtures/theories/6/desc +11 -0
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/declaration.txt +19 -0
- data/test/fixtures/theories/7/desc +11 -0
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/declaration.txt +21 -0
- data/test/fixtures/theories/8/desc +11 -0
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/declaration.txt +24 -0
- data/test/fixtures/theories/9/desc +20 -0
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/declaration.txt +11 -0
- data/test/fixtures/theory_implementations/0/desc.txt +9 -0
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/0/theory_id +1 -0
- data/test/fixtures/theory_implementations/1/desc.txt +9 -0
- data/test/fixtures/theory_implementations/1/dump +0 -0
- data/test/fixtures/theory_implementations/1/theory_id +1 -0
- data/test/fixtures/theory_implementations/2/desc.txt +9 -0
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/fixtures/theory_implementations/2/theory_id +1 -0
- data/test/output/simple_method.txt +6 -0
- data/test/output/test_method/first_possible_method.txt +6 -0
- data/test/output/test_simple_cases/simple_case_01.txt +8 -0
- data/test/output/test_simple_cases/simple_case_02.txt +7 -0
- data/test/output/test_simple_cases/simple_case_03.txt +8 -0
- data/test/output/test_simple_cases/simple_case_04.txt +8 -0
- data/test/output/test_simple_cases/simple_case_05.txt +8 -0
- data/test/output/test_simple_cases/simple_case_06.txt +9 -0
- data/test/output/test_simple_cases/simple_case_07.txt +9 -0
- data/test/output/test_simple_cases/simple_case_08.txt +9 -0
- data/test/tc_contextual_variables.rb +87 -0
- data/test/tc_describe.rb +47 -0
- data/test/tc_method.rb +133 -0
- data/test/tc_requirement.rb +30 -0
- data/test/tc_suite_complete.rb +26 -0
- data/test/tc_variable.rb +52 -0
- data/test/ts_complete.rb +84 -0
- data/test/ts_stable.rb +81 -0
- data/test/unit/core/declaration/tc_literal_declaration.rb +34 -0
- data/test/unit/core/method_call/tc_class_call.rb +20 -0
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +129 -0
- data/test/unit/core/runtime_method/tc_runtime_method.rb +616 -0
- data/test/unit/core/statement/tc_array_access.rb +63 -0
- data/test/unit/core/statement/tc_block_statement.rb +51 -0
- data/test/unit/core/statement/tc_hack_statement.rb +26 -0
- data/test/unit/core/statement/tc_open_statement.rb +70 -0
- data/test/unit/core/statement/tc_statement.rb +681 -0
- data/test/unit/core/statement/tc_statement_dependencies.rb +146 -0
- data/test/unit/core/statement/tc_statement_group.rb +35 -0
- data/test/unit/core/statement/tc_statement_replace_variable.rb +61 -0
- data/test/unit/core/statement/tc_theory_statement.rb +51 -0
- data/test/unit/core/structure/tc_declare_new_instance_structure.rb +41 -0
- data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +41 -0
- data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +66 -0
- data/test/unit/core/structure/tc_instance_call_container_structure.rb +41 -0
- data/test/unit/core/structure/tc_return_structure.rb +32 -0
- data/test/unit/core/syntax/tc_block_container.rb +32 -0
- data/test/unit/core/syntax/tc_if_container.rb +39 -0
- data/test/unit/core/tc_class_method_call.rb +34 -0
- data/test/unit/core/tc_container.rb +41 -0
- data/test/unit/core/tc_ctest_case.rb +25 -0
- data/test/unit/core/tc_instance_call_container.rb +93 -0
- data/test/unit/core/tc_literal.rb +30 -0
- data/test/unit/core/tc_theory_generator.rb +336 -0
- data/test/unit/core/tc_theory_generator_heavy.rb +42 -0
- data/test/unit/core/tracking/tc_history.rb +102 -0
- data/test/unit/core/tracking/tc_step.rb +65 -0
- data/test/unit/core/variable/tc_array_variable.rb +61 -0
- data/test/unit/core/variable/tc_block_variable.rb +17 -0
- data/test/unit/core/variable/tc_fixnum_variable.rb +54 -0
- data/test/unit/core/variable/tc_method_parameter_variable.rb +22 -0
- data/test/unit/core/variable/tc_runtime_method_variable.rb +32 -0
- data/test/unit/core/variable/tc_string_variable.rb +37 -0
- data/test/unit/core/variable/tc_unknown.rb +24 -0
- data/test/unit/core/variable/tc_variable_reference.rb +28 -0
- data/test/unit/ruby_code/tc_array.rb +64 -0
- data/test/unit/ruby_code/tc_fixnum.rb +18 -0
- data/test/unit/ruby_code/tc_hash.rb +41 -0
- data/test/unit/ruby_code/tc_string.rb +38 -0
- data/test/unit/tc_chain.rb +434 -0
- data/test/unit/tc_chain_mapping.rb +62 -0
- data/test/unit/tc_chain_with_case_1.rb +169 -0
- data/test/unit/tc_instance_call.rb +40 -0
- data/test/unit/tc_instance_call_structure.rb +35 -0
- data/test/unit/tc_method_usage.rb +35 -0
- data/test/unit/tc_pot.rb +124 -0
- data/test/unit/tc_runtime_tracking_method.rb +40 -0
- data/test/unit/tc_statement_structure_2.rb +43 -0
- data/test/unit/tc_theory.rb +533 -0
- data/test/unit/tc_variable_declaration.rb +32 -0
- data/test/unit/theory/tc_theory_action.rb +80 -0
- data/test/unit/theory/tc_theory_action_implementation.rb +23 -0
- data/test/unit/theory/tc_theory_chain_validator.rb +340 -0
- data/test/unit/theory/tc_theory_connector.rb +396 -0
- data/test/unit/theory/tc_theory_dependent.rb +151 -0
- data/test/unit/theory/tc_theory_implementation.rb +133 -0
- data/test/unit/theory/tc_theory_result.rb +111 -0
- data/test/unit/theory/tc_theory_variable.rb +45 -0
- data/test/unit/util/tc_method_validation.rb +98 -0
- data/test/unit/util/tc_parser.rb +108 -0
- data/test/unit/util/tc_string_to_theory.rb +299 -0
- data/test/unit/variable/tc_method_usage_variable.rb +25 -0
- data/tmp/runtime_method_evaluation.rb +10 -0
- metadata +522 -0
@@ -0,0 +1,60 @@
|
|
1
|
+
# This class represents the general descriptions used inside the three
|
2
|
+
# components of theories.
|
3
|
+
#
|
4
|
+
# TODO The statement class this extends is extremely bloated but I
|
5
|
+
# need to create some complex journeys before I can start to
|
6
|
+
# trim the fat.
|
7
|
+
#
|
8
|
+
class TheoryStatement < Statement
|
9
|
+
|
10
|
+
def initialize(*parameters)
|
11
|
+
super(*parameters)
|
12
|
+
end
|
13
|
+
|
14
|
+
# TODO map_to might replace the need for this method
|
15
|
+
# TODO How does this work for instance call containers and array access?
|
16
|
+
def replace_theory_variables!(mapping)
|
17
|
+
self.each_with_index do |x,i|
|
18
|
+
if x.kind_of?(TheoryVariable) && mapping.has_key?(x.theory_variable_id)
|
19
|
+
self[i] = mapping[x.theory_variable_id].copy
|
20
|
+
next
|
21
|
+
end
|
22
|
+
self[i].replace_theory_variables!(mapping) if self[i].respond_to?(:replace_theory_variables!)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO This method was just nicked from TheoryDependent
|
27
|
+
# TODO A similar method exists in Statement
|
28
|
+
#
|
29
|
+
def map_to(mapping)
|
30
|
+
|
31
|
+
# Duplicate the current statement before it is rewritten
|
32
|
+
rewritten_statement = self.copy
|
33
|
+
|
34
|
+
# Find all the containers that contain TheoryVariables
|
35
|
+
# NOTE The statement is put in an array because select all doesn't include the array itself
|
36
|
+
containers = [rewritten_statement].select_all {|x| x.respond_to?(:has?)}
|
37
|
+
theory_variable_containers = containers.select {|x| x.has? {|y| y.kind_of?(TheoryVariable)}}
|
38
|
+
|
39
|
+
# Rewrite the statement replacing the values
|
40
|
+
theory_variable_containers.each do |z|
|
41
|
+
z.replace_theory_variables!(mapping)
|
42
|
+
end
|
43
|
+
|
44
|
+
return rewritten_statement
|
45
|
+
#return TheoryDependent.new(rewritten_statement,@theory_component_id)
|
46
|
+
end
|
47
|
+
|
48
|
+
# TODO Maybe use a opject to handle the output of the statement.
|
49
|
+
def describe(tab=0)
|
50
|
+
line = ''
|
51
|
+
tab.times {line += "\t" }
|
52
|
+
self.each do |code|
|
53
|
+
line += code.describe
|
54
|
+
break if code.object_id == self.last.object_id
|
55
|
+
line += ' '
|
56
|
+
end
|
57
|
+
return line
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
#class TopologicalStatements
|
3
|
+
# include TSort
|
4
|
+
#
|
5
|
+
# def initialize
|
6
|
+
# @dependencies = {}
|
7
|
+
# end
|
8
|
+
#
|
9
|
+
# def add_dependency(task,*relies_on)
|
10
|
+
# @dependencies[task] = relies_on
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# def tsort_each_node(&block)
|
14
|
+
# @dependencies.each_key(&block)
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# def tsort_each_child(node,&block)
|
18
|
+
# deps = @dependencies[node]
|
19
|
+
# deps.each(&block) if deps
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
#end
|
23
|
+
|
24
|
+
# See http://www.ruby-doc.org/stdlib/libdoc/tsort/rdoc/classes/TSort.html#M009366
|
25
|
+
class TopologicalStatements < Hash
|
26
|
+
include TSort
|
27
|
+
|
28
|
+
alias tsort_each_node each_key
|
29
|
+
def tsort_each_child(node, &block)
|
30
|
+
fetch(node).each(&block)
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Returns statements that declare new instances of the available classes
|
2
|
+
#
|
3
|
+
# Example:
|
4
|
+
# var_a = MethodUsage.new
|
5
|
+
# var_b = RuntimeMethod.new(var_a)
|
6
|
+
#
|
7
|
+
class DeclareNewInstanceStructure < StatementStructure
|
8
|
+
|
9
|
+
#
|
10
|
+
# @param available_classes Any number of class instances that can be used
|
11
|
+
# when generating statements, e.g. MethodUsageClass.new
|
12
|
+
#
|
13
|
+
def initialize(*available_classes)
|
14
|
+
super()
|
15
|
+
available_classes.each {|x| self.push(x)}
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns an array of instance declaration statements using
|
19
|
+
# the available variables.
|
20
|
+
#
|
21
|
+
# @param available An array of variables that are made available
|
22
|
+
# when declaring new statements.
|
23
|
+
#
|
24
|
+
def statements(available=[])
|
25
|
+
|
26
|
+
# Get all the various arrangements of parameters at all the lengths (capped at 5)
|
27
|
+
arrangements = [[]]
|
28
|
+
|
29
|
+
# Add one of each available variable
|
30
|
+
available.each do |x|
|
31
|
+
arrangements.push([x])
|
32
|
+
end
|
33
|
+
|
34
|
+
# For each arrangement create a new statement declaration
|
35
|
+
results = []
|
36
|
+
|
37
|
+
# Create a number of declaration statements using the method classes
|
38
|
+
# e.g. Unknown.new,Equal.new,ClassMethodCallContainer.new(MethodUsageClass.new,New.new)
|
39
|
+
self.each do |x|
|
40
|
+
x.class_method_calls(available).each do |y|
|
41
|
+
new_statement = Statement.new(Unknown.new,Equal.new,y)
|
42
|
+
results.push(new_statement)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
return results
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# TODO I think this structure has been super seeded by DeclareVariableAsVariableStructure
|
2
|
+
# Example - where the method_a returns a RuntimeMethod instance
|
3
|
+
#
|
4
|
+
# var_a = method_a()
|
5
|
+
#
|
6
|
+
class DeclareRuntimeMethodStructure < StatementStructure
|
7
|
+
|
8
|
+
def initialize()
|
9
|
+
super([Unknown,Equal,RuntimeMethodParameter])
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns an array of possible statements that can be created
|
13
|
+
# using the available variables. Currently the only way to
|
14
|
+
# create runtime method instances is via a separate runtime
|
15
|
+
# method call.
|
16
|
+
#
|
17
|
+
# @param available An array of variables that can be used to
|
18
|
+
# to create the statements that declared new
|
19
|
+
# runtime variables.
|
20
|
+
#
|
21
|
+
def statements(available=[])
|
22
|
+
return [] if available.empty?
|
23
|
+
def_calls = available.find_all {|x| x.kind_of?(DefCall)}
|
24
|
+
results = []
|
25
|
+
def_calls.each do |x|
|
26
|
+
if x.response.class == RuntimeMethodParameter
|
27
|
+
new_statement = Statement.new(Unknown.new,Equal.new,x.copy)
|
28
|
+
results.push(new_statement)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return results
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#
|
2
|
+
# Example
|
3
|
+
#
|
4
|
+
# var = 6
|
5
|
+
# var = 'Shepard'
|
6
|
+
# var = []
|
7
|
+
#
|
8
|
+
class DeclareVariableAsLiteralStructure < StatementStructure
|
9
|
+
|
10
|
+
def initialize(*available_literals)
|
11
|
+
super([Unknown,Equal,Literal])
|
12
|
+
@available_literals = available_literals
|
13
|
+
end
|
14
|
+
|
15
|
+
# TODO Write tests for this
|
16
|
+
# Returns an array of possible statements that can be created
|
17
|
+
# given the variables supplied.
|
18
|
+
#
|
19
|
+
# @param available An array of possible variables that can be used to generate
|
20
|
+
# new statements. Although for this structure it is only
|
21
|
+
# interested in the literals.
|
22
|
+
#
|
23
|
+
def statements(available=[])
|
24
|
+
combined_available = @available_literals + available
|
25
|
+
return [] if combined_available.empty?
|
26
|
+
literals = combined_available.find_all {|x| x.kind_of?(Literal)}
|
27
|
+
results = literals.collect {|x| Statement.new(Unknown.new,Equal.new,x) }
|
28
|
+
return results
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# NOTE: I'm not certain whether these types of strucutres are actually necessary
|
2
|
+
# but they did exist when I was using StatementStrucuture2.rb
|
3
|
+
#
|
4
|
+
# Example
|
5
|
+
#
|
6
|
+
# var_b = var_a
|
7
|
+
# var_c = var_b
|
8
|
+
# var_e = var_b.chop
|
9
|
+
|
10
|
+
class DeclareVariableAsVariableStructure < StatementStructure
|
11
|
+
|
12
|
+
def initialize()
|
13
|
+
super([Unknown,Equal,TypeVariable])
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns an array of statements constructed using the supplied
|
17
|
+
# variables.
|
18
|
+
#
|
19
|
+
def statements(available=[])
|
20
|
+
return [] if available.empty?
|
21
|
+
variables = available.select {|x| x.kind_of?(TypeVariable)}
|
22
|
+
|
23
|
+
# Generate all the possible direct variable declarations e.g. var_a = var_b
|
24
|
+
direct_declarations = variables.collect {|x| Statement.new(Unknown.new,Equal.new,x.copy)}
|
25
|
+
|
26
|
+
# Generate all the possible instance call declarations - I'm not sure if this will be used in this way
|
27
|
+
results = variables.collect do |x|
|
28
|
+
result = x.returning_instance_calls(available).collect do |y|
|
29
|
+
Statement.new(Unknown.new,Equal.new,y)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# TODO This seems a bit sloppy - I should do it in a nicer way
|
34
|
+
instance_call_declarations = []
|
35
|
+
results.each do |x|
|
36
|
+
x.each {|y| instance_call_declarations.push(y)}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Find all the possible method calss
|
40
|
+
# TODO Write tests for this method call bit
|
41
|
+
# TODO This doesn't allow for parameters
|
42
|
+
available.each do |x|
|
43
|
+
if x.kind_of?(DefCall)
|
44
|
+
instance_call_declarations.push(Statement.new(Unknown.new,Equal.new,x.copy))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
return direct_declarations.concat(instance_call_declarations)
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Example
|
2
|
+
# e.g. var_a = var_b + var_c
|
3
|
+
#
|
4
|
+
class FixnumAdditionStructure < StatementStructure
|
5
|
+
|
6
|
+
def initialize()
|
7
|
+
super([Unknown,Equal,FixnumVariable,Addition,FixnumVariable])
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns an array of statements using the available variables that
|
11
|
+
# follow the structure var = 8 + 6
|
12
|
+
#
|
13
|
+
# @param available An array of runtime variables that can be used in the statements
|
14
|
+
# construction.
|
15
|
+
#
|
16
|
+
def statements(available=[])
|
17
|
+
|
18
|
+
# If there aren't any fixnum variables there is nothing to return
|
19
|
+
return [] unless available.any? {|x| x.pass_as?(FixnumVariable)}
|
20
|
+
|
21
|
+
# First find just varaibles that can pass as FixnumVariables
|
22
|
+
# NOTE: Currently I am not allowing method calls to be used
|
23
|
+
fixnum_variables = available.find_all {|x| x.pass_as?(FixnumVariable) and !x.kind_of?(DefCall)}
|
24
|
+
|
25
|
+
# Using the variables constuct statements
|
26
|
+
possible_statements = []
|
27
|
+
fixnum_variables.length.times do |x|
|
28
|
+
fixnum_variables.length.times do |y|
|
29
|
+
new_statement = Statement.new(Unknown.new,Equal.new,fixnum_variables[x].copy,Addition.new,fixnum_variables[y].copy)
|
30
|
+
#new_statement.statement_type = DECLARATION_STATEMENT
|
31
|
+
possible_statements.push(new_statement)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Remove mirror statements - these are additions that are essentially the
|
36
|
+
# same statement written backwards.
|
37
|
+
# e.g. var_c = var_a+var_b
|
38
|
+
# var_d = var_b+var_a
|
39
|
+
possible_statements.copy.each do |x|
|
40
|
+
possible_statements.copy.each do |y|
|
41
|
+
next if x.statement_id == y.statement_id
|
42
|
+
if y.same_not_declared_variables?(x)
|
43
|
+
|
44
|
+
# If the first variable id is lower than the secound remove it.
|
45
|
+
if y[2].variable_id < y[4].variable_id
|
46
|
+
possible_statements.delete_if {|z| z.statement_id == y.statement_id}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
return possible_statements
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Example
|
2
|
+
# e.g. 'test'.chop
|
3
|
+
# e.g. 'test'.chop!
|
4
|
+
#
|
5
|
+
class InstanceCallContainerStructure < StatementStructure
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
super()
|
9
|
+
end
|
10
|
+
|
11
|
+
# Returns an array of possible statements that make an instance
|
12
|
+
# call. They don't declare a new variables so to be in any way
|
13
|
+
# relevant they must be destructive e.g.
|
14
|
+
#
|
15
|
+
# 'test'.chop # essential does nothing
|
16
|
+
# 'test'.chop! # Changes the value ('test' represents a variable with that value)
|
17
|
+
#
|
18
|
+
def statements(available=[])
|
19
|
+
|
20
|
+
# Exclude method calls for now - avoiding too complex statements
|
21
|
+
available.delete_if {|x| x.kind_of?(DefCall)}
|
22
|
+
|
23
|
+
# Go through each method call available to each of the variables
|
24
|
+
results = []
|
25
|
+
available.copy.each do |subject_var|
|
26
|
+
|
27
|
+
# Duplicate the available variables and exclude the current one
|
28
|
+
# to avoid less predicatable statements.
|
29
|
+
current_available = available.copy.delete_if do |x|
|
30
|
+
unless(x.kind_of?(Variable) and subject_var.kind_of?(Variable))
|
31
|
+
next false
|
32
|
+
end
|
33
|
+
x.variable_id == subject_var.variable_id
|
34
|
+
end
|
35
|
+
|
36
|
+
# Create statements that use the specified instance calls
|
37
|
+
subject_var.destructive_instance_calls(current_available).each do |inst_call|
|
38
|
+
new_statement = Statement.new(inst_call)
|
39
|
+
|
40
|
+
# TODO I'm not sure if all the instance calls are modifying - I should may have a StatementTemplate
|
41
|
+
# class that foces the {:review} to be false.
|
42
|
+
#new_statement.statement_type = MODIFYING_STATEMENT
|
43
|
+
results.push(new_statement)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
return results
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# TODO I think this class might have been replaced with InstanceCallContainerStructure
|
2
|
+
class InstanceCallStructure < Array
|
3
|
+
attr_reader :instance_class, :method_call
|
4
|
+
|
5
|
+
#
|
6
|
+
# @param instance_class The class of the instance that should be called e.g. StringVariable
|
7
|
+
# @param method_call An instance of the method_call
|
8
|
+
# @param parameters The parameters that the instance method call excepts
|
9
|
+
#
|
10
|
+
def initialize(instance_class,method_call,*parameters)
|
11
|
+
# TODO What are the two parameters an array expects
|
12
|
+
super()
|
13
|
+
|
14
|
+
# Declare the elements that make up the instance call
|
15
|
+
@instance_class = instance_class
|
16
|
+
@method_call = method_call
|
17
|
+
|
18
|
+
# Add the parameters to the array
|
19
|
+
parameters.each do |code|
|
20
|
+
self.push(code)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
def instance_calls(available=[])
|
26
|
+
|
27
|
+
# Create an array of potential instance calls
|
28
|
+
potential_instance_calls = []
|
29
|
+
|
30
|
+
# Find a variable thats class is @instance_class
|
31
|
+
available.each do |avail|
|
32
|
+
|
33
|
+
if avail.class == @instance_class
|
34
|
+
|
35
|
+
# We have a possible instance class
|
36
|
+
# TODO Try with class and method call mismatch
|
37
|
+
if self.length == 0
|
38
|
+
potential_instance_calls.push(InstanceCallContainer.new(avail.copy,@method_call.copy))
|
39
|
+
next
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retrieve appropriate values for each of the intance calls parameters
|
43
|
+
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
return potential_instance_calls
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# This a generic structure that can be used to create any number of
|
2
|
+
# instance method calls. For example if it was meant to represent
|
3
|
+
# an array instance it might be able to produce the statement:
|
4
|
+
#
|
5
|
+
# array.push(some_value)
|
6
|
+
#
|
7
|
+
# TODO This might duplicate the functionality of the InstanceCallContainerStructure
|
8
|
+
# although I can't remember what I created that for.
|
9
|
+
#
|
10
|
+
class InstanceMethodCallStructure < StatementStructure
|
11
|
+
|
12
|
+
#
|
13
|
+
# @param instance_class The class of the instance that has a method call
|
14
|
+
# @param method_call A method call instance that can be called from
|
15
|
+
# instances of the supplied instance_class.
|
16
|
+
#
|
17
|
+
def initialize(instance_class,method_call)
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|