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
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: Cauldron generates single parameter methods
|
2
|
+
|
3
|
+
Cauldron can generate runtime methods that accepts one parameters
|
4
|
+
|
5
|
+
NOTE: it creates the file in tmp/aruba/launch.rb - so that loading path needs to be changed
|
6
|
+
- use @pause to see if it's working.
|
7
|
+
|
8
|
+
#TODO Change the method name
|
9
|
+
|
10
|
+
@announce @slow_process
|
11
|
+
Scenario: Method returns the passed in value
|
12
|
+
Given a theory named "example_1.yml" with:
|
13
|
+
"""
|
14
|
+
dependents:
|
15
|
+
-
|
16
|
+
"if RUNTIME_METHOD.kind_of?(RuntimeMethod)
|
17
|
+
return true
|
18
|
+
end"
|
19
|
+
-
|
20
|
+
"if ARG_1 == OUTPUT
|
21
|
+
return true
|
22
|
+
end"
|
23
|
+
action:
|
24
|
+
statement: "return x"
|
25
|
+
values:
|
26
|
+
x: ARG_1
|
27
|
+
position: RUNTIME_METHOD.first.statement_id
|
28
|
+
results:
|
29
|
+
-
|
30
|
+
RUNTIME_METHOD.all_pass(ARG_1)
|
31
|
+
"""
|
32
|
+
And a file named "launch.rb" with:
|
33
|
+
"""
|
34
|
+
$LOAD_PATH.unshift File.expand_path( File.join('lib') )
|
35
|
+
require 'cauldron'
|
36
|
+
cauldron = Cauldron::Pot.new
|
37
|
+
cauldron.load_theory File.join('theories','example_1.yml')
|
38
|
+
cauldron.generate [["sparky","sparky"],["kel","kel"]]
|
39
|
+
"""
|
40
|
+
When I run `ruby launch.rb` interactively
|
41
|
+
Then the output should contain:
|
42
|
+
"""
|
43
|
+
def extend_function_test_method(var1)
|
44
|
+
return var1
|
45
|
+
end
|
46
|
+
"""
|
@@ -6,6 +6,17 @@
|
|
6
6
|
# end
|
7
7
|
# end
|
8
8
|
|
9
|
+
Given /^a theory named "([^"]*)" with:$/ do |file_name, string|
|
10
|
+
steps %Q{
|
11
|
+
Given a file named "#{file_name}" with:
|
12
|
+
"""
|
13
|
+
#{string}
|
14
|
+
"""
|
15
|
+
}
|
16
|
+
FileUtils.mkdir_p(File.join(home,'cauldron','tmp'))
|
17
|
+
FileUtils.cp File.join('.',file_name), File.join(home,'cauldron','tmp',file_name)
|
18
|
+
end
|
19
|
+
|
9
20
|
When /^I add a case with a param "([^"]*)" and an expected output of "([^"]*)"$/ do |param, output|
|
10
21
|
#@terminal.submit("'"+param+,"'+output+'"')
|
11
22
|
@terminal.submit("'#{param}','#{output}'")
|
data/features/support/env.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
$LOAD_PATH << File.expand_path('../../../lib',__FILE__)
|
2
2
|
|
3
|
+
#require 'ruby-debug'
|
3
4
|
require 'cauldron'
|
4
5
|
|
5
6
|
require 'aruba/cucumber'
|
7
|
+
# See https://github.com/cucumber/aruba/blob/master/lib/aruba/cucumber.rb for the available steps
|
6
8
|
|
7
9
|
class Output
|
8
10
|
|
@@ -18,4 +20,12 @@ end
|
|
18
20
|
|
19
21
|
def output
|
20
22
|
@output ||= Output.new
|
21
|
-
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def home
|
26
|
+
realHome = ["HOME", "HOMEPATH"].detect {|h| ENV[h] != nil}
|
27
|
+
if not realHome
|
28
|
+
raise "Couldn't detect a home directory"
|
29
|
+
end
|
30
|
+
return ENV[realHome]
|
31
|
+
end
|
data/features/support/hooks.rb
CHANGED
data/lib/cauldron.rb
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require
|
2
|
+
require "bundler/setup"
|
3
3
|
|
4
|
-
require '
|
5
|
-
require '
|
4
|
+
require 'logger'
|
5
|
+
require 'yaml'
|
6
|
+
require 'ruby2ruby'
|
7
|
+
require 'ruby_parser'
|
8
|
+
#require 'ruby-debug'
|
6
9
|
|
7
|
-
require '
|
10
|
+
require 'core/string'
|
8
11
|
|
9
|
-
require 'cauldron/
|
10
|
-
require 'cauldron/conversion'
|
11
|
-
require 'cauldron/demos'
|
12
|
+
require 'cauldron/pot'
|
12
13
|
require 'cauldron/terminal'
|
14
|
+
require 'cauldron/relationship'
|
15
|
+
require 'cauldron/if_relationship'
|
16
|
+
require 'cauldron/numeric_operator'
|
17
|
+
require 'cauldron/concat_operator'
|
18
|
+
require 'cauldron/array_reverse_operator'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class ArrayReverseOperator
|
2
|
+
|
3
|
+
#Arra
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
end
|
7
|
+
|
8
|
+
# Matching in
|
9
|
+
def successful?(input,output)
|
10
|
+
# NOTE - for the future - like the idea of not actually calling the method
|
11
|
+
# input.length.each do |i|
|
12
|
+
# does input[0] == output[input.length-0]
|
13
|
+
# does input[1] == output[input.length-1]
|
14
|
+
# does input[3] == output[input.length-3]
|
15
|
+
# end
|
16
|
+
|
17
|
+
# in this case x.reverse will work
|
18
|
+
return true if input.first.reverse == output
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
# 1. Only has one argument value
|
23
|
+
# 2. Argument is an array value
|
24
|
+
# 3. Response is an array
|
25
|
+
def self.viable?(arguments,output)
|
26
|
+
return false unless arguments.length == 1
|
27
|
+
return false unless arguments.all? { |x| x.kind_of?(Array) }
|
28
|
+
return false unless output.kind_of?(Array)
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.find_constants(problems)
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
|
36
|
+
# def describe -
|
37
|
+
# should be able to describe the x.object_id moving to the different locations
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class ConcatOperator
|
2
|
+
|
3
|
+
def initialize(constant)
|
4
|
+
@constant = constant
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.viable?(arguments, response)
|
8
|
+
return false unless arguments.all? { |x| x.kind_of?(String) }
|
9
|
+
return false unless response.kind_of?(String)
|
10
|
+
# TODO - Only accpets one argument
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find_constants(problems)
|
15
|
+
problems.inject([]) do |total, x|
|
16
|
+
result = x[:response].gsub( Regexp.new('^'+x[:arguments].first),'')
|
17
|
+
total << result unless result == x[:response]
|
18
|
+
total
|
19
|
+
end.uniq
|
20
|
+
end
|
21
|
+
|
22
|
+
# Operator for "x.concat("bar")"
|
23
|
+
def successful?(problem)
|
24
|
+
if (problem[:arguments].first + @constant) == problem[:response]
|
25
|
+
return true
|
26
|
+
end
|
27
|
+
return false
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_ruby
|
31
|
+
' var0.concat(\''+@constant.to_s+'\')'+"\n"
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
class IfRelationship < Relationship
|
2
|
+
|
3
|
+
# TODO Need to change to IfSolution probably
|
4
|
+
|
5
|
+
def initialize(problems)
|
6
|
+
@problems = problems
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ruby
|
10
|
+
|
11
|
+
# Add the arguments
|
12
|
+
args = @problems.first[:arguments]
|
13
|
+
variables = (0...args.length).collect {|x| 'var'+x.to_s}
|
14
|
+
result = ''
|
15
|
+
@problems.each_with_index do |x,i|
|
16
|
+
result += ' if '+variables[0].to_s+' == '+quote(x[:arguments][0])+"\n"
|
17
|
+
result += ' return '+quote(x[:response])+"\n"
|
18
|
+
result += ' end'+"\n"
|
19
|
+
end
|
20
|
+
result
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.match?(problems)
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
# TODO Not Dry - method used in Pot
|
30
|
+
def quote(value)
|
31
|
+
if value.kind_of?(String)
|
32
|
+
return "'#{value}'"
|
33
|
+
end
|
34
|
+
value.to_s
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class NumericOperator
|
2
|
+
|
3
|
+
# Maybe NumericOperation
|
4
|
+
|
5
|
+
def initialize(constant)
|
6
|
+
@constant = constant
|
7
|
+
end
|
8
|
+
|
9
|
+
# Is the problem suitable for a numeric operatio?
|
10
|
+
# e.g. can the .find_contants call be called without error
|
11
|
+
def self.viable?(arguments,output)
|
12
|
+
|
13
|
+
# 1. Only has one argument value
|
14
|
+
# 2. Argument is a numeric value
|
15
|
+
# 3. Response is numeric
|
16
|
+
|
17
|
+
# TODO Need to save these viablility tests in shared (easily comparable) state.
|
18
|
+
# e.g. so all viable operations can be found in one go.
|
19
|
+
|
20
|
+
return false unless arguments.all? { |x| x.kind_of?(Numeric) }
|
21
|
+
return false unless output.kind_of?(Numeric)
|
22
|
+
true
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_ruby
|
27
|
+
' var0 + '+@constant.to_s+"\n"
|
28
|
+
end
|
29
|
+
|
30
|
+
# Operator for "x + n" e.g. x + 1
|
31
|
+
def successful?(problem)
|
32
|
+
# Does the input match the answer
|
33
|
+
#problem.collect {|x| x[:response] - x[:arguments].first }.uniq.length == 1
|
34
|
+
if (problem[:arguments].first + @constant) == problem[:response]
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.find_constants(problems)
|
41
|
+
problems.collect {|x| x[:response] - x[:arguments].first }.uniq
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/lib/cauldron/pot.rb
CHANGED
@@ -1,174 +1,66 @@
|
|
1
1
|
module Cauldron
|
2
2
|
|
3
3
|
class Pot
|
4
|
-
|
5
|
-
include Cauldron::Util::Home
|
6
|
-
include ContainsTheories
|
7
|
-
|
8
|
-
|
9
|
-
VERSION = '0-1-1'
|
10
|
-
|
11
|
-
def initialize()
|
12
|
-
StandardLogger.instance.level = Logger::FATAL
|
13
|
-
end
|
14
|
-
|
15
|
-
# Returns a runtime method that meets the requirements of the test cases.
|
16
|
-
def brew(test_cases)
|
17
|
-
|
18
|
-
exclude = []
|
19
|
-
chains = next_chains(test_cases,exclude)
|
20
|
-
if chains.empty?
|
21
|
-
raise StandardError.new('Failed to generate a chain for this problem A')
|
22
|
-
end
|
23
|
-
|
24
|
-
runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
|
25
|
-
chains.each do |chain|
|
26
|
-
if chain_valid?(chain,test_cases.copy)
|
27
|
-
validator = TheoryChainValidator.new
|
28
|
-
unified_chain = chain.unify_chain
|
29
|
-
implementation_permutations = unified_chain.implementation_permuatations(runtime_method.copy,test_cases.copy,Mapping.new)
|
30
|
-
return validator.build(runtime_method.copy,test_cases.copy,implementation_permutations)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
chains.each do |chain|
|
34
|
-
exclude << chain.theories_sequence
|
35
|
-
end
|
36
4
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
if chain.kind_of?(Array)
|
55
|
-
raise StandardError.new('should be a chain '+chain.first.class.to_s)
|
56
|
-
end
|
57
|
-
runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
|
58
|
-
unified_chain = chain.unify_chain
|
59
|
-
implementation_permutations = unified_chain.implementation_permuatations(runtime_method.copy,test_cases.copy,Mapping.new)
|
60
|
-
|
61
|
-
# Go through each of the permutations and create the runtime method for the chain
|
62
|
-
validator = TheoryChainValidator.new
|
63
|
-
begin
|
64
|
-
result = validator.build(runtime_method.copy,test_cases.copy,implementation_permutations)
|
65
|
-
rescue StandardError => e
|
66
|
-
StandardLogger.instance.warning e
|
67
|
-
return false
|
68
|
-
end
|
69
|
-
return true
|
70
|
-
end
|
71
|
-
|
72
|
-
def next_chains(test_cases,exclude=[])
|
73
|
-
theories = saved_theories
|
74
|
-
|
75
|
-
res = theories.collect {|x| x.theory_id }
|
76
|
-
runtime_method = RuntimeMethod.new(MethodUsage.new(MethodParameter.new))
|
77
|
-
|
78
|
-
potential_values = MappingValues.new([])
|
79
|
-
connector = TheoryConnector.new(potential_values)
|
80
|
-
|
81
|
-
# Attempt to generate a complete chain for the solution
|
82
|
-
chains = connector.generate_chains(runtime_method,test_cases,theories,exclude)
|
83
|
-
return chains
|
5
|
+
def solve(problems)
|
6
|
+
|
7
|
+
# Identify the relationship
|
8
|
+
relationship = find_relationship(problems)
|
9
|
+
|
10
|
+
# Generate if statements
|
11
|
+
result = ''
|
12
|
+
|
13
|
+
# Add the arguments
|
14
|
+
args = problems.first[:arguments]
|
15
|
+
variables = (0...args.length).collect {|x| 'var'+x.to_s}
|
16
|
+
result = 'def function('+variables.join(',')+')'+"\n"
|
17
|
+
result << relationship.to_ruby
|
18
|
+
result += 'end'
|
19
|
+
|
20
|
+
result
|
21
|
+
|
84
22
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def quote(value)
|
27
|
+
if value.kind_of?(String)
|
28
|
+
return "'#{value}'"
|
91
29
|
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
def simmer(demo)
|
96
|
-
raise StandardError.new('This demo does not work') unless demo_works?(demo)
|
97
|
-
|
98
|
-
# Generate a master theory for each stage of the runtime method when following the theory chains
|
99
|
-
# generator = TheoryGenerator.new
|
100
|
-
# master_theories = generator.master_theories(
|
101
|
-
# demo[:chain],
|
102
|
-
# demo[:initial_method],
|
103
|
-
# demo[:test_cases]
|
104
|
-
# )
|
105
|
-
|
106
|
-
# Add each of the theories in the chain to cauldron
|
107
|
-
#master_theories.each {|x| save_theory(x,master_repository_path)}
|
108
|
-
|
109
|
-
# Save each of the simple versions of the theory
|
110
|
-
demo[:chain].each {|x| save_theory(x,theory_repository_path)}
|
111
|
-
|
30
|
+
value.to_s
|
112
31
|
end
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
32
|
+
|
33
|
+
def find_relationship(problems)
|
34
|
+
|
35
|
+
operations = [NumericOperator, ConcatOperator, ArrayReverseOperator]
|
36
|
+
|
37
|
+
# Try each possible operation
|
38
|
+
operations.each do |operation_class|
|
39
|
+
|
40
|
+
# Are all the problems viable for this operation
|
41
|
+
if problems.all? {|x| operation_class.viable?(x[:arguments],x[:response]) }
|
42
|
+
possible_constants = operation_class.find_constants(problems)
|
43
|
+
possible_constants.each do |constant|
|
44
|
+
operator = operation_class.new(constant)
|
45
|
+
|
46
|
+
# Does the operator always result in the correct solution
|
47
|
+
if problems.all? {|x| operator.successful?(x) }
|
48
|
+
return operator
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
127
53
|
end
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
# Removes all the saved theories to start a fresh
|
132
|
-
def clear
|
133
|
-
cauldron_repository_paths = File.join(home,'cauldron',VERSION,'*')
|
134
|
-
FileUtils.rm_r Dir.glob(cauldron_repository_paths)
|
135
|
-
end
|
136
|
-
|
137
|
-
private
|
138
|
-
|
139
|
-
# Saves the generic theory to file. This theory will have minimal
|
140
|
-
# dependents and results.
|
141
|
-
#
|
142
|
-
def save_theory(theory,repository)
|
143
|
-
|
144
|
-
# Define the theory's directory
|
145
|
-
theory_path = File.join(repository,theory.theory_id.to_s)
|
146
|
-
if File.exists?(theory_path)
|
147
|
-
StandardLogger.instance.warning theory_path+' already exists'
|
148
|
-
#raise StandardError.new('Directory already exists - how as this happened? '+theory.theory_id.to_s) if File.exists?(theory_path)
|
149
|
-
return
|
54
|
+
|
55
|
+
if IfRelationship.match? problems
|
56
|
+
return IfRelationship.new(problems)
|
150
57
|
end
|
151
|
-
|
152
|
-
# Save a file containing the theory
|
153
|
-
FileUtils.mkdir_p(theory_path)
|
154
|
-
dump_file = File.open(File.join(theory_path,'dump'),'w+')
|
155
|
-
data = Marshal.dump(theory)
|
156
|
-
dump_file << data
|
157
|
-
dump_file.close
|
158
|
-
|
159
|
-
desc_file = File.open(File.join(theory_path,'desc'),'w+')
|
160
|
-
desc_file << theory.write
|
161
|
-
desc_file.close
|
162
|
-
|
163
|
-
end
|
164
|
-
|
165
|
-
def master_repository_path
|
166
|
-
File.join(home,'cauldron',VERSION,'master-theories')
|
58
|
+
IfRelationShip.new(problems)
|
167
59
|
end
|
168
60
|
|
169
|
-
def theory_repository_path
|
170
|
-
File.join(home,'cauldron',VERSION,'theories')
|
171
|
-
end
|
172
|
-
|
173
61
|
end
|
174
|
-
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
# Package Gem
|
66
|
+
# http://www.zenspider.com/projects/hoe.html
|