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
|
+
class MethodUsageVariable < BaseVariable
|
2
|
+
|
3
|
+
def initialize(*parameters)
|
4
|
+
super()
|
5
|
+
raise StandardError.new('Only submit the paramaters on the usage variable') if parameters.first.kind_of?(MethodUsage)
|
6
|
+
# Go through each paramater in the method usage instance
|
7
|
+
parameters.each do |x|
|
8
|
+
self.push x.copy
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_declaration
|
14
|
+
return VariableDeclaration.new('MethodUsageVariable',*self.collect {|x| x.to_declaration})
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy
|
18
|
+
result = MethodUsageVariable.new(*self.collect {|x| x.copy}) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
19
|
+
return result
|
20
|
+
end
|
21
|
+
|
22
|
+
# # Only let this method be called from fellow Fixnum classes or Unknowns
|
23
|
+
# def variable_id=(id)
|
24
|
+
# # TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
25
|
+
# unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
26
|
+
# raise StandardError.new('Illegal attempt to set variable_id')
|
27
|
+
# end
|
28
|
+
# @variable_id = id
|
29
|
+
# end
|
30
|
+
|
31
|
+
# TODO Test this
|
32
|
+
def to_literal_string
|
33
|
+
l = 'MethodUsage.new('
|
34
|
+
self.each do |x|
|
35
|
+
l += x.to_literal_string
|
36
|
+
unless x.object_id == self.last.object_id
|
37
|
+
l += ','
|
38
|
+
end
|
39
|
+
end
|
40
|
+
l += ')'
|
41
|
+
return l
|
42
|
+
end
|
43
|
+
|
44
|
+
# TODO Write tests
|
45
|
+
# Compares the passed argument and returns true if they are
|
46
|
+
# the same class and contains the same values.
|
47
|
+
#
|
48
|
+
def equivalent?(to)
|
49
|
+
return false if to.class != self.class
|
50
|
+
to.zip(self) do |x,y|
|
51
|
+
return false unless x.equivalent?(y)
|
52
|
+
end
|
53
|
+
return true
|
54
|
+
end
|
55
|
+
|
56
|
+
def destructive_instance_calls(with=[])
|
57
|
+
return []
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class NilVariable < TypeVariable
|
2
|
+
|
3
|
+
def initialize(id=nil)
|
4
|
+
super(nil)
|
5
|
+
end
|
6
|
+
|
7
|
+
def copy
|
8
|
+
copied = NilVariable.new {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
9
|
+
#copied.variable_id = self.variable_id
|
10
|
+
return copied
|
11
|
+
end
|
12
|
+
|
13
|
+
# Only let this method be called from fellow NilVariable classes
|
14
|
+
def variable_id=(id)
|
15
|
+
unless caller.first.split(':')[0]==__FILE__
|
16
|
+
raise StandardError.new('Illegal attempt to set variable_id')
|
17
|
+
end
|
18
|
+
@variable_id = id
|
19
|
+
end
|
20
|
+
|
21
|
+
def realised?
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_declaration
|
26
|
+
return VariableDeclaration.new(self.class.to_s,nil.to_declaration)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class RuntimeMethodParameter < TypeVariable
|
2
|
+
|
3
|
+
def initialize(val)
|
4
|
+
super(val)
|
5
|
+
end
|
6
|
+
|
7
|
+
# def copy
|
8
|
+
# copied = self.class.new(@value)
|
9
|
+
# copied.variable_id = self.variable_id
|
10
|
+
# return copied
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# Only let this method be called from fellow Fixnum classes or Unknowns
|
14
|
+
def variable_id=(id)
|
15
|
+
# TODO I need a better way to restrict access to this
|
16
|
+
# TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
17
|
+
#unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
18
|
+
# raise StandardError.new('Illegal attempt to set variable_id')
|
19
|
+
#end
|
20
|
+
@variable_id = id
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns an array of instance calls that are possible given the
|
24
|
+
# provided variables.
|
25
|
+
#
|
26
|
+
# @param available
|
27
|
+
#
|
28
|
+
def instance_calls(available=[],used_in_declaration_statement=false)
|
29
|
+
results = []
|
30
|
+
|
31
|
+
# Create runtime_method.push(runtime_value)
|
32
|
+
## Find all the statement variables
|
33
|
+
available.find_all {|x| x.kind_of?(StatementVariable)}.each do |y|
|
34
|
+
#results.push(InstanceCallContainer.new(self.copy,PushStatement.new,y.copy))
|
35
|
+
# TODO What is PushStatement for
|
36
|
+
results.push(InstanceCallContainer.new(self.copy,Push.new,y.copy))
|
37
|
+
end
|
38
|
+
return results
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns an array of instances calls that return a value and are
|
42
|
+
# therefore approriate for declaration statements.
|
43
|
+
#
|
44
|
+
# NOTE Although .push does return a value I have excluded it because
|
45
|
+
# I want to limit the number of variables declared.
|
46
|
+
#
|
47
|
+
def returning_instance_calls(available)
|
48
|
+
return []
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns an array of desctructive instance calls given the available
|
52
|
+
# variables.
|
53
|
+
#
|
54
|
+
# @param available An array of other variables that can be used as
|
55
|
+
# parameters.
|
56
|
+
#
|
57
|
+
def destructive_instance_calls(available=[])
|
58
|
+
return instance_calls(available)
|
59
|
+
end
|
60
|
+
|
61
|
+
# # Returns a declaration variable for this runtime method variable.
|
62
|
+
# #
|
63
|
+
# def to_declaration
|
64
|
+
# return VariableDeclaration.new(RuntimeMethodParameter)
|
65
|
+
# end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
class StatementVariable < TypeVariable
|
2
|
+
|
3
|
+
def initialize(val)
|
4
|
+
super(val)
|
5
|
+
end
|
6
|
+
|
7
|
+
def copy
|
8
|
+
copied = self.class.new(@value.copy) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
9
|
+
copied.variable_id = self.variable_id
|
10
|
+
return copied
|
11
|
+
end
|
12
|
+
|
13
|
+
# Only let this method be called from fellow Fixnum classes or Unknowns
|
14
|
+
def variable_id=(id)
|
15
|
+
# TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
16
|
+
unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/statement/Statement.rb'
|
17
|
+
raise StandardError.new('Illegal attempt to set variable_id')
|
18
|
+
end
|
19
|
+
@variable_id = id
|
20
|
+
end
|
21
|
+
|
22
|
+
# Returns a copy of the variable, this method exists in the
|
23
|
+
# instance call class. It avoids distinguishing the two.
|
24
|
+
# Since variale is lowest level context doesn't matter.
|
25
|
+
#
|
26
|
+
def copy_contextual_variable
|
27
|
+
return copy
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns an array of instance calls the Statement instances can call. Some
|
31
|
+
# method calls require parameters. These parameters are in the available
|
32
|
+
# array.
|
33
|
+
#
|
34
|
+
# @param available An array of variables to be included in the creation
|
35
|
+
# of the InstanceCallContainer.
|
36
|
+
#
|
37
|
+
def instance_calls(available=[])
|
38
|
+
declared_variable_call = InstanceCallContainer.new(self.copy,DeclaredVariable.new)
|
39
|
+
return [declared_variable_call]
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns an array of instances calls that return a value and are
|
43
|
+
# therefore approriate for declaration statements.
|
44
|
+
#
|
45
|
+
def returning_instance_calls(available=[])
|
46
|
+
return instance_calls(available)
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
def destructive_instance_calls(available=[])
|
51
|
+
return []
|
52
|
+
end
|
53
|
+
|
54
|
+
# Compares the passed argument and returns true if it is a unknown
|
55
|
+
# variable which is treated as a wild card or a variable with
|
56
|
+
# the same value.
|
57
|
+
#
|
58
|
+
# TODO I'm not sure I like UnkownVariables being treated as wild cards
|
59
|
+
#
|
60
|
+
def equivalent?(to)
|
61
|
+
return true if to.kind_of?(Unknown)
|
62
|
+
return false if to.class != self.class
|
63
|
+
# TODO I don't know if this is an equivalent comparision
|
64
|
+
return false unless to.value.write == @value.write
|
65
|
+
return true
|
66
|
+
end
|
67
|
+
|
68
|
+
# def to_var
|
69
|
+
# raise StandardError.new('Already a variable')
|
70
|
+
# end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class StringVariable < TypeVariable
|
2
|
+
|
3
|
+
def initialize(val,id=nil)
|
4
|
+
super(val,id)
|
5
|
+
end
|
6
|
+
|
7
|
+
# Returns an array of instance calls for the particular type
|
8
|
+
# variable. For example:
|
9
|
+
#
|
10
|
+
# StringVariable.new('test').instance_calls
|
11
|
+
#
|
12
|
+
# might return [var.chop,var.length]
|
13
|
+
#
|
14
|
+
def instance_calls(available=[])
|
15
|
+
|
16
|
+
# Add the chop instance call
|
17
|
+
chop_call = InstanceCallContainer.new(self.copy,Chop.new)
|
18
|
+
length_call = InstanceCallContainer.new(self.copy,StringLength.new)
|
19
|
+
return [chop_call,length_call]
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_declaration
|
24
|
+
return VariableDeclaration.new(self.class.to_s,@value.to_declaration)
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_literal_string
|
28
|
+
return @value.to_literal_string
|
29
|
+
end
|
30
|
+
|
31
|
+
# TODO I wan't to get rid of this call entirly
|
32
|
+
def copy_contextual_variable
|
33
|
+
return copy
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns an array of desctructive instance calls given the available
|
37
|
+
# variables.
|
38
|
+
#
|
39
|
+
# @param available An array of other variables that can be used as
|
40
|
+
# parameters.
|
41
|
+
#
|
42
|
+
def destructive_instance_calls(available=[])
|
43
|
+
return []
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# This variable doesn't represent a specific data type it is merely the parent
|
2
|
+
# of all the other typed variables e.g. FixnumVariable, StringVariable etc.
|
3
|
+
#
|
4
|
+
class TypeVariable < BaseVariable
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(val,id=nil)
|
8
|
+
@value = val
|
9
|
+
super(id)
|
10
|
+
end
|
11
|
+
|
12
|
+
def copy
|
13
|
+
copied = self.class.new(@value.copy) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
14
|
+
copied.instance_variable = @instance_variable
|
15
|
+
return copied
|
16
|
+
end
|
17
|
+
|
18
|
+
# Only let this method be called from fellow Fixnum classes or Unknowns
|
19
|
+
# NOTE I have allowed variable ids to be set to allow runtime methods to change
|
20
|
+
# the id of passed variables.
|
21
|
+
def variable_id=(id)
|
22
|
+
# TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
23
|
+
# unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
24
|
+
# raise StandardError.new('Illegal attempt to set variable_id')
|
25
|
+
# end
|
26
|
+
@variable_id = id
|
27
|
+
end
|
28
|
+
|
29
|
+
def literalisable?
|
30
|
+
return true
|
31
|
+
end
|
32
|
+
|
33
|
+
def literalise
|
34
|
+
return Literal.new(@value.copy)
|
35
|
+
end
|
36
|
+
|
37
|
+
def realised?
|
38
|
+
return true unless @value.nil?
|
39
|
+
return false
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_literal_string
|
43
|
+
return @value.to_literal_string
|
44
|
+
end
|
45
|
+
|
46
|
+
def describe(tab=0)
|
47
|
+
l = ''
|
48
|
+
tab.times {|x| l += "/t" }
|
49
|
+
l += '['+self.class.to_s+'] '+@value.write
|
50
|
+
l += "\n"
|
51
|
+
return l
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def cauldron_method_calls
|
56
|
+
return ['.value']
|
57
|
+
end
|
58
|
+
|
59
|
+
# Compares the passed argument and returns true if it is a unknown
|
60
|
+
# variable which is treated as a wild card or a variable with
|
61
|
+
# the same value.
|
62
|
+
#
|
63
|
+
# TODO I'm not sure I like UnkownVariables being treated as wild cards
|
64
|
+
#
|
65
|
+
def equivalent?(to)
|
66
|
+
return true if to.kind_of?(Unknown)
|
67
|
+
return false if to.class != self.class
|
68
|
+
return false unless to.value == @value
|
69
|
+
return true
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
#require $LOC+File.join(['lib','core','variable','Variable'])
|
2
|
+
# TODO This is not strickly a Variable - it is a data type of it's own
|
3
|
+
|
4
|
+
class Unknown < BaseVariable
|
5
|
+
alias :variable_push :push
|
6
|
+
|
7
|
+
# TODO I think requirements here can be dropped
|
8
|
+
def initialize(*requirements)
|
9
|
+
super(*requirements)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Adds a new requirement to the unknown variable. Unlike
|
13
|
+
# variables requirements can be added from outside the
|
14
|
+
# instance.
|
15
|
+
#
|
16
|
+
def push requirement
|
17
|
+
variable_push requirement
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns a typed version of the variable with the correct
|
21
|
+
# variable id. This occurs when an Unknown variable is
|
22
|
+
# used in a statement and its value can be determined.
|
23
|
+
#
|
24
|
+
def classify(value)
|
25
|
+
case value.class.to_s
|
26
|
+
when 'String'
|
27
|
+
var = StringVariable.new(value)
|
28
|
+
var.variable_id = variable_id
|
29
|
+
return var
|
30
|
+
when 'Fixnum'
|
31
|
+
var = FixnumVariable.new(value)
|
32
|
+
var.variable_id = variable_id
|
33
|
+
return var
|
34
|
+
else
|
35
|
+
raise StandardError.new('Unknown data type '+value.class.to_s)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# TODO Test this
|
40
|
+
# TODO Should 'Unknown' have a variable id
|
41
|
+
def copy
|
42
|
+
result = self.class.new(*self) {{:variable_id => variable_id,:uniq_id=>@uniq_id,:uniq_id_history=>@uniq_id_history.copy}}
|
43
|
+
result.instance_variable = @instance_variable
|
44
|
+
return result
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
def describe(tab=0,context=self)
|
49
|
+
|
50
|
+
# Create a temporay copy of the variable
|
51
|
+
copied_var = self.copy
|
52
|
+
|
53
|
+
unless context == self
|
54
|
+
|
55
|
+
# Return a duplicate variable with the requirements in the context indicated
|
56
|
+
copied_var = context.contextual_variable(copied_var.variable_id)
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
# Print the name of the variable
|
61
|
+
line = ''
|
62
|
+
line += write
|
63
|
+
|
64
|
+
# Print out each of the requirements
|
65
|
+
copied_var.each do |x|
|
66
|
+
|
67
|
+
#tmp = gets
|
68
|
+
desc = x.describe(context)
|
69
|
+
|
70
|
+
#tmp = gets
|
71
|
+
desc.each_line do |l|
|
72
|
+
line += "\t"+l
|
73
|
+
end
|
74
|
+
line += "\n" unless x == copied_var.last
|
75
|
+
end
|
76
|
+
line += "\n"
|
77
|
+
|
78
|
+
return line
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns a copy of the variable, this method exists in the
|
83
|
+
# instance call class. It avoids distinguishing the two.
|
84
|
+
# Since variale is lowest level context doesn't matter.
|
85
|
+
#
|
86
|
+
def copy_contextual_variable
|
87
|
+
return copy
|
88
|
+
end
|
89
|
+
|
90
|
+
def to_literal_string
|
91
|
+
return 'var'
|
92
|
+
end
|
93
|
+
|
94
|
+
def realised?
|
95
|
+
return false
|
96
|
+
end
|
97
|
+
|
98
|
+
def to_declaration
|
99
|
+
return VariableDeclaration.new('Unknown')
|
100
|
+
end
|
101
|
+
|
102
|
+
def to_var(id=nil,uniq_id=nil)
|
103
|
+
StandardLogger.instance.warning('"Unknown" is NOT a variable - it is a data type')
|
104
|
+
#super(id)
|
105
|
+
return UnknownVariable.new(self) {{:variable_id => id,:uniq_id=>uniq_id}}
|
106
|
+
end
|
107
|
+
|
108
|
+
# Unknown variables are evaluated are runtime so as along as it is
|
109
|
+
# a variable it is probably fine.
|
110
|
+
#
|
111
|
+
def equivalent?(to)
|
112
|
+
return true if to.kind_of?(BaseVariable)
|
113
|
+
return false
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|