mini_kraken 0.2.03 → 0.2.04

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/lib/mini_kraken/atomic/all_atomic.rb +4 -0
  4. data/lib/mini_kraken/{core → atomic}/atomic_term.rb +23 -9
  5. data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
  6. data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -1
  7. data/lib/mini_kraken/{core → atomic}/k_symbol.rb +5 -3
  8. data/lib/mini_kraken/{core → composite}/composite_term.rb +6 -4
  9. data/lib/mini_kraken/composite/cons_cell.rb +132 -0
  10. data/lib/mini_kraken/{core → composite}/cons_cell_visitor.rb +1 -1
  11. data/lib/mini_kraken/core/association_walker.rb +14 -14
  12. data/lib/mini_kraken/core/binary_relation.rb +10 -10
  13. data/lib/mini_kraken/core/equals.rb +159 -161
  14. data/lib/mini_kraken/core/goal_relation.rb +2 -2
  15. data/lib/mini_kraken/core/goal_template.rb +7 -7
  16. data/lib/mini_kraken/core/{variable.rb → log_var.rb} +10 -3
  17. data/lib/mini_kraken/core/{variable_ref.rb → log_var_ref.rb} +3 -3
  18. data/lib/mini_kraken/core/tap.rb +46 -0
  19. data/lib/mini_kraken/core/vocabulary.rb +8 -8
  20. data/lib/mini_kraken/glue/dsl.rb +21 -17
  21. data/lib/mini_kraken/glue/fresh_env.rb +7 -2
  22. data/lib/mini_kraken/glue/fresh_env_factory.rb +1 -1
  23. data/lib/mini_kraken/glue/run_star_expression.rb +2 -2
  24. data/lib/mini_kraken/version.rb +1 -1
  25. data/spec/.rubocop.yml +1 -1
  26. data/spec/atomic/atomic_term_spec.rb +94 -0
  27. data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
  28. data/spec/{core → atomic}/k_symbol_spec.rb +3 -11
  29. data/spec/{core → composite}/cons_cell_spec.rb +10 -8
  30. data/spec/{core → composite}/cons_cell_visitor_spec.rb +11 -10
  31. data/spec/core/association_spec.rb +6 -4
  32. data/spec/core/association_walker_spec.rb +8 -6
  33. data/spec/core/conde_spec.rb +19 -17
  34. data/spec/core/conj2_spec.rb +10 -8
  35. data/spec/core/def_relation_spec.rb +9 -7
  36. data/spec/core/disj2_spec.rb +11 -10
  37. data/spec/core/environment_spec.rb +12 -10
  38. data/spec/core/equals_spec.rb +12 -10
  39. data/spec/core/goal_spec.rb +6 -5
  40. data/spec/core/goal_template_spec.rb +5 -5
  41. data/spec/core/{variable_ref_spec.rb → log_var_ref_spec.rb} +4 -4
  42. data/spec/core/{variable_spec.rb → log_var_spec.rb} +4 -4
  43. data/spec/core/vocabulary_spec.rb +12 -11
  44. data/spec/glue/dsl_chap1_spec.rb +0 -45
  45. data/spec/glue/dsl_chap2_spec.rb +115 -7
  46. data/spec/glue/fresh_env_factory_spec.rb +11 -9
  47. data/spec/glue/fresh_env_spec.rb +3 -3
  48. data/spec/glue/run_star_expression_spec.rb +13 -11
  49. data/spec/support/factory_atomic.rb +22 -0
  50. data/spec/support/factory_methods.rb +11 -26
  51. metadata +28 -23
  52. data/lib/mini_kraken/core/cons_cell.rb +0 -82
  53. data/lib/mini_kraken/core/k_boolean.rb +0 -35
@@ -4,10 +4,10 @@ require_relative '../spec_helper' # Use the RSpec framework
4
4
  require 'ostruct'
5
5
 
6
6
  # Load the class under test
