cauldron 0.1.3 → 0.1.5
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/.gitignore +51 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +16 -3
- data/Rakefile +94 -92
- data/VERSION +1 -1
- data/bin/cauldron +2 -2
- data/cauldron.gemspec +15 -451
- data/features/cauldron_new_approach.feature +46 -0
- data/features/step_definitions/cauldron_steps.rb +11 -0
- data/features/step_definitions/terminal_steps.rb +0 -2
- data/features/support/env.rb +11 -1
- data/features/support/hooks.rb +5 -0
- data/lib/cauldron.rb +13 -7
- data/lib/cauldron/array_reverse_operator.rb +39 -0
- data/lib/cauldron/concat_operator.rb +34 -0
- data/lib/cauldron/if_relationship.rb +37 -0
- data/lib/cauldron/numeric_operator.rb +45 -0
- data/lib/cauldron/pot.rb +54 -162
- data/lib/cauldron/relationship.rb +5 -0
- data/lib/cauldron/terminal.rb +4 -60
- data/lib/cauldron/version.rb +3 -0
- data/lib/core/string.rb +21 -0
- data/sandbox.rb +27 -6
- data/spec/cauldron/array_reverse_operator_spec.rb +59 -0
- data/spec/cauldron/concat_operator_spec.rb +89 -0
- data/spec/cauldron/if_relationship_spec.rb +25 -0
- data/spec/cauldron/numeric_operator_spec.rb +70 -0
- data/spec/cauldron/pot_spec.rb +81 -151
- data/spec/cauldron/terminal_spec.rb +1 -39
- data/spec/examples/adding_if_statement.yml +13 -0
- data/spec/examples/simple_head_theory.txt +13 -0
- data/spec/spec_helper.rb +1 -14
- data/tasks/theory_tasks.rake +207 -207
- metadata +92 -532
- data/cauldron/.autotest +0 -23
- data/cauldron/History.txt +0 -6
- data/cauldron/Manifest.txt +0 -8
- data/cauldron/README.txt +0 -57
- data/cauldron/Rakefile +0 -27
- data/cauldron/bin/cauldron +0 -3
- data/cauldron/lib/cauldron.rb +0 -3
- data/cauldron/test/test_cauldron.rb +0 -8
- data/features/cauldron_example_cases.feature +0 -13
- data/features/cauldron_generates_runtime_method.feature +0 -16
- data/features/cauldron_generates_single_paramter_methods.feature +0 -25
- data/features/cauldron_interactive_start_terminal.feature +0 -17
- data/features/cauldron_quit_terminal.feature +0 -9
- data/features/cauldron_start_terminal.feature +0 -12
- data/features/support/method_1.example +0 -3
- data/features/support/method_2.example +0 -6
- data/lib/Chain.rb +0 -771
- data/lib/ChainMapping.rb +0 -172
- data/lib/CodeHandler.rb +0 -513
- data/lib/Mapping.rb +0 -27
- data/lib/MappingValues.rb +0 -24
- data/lib/PartialChain.rb +0 -253
- data/lib/Theory.rb +0 -295
- data/lib/UnifiedChain.rb +0 -351
- data/lib/cauldron/conversion.rb +0 -15
- data/lib/cauldron/demos.rb +0 -280
- data/lib/cauldron/env.rb +0 -1
- data/lib/cauldron/sexp2cauldron.rb +0 -139
- data/lib/cauldron/theory_factory.rb +0 -10
- data/lib/cauldron/util/home.rb +0 -21
- data/lib/cauldron/util/saver.rb +0 -45
- data/lib/core/ActsAsCode.rb +0 -25
- data/lib/core/BlockToken.rb +0 -33
- data/lib/core/CCall.rb +0 -7
- data/lib/core/CTestCase.rb +0 -27
- data/lib/core/ClassMethodCallContainer.rb +0 -58
- data/lib/core/Container.rb +0 -95
- data/lib/core/InstanceCallContainer.rb +0 -298
- data/lib/core/MethodUsage.rb +0 -65
- data/lib/core/PrintVariables.rb +0 -25
- data/lib/core/TheoryGenerator.rb +0 -753
- data/lib/core/Token.rb +0 -7
- data/lib/core/assignment/Assignment.rb +0 -18
- data/lib/core/assignment/Equal.rb +0 -39
- data/lib/core/assignment/Equivalent.rb +0 -20
- data/lib/core/assignment/NotEqual.rb +0 -14
- data/lib/core/call_container/CallContainer.rb +0 -72
- data/lib/core/class_method_call/New.rb +0 -15
- data/lib/core/class_method_call/RuntimeClassMethodCall.rb +0 -31
- data/lib/core/declaration/Declaration.rb +0 -16
- data/lib/core/declaration/LiteralDeclaration.rb +0 -47
- data/lib/core/declaration/VariableDeclaration.rb +0 -59
- data/lib/core/instance_call/ArrayEach.rb +0 -23
- data/lib/core/instance_call/ArrayLength.rb +0 -15
- data/lib/core/instance_call/Chop.rb +0 -19
- data/lib/core/instance_call/Copy.rb +0 -22
- data/lib/core/instance_call/DeclaredVariable.rb +0 -18
- data/lib/core/instance_call/InstanceCall.rb +0 -77
- data/lib/core/instance_call/Params.rb +0 -15
- data/lib/core/instance_call/Push.rb +0 -20
- data/lib/core/instance_call/StringLength.rb +0 -32
- data/lib/core/instance_call/Times.rb +0 -20
- data/lib/core/instance_call/instance_calls.rb +0 -176
- data/lib/core/instance_call/length_equal.rb +0 -15
- data/lib/core/kernal/EvalCall.rb +0 -15
- data/lib/core/kernal/LocalVariablesCall.rb +0 -15
- data/lib/core/literal/Literal.rb +0 -111
- data/lib/core/literal/Raw.rb +0 -23
- data/lib/core/literal/RuntimeMethodLiteral.rb +0 -21
- data/lib/core/literal/StatementLiteral.rb +0 -28
- data/lib/core/method_call/AvailableVariablesCall.rb +0 -25
- data/lib/core/method_call/ClassCall.rb +0 -33
- data/lib/core/method_call/DefCall.rb +0 -72
- data/lib/core/method_call/EvaluateClassCall.rb +0 -29
- data/lib/core/method_call/MethodNameCall.rb +0 -27
- data/lib/core/method_call/ToDeclarationCall.rb +0 -15
- data/lib/core/requirement/Requirement.rb +0 -292
- data/lib/core/runtime_class/ArrayClass.rb +0 -19
- data/lib/core/runtime_class/ClassCallClass.rb +0 -23
- data/lib/core/runtime_class/ClassEvaluationClass.rb +0 -19
- data/lib/core/runtime_class/ClassName.rb +0 -18
- data/lib/core/runtime_class/DefCallClass.rb +0 -21
- data/lib/core/runtime_class/EqualClass.rb +0 -19
- data/lib/core/runtime_class/FixnumClass.rb +0 -15
- data/lib/core/runtime_class/InstanceCallClass.rb +0 -19
- data/lib/core/runtime_class/InstanceCallContainerClass.rb +0 -16
- data/lib/core/runtime_class/InstanceClassCallClass.rb +0 -19
- data/lib/core/runtime_class/LiteralClass.rb +0 -19
- data/lib/core/runtime_class/MethodParameterClass.rb +0 -27
- data/lib/core/runtime_class/MethodUsageClass.rb +0 -27
- data/lib/core/runtime_class/RequirementClass.rb +0 -19
- data/lib/core/runtime_class/ReturnClass.rb +0 -21
- data/lib/core/runtime_class/RuntimeClass.rb +0 -30
- data/lib/core/runtime_class/RuntimeClassClass.rb +0 -19
- data/lib/core/runtime_class/RuntimeMethodClass.rb +0 -34
- data/lib/core/runtime_class/StatementClass.rb +0 -53
- data/lib/core/runtime_class/StringClass.rb +0 -23
- data/lib/core/runtime_class/StringLengthClass.rb +0 -19
- data/lib/core/runtime_class/StringVariableClass.rb +0 -19
- data/lib/core/runtime_class/ThisClass.rb +0 -15
- data/lib/core/runtime_class/UnknownClass.rb +0 -23
- data/lib/core/runtime_class/class_names.rb +0 -95
- data/lib/core/runtime_class/runtime_class.rb +0 -123
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +0 -293
- data/lib/core/runtime_method/ParametersContainer.rb +0 -29
- data/lib/core/runtime_method/RealisedRuntimeMethod.rb +0 -94
- data/lib/core/runtime_method/RuntimeMethod.rb +0 -814
- data/lib/core/runtime_method/WriteParameters.rb +0 -35
- data/lib/core/statement/ActsAsStatement.rb +0 -20
- data/lib/core/statement/ArrayAccess.rb +0 -122
- data/lib/core/statement/BlockStatement.rb +0 -348
- data/lib/core/statement/DeclarationStatement.rb +0 -19
- data/lib/core/statement/HackStatement.rb +0 -25
- data/lib/core/statement/HashAccess.rb +0 -18
- data/lib/core/statement/OpenStatement.rb +0 -178
- data/lib/core/statement/RealisedStatement.rb +0 -5
- data/lib/core/statement/SingleLineBlockStatement.rb +0 -39
- data/lib/core/statement/Statement.rb +0 -1091
- data/lib/core/statement/StatementGroup.rb +0 -157
- data/lib/core/statement/StatementStructure2.rb +0 -224
- data/lib/core/statement/TheoryStatement.rb +0 -68
- data/lib/core/statement/TopologicalStatements.rb +0 -34
- data/lib/core/syntax/Addition.rb +0 -26
- data/lib/core/syntax/BlockContainer.rb +0 -102
- data/lib/core/syntax/Boolean.rb +0 -15
- data/lib/core/syntax/Code.rb +0 -11
- data/lib/core/syntax/Do.rb +0 -20
- data/lib/core/syntax/False.rb +0 -12
- data/lib/core/syntax/If.rb +0 -36
- data/lib/core/syntax/Nil.rb +0 -15
- data/lib/core/syntax/Return.rb +0 -33
- data/lib/core/syntax/Subtract.rb +0 -19
- data/lib/core/syntax/This.rb +0 -40
- data/lib/core/syntax/True.rb +0 -20
- data/lib/core/syntax/syntax.rb +0 -24
- data/lib/core/tracking/ActsAsTrackable.rb +0 -65
- data/lib/core/tracking/History.rb +0 -167
- data/lib/core/tracking/RuntimeTrackingMethod.rb +0 -32
- data/lib/core/tracking/Step.rb +0 -52
- data/lib/core/variable/ArrayVariable.rb +0 -76
- data/lib/core/variable/BaseVariable.rb +0 -152
- data/lib/core/variable/BlockVariable.rb +0 -92
- data/lib/core/variable/FixnumVariable.rb +0 -35
- data/lib/core/variable/HistoryVariable.rb +0 -8
- data/lib/core/variable/MethodParameter.rb +0 -179
- data/lib/core/variable/MethodUsageVariable.rb +0 -60
- data/lib/core/variable/NilVariable.rb +0 -29
- data/lib/core/variable/RuntimeMethodParameter.rb +0 -67
- data/lib/core/variable/StatementVariable.rb +0 -72
- data/lib/core/variable/StepVariable.rb +0 -7
- data/lib/core/variable/StringVariable.rb +0 -46
- data/lib/core/variable/TypeVariable.rb +0 -72
- data/lib/core/variable/Unknown.rb +0 -102
- data/lib/core/variable/UnknownVariable.rb +0 -29
- data/lib/core/variable/Variable.rb +0 -70
- data/lib/core/variable/VariableContainer.rb +0 -28
- data/lib/core/variable/VariableIncluded.rb +0 -27
- data/lib/core/variable/VariableReference.rb +0 -85
- data/lib/error/FailedToFindStatementContainerError.rb +0 -7
- data/lib/error/FailedToFindStatementError.rb +0 -7
- data/lib/error/FailedToFindVariableError.rb +0 -7
- data/lib/error/FailedToLiteraliseError.rb +0 -7
- data/lib/error/FailedVariableMatch.rb +0 -7
- data/lib/error/ImproperStatementUsageError.rb +0 -7
- data/lib/error/IncompatiableRequirementsError.rb +0 -7
- data/lib/error/InvalidStatementError.rb +0 -7
- data/lib/error/MethodSizeError.rb +0 -7
- data/lib/error/RuntimeSyntaxError.rb +0 -7
- data/lib/error/UnexpectedStatementTypeError.rb +0 -7
- data/lib/error/UnknownStatementType.rb +0 -7
- data/lib/error/UnliteralisableError.rb +0 -7
- data/lib/implemented_chain.rb +0 -35
- data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +0 -20
- data/lib/intrinsic/IntrinsicLiteral.rb +0 -26
- data/lib/intrinsic/IntrinsicObject.rb +0 -22
- data/lib/intrinsic/IntrinsicRuntimeMethod.rb +0 -27
- data/lib/intrinsic/IntrinsicTestCases.rb +0 -17
- data/lib/logger/StandardLogger.rb +0 -62
- data/lib/required.rb +0 -222
- data/lib/ruby_code/Array.rb +0 -95
- data/lib/ruby_code/Fixnum.rb +0 -39
- data/lib/ruby_code/Hash.rb +0 -25
- data/lib/ruby_code/NilClass.rb +0 -19
- data/lib/ruby_code/Object.rb +0 -24
- data/lib/ruby_code/String.rb +0 -63
- data/lib/ruby_code/Symbol.rb +0 -7
- data/lib/standard_library/Tasks.rb +0 -12
- data/lib/theories.rb +0 -166
- data/lib/theory/ActionImplementation.rb +0 -17
- data/lib/theory/TheoryAction.rb +0 -100
- data/lib/theory/TheoryChainValidator.rb +0 -103
- data/lib/theory/TheoryComponent.rb +0 -59
- data/lib/theory/TheoryConnector.rb +0 -756
- data/lib/theory/TheoryDependent.rb +0 -135
- data/lib/theory/TheoryImplementation.rb +0 -75
- data/lib/theory/TheoryResult.rb +0 -131
- data/lib/theory/TheoryVariable.rb +0 -63
- data/lib/theory/theory_collection.rb +0 -62
- data/lib/util/ClassEvaluation.rb +0 -44
- data/lib/util/CodeEvaluation.rb +0 -39
- data/lib/util/DeclarationStatementEvaluation.rb +0 -32
- data/lib/util/MethodEvaluation.rb +0 -49
- data/lib/util/MethodTester.rb +0 -71
- data/lib/util/MethodValidation.rb +0 -149
- data/lib/util/MethodWriter.rb +0 -66
- data/lib/util/Parser.rb +0 -305
- data/lib/util/StatementCheck.rb +0 -44
- data/lib/util/StringToTheory.rb +0 -142
- data/lib/util/System.rb +0 -8
- data/spec/cauldron/chain_spec.rb +0 -24
- data/spec/cauldron/demos_spec.rb +0 -30
- data/spec/cauldron/runtime_method_spec.rb +0 -92
- data/spec/cauldron/saver_spec.rb +0 -45
- data/spec/cauldron/sexp_2_cauldron_spec.rb +0 -118
- data/spec/cauldron/theory_action_spec.rb +0 -25
- data/spec/cauldron/theory_connector_spec.rb +0 -52
- data/spec/cauldron/theory_spec.rb +0 -59
- data/spec/cauldron/unified_chain_spec.rb +0 -140
- data/test/fixtures/chains/1/declaration.txt +0 -26
- data/test/fixtures/chains/1/dump +0 -0
- data/test/fixtures/chains/2/declaration.txt +0 -26
- data/test/fixtures/chains/2/dump +0 -0
- data/test/fixtures/chains/3/declaration.txt +0 -26
- data/test/fixtures/chains/3/dump +0 -0
- data/test/fixtures/implementation_results/0/declaration.txt +0 -3
- data/test/fixtures/implementation_results/0/dump +0 -0
- data/test/fixtures/theories/0/declaration.txt +0 -9
- data/test/fixtures/theories/0/desc +0 -10
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/declaration.txt +0 -15
- data/test/fixtures/theories/1/desc +0 -11
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/declaration.txt +0 -23
- data/test/fixtures/theories/10/desc +0 -17
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/declaration.txt +0 -20
- data/test/fixtures/theories/11/desc +0 -14
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/declaration.txt +0 -18
- data/test/fixtures/theories/12/desc +0 -12
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/declaration.txt +0 -24
- data/test/fixtures/theories/13/desc +0 -20
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/declaration.txt +0 -26
- data/test/fixtures/theories/14/desc +0 -20
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/declaration.txt +0 -20
- data/test/fixtures/theories/15/desc +0 -14
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/declaration.txt +0 -30
- data/test/fixtures/theories/16/desc +0 -14
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/declaration.txt +0 -25
- data/test/fixtures/theories/17/desc +0 -11
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/declaration.txt +0 -23
- data/test/fixtures/theories/18/desc +0 -11
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/declaration.txt +0 -23
- data/test/fixtures/theories/19/desc +0 -11
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/declaration.txt +0 -12
- data/test/fixtures/theories/2/desc +0 -10
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/declaration.txt +0 -23
- data/test/fixtures/theories/20/desc +0 -17
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/declaration.txt +0 -19
- data/test/fixtures/theories/3/desc +0 -11
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/declaration.txt +0 -11
- data/test/fixtures/theories/4/desc +0 -11
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/declaration.txt +0 -6
- data/test/fixtures/theories/5/desc +0 -9
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/declaration.txt +0 -13
- data/test/fixtures/theories/6/desc +0 -11
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/declaration.txt +0 -19
- data/test/fixtures/theories/7/desc +0 -11
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/declaration.txt +0 -21
- data/test/fixtures/theories/8/desc +0 -11
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/declaration.txt +0 -24
- data/test/fixtures/theories/9/desc +0 -20
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/0/desc.txt +0 -9
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/0/theory_id +0 -1
- data/test/fixtures/theory_implementations/1/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/1/desc.txt +0 -9
- data/test/fixtures/theory_implementations/1/dump +0 -1
- data/test/fixtures/theory_implementations/1/theory_id +0 -1
- data/test/fixtures/theory_implementations/2/declaration.txt +0 -11
- data/test/fixtures/theory_implementations/2/desc.txt +0 -9
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/fixtures/theory_implementations/2/theory_id +0 -1
- data/test/output/simple_method.txt +0 -5
- data/test/output/test_method/first_possible_method.txt +0 -6
- data/test/output/test_simple_cases/simple_case_01.txt +0 -8
- data/test/output/test_simple_cases/simple_case_02.txt +0 -7
- data/test/output/test_simple_cases/simple_case_03.txt +0 -8
- data/test/output/test_simple_cases/simple_case_04.txt +0 -8
- data/test/output/test_simple_cases/simple_case_05.txt +0 -8
- data/test/output/test_simple_cases/simple_case_06.txt +0 -9
- data/test/output/test_simple_cases/simple_case_07.txt +0 -9
- data/test/output/test_simple_cases/simple_case_08.txt +0 -9
- data/test/tc_describe.rb +0 -46
- data/test/tc_method.rb +0 -130
- data/test/tc_requirement.rb +0 -30
- data/test/tc_suite_complete.rb +0 -26
- data/test/tc_variable.rb +0 -52
- data/test/ts_complete.rb +0 -74
- data/test/ts_stable.rb +0 -81
- data/test/unit/core/declaration/tc_literal_declaration.rb +0 -34
- data/test/unit/core/method_call/tc_class_call.rb +0 -20
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +0 -132
- data/test/unit/core/runtime_method/tc_runtime_method.rb +0 -546
- data/test/unit/core/statement/tc_array_access.rb +0 -63
- data/test/unit/core/statement/tc_block_statement.rb +0 -53
- data/test/unit/core/statement/tc_hack_statement.rb +0 -26
- data/test/unit/core/statement/tc_open_statement.rb +0 -79
- data/test/unit/core/statement/tc_statement.rb +0 -483
- data/test/unit/core/statement/tc_statement_group.rb +0 -35
- data/test/unit/core/statement/tc_statement_replace_variable.rb +0 -61
- data/test/unit/core/statement/tc_theory_statement.rb +0 -53
- data/test/unit/core/syntax/tc_block_container.rb +0 -32
- data/test/unit/core/syntax/tc_if_container.rb +0 -39
- data/test/unit/core/tc_class_method_call.rb +0 -34
- data/test/unit/core/tc_container.rb +0 -41
- data/test/unit/core/tc_ctest_case.rb +0 -25
- data/test/unit/core/tc_instance_call_container.rb +0 -93
- data/test/unit/core/tc_literal.rb +0 -30
- data/test/unit/core/tc_theory_generator.rb +0 -336
- data/test/unit/core/tc_theory_generator_heavy.rb +0 -42
- data/test/unit/core/tracking/tc_history.rb +0 -104
- data/test/unit/core/tracking/tc_step.rb +0 -65
- data/test/unit/core/variable/tc_array_variable.rb +0 -61
- data/test/unit/core/variable/tc_block_variable.rb +0 -17
- data/test/unit/core/variable/tc_fixnum_variable.rb +0 -54
- data/test/unit/core/variable/tc_method_parameter_variable.rb +0 -22
- data/test/unit/core/variable/tc_runtime_method_variable.rb +0 -32
- data/test/unit/core/variable/tc_string_variable.rb +0 -37
- data/test/unit/core/variable/tc_unknown.rb +0 -24
- data/test/unit/core/variable/tc_variable_reference.rb +0 -28
- data/test/unit/ruby_code/tc_array.rb +0 -64
- data/test/unit/ruby_code/tc_fixnum.rb +0 -18
- data/test/unit/ruby_code/tc_hash.rb +0 -41
- data/test/unit/ruby_code/tc_string.rb +0 -38
- data/test/unit/tc_chain.rb +0 -434
- data/test/unit/tc_chain_mapping.rb +0 -62
- data/test/unit/tc_chain_with_case_1.rb +0 -169
- data/test/unit/tc_instance_call.rb +0 -40
- data/test/unit/tc_method_usage.rb +0 -35
- data/test/unit/tc_pot.rb +0 -124
- data/test/unit/tc_runtime_tracking_method.rb +0 -40
- data/test/unit/tc_theory.rb +0 -531
- data/test/unit/tc_variable_declaration.rb +0 -32
- data/test/unit/theory/tc_theory_action.rb +0 -108
- data/test/unit/theory/tc_theory_action_implementation.rb +0 -23
- data/test/unit/theory/tc_theory_chain_validator.rb +0 -340
- data/test/unit/theory/tc_theory_connector.rb +0 -361
- data/test/unit/theory/tc_theory_dependent.rb +0 -153
- data/test/unit/theory/tc_theory_implementation.rb +0 -137
- data/test/unit/theory/tc_theory_result.rb +0 -112
- data/test/unit/theory/tc_theory_variable.rb +0 -45
- data/test/unit/util/tc_method_validation.rb +0 -101
- data/test/unit/util/tc_parser.rb +0 -110
- data/test/unit/util/tc_string_to_theory.rb +0 -300
- data/test/unit/variable/tc_method_usage_variable.rb +0 -25
- data/tmp/runtime_method_evaluation.rb +0 -16
@@ -1,167 +0,0 @@
|
|
1
|
-
# Contains the usage history of a method, or a statement group etc. The current structure is
|
2
|
-
# something like the following:
|
3
|
-
#
|
4
|
-
# [0] = {line:1,available_variables:[var_0,var_1],action:"'test'"}
|
5
|
-
# [1] = {line:2,available_variables:[var_0,var_1,var_2],action:"'test'.chop"}
|
6
|
-
#
|
7
|
-
# Actually the history object should probably save what happens to variables at
|
8
|
-
# each line aswell. Although I should frame this in a example so I rember.
|
9
|
-
#
|
10
|
-
# One of the purposes of the history object is to refactor code. So
|
11
|
-
# if I have three chop statements.
|
12
|
-
#
|
13
|
-
# var_0 = 'test'
|
14
|
-
# var_1 = var_0.chop
|
15
|
-
# var_2 = var_1.chop
|
16
|
-
# var_3 = var_2.chop (ending with var_3 = 't')
|
17
|
-
#
|
18
|
-
# Now I'm to abstract that process so I come up with the method
|
19
|
-
#
|
20
|
-
# var_0 = 'test'
|
21
|
-
# 3.times do |i|
|
22
|
-
# var_0 = var_0.chop
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# In both cases they end up with a value of 't' but how can we be sure that
|
26
|
-
# replacing one process with the other is equivalent? Well of course they're
|
27
|
-
# not identical and I am tempted to just use there final value but I would
|
28
|
-
# be concerned with the likes of numbers for example the number 2.
|
29
|
-
#
|
30
|
-
# What about if I consider them as literal values. Then their history can be
|
31
|
-
# expressed.
|
32
|
-
#
|
33
|
-
# 'test' -> 'test'.chop -> 'tes'.chop -> 'te'.chop -> 't'
|
34
|
-
#
|
35
|
-
class History < Array
|
36
|
-
|
37
|
-
def initialize(*paramaters)
|
38
|
-
super()
|
39
|
-
self.each do |x|
|
40
|
-
self.push(x)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
# Create a copy of the history instance.
|
45
|
-
#
|
46
|
-
def copy
|
47
|
-
return History.new(*self.collect {|x| x.copy} )
|
48
|
-
end
|
49
|
-
|
50
|
-
def cauldron_method_calls
|
51
|
-
result = ['.length','.any?']
|
52
|
-
return result
|
53
|
-
end
|
54
|
-
|
55
|
-
# Returns an array of steps that include the variable
|
56
|
-
# specified.
|
57
|
-
#
|
58
|
-
# @param id The id of the variable that should be included in all the
|
59
|
-
# returned steps.
|
60
|
-
#
|
61
|
-
def find_steps_with_variable(id)
|
62
|
-
results = []
|
63
|
-
self.each do |x|
|
64
|
-
results.push(x) if x['variables'].any? {|y| y['id'] == id}
|
65
|
-
end
|
66
|
-
return results
|
67
|
-
end
|
68
|
-
|
69
|
-
# Returns the values for the unique variable id specified. NOTE
|
70
|
-
# it is important to use the unique variable id to avoid any
|
71
|
-
# mistaken interpretation.
|
72
|
-
#
|
73
|
-
# TODO This should be using unique_variable id to avoid the risk of
|
74
|
-
# miss interpretation
|
75
|
-
#
|
76
|
-
def find_value_for(variable_id)
|
77
|
-
results = []
|
78
|
-
|
79
|
-
# Find all the values for the particular id
|
80
|
-
self.each do |x|
|
81
|
-
results += x['variables'].find_all {|y| y['id']==variable_id}
|
82
|
-
end
|
83
|
-
return results.first['value']
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
# Returns a realised variable reflecting the id supplied. It
|
88
|
-
# can be either a VariableContainer, TypedVariable and BlockVariable.
|
89
|
-
#
|
90
|
-
# TODO I still havn't properly worked how to distinguish between types of variables
|
91
|
-
#
|
92
|
-
# @param variable_id The variable id that should be realised and returned
|
93
|
-
# @param variable_type A string indicating the type of variable that is being
|
94
|
-
# realised. This is basically used to distinguish between
|
95
|
-
# block variables and variable containers. NOTE if the variable
|
96
|
-
# doesn't have multiple values it won't be VariableContainer - just
|
97
|
-
# a type variable.
|
98
|
-
#
|
99
|
-
def find_realised_variable(variable_id,uniq_id,variable_type='VariableContainer')
|
100
|
-
|
101
|
-
raise StandardError.new('Expecting Fixnum') unless uniq_id.kind_of?(Fixnum)
|
102
|
-
|
103
|
-
# Find all the values for the particular id
|
104
|
-
# TODO Because there is a step class I could use more custom methods
|
105
|
-
results = self.inject([]) do |total,x|
|
106
|
-
total += x['variables'].select {|y| y['uniq_id'] == uniq_id}
|
107
|
-
total
|
108
|
-
end
|
109
|
-
|
110
|
-
# If all values have the same absolute id return a type variable.
|
111
|
-
# (this means the value of the variable doesn't change through the method)
|
112
|
-
if results.all? {|x| x['abs_id']==results.first['abs_id']}
|
113
|
-
raise StandardError.new('Unable to find variable with id '+variable_id.to_s+' and uniq_id '+uniq_id.to_s) if results.empty?
|
114
|
-
|
115
|
-
# TODO I don't know how to handle the situation where I have a reference to
|
116
|
-
# a variable. So the value of var_570 points to the UnkownVariable. In
|
117
|
-
# which case we have a UnknownVariable - which is just getting
|
118
|
-
# a bit rediculous.
|
119
|
-
# #
|
120
|
-
# #
|
121
|
-
# def method_8
|
122
|
-
# var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
|
123
|
-
# var_570 = var_12.declared_variable
|
124
|
-
# end
|
125
|
-
# TODO This better track mulitple values - I should at least indicate them
|
126
|
-
return results.first['value'].to_var(variable_id,uniq_id)
|
127
|
-
|
128
|
-
end
|
129
|
-
|
130
|
-
raise StandardError.new('variable '+variable_id.to_s+' has multiple values but no variable_type was supplied') if variable_type.nil?
|
131
|
-
|
132
|
-
case variable_type
|
133
|
-
when 'BlockVariable'
|
134
|
-
|
135
|
-
# Find all the unique variable ids
|
136
|
-
unique_results = []
|
137
|
-
results.each do |x|
|
138
|
-
unique_results.push(x) unless unique_results.any? {|y| y[:abs_id] == x[:abs_id]}
|
139
|
-
end
|
140
|
-
|
141
|
-
# Convert each result into a variable and return a new block variable
|
142
|
-
new_block_variable = BlockVariable.new() {{:variable_id=>variable_id,:uniq_id=>uniq_id}}
|
143
|
-
unique_results.each do |x|
|
144
|
-
new_block_variable.push(x[:value].to_var(variable_id))
|
145
|
-
end
|
146
|
-
return new_block_variable
|
147
|
-
|
148
|
-
when 'VariableContainer'
|
149
|
-
|
150
|
-
# Find all the unique variable ids
|
151
|
-
unique_results = []
|
152
|
-
results.each do |x|
|
153
|
-
unique_results.push(x) unless unique_results.any? {|y| y[:abs_id] == x[:abs_id]}
|
154
|
-
end
|
155
|
-
|
156
|
-
# Convert each result into a variable and return a new block variable
|
157
|
-
# TODO This should probable include the uniq_id as well
|
158
|
-
new_container_variable = VariableContainer.new() {{:variable_id=>variable_id,:uniq_id=>uniq_id}}
|
159
|
-
unique_results.each do |x|
|
160
|
-
new_container_variable.push(x[:value].to_var(variable_id))
|
161
|
-
end
|
162
|
-
return new_container_variable
|
163
|
-
end
|
164
|
-
raise StandardError.new('Method not able to handle different type of variables')
|
165
|
-
end
|
166
|
-
|
167
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# This is a special runtime method that is used to track changes in a method
|
2
|
-
# as it is being run.
|
3
|
-
#
|
4
|
-
# The call to the tracking method looks something like this:
|
5
|
-
#
|
6
|
-
# tracking_method(line,action,variables=[])
|
7
|
-
#
|
8
|
-
class RuntimeTrackingMethod < RuntimeMethod
|
9
|
-
|
10
|
-
#
|
11
|
-
# @param instance_tracking_variable The instance variable that contains each tracked event.
|
12
|
-
#
|
13
|
-
def initialize(instance_tracking_variable)
|
14
|
-
@line = MethodParameter.new
|
15
|
-
@statement_id = MethodParameter.new
|
16
|
-
@variables = MethodParameter.new
|
17
|
-
@action = MethodParameter.new
|
18
|
-
super( MethodUsage.new(@line,@statement_id,@variables,@action) )
|
19
|
-
|
20
|
-
# Add the statements that are used in the tracking method
|
21
|
-
self.push HackStatement.new(instance_tracking_variable.write+' = History.new if '+instance_tracking_variable.write+'.nil?')
|
22
|
-
x = instance_tracking_variable.write+".push(Step.new(
|
23
|
-
#{@line.write},
|
24
|
-
#{@statement_id.write},
|
25
|
-
#{@variables.write},
|
26
|
-
#{@action.write}
|
27
|
-
))"
|
28
|
-
self.push HackStatement.new(x)
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
data/lib/core/tracking/Step.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# This class represents one of the steps inside a history object. It will look something
|
2
|
-
# like the following:
|
3
|
-
#
|
4
|
-
# {
|
5
|
-
# "variables"=>[
|
6
|
-
# {"id"=>3, "value"=>"Grim Fandang", "abs_id"=>-606538658, :uniq_id=>3},
|
7
|
-
# {"id"=>1, "value"=>"Grim Fandango", "abs_id"=>-606538498, :uniq_id=>2}
|
8
|
-
# ],
|
9
|
-
# "line"=>1,
|
10
|
-
# "statement_id"=>625,
|
11
|
-
# "action"=>"var='Grim Fandango'.chop"}
|
12
|
-
#
|
13
|
-
class Step < Hash
|
14
|
-
|
15
|
-
#
|
16
|
-
# @param variables TODO I'm not sure whether this should be the variables that have changed or just
|
17
|
-
# the ones available on this line. I think it is only the variables that change value.
|
18
|
-
#
|
19
|
-
def initialize(line,statement_id,variables,action)
|
20
|
-
super()
|
21
|
-
self['variables'] = variables
|
22
|
-
self['line'] = line
|
23
|
-
self['statement_id'] = statement_id
|
24
|
-
# TODO action can proably be dropped - or just replaced with statement.write - I don't
|
25
|
-
# think to_literal_string is useful.
|
26
|
-
self['action'] = action
|
27
|
-
end
|
28
|
-
|
29
|
-
# Returns the data for the variable thats id was specified.
|
30
|
-
#
|
31
|
-
# @param id The id of the variable thats id should be returned
|
32
|
-
#
|
33
|
-
def find_data_for_variable(id)
|
34
|
-
missing_variable = lambda { raise StandardError.new('Couldn\'t find information on variable '+id.to_s) }
|
35
|
-
return self['variables'].detect(missing_variable) {|x| x['id']==id}
|
36
|
-
end
|
37
|
-
|
38
|
-
def to_var(id=nil,uniq_id=nil)
|
39
|
-
# TODO I don't know if the the block is used anymore
|
40
|
-
return StepVariable.new(self,id) {{:variable_id => id,:uniq_id=>uniq_id}}
|
41
|
-
end
|
42
|
-
|
43
|
-
def copy
|
44
|
-
# TODO Don't use Marshal - do it properly
|
45
|
-
return Marshal.load(Marshal.dump(self))
|
46
|
-
end
|
47
|
-
|
48
|
-
def cauldron_method_calls
|
49
|
-
return ["['statement_id']"]
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
|
2
|
-
class ArrayVariable < TypeVariable
|
3
|
-
attr_reader :variable_id
|
4
|
-
|
5
|
-
# TODO Presumes that all parameters extends TypeVariable some are literals
|
6
|
-
def initialize(*parameters)
|
7
|
-
super(parameters)
|
8
|
-
parameters.each { |x| self.push(x) }
|
9
|
-
end
|
10
|
-
|
11
|
-
# TODO Temporary overwrite - I'm not sure how to apply select_all for array variables.
|
12
|
-
# When you write the variable it's var5 but it still contains addition variables.
|
13
|
-
def select_all(results=[],&block)
|
14
|
-
#results.push(self) if block.call(self)
|
15
|
-
return results
|
16
|
-
end
|
17
|
-
|
18
|
-
#TODO Write tests for all variables to maintain uniq_id_history
|
19
|
-
def copy
|
20
|
-
result = ArrayVariable.new(*self.collect {|x| x.copy} ) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id,:uniq_id_history=>@uniq_id_history.copy}}
|
21
|
-
#result.variable_id = variable_id
|
22
|
-
result.instance_variable = @instance_variable
|
23
|
-
# TODO I need to check uniq_id for 'copy' accross all the variables
|
24
|
-
#result.uniq_id = @uniq_id
|
25
|
-
return result
|
26
|
-
end
|
27
|
-
|
28
|
-
def to_declaration
|
29
|
-
return VariableDeclaration.new('ArrayVariable',*@value.collect {|x| x.to_declaration})
|
30
|
-
end
|
31
|
-
|
32
|
-
# Only let this method be called from fellow Fixnum classes or Unknowns
|
33
|
-
def variable_id=(id)
|
34
|
-
# TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
35
|
-
unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
36
|
-
unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/ruby_code/Array.rb'
|
37
|
-
raise StandardError.new('Illegal attempt to set variable_id')
|
38
|
-
end
|
39
|
-
end
|
40
|
-
@variable_id = id
|
41
|
-
end
|
42
|
-
|
43
|
-
# Returns an array of instance calls for the particular type
|
44
|
-
# variable. For example:
|
45
|
-
#
|
46
|
-
# StringVariable.new('test').instance_calls
|
47
|
-
#
|
48
|
-
# might return [var.chop,var.length]
|
49
|
-
#
|
50
|
-
def instance_calls(available=[])
|
51
|
-
|
52
|
-
# Add the chop instance call
|
53
|
-
results = []
|
54
|
-
results.push InstanceCallContainer.new(self.copy,ArrayLength.new)
|
55
|
-
|
56
|
-
# Attempt to create access calls - firstly with index
|
57
|
-
self.length.times do |i|
|
58
|
-
results.push ArrayAccess.new(self.copy,Literal.new(i))
|
59
|
-
end
|
60
|
-
|
61
|
-
return results
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
def to_literal_string
|
66
|
-
l = '['
|
67
|
-
self.each do |x|
|
68
|
-
l += x.to_literal_string
|
69
|
-
unless x.object_id == self.last.object_id
|
70
|
-
l += ','
|
71
|
-
end
|
72
|
-
end
|
73
|
-
l += ']'
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
@@ -1,152 +0,0 @@
|
|
1
|
-
#require "set"
|
2
|
-
# This was introduced so I could maintain the use of the class variable
|
3
|
-
# @@variable_id with the ArrayVarialble without having to include
|
4
|
-
# requirements with the array.
|
5
|
-
#
|
6
|
-
class BaseVariable < Array
|
7
|
-
attr_reader :variable_id , :instance_variable, :value, :uniq_id_history
|
8
|
-
attr_writer :instance_variable, :uniq_id_history
|
9
|
-
|
10
|
-
include Variable
|
11
|
-
include Token
|
12
|
-
|
13
|
-
# TODO I think I'll get rid of the id parameter and just use blocks
|
14
|
-
#
|
15
|
-
# NOTE: You can set the variable ids by passing it in a block
|
16
|
-
# e.g. BaseVariable.new {[8,9]}
|
17
|
-
# where 8 is the variable_id and unique_id is 9
|
18
|
-
#
|
19
|
-
def initialize(id=nil)
|
20
|
-
super()
|
21
|
-
|
22
|
-
# TODO I should maybe include a check on all .copy methods to ensure a block is provided
|
23
|
-
# Set the variable id for the newly created variable
|
24
|
-
if block_given?
|
25
|
-
# TEMP
|
26
|
-
if yield.kind_of?(Fixnum)
|
27
|
-
raise StandardError.new('Expecting array')
|
28
|
-
end
|
29
|
-
unless yield[:variable_id].nil?
|
30
|
-
@variable_id = yield[:variable_id]
|
31
|
-
else
|
32
|
-
@variable_id = @@variable_id
|
33
|
-
@@variable_id += 1
|
34
|
-
# TODO Should have a separate call that returns @@variable_id and increaments @@variable_id
|
35
|
-
end
|
36
|
-
unless yield[:uniq_id].nil?
|
37
|
-
raise StandardError.new('Expecting Fixnum') unless yield[:uniq_id].kind_of?(Fixnum)
|
38
|
-
@uniq_id = yield[:uniq_id]
|
39
|
-
else
|
40
|
-
@uniq_id = @@uniq_id
|
41
|
-
@@uniq_id += 1
|
42
|
-
end
|
43
|
-
|
44
|
-
@uniq_id_history = yield[:uniq_id_history] unless yield[:uniq_id_history].nil?
|
45
|
-
|
46
|
-
else
|
47
|
-
if id.nil?
|
48
|
-
@variable_id = @@variable_id
|
49
|
-
@@variable_id += 1
|
50
|
-
else
|
51
|
-
@variable_id = id
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
# Give the variable an unique id
|
57
|
-
if @uniq_id.nil?
|
58
|
-
@uniq_id = @@uniq_id
|
59
|
-
#raise StandardError.new('Uniq id change point') if (@uniq_id+1) == 86
|
60
|
-
@@uniq_id += 1
|
61
|
-
end
|
62
|
-
|
63
|
-
@uniq_id_history ||= []
|
64
|
-
|
65
|
-
# Flag indicating if this is a scope variable or a instance variable
|
66
|
-
@instance_variable = false
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.reset_global_id
|
71
|
-
#http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
72
|
-
unless $".include?('test/unit.rb')
|
73
|
-
StandardLogger.log 'WARNING: Resetting variable id, this should only be done for tests'
|
74
|
-
end
|
75
|
-
@@variable_id = 0
|
76
|
-
end
|
77
|
-
|
78
|
-
# Returns the variable if the ids matched
|
79
|
-
#
|
80
|
-
# @param id The uniq_id of the variable that is being looked for
|
81
|
-
#
|
82
|
-
def find_actual_variable(uniq_id)
|
83
|
-
return self if @uniq_id == uniq_id
|
84
|
-
throw :variable_not_found
|
85
|
-
end
|
86
|
-
|
87
|
-
# Returns an array of instance calls that can be created from
|
88
|
-
# this variable.
|
89
|
-
#
|
90
|
-
# NOTE: I checked that instance_calls wasn't a intrinsic method.
|
91
|
-
#
|
92
|
-
# TODO Test this (esp with ArrayVariable)
|
93
|
-
#
|
94
|
-
def instance_calls(with=[])
|
95
|
-
return [] unless self.realised?
|
96
|
-
|
97
|
-
# Attempt to retrieve the literal value for the variable
|
98
|
-
#val = self.literalise.value
|
99
|
-
val = self.value
|
100
|
-
|
101
|
-
# TODO I suspect this method is redundant since it is always overwritten
|
102
|
-
|
103
|
-
# Now retrieve all the possible instance call structures for that value
|
104
|
-
results = []
|
105
|
-
val.instance_call_structures.each do |struct|
|
106
|
-
|
107
|
-
if struct.instance_class != self.class then raise StandardError.new('Unexpected class type: - expecting '+val.class.to_s+' but was '+struct.instance_class.to_s) end
|
108
|
-
|
109
|
-
# Now create a method call of the instance call
|
110
|
-
inst_call = InstanceCallContainer.new(self.copy,struct.method_call.copy)
|
111
|
-
results.push inst_call
|
112
|
-
|
113
|
-
end
|
114
|
-
return results
|
115
|
-
end
|
116
|
-
|
117
|
-
# Returns an array of instances calls that return a value and are
|
118
|
-
# therefore approriate for declaration statements.
|
119
|
-
#
|
120
|
-
def returning_instance_calls(available=[])
|
121
|
-
return instance_calls(available)
|
122
|
-
end
|
123
|
-
|
124
|
-
def destructive_instance_calls(with=[])
|
125
|
-
raise StandardError.new(" 'destructive_instance_calls' method should be overridden for "+self.class.to_s)
|
126
|
-
end
|
127
|
-
|
128
|
-
#
|
129
|
-
#
|
130
|
-
#
|
131
|
-
def write()
|
132
|
-
if (@instance_variable)
|
133
|
-
return '@var_'+variable_id.to_s
|
134
|
-
end
|
135
|
-
return 'var_'+variable_id.to_s
|
136
|
-
end
|
137
|
-
|
138
|
-
def write_with_uniq_id
|
139
|
-
if (@instance_variable)
|
140
|
-
return '@var_'+variable_id.to_s+'_u'+uniq_id.to_s
|
141
|
-
end
|
142
|
-
return 'var_'+variable_id.to_s+'_u'+uniq_id.to_s
|
143
|
-
end
|
144
|
-
|
145
|
-
# Always returns true since realised variables should extend this class
|
146
|
-
# but overwrite this method.
|
147
|
-
#
|
148
|
-
def realised?
|
149
|
-
return false
|
150
|
-
end
|
151
|
-
|
152
|
-
end
|