cauldron 0.1.2 → 0.1.3

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.
Files changed (132) hide show
  1. data/Gemfile +6 -0
  2. data/Gemfile.lock +63 -0
  3. data/History.md +5 -0
  4. data/Rakefile +62 -16
  5. data/VERSION +1 -1
  6. data/cauldron.gemspec +463 -0
  7. data/cauldron/lib/cauldron.rb +1 -1
  8. data/features/cauldron_generates_runtime_method.feature +7 -4
  9. data/features/cauldron_generates_single_paramter_methods.feature +25 -0
  10. data/features/cauldron_interactive_start_terminal.feature +17 -0
  11. data/features/cauldron_quit_terminal.feature +9 -0
  12. data/features/cauldron_start_terminal.feature +0 -1
  13. data/features/step_definitions/cauldron_steps.rb +10 -5
  14. data/features/step_definitions/terminal_steps.rb +27 -0
  15. data/features/support/env.rb +2 -0
  16. data/features/support/hooks.rb +15 -0
  17. data/lib/Chain.rb +3 -3
  18. data/lib/Mapping.rb +1 -0
  19. data/lib/PartialChain.rb +253 -0
  20. data/lib/Theory.rb +28 -4
  21. data/lib/UnifiedChain.rb +94 -125
  22. data/lib/cauldron.rb +3 -0
  23. data/lib/cauldron/demos.rb +4 -4
  24. data/lib/cauldron/env.rb +1 -0
  25. data/lib/cauldron/pot.rb +42 -38
  26. data/lib/cauldron/terminal.rb +19 -3
  27. data/lib/cauldron/util/home.rb +21 -0
  28. data/lib/cauldron/util/saver.rb +45 -0
  29. data/lib/core/Container.rb +1 -1
  30. data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +28 -28
  31. data/lib/core/runtime_method/RuntimeMethod.rb +6 -23
  32. data/lib/core/statement/ActsAsStatement.rb +0 -96
  33. data/lib/core/statement/BlockStatement.rb +1 -1
  34. data/lib/core/statement/OpenStatement.rb +1 -1
  35. data/lib/core/statement/Statement.rb +39 -94
  36. data/lib/core/statement/TheoryStatement.rb +1 -1
  37. data/lib/core/syntax/BlockContainer.rb +0 -28
  38. data/lib/core/variable/MethodParameter.rb +1 -1
  39. data/lib/required.rb +2 -14
  40. data/lib/theories.rb +0 -1
  41. data/lib/theory/ActionImplementation.rb +1 -1
  42. data/lib/theory/TheoryAction.rb +2 -2
  43. data/lib/theory/TheoryConnector.rb +11 -14
  44. data/lib/theory/TheoryImplementation.rb +10 -9
  45. data/lib/util/MethodWriter.rb +10 -10
  46. data/sandbox.rb +23 -0
  47. data/spec/cauldron/pot_spec.rb +62 -10
  48. data/spec/cauldron/runtime_method_spec.rb +31 -17
  49. data/spec/cauldron/saver_spec.rb +45 -0
  50. data/spec/cauldron/terminal_spec.rb +10 -1
  51. data/spec/cauldron/theory_spec.rb +4 -4
  52. data/spec/cauldron/unified_chain_spec.rb +38 -0
  53. data/spec/spec_helper.rb +3 -1
  54. data/tasks/development_tasks.rake +4 -0
  55. data/tasks/theory_tasks.rake +16 -20
  56. data/test/fixtures/theories/0/desc +6 -6
  57. data/test/fixtures/theories/0/dump +0 -0
  58. data/test/fixtures/theories/1/desc +7 -7
  59. data/test/fixtures/theories/1/dump +0 -0
  60. data/test/fixtures/theories/10/desc +13 -13
  61. data/test/fixtures/theories/10/dump +0 -0
  62. data/test/fixtures/theories/11/desc +10 -10
  63. data/test/fixtures/theories/11/dump +0 -0
  64. data/test/fixtures/theories/12/desc +9 -9
  65. data/test/fixtures/theories/12/dump +0 -0
  66. data/test/fixtures/theories/13/desc +16 -16
  67. data/test/fixtures/theories/13/dump +0 -0
  68. data/test/fixtures/theories/14/desc +16 -16
  69. data/test/fixtures/theories/14/dump +0 -0
  70. data/test/fixtures/theories/15/desc +10 -10
  71. data/test/fixtures/theories/15/dump +0 -0
  72. data/test/fixtures/theories/16/desc +10 -10
  73. data/test/fixtures/theories/16/dump +0 -0
  74. data/test/fixtures/theories/17/desc +7 -7
  75. data/test/fixtures/theories/17/dump +0 -0
  76. data/test/fixtures/theories/18/desc +7 -7
  77. data/test/fixtures/theories/18/dump +0 -0
  78. data/test/fixtures/theories/19/desc +7 -7
  79. data/test/fixtures/theories/19/dump +0 -0
  80. data/test/fixtures/theories/2/desc +6 -6
  81. data/test/fixtures/theories/2/dump +0 -0
  82. data/test/fixtures/theories/20/desc +13 -13
  83. data/test/fixtures/theories/20/dump +0 -0
  84. data/test/fixtures/theories/3/desc +7 -7
  85. data/test/fixtures/theories/3/dump +0 -0
  86. data/test/fixtures/theories/4/desc +7 -7
  87. data/test/fixtures/theories/4/dump +0 -0
  88. data/test/fixtures/theories/5/desc +6 -6
  89. data/test/fixtures/theories/5/dump +0 -0
  90. data/test/fixtures/theories/6/desc +7 -7
  91. data/test/fixtures/theories/6/dump +0 -0
  92. data/test/fixtures/theories/7/desc +7 -7
  93. data/test/fixtures/theories/7/dump +0 -0
  94. data/test/fixtures/theories/8/desc +7 -7
  95. data/test/fixtures/theories/8/dump +0 -0
  96. data/test/fixtures/theories/9/desc +16 -16
  97. data/test/fixtures/theories/9/dump +0 -0
  98. data/test/fixtures/theory_implementations/0/dump +0 -0
  99. data/test/fixtures/theory_implementations/2/dump +0 -0
  100. data/test/ts_complete.rb +1 -10
  101. data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +1 -0
  102. data/test/unit/core/runtime_method/tc_runtime_method.rb +16 -39
  103. data/test/unit/core/statement/tc_block_statement.rb +3 -3
  104. data/test/unit/core/statement/tc_open_statement.rb +4 -4
  105. data/test/unit/core/statement/tc_statement.rb +2 -147
  106. data/test/unit/core/statement/tc_theory_statement.rb +1 -1
  107. data/test/unit/theory/tc_theory_dependent.rb +3 -3
  108. data/test/unit/theory/tc_theory_result.rb +5 -5
  109. data/test/unit/util/tc_method_validation.rb +45 -45
  110. data/test/unit/util/tc_parser.rb +1 -1
  111. data/test/unit/util/tc_string_to_theory.rb +2 -2
  112. metadata +74 -48
  113. data/lib/ScopeDependencies.rb +0 -8
  114. data/lib/core/statement/StatementDependencies.rb +0 -271
  115. data/lib/core/structure/DeclareNewInstanceStructure.rb +0 -49
  116. data/lib/core/structure/DeclareRuntimeMethodStructure.rb +0 -34
  117. data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +0 -31
  118. data/lib/core/structure/DeclareVariableAsVariableStructure.rb +0 -52
  119. data/lib/core/structure/FixnumAdditionStructure.rb +0 -56
  120. data/lib/core/structure/InstanceCallContainerStructure.rb +0 -50
  121. data/lib/core/structure/InstanceCallStructure.rb +0 -53
  122. data/lib/core/structure/InstanceMethodCallStructure.rb +0 -21
  123. data/lib/core/structure/ReturnStructure.rb +0 -20
  124. data/lib/core/structure/StatementStructure.rb +0 -11
  125. data/test/unit/core/statement/tc_statement_dependencies.rb +0 -147
  126. data/test/unit/core/structure/tc_declare_new_instance_structure.rb +0 -41
  127. data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +0 -41
  128. data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +0 -66
  129. data/test/unit/core/structure/tc_instance_call_container_structure.rb +0 -41
  130. data/test/unit/core/structure/tc_return_structure.rb +0 -32
  131. data/test/unit/tc_instance_call_structure.rb +0 -35
  132. data/test/unit/tc_statement_structure_2.rb +0 -43