7
- require_relative '../../lib/mini_kraken/core/k_symbol'
7
+ require_relative '../../lib/mini_kraken/atomic/k_symbol'
8
8
 
9
9
  module MiniKraken
10
- module Core
10
+ module Atomic
11
11
  describe KSymbol do
12
12
  let(:a_value) { :pea }
13
13
  subject { KSymbol.new(a_value) }
@@ -37,7 +37,7 @@ module MiniKraken
37
37
  another = KSymbol.new(:pod)
38
38
  expect(subject).not_to be_eql(another)
39
39
 
40
- # Different type, same value
40
+ # Different duck type, same value
41
41
  yet_another = OpenStruct.new(value: :pea)
42
42
  expect(subject).not_to be_eql(yet_another)
43
43
  end
@@ -51,14 +51,6 @@ module MiniKraken
51
51
  another = KSymbol.new(:pod)
52
52
  expect(subject == another).to be_falsy
53
53
 
54
- # Same duck type, same value
55
- yet_another = OpenStruct.new(value: :pea)
56
- expect(subject == yet_another).to be_truthy
57
-
58
- # Different duck type, different value
59
- still_another = OpenStruct.new(value: :pod)
60
- expect(subject == still_another).to be_falsy
61
-
62
54
  # Default Ruby representation, same value
63
55
  expect(subject == :pea).to be_truthy
64
56
 
@@ -1,17 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
4
+ require_relative '../support/factory_atomic'
5
5
 
6
6
  # Load the class under test
7
- require_relative '../../lib/mini_kraken/core/cons_cell'
7
+ require_relative '../../lib/mini_kraken/composite/cons_cell'
8
8
 
9
9
  module MiniKraken
10
- module Core
10
+ module Composite
11
11
  describe ConsCell do
12
- let(:pea) { KSymbol.new(:pea) }
13
- let(:pod) { KSymbol.new(:pod) }
14
- let(:corn) { KSymbol.new(:corn) }
12
+ include MiniKraken::FactoryAtomic # Use mix-in module
13
+
14
+ let(:pea) { k_symbol(:pea) }
15
+ let(:pod) { k_symbol(:pod) }
16
+ let(:corn) { k_symbol(:corn) }
15
17
  subject { ConsCell.new(pea, pod) }
16
18
 
17
19
  context 'Initialization:' do
@@ -66,10 +68,10 @@ module MiniKraken
66
68
  expect(subject.eql?(different)).to be_falsey
67
69
  end
68
70
 
69
- it 'should append another cons cell' do
71
+ it 'should set_cdr! another cons cell' do
70
72
  instance = ConsCell.new(pea)
71
73
  trail = ConsCell.new(pod)
72
- instance.append(trail)
74
+ instance.set_cdr!(trail)
73
75
  expect(instance.car).to eq(pea)
74
76
  expect(instance.cdr).to eq(trail)
75
77
  end
@@ -1,27 +1,28 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
5
- require_relative '../../lib/mini_kraken/core/variable_ref'
4
+ require_relative '../support/factory_atomic'
5
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
6
6
 
7
7
  # Load the class under test
8
- require_relative '../../lib/mini_kraken/core/cons_cell_visitor'
9
-
8
+ require_relative '../../lib/mini_kraken/composite/cons_cell_visitor'
10
9
 
11
10
  module MiniKraken
12
- module Core
11
+ module Composite
13
12
  describe ConsCellVisitor do
14
- let(:pea) { KSymbol.new(:pea) }
15
- let(:pod) { KSymbol.new(:pod) }
16
- let(:corn) { KSymbol.new(:corn) }
17
- let(:ref_q) { VariableRef.new('q') }
13
+ include MiniKraken::FactoryAtomic # Use mix-in module
14
+
15
+ let(:pea) { k_symbol(:pea) }
16
+ let(:pod) { k_symbol(:pod) }
17
+ let(:corn) { k_symbol(:corn) }
18
+ let(:ref_q) { LogVarRef.new('q') }
18
19
  let(:l_pea) { ConsCell.new(pea) }
