mini_kraken 0.2.03 → 0.2.04

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 (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