@@ -1,66 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestDeclareVariableAsVariableStructure < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- # Create the structure instance that generates the appropriate statement
9
- @statement_generator = DeclareVariableAsVariableStructure.new
10
-
11
- # Create some simple variable declarations
12
- @fixnum_variable = FixnumVariable.new(8)
13
- @manny_variable = StringVariable.new('manny')
14
-
15
- end
16
-
17
- def teardown
18
- System.reset
19
- end
20
-
21
- def test_statements
22
-
23
- # Test that "var = var(8)" can be created
24
- assert_equal(1,@statement_generator.statements([@fixnum_variable]).length)
25
- assert(@statement_generator.statements([@fixnum_variable]).first.kind_of?(Statement))
26
- assert_equal(@statement_generator.length,@statement_generator.statements([@fixnum_variable]).first.length)
27
-
28
- assert_equal(3,@statement_generator.statements([@manny_variable]).length)
29
- assert_equal(0,@statement_generator.statements([]).length)
30
-
31
- # Attempt to generate structures that generate string variables
32
- assert_equal(3,@statement_generator.statements([@manny_variable]).length)
33
-
34
- # Attempt to generate a string+string statement
35
- le = 'Le'.to_var
36
- chuck = 'Chuck'.to_var
37
- assert_equal(6,@statement_generator.statements([le,chuck]).length)
38
-
39
- # Test that declared variables can be retrieved from statement variabies
40
- # e.g. var = statement_var.declared_variable
41
- statement_var_a_unknown = Unknown.new
42
- statement_var_a = Statement.new(statement_var_a_unknown,Equal.new,8.to_literal).to_var
43
- # TODO I'm not sure I should allow the re-dclaration of variables here
44
- assert_equal(2,@statement_generator.statements([statement_var_a]).length)
45
- assert_equal(
46
- ' = var_'+statement_var_a.variable_id.to_s+'.declared_variable',
47
- @statement_generator.statements([statement_var_a]).last.write[6..35]
48
- )
49
-
50
- # Check that the 'push' method isn't used in statement declarations
51
- # Otherwise we generate allot of redundant variables.
52
- # e.g.
53
- # var_a = ['test','asdf']
54
- # var_b = var_a.push('test2')
55
- #
56
- # var_a and var_b are essentially the same variable.
57
- options_a = [
58
- Statement.new(Return.new,6.to_literal).to_var,
59
- RuntimeMethod.new(MethodUsage.new).to_var
60
- ]
61
- assert_equal(3,@statement_generator.statements(options_a).length)
62
-
63
- end
64
-
65
- end
66
-
@@ -1,41 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestInstanceCallContainerStructure < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- # Create an array of variables to allow <runtime_method_var>.push(<statement_var>)
9
- @runtime_method_var = RuntimeMethod.new(MethodUsage.new).to_var
10
- @statement_var = Statement.new().to_var
11
- @statement_and_runtime_method_var = [
12
- @runtime_method_var,
13
- @statement_var
14
- ]
15
-
16
- end
17
-
18
- def teardown
19
- System.reset
20
- end
21
-
22
- def test_statements
23
-
24
- # Chect that <runtime_method_var>.push(<statement_var>) can be created
25
- assert_equal(1,InstanceCallContainerStructure.new().statements(@statement_and_runtime_method_var).length)
26
- assert_equal(
27
- @runtime_method_var.write+'.push('+@statement_var.write+')',
28
- InstanceCallContainerStructure.new().statements(@statement_and_runtime_method_var).first.write
29
- )
30
-
31
- # Check that <runtime_method_var>.push(<statement_var>) changes uniq_id but retains old reference
32
- resulting_statement = InstanceCallContainerStructure.new().statements(@statement_and_runtime_method_var).first
33
- assert_equal(resulting_statement.first.subject.variable_id,@runtime_method_var.variable_id)
34
- #assert_not_equal(resulting_statement.first.subject.uniq_id,@runtime_method_var.uniq_id)
35
- assert(resulting_statement.first.subject.uniq_id_history.kind_of?(Array))
36
- #assert(resulting_statement.first.subject.uniq_id_history.any? {|x| x == @runtime_method_var.uniq_id})
37
- #assert_equal(1,resulting_statement.first.subject.uniq_id_history.length)
38
-
39
- end
40
-
41
- end
@@ -1,32 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestReturnStructure < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- # Create the structure instance that generates the appropriate statement
9
- @statement_generator = ReturnStructure.new()
10
- @scabb = 'Scabb'.to_var
11
-
12
-
13
- end
14
-
15
- def teardown
16
- CodeHandler.reset_global_id
17
- System.reset
18
- RuntimeMethod.reset_global_id
19
- end
20
-
21
- def test_statements
22
-
23
- # Check that 'scabb' was returned
24
- assert_equal(1,@statement_generator.statements([@scabb]).length)
25
- assert_equal(
26
- 'return var_'+@scabb.variable_id.to_s,
27
- @statement_generator.statements([@scabb]).first.write
28
- )
29
-
30
- end
31
-
32
- end
@@ -1,35 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestInstanceCallStructure < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- # Simple string example
9
- @lechuck_variable = StringVariable.new('LeChuck')
10
-
11
- # Create an a simple chop method
12
- @chop_le_chuck = InstanceCallStructure.new(StringVariable,Chop.new)
13
-
14
- end
15
-
16
- def teardown
17
- System.reset
18
- RuntimeMethod.reset_global_id
19
- end
20
-
21
- def test_instance_calls
22
-
23
- # Assert that one instance call is created correctly
24
- assert_equal(1,@chop_le_chuck.instance_calls([@lechuck_variable]).length)
25
- assert(@chop_le_chuck.instance_calls([@lechuck_variable]).first.kind_of?(InstanceCallContainer))
26
-
27
- # Confirm instance call hasn't any parameters
28
- assert_equal(0,@chop_le_chuck.instance_calls([@lechuck_variable]).first.length)
29
-
30
- # Assert the no results can be retrieved
31
- assert_equal(0,@chop_le_chuck.instance_calls([]).length)
32
-
33
- end
34
-
35
- end
@@ -1,43 +0,0 @@
1
- require 'required'
2
- require 'test/unit'
3
-
4
- class TestStatementStructure2 < Test::Unit::TestCase
5
-
6
- def setup
7
-
8
- # Create a simple statement structure var = 8
9
- @fixnum_variable = FixnumVariable.new(8)
10
- #@fixnum_structure = StatementStructure2.new(StatementStructure2.declared_fixnum)
11
-
12
- # Simple string example
13
- @manny_variable = StringVariable.new('manny')
14
-
15
- # Create an a simple chop method
16
- @chop_le_chuck = InstanceCallStructure.new(StringVariable,Chop.new)
17
-
18
- # Simple statement structure that declares a new string variable
19
- #@string_structure = StatementStructure2.new(StatementStructure2.declared_string)
20
-
21
- # Adding strings structure
22
- @adding_string = StatementStructure2.new(StatementStructure2.declared_string_addition)
23
-
24
- # Adding fixnum.times structure
25
-
26
- 67.to_literal
27
-
28
- # CONTINUE I would like to just use StatementStructure with String Variable ?
29
-
30
-
31
-
32
- end
33
-
34
- def teardown
35
- System.reset
36
- RuntimeMethod.reset_global_id
37
- end
38
-
39
- def test_statements
40
-
41
- end
42
-
43
- end