19
20
  let(:l_pea_pod) { ConsCell.new(pea, ConsCell.new(pod)) }
20
21
  let(:l_pea_pod_corn) { ConsCell.new(pea, ConsCell.new(pod, ConsCell.new(corn))) }
21
22
  subject { ConsCellVisitor }
22
23
 
23
24
  context 'Provided services:' do
24
- it 'acts as a factory of Enumerator' do
25
+ it 'acts as a factory of Fiber objects' do
25
26
  expect(subject.df_visitor(l_pea)).to be_kind_of(Fiber)
26
27
  end
27
28
  end # context
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
5
- require_relative '../../lib/mini_kraken/core/variable'
4
+ require_relative '../support/factory_atomic'
5
+ require_relative '../../lib/mini_kraken/core/log_var'
6
6
 
7
7
  # Load the class under test
8
8
  require_relative '../../lib/mini_kraken/core/association'
@@ -10,7 +10,9 @@ require_relative '../../lib/mini_kraken/core/association'
10
10
  module MiniKraken
11
11
  module Core
12
12
  describe Association do
13
- let(:pea) { KSymbol.new(:pea) }
13
+ include MiniKraken::FactoryAtomic # Use mix-in module
14
+
15
+ let(:pea) { k_symbol(:pea) }
14
16
  subject { Association.new('q', pea) }
15
17
 
16
18
  context 'Initialization:' do
@@ -19,7 +21,7 @@ module MiniKraken
19
21
  end
20
22
 
21
23
  it 'should be initialized with a variable and a value' do
22
- expect { Association.new(Variable.new('p'), pea) }.not_to raise_error
24
+ expect { Association.new(LogVar.new('p'), pea) }.not_to raise_error
23
25
  end
24
26
 
25
27
  it 'should know the variable name' do
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
4
  require_relative '../../lib/mini_kraken/core/environment'
5
+ require_relative '../support/factory_atomic'
5
6
  require_relative '../support/factory_methods'
6
7
 
7
8
  # Load the class under test
@@ -11,6 +12,7 @@ require_relative '../../lib/mini_kraken/core/association_walker'
11
12
  module MiniKraken
12
13
  module Core
13
14
  describe AssociationWalker do
15
+ include MiniKraken::FactoryAtomic # Use mix-in module
14
16
  include FactoryMethods
15
17
 
16
18
  subject { AssociationWalker.new }
@@ -26,12 +28,12 @@ module MiniKraken
26
28
  end # context
27
29
 
28
30
  context 'Provided services:' do
29
- let(:pea) { KSymbol.new(:pea) }
30
- let(:pod) { KSymbol.new(:pod) }
31
- let(:var_q) { Variable.new('q') }
32
- let(:ref_q) { VariableRef.new('q') }
33
- let(:var_x) { Variable.new('x') }
34
- let(:ref_x) { VariableRef.new('x') }
31
+ let(:pea) { k_symbol(:pea) }
32
+ let(:pod) { k_symbol(:pod) }
33
+ let(:var_q) { LogVar.new('q') }
34
+ let(:ref_q) { LogVarRef.new('q') }
35
+ let(:var_x) { LogVar.new('x') }
36
+ let(:ref_x) { LogVarRef.new('x') }
35
37
  let(:env) { Environment.new }
36
38
 
37
39
  it 'should return composite when it has only atomic term(s)' do
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
4
+ require_relative '../support/factory_atomic'
5
5
  require_relative '../../lib/mini_kraken/core/fail'
6
6
  require_relative '../../lib/mini_kraken/core/succeed'
7
7
  require_relative '../../lib/mini_kraken/core/equals'
8
8
  require_relative '../../lib/mini_kraken/core/environment'
