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,92 +0,0 @@
|
|
1
|
-
# This is an odd sort of variable because it's actual value
|
2
|
-
# continually changes when used. It needs to have a variable
|
3
|
-
# id to prevent a duplicate variable being created.
|
4
|
-
#
|
5
|
-
class BlockVariable < BaseVariable
|
6
|
-
|
7
|
-
attr_writer :realised
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
super()
|
11
|
-
|
12
|
-
@realised = false
|
13
|
-
end
|
14
|
-
|
15
|
-
# Returns a duplicate of the block variable.
|
16
|
-
#
|
17
|
-
def copy
|
18
|
-
# @uniq_id should probably be cloned or something
|
19
|
-
result = self.class.new() {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
20
|
-
result.instance_variable = @instance_variable
|
21
|
-
self.each do |x|
|
22
|
-
result.push(x)
|
23
|
-
end
|
24
|
-
result.realised = @realised
|
25
|
-
return result
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns a string representing the block variable but with all the
|
29
|
-
# values of the block variable as well
|
30
|
-
def write_with_value
|
31
|
-
#return self.write+'('+self.inject {|line,x| line += x.value.write+} +')'
|
32
|
-
l = self.write+'('
|
33
|
-
self.each do |x|
|
34
|
-
l += x.value.write
|
35
|
-
l += '|' unless x.object_id == self.last.object_id
|
36
|
-
end
|
37
|
-
l += ')'
|
38
|
-
return l
|
39
|
-
end
|
40
|
-
|
41
|
-
# Returns the flag indicating whether the blockvariable had been
|
42
|
-
# realised yet. I can't just use whether all the contained variables
|
43
|
-
# are realised as an indication because the block variable may be
|
44
|
-
# empty. This would indicate either the block itself has no
|
45
|
-
# itterations or it hadn't been realised yet.
|
46
|
-
#
|
47
|
-
def realised?
|
48
|
-
return @realised
|
49
|
-
end
|
50
|
-
|
51
|
-
# Returns a duplicate block variable where all values for the block
|
52
|
-
# variable are included.
|
53
|
-
#
|
54
|
-
def realise(method_map)
|
55
|
-
x = method_map.find_realised_variable(self.variable_id,self.uniq_id,self.class.to_s)
|
56
|
-
# Flag the block variable as realised - this needs to be done maually oterwise empty
|
57
|
-
# blocks would flaged as realsied.
|
58
|
-
x.realised = true
|
59
|
-
|
60
|
-
return x
|
61
|
-
end
|
62
|
-
|
63
|
-
# Returns true if the block variable can be used as the specified variable
|
64
|
-
# type otherwise it returns false. It can be used as the specified variable
|
65
|
-
# type if all the variables it contains are of that type.
|
66
|
-
#
|
67
|
-
# @param variable_type The variable type that the block variable is expected
|
68
|
-
# to act like e.g. FixnumVariable.
|
69
|
-
#
|
70
|
-
def pass_as?(variable_type)
|
71
|
-
return self.all? {|x| x.pass_as?(variable_type)}
|
72
|
-
end
|
73
|
-
|
74
|
-
# This simple returns the block variable. It is a quick hack so that
|
75
|
-
# InstanceCallContainers and variables can be treated in the same way although
|
76
|
-
# it is a bit clunck and confusing.
|
77
|
-
#
|
78
|
-
def variable
|
79
|
-
return self
|
80
|
-
end
|
81
|
-
|
82
|
-
# This writes block variable as a literal. Now for normal variables this is
|
83
|
-
# fine as var_a might become '8' etc. However block variables have multiple
|
84
|
-
# values. I'm not sure why this is need so for now it will just display
|
85
|
-
# the first block variable.
|
86
|
-
#
|
87
|
-
def to_literal_string
|
88
|
-
if empty? then return '' end
|
89
|
-
return self.first.to_literal_string
|
90
|
-
end
|
91
|
-
|
92
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
class FixnumVariable < TypeVariable
|
2
|
-
|
3
|
-
def initialize(val,id=nil)
|
4
|
-
super(val,id)
|
5
|
-
end
|
6
|
-
|
7
|
-
def to_declaration
|
8
|
-
return VariableDeclaration.new('FixnumVariable',@value.to_declaration)
|
9
|
-
end
|
10
|
-
|
11
|
-
# # TODO I wan't to get rid of this call entirly
|
12
|
-
# def copy_contextual_variable
|
13
|
-
# return copy
|
14
|
-
# end
|
15
|
-
|
16
|
-
# Returns true if the variable type is Fixnum, this is used
|
17
|
-
# to determine whether a BlockVariable or VariableContainer
|
18
|
-
# can be used as a particular variable type.
|
19
|
-
#
|
20
|
-
def pass_as?(variable_type)
|
21
|
-
return true if variable_type==FixnumVariable
|
22
|
-
return false
|
23
|
-
end
|
24
|
-
|
25
|
-
# Returns an array of desctructive instance calls given the available
|
26
|
-
# variables.
|
27
|
-
#
|
28
|
-
# @param available An array of other variables that can be used as
|
29
|
-
# parameters.
|
30
|
-
#
|
31
|
-
def destructive_instance_calls(available=[])
|
32
|
-
return []
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
@@ -1,179 +0,0 @@
|
|
1
|
-
class MethodParameter < BaseVariable
|
2
|
-
attr_reader :usage_variable
|
3
|
-
attr_writer :variable_id
|
4
|
-
|
5
|
-
def initialize(id=nil)
|
6
|
-
super(id)
|
7
|
-
end
|
8
|
-
|
9
|
-
# Returns true if this variables meets the requirements of the
|
10
|
-
# supplied variable. If the this meets the requirements of the
|
11
|
-
# supplied variable then this variable could replace the
|
12
|
-
# supplied variable in a statement.
|
13
|
-
#
|
14
|
-
# TODO Write tests for this
|
15
|
-
#
|
16
|
-
# @param of
|
17
|
-
#
|
18
|
-
# TODO Have an act_as call that doesn't return true/false but raises errors so I can identify
|
19
|
-
# why something can't be something else.
|
20
|
-
#
|
21
|
-
def meets_requirements? of
|
22
|
-
|
23
|
-
# Handle the possible datatypes of "of"
|
24
|
-
begin
|
25
|
-
if of.kind_of?(Variable)
|
26
|
-
return meets_requirements_of_variable(of)
|
27
|
-
elsif of.kind_of?(InstanceCallContainer)
|
28
|
-
return meets_requirements_of_instance_call(of)
|
29
|
-
else
|
30
|
-
raise StandardError.new('Not expecting class of type '+of.class.to_s)
|
31
|
-
end
|
32
|
-
rescue FailedVariableMatch
|
33
|
-
return false
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Raises an error to avoid me accidently trying to give this class the
|
38
|
-
# method.
|
39
|
-
#
|
40
|
-
def to_literal_string
|
41
|
-
# TODO I should turn this on further down the line - it realtes to tracking
|
42
|
-
#raise StandardError.new('Method Variables can\'t be converted to a literal string because they don\'t have a value')
|
43
|
-
return self.write
|
44
|
-
end
|
45
|
-
|
46
|
-
#
|
47
|
-
def describe(tab=0,context=self)
|
48
|
-
|
49
|
-
# Create a temporay copy of the variable
|
50
|
-
copied_var = self.copy
|
51
|
-
|
52
|
-
unless context == self
|
53
|
-
|
54
|
-
# Return a duplicate variable with the requirements in the context indicated
|
55
|
-
copied_var = context.contextual_variable(copied_var.variable_id)
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
# Print the name of the variable
|
60
|
-
line = ''
|
61
|
-
line += write
|
62
|
-
|
63
|
-
# Print out each of the requirements
|
64
|
-
copied_var.each do |x|
|
65
|
-
desc = x.describe(context)
|
66
|
-
desc.each_line do |l|
|
67
|
-
line += " "+l
|
68
|
-
end
|
69
|
-
line += "\n" unless x == copied_var.last
|
70
|
-
end
|
71
|
-
line += "\n"
|
72
|
-
|
73
|
-
return line
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
def copy
|
78
|
-
return Marshal.load(Marshal.dump(self))
|
79
|
-
end
|
80
|
-
|
81
|
-
# Returns a reference to the usage variable that is represented
|
82
|
-
# by this variable. Remember this MethodParameter represents
|
83
|
-
# a particular rule so its id doesn't reflect all cases.
|
84
|
-
#
|
85
|
-
def usage_variable
|
86
|
-
return @usage_variable
|
87
|
-
end
|
88
|
-
|
89
|
-
# Set the usage variable that this method variable should be used
|
90
|
-
# as. This is set when a method variable is added to a method.
|
91
|
-
#
|
92
|
-
def usage_variable= usage
|
93
|
-
@usage_variable = usage
|
94
|
-
end
|
95
|
-
|
96
|
-
# Attempts to return a literal that meets
|
97
|
-
# all the requirements.
|
98
|
-
#
|
99
|
-
def literalise
|
100
|
-
|
101
|
-
# Does the variable have any "equal to literal" requirements
|
102
|
-
self.each do |req|
|
103
|
-
if req.structure_match?([This,Equal,Literal])
|
104
|
-
return req[2].copy
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
raise StandardError.new('The literalise call is very basic right now and needs improved')
|
109
|
-
end
|
110
|
-
|
111
|
-
# Returns a statement showing the variable being declaraced
|
112
|
-
#
|
113
|
-
# MethodParameter.new(Requirement.new())
|
114
|
-
#
|
115
|
-
def declaration_statement
|
116
|
-
# TODO Check that .copy method call works across all the uses of "declaration_statement"
|
117
|
-
return Statement.new(ClassMethodCallContainer.new(MethodParameterClass.new,New.new,*self.collect {|x| x.copy.declaration_statement}))
|
118
|
-
end
|
119
|
-
|
120
|
-
def to_declaration
|
121
|
-
return VariableDeclaration.new('MethodParameter',*self.collect {|x| x.to_declaration})
|
122
|
-
end
|
123
|
-
|
124
|
-
private
|
125
|
-
|
126
|
-
# TODO Write tests for this
|
127
|
-
def meets_requirements_of_variable(this)
|
128
|
-
|
129
|
-
# Check if var has any requirements - if it doesn't have any then anything can be it
|
130
|
-
return 'is' if this.empty?
|
131
|
-
|
132
|
-
begin
|
133
|
-
|
134
|
-
# Can this be literised? (it makes it easy to check requirements)
|
135
|
-
if self.literalisable?
|
136
|
-
|
137
|
-
# then change it into a literal value
|
138
|
-
literal = self.literalise
|
139
|
-
|
140
|
-
# Good stuff - next lets see if we can confirm the requirements of 'var'
|
141
|
-
begin
|
142
|
-
|
143
|
-
# Goes through all of var requirements and substitutes self for the literal
|
144
|
-
this_could_be_that(literal,this)
|
145
|
-
return true
|
146
|
-
rescue IncompatiableRequirementsError => e
|
147
|
-
StandardLogger.instance.info e
|
148
|
-
return false
|
149
|
-
end
|
150
|
-
|
151
|
-
else # If self can't be literalised
|
152
|
-
|
153
|
-
# Go through each of the supplied variables requirements
|
154
|
-
all_requirements_matched = true
|
155
|
-
this.each do |req|
|
156
|
-
requirement_matched = false
|
157
|
-
self.each do |own_req|
|
158
|
-
if own_req.write == req.write
|
159
|
-
requirement_matched = true
|
160
|
-
break
|
161
|
-
end
|
162
|
-
end
|
163
|
-
all_requirements_matched = false unless requirement_matched
|
164
|
-
end
|
165
|
-
|
166
|
-
return true if all_requirements_matched
|
167
|
-
return false
|
168
|
-
|
169
|
-
end
|
170
|
-
|
171
|
-
rescue StandardError => e
|
172
|
-
StandardLogger.log e
|
173
|
-
return false
|
174
|
-
end
|
175
|
-
return false
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
class MethodUsageVariable < BaseVariable
|
2
|
-
|
3
|
-
def initialize(*parameters)
|
4
|
-
super()
|
5
|
-
raise StandardError.new('Only submit the paramaters on the usage variable') if parameters.first.kind_of?(MethodUsage)
|
6
|
-
# Go through each paramater in the method usage instance
|
7
|
-
parameters.each do |x|
|
8
|
-
self.push x.copy
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def to_declaration
|
14
|
-
return VariableDeclaration.new('MethodUsageVariable',*self.collect {|x| x.to_declaration})
|
15
|
-
end
|
16
|
-
|
17
|
-
def copy
|
18
|
-
result = MethodUsageVariable.new(*self.collect {|x| x.copy}) {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
19
|
-
return result
|
20
|
-
end
|
21
|
-
|
22
|
-
# # Only let this method be called from fellow Fixnum classes or Unknowns
|
23
|
-
# def variable_id=(id)
|
24
|
-
# # TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
25
|
-
# unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
26
|
-
# raise StandardError.new('Illegal attempt to set variable_id')
|
27
|
-
# end
|
28
|
-
# @variable_id = id
|
29
|
-
# end
|
30
|
-
|
31
|
-
# TODO Test this
|
32
|
-
def to_literal_string
|
33
|
-
l = 'MethodUsage.new('
|
34
|
-
self.each do |x|
|
35
|
-
l += x.to_literal_string
|
36
|
-
unless x.object_id == self.last.object_id
|
37
|
-
l += ','
|
38
|
-
end
|
39
|
-
end
|
40
|
-
l += ')'
|
41
|
-
return l
|
42
|
-
end
|
43
|
-
|
44
|
-
# TODO Write tests
|
45
|
-
# Compares the passed argument and returns true if they are
|
46
|
-
# the same class and contains the same values.
|
47
|
-
#
|
48
|
-
def equivalent?(to)
|
49
|
-
return false if to.class != self.class
|
50
|
-
to.zip(self) do |x,y|
|
51
|
-
return false unless x.equivalent?(y)
|
52
|
-
end
|
53
|
-
return true
|
54
|
-
end
|
55
|
-
|
56
|
-
def destructive_instance_calls(with=[])
|
57
|
-
return []
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
class NilVariable < TypeVariable
|
2
|
-
|
3
|
-
def initialize(id=nil)
|
4
|
-
super(nil)
|
5
|
-
end
|
6
|
-
|
7
|
-
def copy
|
8
|
-
copied = NilVariable.new {{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
9
|
-
#copied.variable_id = self.variable_id
|
10
|
-
return copied
|
11
|
-
end
|
12
|
-
|
13
|
-
# Only let this method be called from fellow NilVariable classes
|
14
|
-
def variable_id=(id)
|
15
|
-
unless caller.first.split(':')[0]==__FILE__
|
16
|
-
raise StandardError.new('Illegal attempt to set variable_id')
|
17
|
-
end
|
18
|
-
@variable_id = id
|
19
|
-
end
|
20
|
-
|
21
|
-
def realised?
|
22
|
-
return true
|
23
|
-
end
|
24
|
-
|
25
|
-
def to_declaration
|
26
|
-
return VariableDeclaration.new(self.class.to_s,nil.to_declaration)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
class RuntimeMethodParameter < TypeVariable
|
2
|
-
|
3
|
-
def initialize(val)
|
4
|
-
super(val)
|
5
|
-
end
|
6
|
-
|
7
|
-
# def copy
|
8
|
-
# copied = self.class.new(@value)
|
9
|
-
# copied.variable_id = self.variable_id
|
10
|
-
# return copied
|
11
|
-
# end
|
12
|
-
#
|
13
|
-
# Only let this method be called from fellow Fixnum classes or Unknowns
|
14
|
-
def variable_id=(id)
|
15
|
-
# TODO I need a better way to restrict access to this
|
16
|
-
# TODO This would be nicer if it wasn't so hard coded ./lib/core/variable/Unknown.rb
|
17
|
-
#unless caller.first.split(':')[0]==__FILE__ or caller.first.split(':')[0]=='./lib/core/variable/Unknown.rb'
|
18
|
-
# raise StandardError.new('Illegal attempt to set variable_id')
|
19
|
-
#end
|
20
|
-
@variable_id = id
|
21
|
-
end
|
22
|
-
|
23
|
-
# Returns an array of instance calls that are possible given the
|
24
|
-
# provided variables.
|
25
|
-
#
|
26
|
-
# @param available
|
27
|
-
#
|
28
|
-
def instance_calls(available=[],used_in_declaration_statement=false)
|
29
|
-
results = []
|
30
|
-
|
31
|
-
# Create runtime_method.push(runtime_value)
|
32
|
-
## Find all the statement variables
|
33
|
-
available.find_all {|x| x.kind_of?(StatementVariable)}.each do |y|
|
34
|
-
#results.push(InstanceCallContainer.new(self.copy,PushStatement.new,y.copy))
|
35
|
-
# TODO What is PushStatement for
|
36
|
-
results.push(InstanceCallContainer.new(self.copy,Push.new,y.copy))
|
37
|
-
end
|
38
|
-
return results
|
39
|
-
end
|
40
|
-
|
41
|
-
# Returns an array of instances calls that return a value and are
|
42
|
-
# therefore approriate for declaration statements.
|
43
|
-
#
|
44
|
-
# NOTE Although .push does return a value I have excluded it because
|
45
|
-
# I want to limit the number of variables declared.
|
46
|
-
#
|
47
|
-
def returning_instance_calls(available)
|
48
|
-
return []
|
49
|
-
end
|
50
|
-
|
51
|
-
# Returns an array of desctructive instance calls given the available
|
52
|
-
# variables.
|
53
|
-
#
|
54
|
-
# @param available An array of other variables that can be used as
|
55
|
-
# parameters.
|
56
|
-
#
|
57
|
-
def destructive_instance_calls(available=[])
|
58
|
-
return instance_calls(available)
|
59
|
-
end
|
60
|
-
|
61
|
-
# # Returns a declaration variable for this runtime method variable.
|
62
|
-
# #
|
63
|
-
# def to_declaration
|
64
|
-
# return VariableDeclaration.new(RuntimeMethodParameter)
|
65
|
-
# end
|
66
|
-
|
67
|
-
end
|