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,39 @@
|
|
1
|
+
class Fixnum
|
2
|
+
|
3
|
+
def to_var(id=nil,uniq_id=nil)
|
4
|
+
return FixnumVariable.new(self,id) {{:variable_id => id,:uniq_id=>uniq_id}}
|
5
|
+
end
|
6
|
+
|
7
|
+
def copy
|
8
|
+
return self
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_declaration
|
12
|
+
return LiteralDeclaration.new(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def write
|
16
|
+
return self.to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
def describe
|
20
|
+
write
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_literal
|
24
|
+
return Literal.new(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_literal_string
|
28
|
+
return write
|
29
|
+
end
|
30
|
+
|
31
|
+
def cauldron_method_calls
|
32
|
+
return ['.kind_of?']
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_intrinsic
|
36
|
+
return IntrinsicLiteral.new(self)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
def write
|
4
|
+
#raise StandardError.new('No "write" method has been created for '+self.class.to_s) unless self.class.to_s == 'Hash'
|
5
|
+
line = '{'
|
6
|
+
count = 0
|
7
|
+
self.each do |x,y|
|
8
|
+
line += x.write+'=>'+y.write
|
9
|
+
count += 1
|
10
|
+
next if count == self.length
|
11
|
+
line += ','
|
12
|
+
end
|
13
|
+
line += '}'
|
14
|
+
return line
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy
|
18
|
+
raise StandardError.new('No "copy" method has been created for '+self.class.to_s) unless self.class.to_s == 'Hash'
|
19
|
+
return self.inject({}) do |x,(key,value)|
|
20
|
+
x[key] = value
|
21
|
+
x
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class NilClass
|
2
|
+
|
3
|
+
def to_var(id=nil)
|
4
|
+
return NilVariable.new(id) {{:variable_id => id,:uniq_id=>nil}}
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_declaration
|
8
|
+
return LiteralDeclaration.new(nil)
|
9
|
+
end
|
10
|
+
|
11
|
+
def write
|
12
|
+
return 'nil'
|
13
|
+
end
|
14
|
+
|
15
|
+
def copy
|
16
|
+
return self
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Object
|
2
|
+
|
3
|
+
# This is a more useful 'public_methods' since it excludes
|
4
|
+
# the standard methods inheritated from the Object super
|
5
|
+
# class.
|
6
|
+
#
|
7
|
+
#def uniq_public_methods
|
8
|
+
# obj = Object.new
|
9
|
+
# return self.public_methods - obj.public_methods
|
10
|
+
#end
|
11
|
+
|
12
|
+
# Use p406
|
13
|
+
# Example.private_instance_methods(false)
|
14
|
+
# Example.public_instance_methods(false)
|
15
|
+
|
16
|
+
def instance_call_structures
|
17
|
+
return []
|
18
|
+
end
|
19
|
+
|
20
|
+
def cauldron_method_calls
|
21
|
+
return []
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
class String
|
2
|
+
|
3
|
+
def copy
|
4
|
+
return self.clone
|
5
|
+
end
|
6
|
+
|
7
|
+
def declaration_statement
|
8
|
+
return Statement.new(self.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def write
|
12
|
+
x = self.escape_single_quotes
|
13
|
+
return '\''+x+'\''
|
14
|
+
end
|
15
|
+
|
16
|
+
# TODO Write tests
|
17
|
+
def instance_call_structures
|
18
|
+
return [
|
19
|
+
InstanceCallContainerStructure.new(StringVariable,Chop.new),
|
20
|
+
InstanceCallContainerStructure.new(StringVariable,StringLength.new)
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
# @param id You can specify the id of the newly created variable
|
26
|
+
#
|
27
|
+
def to_var(var_id=nil,unique_id=nil)
|
28
|
+
return StringVariable.new(self,var_id){{:variable_id => var_id,:uniq_id=>unique_id}}
|
29
|
+
end
|
30
|
+
|
31
|
+
# TODO This might have been superceeded by "to_declaration"
|
32
|
+
def creation
|
33
|
+
return self.write
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_declaration
|
37
|
+
return LiteralDeclaration.new(self.clone)
|
38
|
+
end
|
39
|
+
|
40
|
+
def to_literal_string
|
41
|
+
return write
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_literal
|
45
|
+
return Literal.new(self.clone)
|
46
|
+
end
|
47
|
+
|
48
|
+
# TODO Write tests
|
49
|
+
# Returns a requirement instance declaring this as a literal.
|
50
|
+
#
|
51
|
+
# Example 'test'.to_requirement -> Requirement.new(This.new,Equivalent.new,'test'.to_literal)
|
52
|
+
#
|
53
|
+
def to_requirement
|
54
|
+
return Requirement.new(This.new,Equivalent.new,self.to_literal)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Returns a statement declaring a variable with the value of
|
58
|
+
# this string e.g.
|
59
|
+
#
|
60
|
+
# 'Sparky'.to_declaration_statement -> var_x = 'Sparky'
|
61
|
+
#
|
62
|
+
def to_declared_variable_statement
|
63
|
+
return Statement.new(StringVariable.new(self),Equal.new,self.to_declaration)
|
64
|
+
end
|
65
|
+
|
66
|
+
# http://snippets.dzone.com/posts/show/880
|
67
|
+
# TODO There is a BASH command `quote` and `quote_readline` that
|
68
|
+
# might be more useful here.
|
69
|
+
def escape_single_quotes
|
70
|
+
# TODO I don't properly follow this
|
71
|
+
return self.gsub(/[']/, '\\\\\'')
|
72
|
+
end
|
73
|
+
|
74
|
+
def cauldron_method_calls
|
75
|
+
return ['.length']
|
76
|
+
end
|
77
|
+
|
78
|
+
protected
|
79
|
+
|
80
|
+
def identify(x)
|
81
|
+
# Check if it is a assignment
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
data/lib/theories.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
|
2
|
+
# TODO Not so keen on loading each theory in super - rather do it in the methods
|
3
|
+
# it is needed.
|
4
|
+
|
5
|
+
# TODO Allot of this functionalty should be moved to the rake tasks
|
6
|
+
|
7
|
+
module ContainsTheories
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@theory_1 = Theory.load_theory(1)
|
11
|
+
@theory_2 = Theory.load_theory(2)
|
12
|
+
@theory_3 = Theory.load_theory(3)
|
13
|
+
end
|
14
|
+
|
15
|
+
def load_theory_implementation(implementation_id)
|
16
|
+
directory_path = $LOC+File.join('test','fixtures','theory_implementations',implementation_id.to_s)
|
17
|
+
raise StandardError.new("Theory fixture #{implementation_id} does not exist") unless(File.exists?(directory_path))
|
18
|
+
dump_file = File.open(File.join(directory_path,'dump'),'r')
|
19
|
+
return Marshal.load(dump_file.read)
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_theory_implementation
|
23
|
+
|
24
|
+
theory = Theory.load_theory(6)
|
25
|
+
potential_values = [
|
26
|
+
Parser.run('test_cases[0][:params][0]'),
|
27
|
+
Parser.run('test_cases[0][:params]'),
|
28
|
+
Parser.run('test_cases[0][:output]'),
|
29
|
+
Parser.run('test_cases[0]'),
|
30
|
+
Parser.run('test_cases'),
|
31
|
+
Parser.run('runtime_method')
|
32
|
+
]
|
33
|
+
results = theory.rewrite_permutations(potential_values)
|
34
|
+
# NOTE: Rember use grep -A and -B to match particular cases
|
35
|
+
implemented_theory = results[332]
|
36
|
+
return implemented_theory
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def save_theory_implementation(implementation_id,theory_id,implementation=nil)
|
41
|
+
StandardLogger.instance.warning("Caution: Creating new theory implementation #{implementation_id}")
|
42
|
+
directory_path = $LOC+File.join('test','fixtures','theory_implementations',implementation_id.to_s)
|
43
|
+
if(File.exists?(directory_path))
|
44
|
+
StandardLogger.instance.warning("Theory Implementation ficture already exists #{theory_id} -cancelling")
|
45
|
+
return
|
46
|
+
else
|
47
|
+
FileUtils.mkdir_p(directory_path)
|
48
|
+
end
|
49
|
+
|
50
|
+
if implementation.nil? then implementation = create_theory_implementation end
|
51
|
+
|
52
|
+
desc_file = File.open(File.join(directory_path,'desc.txt'),'w')
|
53
|
+
desc_file << implementation.describe
|
54
|
+
desc_file.close
|
55
|
+
|
56
|
+
dump_file = File.open(File.join(directory_path,'dump'),'w')
|
57
|
+
data = Marshal.dump(implementation)
|
58
|
+
dump_file << data
|
59
|
+
dump_file.close
|
60
|
+
|
61
|
+
dump_file = File.open(File.join(directory_path,'theory_id'),'w')
|
62
|
+
dump_file << theory_id.to_s
|
63
|
+
dump_file.close
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def load_implementation_result(result_id)
|
68
|
+
directory_path = $LOC+File.join('test','fixtures','implementation_results',result_id.to_s)
|
69
|
+
raise StandardError.new("ImplementationResult fixture #{result_id} does not exist") unless(File.exists?(directory_path))
|
70
|
+
dump_file = File.open(File.join(directory_path,'dump'),'r')
|
71
|
+
return Marshal.load(dump_file)
|
72
|
+
end
|
73
|
+
|
74
|
+
# This method is used on to create a theory fixture for use in the test
|
75
|
+
def create_theory
|
76
|
+
|
77
|
+
theory_id = "16"
|
78
|
+
|
79
|
+
StandardLogger.instance.warning("NOTE: Creating new theory fixture #{theory_id.to_s}")
|
80
|
+
# Does a directory for this theory fixture already exist.
|
81
|
+
directory_path = $LOC+File.join('test','fixtures','theories',theory_id.to_s)
|
82
|
+
if(File.exists?(directory_path))
|
83
|
+
StandardLogger.instance.warning("Theory ficture already exists #{theory_id.to_s} -cancelling")
|
84
|
+
return
|
85
|
+
else
|
86
|
+
|
87
|
+
# Create the directory
|
88
|
+
FileUtils.mkdir_p(directory_path)
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
# This is just updated here - nothing fancy
|
93
|
+
declaration = %q!
|
94
|
+
dependent_one = TheoryDependent.new(
|
95
|
+
StringToTheory.run(
|
96
|
+
"if(var1.kind_of?(RuntimeMethod))\nreturn true\nend"
|
97
|
+
)
|
98
|
+
)
|
99
|
+
dependent_two = TheoryDependent.new(
|
100
|
+
StringToTheory.run(
|
101
|
+
"if(var3[var4].kind_of?(CTestCase))\nreturn true\nend"
|
102
|
+
)
|
103
|
+
)
|
104
|
+
action = TheoryAction.new(
|
105
|
+
TheoryStatement.new(
|
106
|
+
StringToTheory.run(
|
107
|
+
'BlockStatement.new(Statement.new(InstanceCallContainer.new(Container.new(InstanceCallContainer.new(var1.params[var2],StringLength.new),Subtract.new,1),Times.new)))'
|
108
|
+
)
|
109
|
+
),
|
110
|
+
StringToTheory.run('var1.statement_id')
|
111
|
+
)
|
112
|
+
result_one = TheoryResult.new(
|
113
|
+
StringToTheory.run(
|
114
|
+
"if(var1.history2(var3[var4]).select {|x| x['statement_id'] == var3.last.statement_id} == var3[var4][:params][var2].length-1)\nreturn true\nend"
|
115
|
+
)
|
116
|
+
)
|
117
|
+
Theory.new(
|
118
|
+
[dependent_one,dependent_two],
|
119
|
+
action,
|
120
|
+
[result_one]
|
121
|
+
)
|
122
|
+
!
|
123
|
+
|
124
|
+
# Save the declaration (incase the theory needs modified
|
125
|
+
declaration_file = File.open(File.join(directory_path,'declaration.txt'),'w+')
|
126
|
+
declaration_file << declaration
|
127
|
+
declaration_file.close
|
128
|
+
|
129
|
+
theory = eval declaration
|
130
|
+
data = Marshal.dump(theory)
|
131
|
+
|
132
|
+
# TODO Shouldn't include colours for this description
|
133
|
+
desc_file = File.open(File.join(directory_path,'desc'),'w+')
|
134
|
+
desc_file << theory.describe
|
135
|
+
desc_file.close
|
136
|
+
|
137
|
+
dump_file = File.open(File.join(directory_path,'dump'),'w+')
|
138
|
+
dump_file << data
|
139
|
+
dump_file.close
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ActionImplementation < TheoryAction
|
2
|
+
|
3
|
+
attr_reader :target_id
|
4
|
+
|
5
|
+
def initialize(statement,target_id,theory_component_id=nil)
|
6
|
+
super(statement,target_id,theory_component_id)
|
7
|
+
end
|
8
|
+
|
9
|
+
def copy
|
10
|
+
return ActionImplementation.new(@action.copy,@target_id.copy,@theory_component_id)
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(tab=0)
|
14
|
+
return ("\t"*tab)+"runtime_method.add_statement_at(#{@action.write},#{@target_id.write})"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# The theory action represents the what theory inserts into the
|
2
|
+
# main runtime method.
|
3
|
+
#
|
4
|
+
class TheoryAction
|
5
|
+
include TheoryComponent
|
6
|
+
|
7
|
+
attr_reader :target_id, :action
|
8
|
+
#
|
9
|
+
# @param action A statement to insert into the main runtime method.
|
10
|
+
# e.g. action.write => "return var8"
|
11
|
+
# @param target_id The id of the nested statement or method to add the generated statement to.
|
12
|
+
#
|
13
|
+
def initialize(action,target_id,theory_component_id=nil)
|
14
|
+
raise StandardError.new('Expecting theory statement but was '+action.class.to_s) unless action.kind_of?(TheoryStatement)
|
15
|
+
@action = action
|
16
|
+
@target_id = target_id
|
17
|
+
@theory_component_id = theory_component_id unless theory_component_id.nil?
|
18
|
+
generate_theory_component_id
|
19
|
+
end
|
20
|
+
|
21
|
+
# Provide a general description of the action, explaining the statement
|
22
|
+
# it will add to the runtime method and where. This is pseudo code
|
23
|
+
# and shouldn't be interpretted at runtime. Use "write" for runtime
|
24
|
+
# actions.
|
25
|
+
#
|
26
|
+
# @param tab
|
27
|
+
#
|
28
|
+
def describe(tab=0)
|
29
|
+
# TODO That is nicer way to do tabs - I should make the other methods consistent with it
|
30
|
+
return ("\t"*tab)+"<runtime_method>.add_statement_at(#{@action.describe},#{@target_id.describe})"
|
31
|
+
end
|
32
|
+
|
33
|
+
def write(tab=0)
|
34
|
+
return ("\t"*tab)+"<runtime_method>.add_statement_at(#{@action.write},#{@target_id.write})"
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns all the theory vairables in this theory action
|
38
|
+
#
|
39
|
+
def theory_variables
|
40
|
+
return @action.select_all {|x| x.kind_of?(TheoryVariable)}
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns a action implementation with the theory variable declarations replaced with
|
44
|
+
# the values in the mapping hash.
|
45
|
+
#
|
46
|
+
def map_to(mapping)
|
47
|
+
|
48
|
+
# Duplicate the current statement before it is rewritten
|
49
|
+
rewritten_statement = @action.copy
|
50
|
+
target_id = @target_id.copy
|
51
|
+
|
52
|
+
# Find all containers of VariableDeclarations that declare a TheoryVariable
|
53
|
+
containers = [rewritten_statement,target_id].select_all {|x| x.respond_to?(:has?)}
|
54
|
+
theory_variable_containers = containers.select {|x| x.has? {|y| y.kind_of?(TheoryVariable)}}
|
55
|
+
|
56
|
+
# Rewrite the statement replacing the values
|
57
|
+
theory_variable_containers.each do |z|
|
58
|
+
z.replace_theory_variables!(mapping)
|
59
|
+
end
|
60
|
+
|
61
|
+
return ActionImplementation.new(rewritten_statement,target_id,@theory_component_id)
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
def copy
|
66
|
+
return TheoryAction.new(@action.copy,@target_id,@theory_component_id)
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
end
|