9
- require_relative '../../lib/mini_kraken/core/variable'
10
- require_relative '../../lib/mini_kraken/core/variable_ref'
9
+ require_relative '../../lib/mini_kraken/core/log_var'
10
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
11
11
 
12
12
  # Load the class under test
13
13
  require_relative '../../lib/mini_kraken/core/conde'
@@ -15,6 +15,8 @@ require_relative '../../lib/mini_kraken/core/conde'
15
15
  module MiniKraken
16
16
  module Core
17
17
  describe Conde do
18
+ include MiniKraken::FactoryAtomic # Use mix-in module
19
+
18
20
  subject { Conde.instance }
19
21
 
20
22
  context 'Initialization:' do
@@ -28,22 +30,22 @@ module MiniKraken
28
30
  end # context
29
31
 
30
32
  context 'Provided services:' do
31
- let(:bean) { KSymbol.new(:bean) }
32
- let(:corn) { KSymbol.new(:corn) }
33
- let(:meal) { KSymbol.new(:meal) }
34
- let(:oil) { KSymbol.new(:oil) }
35
- let(:olive) { KSymbol.new(:olive) }
36
- let(:pea) { KSymbol.new(:pea) }
37
- let(:red) { KSymbol.new(:red) }
38
- let(:split) { KSymbol.new(:split) }
33
+ let(:bean) { k_symbol(:bean) }
34
+ let(:corn) {k_symbol(:corn) }
35
+ let(:meal) { k_symbol(:meal) }
36
+ let(:oil) { k_symbol(:oil) }
37
+ let(:olive) { k_symbol(:olive) }
38
+ let(:pea) { k_symbol(:pea) }
39
+ let(:red) { k_symbol(:red) }
40
+ let(:split) { k_symbol(:split) }
39
41
  let(:fails) { Goal.new(Fail.instance, []) }
40
42
  let(:succeeds) { Goal.new(Succeed.instance, []) }
41
- let(:var_q) { Variable.new('q') }
42
- let(:var_x) { Variable.new('x') }
43
- let(:var_y) { Variable.new('y') }
44
- let(:ref_q) { VariableRef.new('q') }
45
- let(:ref_x) { VariableRef.new('x') }
46
- let(:ref_y) { VariableRef.new('y') }
43
+ let(:var_q) { LogVar.new('q') }
44
+ let(:var_x) { LogVar.new('x') }
45
+ let(:var_y) { LogVar.new('y') }
46
+ let(:ref_q) { LogVarRef.new('q') }
47
+ let(:ref_x) { LogVarRef.new('x') }
48
+ let(:ref_y) { LogVarRef.new('y') }
47
49
  let(:env) do
48
50
  e = Environment.new
49
51
  e.add_var(var_q)
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
4
+ require_relative '../support/factory_atomic'
5
5
  require_relative '../../lib/mini_kraken/core/fail'
6
6
  require_relative '../../lib/mini_kraken/core/succeed'
7
7
  require_relative '../../lib/mini_kraken/core/equals'
8
8
  require_relative '../../lib/mini_kraken/core/environment'
9
- require_relative '../../lib/mini_kraken/core/variable'
10
- require_relative '../../lib/mini_kraken/core/variable_ref'
9
+ require_relative '../../lib/mini_kraken/core/log_var'
10
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
11
11
 
12
12
  # Load the class under test
13
13
  require_relative '../../lib/mini_kraken/core/conj2'
@@ -16,6 +16,8 @@ require_relative '../../lib/mini_kraken/core/conj2'
16
16
  module MiniKraken
17
17
  module Core
18
18
  describe Conj2 do
19
+ include MiniKraken::FactoryAtomic # Use mix-in module
20
+
19
21
  subject { Conj2.instance }
20
22
 
21
23
  context 'Initialization:' do
@@ -30,13 +32,13 @@ module MiniKraken
30
32
 
31
33
  context 'Provided services:' do
32
34
  let(:env) { Environment.new }
