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,20 @@
|
|
1
|
+
# Returns statements that return values
|
2
|
+
#
|
3
|
+
# Example:
|
4
|
+
# return 7
|
5
|
+
# return var
|
6
|
+
#
|
7
|
+
class ReturnStructure < StatementStructure
|
8
|
+
|
9
|
+
def initialize()
|
10
|
+
super()
|
11
|
+
end
|
12
|
+
|
13
|
+
def statements(available=[])
|
14
|
+
|
15
|
+
# Create return statements using the passed variables
|
16
|
+
return available.collect {|x| Statement.new(Return.new,x.copy)}
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class StatementStructure < Array
|
2
|
+
|
3
|
+
DECLARATION_STATEMENT = 'declaration_statement'
|
4
|
+
MODIFYING_STATEMENT = 'modifying_statement'
|
5
|
+
RETURN_STATEMENT = 'return_statement'
|
6
|
+
USAGE_STATEMENT = 'usage_statement'
|
7
|
+
MISC_STATEMENT = 'misc_statement'
|
8
|
+
BLANK_STATEMENT = 'blank_statement'
|
9
|
+
IF_STATEMENT = 'if_statement'
|
10
|
+
|
11
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# TODO Move to InstanceCall
|
2
|
+
|
3
|
+
class Addition < InstanceCall
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
def copy
|
10
|
+
return self.class.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def write
|
14
|
+
return ' +'
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_literal_string
|
18
|
+
return write
|
19
|
+
end
|
20
|
+
|
21
|
+
def closure
|
22
|
+
return [' ','']
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
class BlockContainer < Array
|
2
|
+
|
3
|
+
def initialize(*parameters)
|
4
|
+
super()
|
5
|
+
|
6
|
+
parameters.each { |x| self.push(x) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def write
|
10
|
+
l = '|'
|
11
|
+
self.each do |x|
|
12
|
+
l += x.write
|
13
|
+
l += ', ' unless x.object_id == self.last.object_id
|
14
|
+
end
|
15
|
+
l += '|'
|
16
|
+
return l
|
17
|
+
end
|
18
|
+
|
19
|
+
def describe
|
20
|
+
l = '|'
|
21
|
+
self.each do |x|
|
22
|
+
l += x.describe
|
23
|
+
l += ', ' unless x.object_id == self.last.object_id
|
24
|
+
end
|
25
|
+
l += '|'
|
26
|
+
return l
|
27
|
+
end
|
28
|
+
|
29
|
+
def write_with_uniq_id
|
30
|
+
l = '|'
|
31
|
+
self.each do |x|
|
32
|
+
(x.respond_to?('write_with_uniq_id')) ? l += x.write_with_uniq_id : l += x.write
|
33
|
+
l += ', ' unless x.object_id == self.last.object_id
|
34
|
+
end
|
35
|
+
l += '|'
|
36
|
+
return l
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the block variables but with their values next to them. This
|
40
|
+
# presumes that the block container has been realised.
|
41
|
+
#
|
42
|
+
def write_with_value
|
43
|
+
l = '|'
|
44
|
+
self.each do |x|
|
45
|
+
l += x.write_with_value
|
46
|
+
l += ', ' unless x.object_id == self.last.object_id
|
47
|
+
end
|
48
|
+
l += '|'
|
49
|
+
return l
|
50
|
+
end
|
51
|
+
|
52
|
+
# TODO Write tests for this
|
53
|
+
def copy
|
54
|
+
return BlockContainer.new(*self.collect {|x| x.copy})
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns true if all the block variables returned true.
|
58
|
+
def realised?
|
59
|
+
|
60
|
+
# Go through each of the block variables and determine if they're realised
|
61
|
+
return false if self.any? {|x| x.realised? == false }
|
62
|
+
return true
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
# Returns a block container where all the block variables
|
67
|
+
# have been realised.
|
68
|
+
#
|
69
|
+
# I had previously intended to just work out the values for the block
|
70
|
+
# but this would create problems when I have blocks within blocks.
|
71
|
+
#
|
72
|
+
# NOTE I have copied code here from the history call in RuntimeMethod
|
73
|
+
#
|
74
|
+
def realise(statement,containing_method)
|
75
|
+
|
76
|
+
# Create the method to track the change in values of the block variable
|
77
|
+
# TODO I shouldn't need to redeclare this runtime method each time
|
78
|
+
#tracking_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
|
79
|
+
# Create the method that block values are logged to
|
80
|
+
instance_tracking_variable = ArrayVariable.new
|
81
|
+
instance_tracking_variable.instance_variable = true
|
82
|
+
tracking_method = RuntimeTrackingMethod.new(instance_tracking_variable)
|
83
|
+
|
84
|
+
raise StandardError.new('This should not be used')
|
85
|
+
# Create a method to call the method and return the results
|
86
|
+
#process_method = RuntimeMethod.new(MethodUsage.new)
|
87
|
+
#process_method << Statement.new( DefCall.new(NilVariable.new) )
|
88
|
+
#process_method << Statement.new( Return.new,instance_tracking_variable )
|
89
|
+
|
90
|
+
# CONTINUE Look up the tracking method
|
91
|
+
#exit
|
92
|
+
end
|
93
|
+
|
94
|
+
# Returns an updated block container where all the values for the block
|
95
|
+
# have been realised through the method map.
|
96
|
+
#
|
97
|
+
# @param method_map The history of the method that the block container
|
98
|
+
# is used in.
|
99
|
+
#
|
100
|
+
def realise2(method_map)
|
101
|
+
return self.copy if realised?
|
102
|
+
result = BlockContainer.new
|
103
|
+
self.each do |x|
|
104
|
+
result.push(x.realise(method_map))
|
105
|
+
end
|
106
|
+
return result
|
107
|
+
end
|
108
|
+
|
109
|
+
# Returns an array of all the unrealised variables within the
|
110
|
+
# block container.
|
111
|
+
#
|
112
|
+
def unrealised_variables
|
113
|
+
return variables.find_all {|x| x.realised? == false}
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns an array of all the variables within this block container.
|
117
|
+
#
|
118
|
+
def variables
|
119
|
+
return self.collect {|x| x.copy}
|
120
|
+
end
|
121
|
+
|
122
|
+
# Returns each variable used within the block in turn.
|
123
|
+
#
|
124
|
+
def each_variable
|
125
|
+
variables.each do |x|
|
126
|
+
yield x
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class If
|
2
|
+
include Code
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
def write(tab=0)
|
9
|
+
return ("\t"*tab)+'if'
|
10
|
+
end
|
11
|
+
|
12
|
+
def copy
|
13
|
+
return If.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def creation
|
17
|
+
return 'If.new'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
# TODO I need to go over my "if statement" construction
|
23
|
+
|
24
|
+
# t = OpenStatement.new(
|
25
|
+
# Statement.new(
|
26
|
+
# If.new,test_cases[0][:params][0], Equivalent.new, test_cases[0][:output]
|
27
|
+
# )
|
28
|
+
# )
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# TODO I'm not sure whether to keep the IfContainer class or just drop it
|
2
|
+
# and use Statement.new(If.new,Liter.new(9) etc..)
|
3
|
+
# if I don't change it IfContainer should probably become a type of Statement
|
4
|
+
|
5
|
+
class IfContainer < Statement
|
6
|
+
|
7
|
+
def initialize(*parameters)
|
8
|
+
# TODO It would be better to use super here
|
9
|
+
#super(*parameters)
|
10
|
+
# TODO i think this is just passed a statement - so it only ever has one parameter - I prefer it that way
|
11
|
+
#parameters.each { |x| self.push(x) }
|
12
|
+
parameters.each do |code|
|
13
|
+
self.push(code.copy)
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO I might change the statement_id to be determined by the structure
|
17
|
+
# of the statement.
|
18
|
+
@statement_id = @@statement_id
|
19
|
+
@@statement_id += 1
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
# Retunrs the contents of the if_container instance as string contained
|
24
|
+
# within paraenthesis e.g.
|
25
|
+
#
|
26
|
+
# if(var_a == var_b)
|
27
|
+
#
|
28
|
+
def write(indent=0)
|
29
|
+
line = If.new.write(indent)
|
30
|
+
line += '('
|
31
|
+
self.each do |x|
|
32
|
+
line += x.write
|
33
|
+
line += ' ' unless x.object_id == last.object_id
|
34
|
+
end
|
35
|
+
line += ')'
|
36
|
+
return line
|
37
|
+
end
|
38
|
+
|
39
|
+
def describe(indent=0)
|
40
|
+
line = If.new.write(indent)
|
41
|
+
line += '('
|
42
|
+
self.each do |x|
|
43
|
+
line += x.describe
|
44
|
+
line += ' ' unless x.object_id == last.object_id
|
45
|
+
end
|
46
|
+
line += ')'
|
47
|
+
return line
|
48
|
+
end
|
49
|
+
|
50
|
+
def replace_theory_variables!(mapping)
|
51
|
+
self.each_with_index do |x,i|
|
52
|
+
if x.kind_of?(TheoryVariable) && mapping.has_key?(x.theory_variable_id)
|
53
|
+
self[i] = mapping[x.theory_variable_id].copy
|
54
|
+
next
|
55
|
+
end
|
56
|
+
self[i].replace_theory_variables!(mapping)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# TODO Doesn't need to be here(duplicated results)
|
61
|
+
def select_all(results=[],&block)
|
62
|
+
results.push self if block.call(self)
|
63
|
+
self.each do |x|
|
64
|
+
if block.call(x)
|
65
|
+
results.push(x)
|
66
|
+
else
|
67
|
+
end
|
68
|
+
if x.respond_to?(:select_all)
|
69
|
+
x.select_all(results,&block)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
return results
|
73
|
+
end
|
74
|
+
|
75
|
+
# Returns a duplicate of this IfContainer instance
|
76
|
+
#
|
77
|
+
def copy
|
78
|
+
a = IfContainer.new(*self.collect {|x| x.copy})
|
79
|
+
a.statement_id = @statement_id
|
80
|
+
return a
|
81
|
+
end
|
82
|
+
|
83
|
+
# TODO Write tests for this
|
84
|
+
# Returns a string containing the syntax for the container but where
|
85
|
+
# all the values are literals e.g.
|
86
|
+
#
|
87
|
+
# if(var_a == var_b) whould become "if(6 == 7)"
|
88
|
+
#
|
89
|
+
def to_literal_string
|
90
|
+
line = If.new.write
|
91
|
+
line += '('
|
92
|
+
self.each do |x|
|
93
|
+
line += x.to_literal_string
|
94
|
+
line += ' ' unless x.object_id == last.object_id
|
95
|
+
end
|
96
|
+
line += ')'
|
97
|
+
return line
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
class Return
|
3
|
+
include Code
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
end
|
8
|
+
|
9
|
+
def write(method_context=nil)
|
10
|
+
return 'return'
|
11
|
+
end
|
12
|
+
|
13
|
+
def describe
|
14
|
+
return write
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy
|
18
|
+
return Return.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def creation
|
22
|
+
return 'Return.new'
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_declaration
|
26
|
+
return VariableDeclaration.new(self.class.to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_literal_string
|
30
|
+
return write
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|