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,23 @@
|
|
1
|
+
class StringClass < ClassName
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def write(context=nil)
|
8
|
+
return 'String'
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy
|
12
|
+
return StringClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def value
|
16
|
+
return String
|
17
|
+
end
|
18
|
+
|
19
|
+
def declaration_statement
|
20
|
+
return ClassMethodCallContainer.new(StringClass.new,New.new)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class StringVariableClass < ClassName
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def write(context=nil)
|
8
|
+
return 'StringVariable'
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy
|
12
|
+
return StringVariableClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def value
|
16
|
+
return StringVariable
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class UnknownClass < ClassName
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def write(context=nil)
|
8
|
+
return 'Unknown'
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy
|
12
|
+
return UnknownClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def value
|
16
|
+
return Unknown
|
17
|
+
end
|
18
|
+
|
19
|
+
def declaration_statement
|
20
|
+
return ClassMethodCallContainer.new(Unknown.new,New.new)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
class EquivalentClass < ClassName
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def write(context=nil)
|
8
|
+
return 'Equivalent'
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
class OpenStatementClass < ClassName
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def write(context=nil)
|
20
|
+
return 'OpenStatement'
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
class IfContainerClass < ClassName
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
def write(context=nil)
|
32
|
+
return 'IfContainer'
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
class BlockStatementClass < ClassName
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
super
|
41
|
+
end
|
42
|
+
|
43
|
+
def write(tab=0)
|
44
|
+
return 'BlockStatement'
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class ContainerClass < ClassName
|
50
|
+
|
51
|
+
def initialize
|
52
|
+
super
|
53
|
+
end
|
54
|
+
|
55
|
+
def write(tab=0)
|
56
|
+
return 'Container'
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
class SubtractClass < ClassName
|
62
|
+
|
63
|
+
def initialize
|
64
|
+
super
|
65
|
+
end
|
66
|
+
|
67
|
+
def write(tab=0)
|
68
|
+
return 'Subtract'
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
class TimesClass < ClassName
|
74
|
+
|
75
|
+
def initialize
|
76
|
+
super
|
77
|
+
end
|
78
|
+
|
79
|
+
def write(tab=0)
|
80
|
+
return 'Times'
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
class ChopClass < ClassName
|
86
|
+
|
87
|
+
def initialize
|
88
|
+
super
|
89
|
+
end
|
90
|
+
|
91
|
+
def write(tab=0)
|
92
|
+
return 'Chop'
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
class TheoryStatementClass < ClassName
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
super
|
5
|
+
end
|
6
|
+
|
7
|
+
def write(context=nil)
|
8
|
+
return 'TheoryStatement'
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy
|
12
|
+
return TheoryStatementClass.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def value
|
16
|
+
return TheoryStatement
|
17
|
+
end
|
18
|
+
|
19
|
+
# TODO I'm not sure if this is needed
|
20
|
+
def declaration_statement
|
21
|
+
return ClassMethodCallContainer.new(TheoryStatementClass.new,New.new)
|
22
|
+
end
|
23
|
+
|
24
|
+
def class_method_calls(available=[])
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
class ParserClass < ClassName
|
30
|
+
|
31
|
+
def initialize
|
32
|
+
super
|
33
|
+
end
|
34
|
+
|
35
|
+
def write(context=nil)
|
36
|
+
return 'Parser'
|
37
|
+
end
|
38
|
+
|
39
|
+
def copy
|
40
|
+
return ParserClass.new
|
41
|
+
end
|
42
|
+
|
43
|
+
def value
|
44
|
+
return parser
|
45
|
+
end
|
46
|
+
|
47
|
+
# TODO I'm not sure if this is needed
|
48
|
+
def declaration_statement
|
49
|
+
return ClassMethodCallContainer.new(ParserClass.new,New.new)
|
50
|
+
end
|
51
|
+
|
52
|
+
def class_method_calls(available=[])
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
class AdditionClass < ClassName
|
58
|
+
|
59
|
+
def initialize
|
60
|
+
super
|
61
|
+
end
|
62
|
+
|
63
|
+
def write(context=nil)
|
64
|
+
return 'Addition'
|
65
|
+
end
|
66
|
+
|
67
|
+
def copy
|
68
|
+
return AdditionClass.new
|
69
|
+
end
|
70
|
+
|
71
|
+
def value
|
72
|
+
return Addition.class
|
73
|
+
end
|
74
|
+
|
75
|
+
def declaration_statement
|
76
|
+
return ClassMethodCallContainer.new(AdditionClass.new,New.new)
|
77
|
+
end
|
78
|
+
|
79
|
+
def class_method_calls(available=[])
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
class CTestCaseClass < ClassName
|
85
|
+
|
86
|
+
def initialize
|
87
|
+
super
|
88
|
+
end
|
89
|
+
|
90
|
+
def write(context=nil)
|
91
|
+
return 'CTestCase'
|
92
|
+
end
|
93
|
+
|
94
|
+
def value
|
95
|
+
return CTestCase.class
|
96
|
+
end
|
97
|
+
|
98
|
+
def declaration_statement
|
99
|
+
return ClassMethodCallContainer.new(CTestCaseClass.new,New.new)
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
class FixnumClass < ClassName
|
105
|
+
|
106
|
+
def initialize
|
107
|
+
super
|
108
|
+
end
|
109
|
+
|
110
|
+
def write(context=nil)
|
111
|
+
return 'Fixnum'
|
112
|
+
end
|
113
|
+
|
114
|
+
def value
|
115
|
+
return CTestCase.class
|
116
|
+
end
|
117
|
+
|
118
|
+
def declaration_statement
|
119
|
+
return ClassMethodCallContainer.new(FixnumClass.new,New.new)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
@@ -0,0 +1,300 @@
|
|
1
|
+
|
2
|
+
module ActsAsRuntimeMethod
|
3
|
+
include WriteParameters
|
4
|
+
|
5
|
+
# TODO Write tests
|
6
|
+
# Returns a variable instance with the id specified. This essential just finds the varialbe
|
7
|
+
# at the last line of the method.
|
8
|
+
#
|
9
|
+
# @param id The uniq id of the variable that is being looked for - this should be the unique
|
10
|
+
# variable id.
|
11
|
+
#
|
12
|
+
def find_variable(uniq_id)
|
13
|
+
#return find_variable_at_line(id,self.length)
|
14
|
+
#statement_count
|
15
|
+
# TODO I don't know whether I should be using statement_count, self.length or line_count
|
16
|
+
#return find_variable_at_line(id,self.length)
|
17
|
+
|
18
|
+
# TODO I don't know if progressively building up the method is necessary now
|
19
|
+
|
20
|
+
# TODO This method can probably be just used in StatementGroup and shared between nested statement
|
21
|
+
# and runtime method.
|
22
|
+
self.each do |x|
|
23
|
+
|
24
|
+
# TODO SHould be unique variable id
|
25
|
+
if x.kind_of?(Statement)
|
26
|
+
if x.created_variable.uniq_id == uniq_id
|
27
|
+
temp = x.find_actual_variable(uniq_id)
|
28
|
+
return temp.copy
|
29
|
+
end
|
30
|
+
next
|
31
|
+
end
|
32
|
+
if x.kind_of?(BlockStatement)
|
33
|
+
begin
|
34
|
+
# TODO Write tests for this using uniq_id
|
35
|
+
return x.find_variable(uniq_id)
|
36
|
+
# TODO Should have a custom FailedToFindVariable error or similar
|
37
|
+
rescue StandardError
|
38
|
+
next
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
raise FailedToFindVariableError.new('Unable to find variable '+uniq_id.to_s+' in method '+method_id.to_s)
|
43
|
+
end
|
44
|
+
|
45
|
+
# TODO Write tests esp when I start to bring out varients of the same variable
|
46
|
+
#
|
47
|
+
def find_statement_that_declares_variable(variable_id)
|
48
|
+
self.each do |x|
|
49
|
+
if x.kind_of?(Statement)
|
50
|
+
if x.declared_variable_id == variable_id then return x.copy end
|
51
|
+
next
|
52
|
+
end
|
53
|
+
if x.kind_of?(BlockStatement)
|
54
|
+
begin
|
55
|
+
return x.find_statement_that_declares_variable(variable_id)
|
56
|
+
rescue StandardError
|
57
|
+
next
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
raise StandardError.new('Failed to find statement that declared variable '+variable_id.to_s)
|
62
|
+
end
|
63
|
+
|
64
|
+
# TODO Write tests
|
65
|
+
def find_statement_that_created_variable(uniq_id)
|
66
|
+
self.each do |x|
|
67
|
+
if x.kind_of?(Statement)
|
68
|
+
if x.created_variable.uniq_id == uniq_id then return x.copy end
|
69
|
+
next
|
70
|
+
end
|
71
|
+
if x.kind_of?(BlockStatement)
|
72
|
+
begin
|
73
|
+
return x.find_statement_that_created_variable(variable_id)
|
74
|
+
rescue StandardError
|
75
|
+
next
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
raise StandardError.new('Failed to find statement that created variable with uniq id '+uniq_id.to_s)
|
80
|
+
end
|
81
|
+
|
82
|
+
def method_name
|
83
|
+
return 'method_'+@method_id.to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
# Writes out the runtime method for general use. If the parameters are supplied
|
87
|
+
# then they are used, otherwise the methods usage parameters are used.
|
88
|
+
#
|
89
|
+
# @param params
|
90
|
+
# @param tab
|
91
|
+
# @param additional_comments
|
92
|
+
#
|
93
|
+
def write(params=nil,tab=0,additional_comments=nil)
|
94
|
+
|
95
|
+
# Check that the paramters have been defined for the method before it can be written
|
96
|
+
# raise_if_parameters_missing
|
97
|
+
raise StandardError.new('Incorrect use of write ') if params.kind_of?(Fixnum)
|
98
|
+
|
99
|
+
line = "\n"
|
100
|
+
tab.times {|x| line += "\t" }
|
101
|
+
line += "#\n"
|
102
|
+
|
103
|
+
if params.nil?
|
104
|
+
|
105
|
+
@usage.each_with_index do |var,i|
|
106
|
+
|
107
|
+
tab.times {|x| line += "\t" }
|
108
|
+
line += "#\t@param\t"
|
109
|
+
|
110
|
+
# Get a description of the requirements (this can multiple lines)
|
111
|
+
line_prefix = ''
|
112
|
+
desc = var.describe(tab)
|
113
|
+
desc.each_line do |l|
|
114
|
+
line += line_prefix+l
|
115
|
+
|
116
|
+
# Assides the first line pre-fix a "# " to the start
|
117
|
+
(tab-1).times {|x| line += "\t" }
|
118
|
+
line_prefix = "#\t\t\t"
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
else
|
125
|
+
|
126
|
+
params.each_with_index do |var,i|
|
127
|
+
tab.times {|x| line += "\t" }
|
128
|
+
line += "#\t@param\t"
|
129
|
+
|
130
|
+
# Get a description of the requirements (this can multiple lines)
|
131
|
+
line_prefix = ''
|
132
|
+
|
133
|
+
desc = var.describe(tab)
|
134
|
+
desc.each_line do |l|
|
135
|
+
line += line_prefix+l
|
136
|
+
|
137
|
+
# Assides the first line pre-fix a "# " to the start
|
138
|
+
(tab-1).times {|x| line += "\t" }
|
139
|
+
line_prefix = "#\t\t\t"
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
# Add some some additional comment if supplied
|
148
|
+
unless additional_comments.nil?
|
149
|
+
tab.times {|x| line += "\t" }
|
150
|
+
line += "#"
|
151
|
+
tab.times {|x| line += "\t" }
|
152
|
+
line += additional_comments+"\n"
|
153
|
+
end
|
154
|
+
|
155
|
+
tab.times {|x| line += "\t" }
|
156
|
+
line += "#\n"
|
157
|
+
|
158
|
+
tab.times {|x| line += "\t"}
|
159
|
+
line += basic_write(tab)
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
def basic_write(tab=0)
|
164
|
+
line = ''
|
165
|
+
line += 'def '+method_name
|
166
|
+
|
167
|
+
#line += write_params(@parameters)
|
168
|
+
line += write_params(@usage)
|
169
|
+
line += "\n"
|
170
|
+
|
171
|
+
# Write out any statements within the method
|
172
|
+
self.each do |statement|
|
173
|
+
line += statement.write(tab+1)+"\n"
|
174
|
+
end
|
175
|
+
line += "\n" if self.empty?
|
176
|
+
|
177
|
+
# Close the method
|
178
|
+
tab.times {|x| line += "\t" }
|
179
|
+
line += "end"+"\n"
|
180
|
+
|
181
|
+
return line
|
182
|
+
end
|
183
|
+
|
184
|
+
# [DEBUG] Does the same as the write method but includes the uniq_id
|
185
|
+
#
|
186
|
+
# TODO This duplicates allot of the code in write
|
187
|
+
#
|
188
|
+
def write_with_uniq_id(params=nil,tab=0,additional_comments=nil)
|
189
|
+
|
190
|
+
# Check that the paramters have been defined for the method before it can be written
|
191
|
+
# raise_if_parameters_missing
|
192
|
+
raise StandardError.new('Incorrect use of write ') if params.kind_of?(Fixnum)
|
193
|
+
|
194
|
+
line = "\n"
|
195
|
+
tab.times {|x| line += "\t" }
|
196
|
+
line += "#\n"
|
197
|
+
|
198
|
+
if params.nil?
|
199
|
+
|
200
|
+
@usage.each_with_index do |var,i|
|
201
|
+
|
202
|
+
tab.times {|x| line += "\t" }
|
203
|
+
line += "#\t@param\t"
|
204
|
+
|
205
|
+
# Get a description of the requirements (this can multiple lines)
|
206
|
+
line_prefix = ''
|
207
|
+
desc = var.describe(tab)
|
208
|
+
desc.each_line do |l|
|
209
|
+
line += line_prefix+l
|
210
|
+
|
211
|
+
# Assides the first line pre-fix a "# " to the start
|
212
|
+
(tab-1).times {|x| line += "\t" }
|
213
|
+
line_prefix = "#\t\t\t"
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
218
|
+
|
219
|
+
else
|
220
|
+
|
221
|
+
params.each_with_index do |var,i|
|
222
|
+
tab.times {|x| line += "\t" }
|
223
|
+
line += "#\t@param\t"
|
224
|
+
|
225
|
+
# Get a description of the requirements (this can multiple lines)
|
226
|
+
line_prefix = ''
|
227
|
+
|
228
|
+
desc = var.describe(tab)
|
229
|
+
desc.each_line do |l|
|
230
|
+
line += line_prefix+l
|
231
|
+
|
232
|
+
# Assides the first line pre-fix a "# " to the start
|
233
|
+
(tab-1).times {|x| line += "\t" }
|
234
|
+
line_prefix = "#\t\t\t"
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
# Add some some additional comment if supplied
|
243
|
+
unless additional_comments.nil?
|
244
|
+
tab.times {|x| line += "\t" }
|
245
|
+
line += "#"
|
246
|
+
tab.times {|x| line += "\t" }
|
247
|
+
line += additional_comments+"\n"
|
248
|
+
end
|
249
|
+
|
250
|
+
tab.times {|x| line += "\t" }
|
251
|
+
line += "#\n"
|
252
|
+
|
253
|
+
tab.times {|x| line += "\t"}
|
254
|
+
line += 'def '+method_name
|
255
|
+
|
256
|
+
#line += write_params(@parameters)
|
257
|
+
line += write_params(@usage)
|
258
|
+
line += "\n"
|
259
|
+
|
260
|
+
# Write out any statements within the method
|
261
|
+
self.each do |statement|
|
262
|
+
line += statement.write_with_uniq_id(tab+1)+"\n"
|
263
|
+
end
|
264
|
+
line += "\n" if self.empty?
|
265
|
+
|
266
|
+
# Close the method
|
267
|
+
tab.times {|x| line += "\t" }
|
268
|
+
line += "end"+"\n"
|
269
|
+
|
270
|
+
return line
|
271
|
+
|
272
|
+
end
|
273
|
+
|
274
|
+
# Returns an array of variables currently available in the
|
275
|
+
# method. Essentially this is all the variables after the
|
276
|
+
# last statement. This is a little crude since it doesn't
|
277
|
+
# take into account if statements or loops.
|
278
|
+
#
|
279
|
+
def available_variables(params=[])
|
280
|
+
|
281
|
+
# raise StandardError.new('The parameters have not been set for this method') if @parameters.nil?
|
282
|
+
collected_variables = []
|
283
|
+
collected_variables += params
|
284
|
+
self.each do |statement|
|
285
|
+
|
286
|
+
# Nested statements don't provide any variables for the end of the method
|
287
|
+
next if statement.kind_of?(BlockStatement)
|
288
|
+
next if statement.kind_of?(OpenStatement)
|
289
|
+
|
290
|
+
statement.each_variable do |var|
|
291
|
+
unless collected_variables.any? {|known_var| known_var.variable_id == var.variable_id}
|
292
|
+
collected_variables.push(var.copy)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
296
|
+
return collected_variables
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
end
|