33
- let(:pea) { KSymbol.new(:pea) }
34
- let(:corn) { KSymbol.new(:corn) }
35
- let(:meal) { KSymbol.new(:meal) }
35
+ let(:pea) { k_symbol(:pea) }
36
+ let(:corn) { k_symbol(:corn) }
37
+ let(:meal) { k_symbol(:meal) }
36
38
  let(:fails) { Goal.new(Fail.instance, []) }
37
39
  let(:succeeds) { Goal.new(Succeed.instance, []) }
38
- let(:var_q) { Variable.new('q') }
39
- let(:ref_q) { VariableRef.new('q') }
40
+ let(:var_q) { LogVar.new('q') }
41
+ let(:ref_q) { LogVarRef.new('q') }
40
42
 
41
43
  it 'should complain when one of its argument is not a goal' do
42
44
  err = StandardError
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
+ require_relative '../support/factory_atomic'
4
5
  require_relative '../../lib/mini_kraken/core/disj2'
5
6
  require_relative '../../lib/mini_kraken/core/equals'
6
7
  require_relative '../../lib/mini_kraken/core/formal_arg'
7
8
  require_relative '../../lib/mini_kraken/core/formal_ref'
8
9
  require_relative '../../lib/mini_kraken/core/goal'
9
10
  require_relative '../../lib/mini_kraken/core/goal_template'
10
- require_relative '../../lib/mini_kraken/core/k_symbol'
11
- require_relative '../../lib/mini_kraken/core/variable_ref'
11
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
12
12
  require_relative '../../lib/mini_kraken/core/environment'
13
13
 
14
14
  # Load the class under test
@@ -17,8 +17,10 @@ require_relative '../../lib/mini_kraken/core/def_relation'
17
17
  module MiniKraken
18
18
  module Core
19
19
  describe DefRelation do
20
+ include MiniKraken::FactoryAtomic # Use mix-in module
21
+
20
22
  # (defrel (teao t) (== 'tea t))
21
- let(:tea) { KSymbol.new(:tea) }
23
+ let(:tea) { k_symbol(:tea) }
22
24
  let(:formal_t) { FormalArg.new('t') }
23
25
  let(:t_ref) { FormalRef.new('t') }
24
26
  let(:equals_tea) { GoalTemplate.new(Equals.instance, [tea, t_ref]) }
@@ -43,8 +45,8 @@ module MiniKraken
43
45
  end # context
44
46
 
45
47
  context 'Provided services:' do
46
- let(:cup) { KSymbol.new(:cup) }
47
- let(:ref_x) { VariableRef.new('x') }
48
+ let(:cup) { Atomic::KSymbol.new(:cup) }
49
+ let(:ref_x) { LogVarRef.new('x') }
48
50
  let(:equals_cup) { GoalTemplate.new(Equals.instance, [cup, t_ref]) }
49
51
  let(:g_template) { GoalTemplate.new(Disj2.instance, [equals_tea, equals_cup]) }
50
52
  subject { DefRelation.new('teacup', g_template, [formal_t]) }
@@ -67,7 +69,7 @@ module MiniKraken
67
69
 
68
70
  it 'should provide solver for a single-node goal' do
69
71
  defrel = DefRelation.new('teao', equals_tea, [formal_t])
70
- env.add_var(Variable.new('x'))
72
+ env.add_var(LogVar.new('x'))
71
73
  solver = defrel.solver_for([ref_x], env)
72
74
  outcome = solver.resume
73
75
  expect(outcome).to be_success
@@ -78,7 +80,7 @@ module MiniKraken
78
80
  end
79
81
 
80
82
  it 'should provide solver for a single-node goal' do
81
- env.add_var(Variable.new('x'))
83
+ env.add_var(LogVar.new('x'))
82
84
  solver = subject.solver_for([ref_x], env)
83
85
  outcome = solver.resume
84
86
  expect(outcome).to be_success
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
4
+ require_relative '../support/factory_atomic'
5
5
  require_relative '../../lib/mini_kraken/core/fail'
6
6
  require_relative '../../lib/mini_kraken/core/succeed'
7
7
  require_relative '../../lib/mini_kraken/core/equals'
8
8
  require_relative '../../lib/mini_kraken/core/environment'
9
- require_relative '../../lib/mini_kraken/core/variable'
10
- require_relative '../../lib/mini_kraken/core/variable_ref'
9
+ require_relative '../../lib/mini_kraken/core/log_var'
10
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
11
11
 
12
12
  # Load the class under test
13
13
  require_relative '../../lib/mini_kraken/core/disj2'
@@ -15,6 +15,7 @@ require_relative '../../lib/mini_kraken/core/disj2'
15
15
  module MiniKraken
16
16
  module Core
17
17
  describe Disj2 do
18
+ include MiniKraken::FactoryAtomic # Use mix-in module
18
19
  subject { Disj2.instance }
19
20
 
20
21
  context 'Initialization:' do
@@ -28,15 +29,15 @@ module MiniKraken
28
29
  end # context
29
30
 
30
31
  context 'Provided services:' do
31
- let(:corn) { KSymbol.new(:corn) }
32
- let(:meal) { KSymbol.new(:meal) }
33
- let(:oil) { KSymbol.new(:oil) }
34
- let(:olive) { KSymbol.new(:olive) }
35
- let(:pea) { KSymbol.new(:pea) }
32
+ let(:corn) { k_symbol(:corn) }
33
+ let(:meal) { k_symbol(:meal) }
34
+ let(:oil) { k_symbol(:oil) }
35
+ let(:olive) { k_symbol(:olive) }
36
+ let(:pea) { k_symbol(:pea) }
36
37
  let(:fails) { Goal.new(Fail.instance, []) }
37
38
  let(:succeeds) { Goal.new(Succeed.instance, []) }
38
- let(:var_q) { Variable.new('q') }
39
- let(:ref_q) { VariableRef.new('q') }
39
+ let(:var_q) { LogVar.new('q') }
40
+ let(:ref_q) { LogVarRef.new('q') }
40
41
  let(:env) do
41
42
  e = Environment.new
42
43
  e.add_var(var_q)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
- require_relative '../../lib/mini_kraken/core/k_symbol'
5
- require_relative '../../lib/mini_kraken/core/variable'
6
- require_relative '../../lib/mini_kraken/core/variable_ref'
4
+ require_relative '../support/factory_atomic'
5
+ require_relative '../../lib/mini_kraken/core/log_var'
6
+ require_relative '../../lib/mini_kraken/core/log_var_ref'
7
7
  require_relative '../../lib/mini_kraken/core/outcome'
8
8
 
9
9
  # Load the class under test
@@ -12,6 +12,8 @@ require_relative '../../lib/mini_kraken/core/environment'
12
12
  module MiniKraken
13
13
  module Core
14
14
  describe Environment do
15
+ include MiniKraken::FactoryAtomic # Use mix-in module
16
+
15
17
  subject { Environment.new }
16
18
 
17
19
  context 'Initialization:' do
@@ -40,13 +42,13 @@ module MiniKraken
40
42
  end # context
41
43
 
42
44
  context 'Provided services:' do
43
- let(:var_a) { Variable.new('a') }
44
- let(:var_b) { Variable.new('b') }
45
- let(:var_c) { Variable.new('c') }
46
- let(:var_c_bis) { Variable.new('c') }
47
- let(:pea) { KSymbol.new(:pea) }
48
- let(:pod) { KSymbol.new(:pod) }
49
- let(:pad) { KSymbol.new(:pad) }
45
+ let(:var_a) { LogVar.new('a') }
46
+ let(:var_b) { LogVar.new('b') }
47
+ let(:var_c) { LogVar.new('c') }
48
+ let(:var_c_bis) { LogVar.new('c') }
49
+ let(:pea) { k_symbol(:pea) }
50
+ let(:pod) { k_symbol(:pod) }
51
+ let(:pad) { k_symbol(:pad) }
50
52
 
51
53
  it 'should accept the addition of a variable' do
52
54
  subject.add_var(var_a)
@@ -3,6 +3,7 @@
3
3
  require_relative '../spec_helper' # Use the RSpec framework
4
4
  require_relative '../../lib/mini_kraken/core/environment'
5
5
 
6
+ require_relative '../support/factory_atomic'
6
7
  require_relative '../support/factory_methods'
7
8
  # Load the class under test
8
9
  require_relative '../../lib/mini_kraken/core/equals'
@@ -10,6 +11,7 @@ require_relative '../../lib/mini_kraken/core/equals'
10
11
  module MiniKraken
11
12
  module Core
12
13
  describe Equals do
14
+ include MiniKraken::FactoryAtomic # Use mix-in module
13
15
  include FactoryMethods
14
16
 
15
17
  subject { Equals.instance }
@@ -26,13 +28,13 @@ module MiniKraken
26
28
 
27
29
  context 'Provided services:' do
28
30
  def build_var(aName)
29
- new_var = Variable.new(aName)
31
+ new_var = LogVar.new(aName)
30
32
  env.add_var(new_var)
31
33
  new_var
32
34
  end
33
35
 
34
36
  def build_var_ref(aName)
35
- VariableRef.new(aName)
37
+ LogVarRef.new(aName)
36
38
  end
37
39
 
38
40
  def solve_for(arg1, arg2)
@@ -42,10 +44,10 @@ module MiniKraken
42
44
  outcome
43
45
  end
44
46
 
45
- let(:pea) { KSymbol.new(:pea) }
46
- let(:pod) { KSymbol.new(:pod) }
47
- let(:sample_cons) { ConsCell.new(pea) }
48
- let(:a_composite) { ConsCell.new(pod) }
47
+ let(:pea) { k_symbol(:pea) }
48
+ let(:pod) { k_symbol(:pod) }
49
+ let(:sample_cons) { Composite::ConsCell.new(pea) }
50
+ let(:a_composite) { Composite::ConsCell.new(pod) }
49
51
  let(:env) { Environment.new }
50
52
  let(:var_q) { build_var('q') }
51
53
  let(:ref_q) do
@@ -183,7 +185,7 @@ module MiniKraken
183
185
 
184
186
  it 'should succeed for a right-handed bound equal argument' do
185
187
  ref_q.associate(sample_cons, env)
186
- composite = ConsCell.new(pea)
188
+ composite = Composite::ConsCell.new(pea)
187
189
  result = solve_for(composite, ref_q)
188
190
 
189
191
  expect(result).to be_success
@@ -194,7 +196,7 @@ module MiniKraken
194
196
 
195
197
  it 'should succeed for a left-handed bound equal argument' do
196
198
  ref_q.associate(sample_cons, env)
197
- composite = ConsCell.new(pea)
199
+ composite = Composite::ConsCell.new(pea)
198
200
  result = solve_for(ref_q, composite)
199
201
 
200
202
  expect(result).to be_success
@@ -205,7 +207,7 @@ module MiniKraken
205
207
 
206
208
  it 'should succeed for a right-handed bound unequal argument' do
207
209
  ref_q.associate(sample_cons, env)
208
- composite = ConsCell.new(pod)
210
+ composite = Composite::ConsCell.new(pod)
209
211
  result = solve_for(composite, ref_q)
210
212
 
211
213
  expect(result).to be_failure
@@ -216,7 +218,7 @@ module MiniKraken
216
218
 
217
219
  it 'should succeed for a left-handed bound unequal argument' do
218
220
  ref_q.associate(sample_cons, env)
219
- composite = ConsCell.new(pod)
221
+ composite = Composite::ConsCell.new(pod)
220
222
  result = solve_for(ref_q, composite)
221
223
 
222
224
  expect(result).not_to be_success