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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/lib/mini_kraken/atomic/all_atomic.rb +4 -0
- data/lib/mini_kraken/{core → atomic}/atomic_term.rb +23 -9
- data/lib/mini_kraken/atomic/k_boolean.rb +42 -0
- data/lib/mini_kraken/{core → atomic}/k_integer.rb +2 -1
- data/lib/mini_kraken/{core → atomic}/k_symbol.rb +5 -3
- data/lib/mini_kraken/{core → composite}/composite_term.rb +6 -4
- data/lib/mini_kraken/composite/cons_cell.rb +132 -0
- data/lib/mini_kraken/{core → composite}/cons_cell_visitor.rb +1 -1
- data/lib/mini_kraken/core/association_walker.rb +14 -14
- data/lib/mini_kraken/core/binary_relation.rb +10 -10
- data/lib/mini_kraken/core/equals.rb +159 -161
- data/lib/mini_kraken/core/goal_relation.rb +2 -2
- data/lib/mini_kraken/core/goal_template.rb +7 -7
- data/lib/mini_kraken/core/{variable.rb → log_var.rb} +10 -3
- data/lib/mini_kraken/core/{variable_ref.rb → log_var_ref.rb} +3 -3
- data/lib/mini_kraken/core/tap.rb +46 -0
- data/lib/mini_kraken/core/vocabulary.rb +8 -8
- data/lib/mini_kraken/glue/dsl.rb +21 -17
- data/lib/mini_kraken/glue/fresh_env.rb +7 -2
- data/lib/mini_kraken/glue/fresh_env_factory.rb +1 -1
- data/lib/mini_kraken/glue/run_star_expression.rb +2 -2
- data/lib/mini_kraken/version.rb +1 -1
- data/spec/.rubocop.yml +1 -1
- data/spec/atomic/atomic_term_spec.rb +94 -0
- data/spec/{core → atomic}/k_boolean_spec.rb +19 -34
- data/spec/{core → atomic}/k_symbol_spec.rb +3 -11
- data/spec/{core → composite}/cons_cell_spec.rb +10 -8
- data/spec/{core → composite}/cons_cell_visitor_spec.rb +11 -10
- data/spec/core/association_spec.rb +6 -4
- data/spec/core/association_walker_spec.rb +8 -6
- data/spec/core/conde_spec.rb +19 -17
- data/spec/core/conj2_spec.rb +10 -8
- data/spec/core/def_relation_spec.rb +9 -7
- data/spec/core/disj2_spec.rb +11 -10
- data/spec/core/environment_spec.rb +12 -10
- data/spec/core/equals_spec.rb +12 -10
- data/spec/core/goal_spec.rb +6 -5
- data/spec/core/goal_template_spec.rb +5 -5
- data/spec/core/{variable_ref_spec.rb → log_var_ref_spec.rb} +4 -4
- data/spec/core/{variable_spec.rb → log_var_spec.rb} +4 -4
- data/spec/core/vocabulary_spec.rb +12 -11
- data/spec/glue/dsl_chap1_spec.rb +0 -45
- data/spec/glue/dsl_chap2_spec.rb +115 -7
- data/spec/glue/fresh_env_factory_spec.rb +11 -9
- data/spec/glue/fresh_env_spec.rb +3 -3
- data/spec/glue/run_star_expression_spec.rb +13 -11
- data/spec/support/factory_atomic.rb +22 -0
- data/spec/support/factory_methods.rb +11 -26
- metadata +28 -23
- data/lib/mini_kraken/core/cons_cell.rb +0 -82
- 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/
|
7
|
+
require_relative '../../lib/mini_kraken/atomic/k_symbol'
|
8
8
|
|
9
9
|
module MiniKraken
|
10
|
-
module
|
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 '
|
4
|
+
require_relative '../support/factory_atomic'
|
5
5
|
|
6
6
|
# Load the class under test
|
7
|
-
require_relative '../../lib/mini_kraken/
|
7
|
+
require_relative '../../lib/mini_kraken/composite/cons_cell'
|
8
8
|
|
9
9
|
module MiniKraken
|
10
|
-
module
|
10
|
+
module Composite
|
11
11
|
describe ConsCell do
|
12
|
-
|
13
|
-
|
14
|
-
let(:
|
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
|
71
|
+
it 'should set_cdr! another cons cell' do
|
70
72
|
instance = ConsCell.new(pea)
|
71
73
|
trail = ConsCell.new(pod)
|
72
|
-
instance.
|
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 '
|
5
|
-
require_relative '../../lib/mini_kraken/core/
|
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/
|
9
|
-
|
8
|
+
require_relative '../../lib/mini_kraken/composite/cons_cell_visitor'
|
10
9
|
|
11
10
|
module MiniKraken
|
12
|
-
module
|
11
|
+
module Composite
|
13
12
|
describe ConsCellVisitor do
|
14
|
-
|
15
|
-
|
16
|
-
let(:
|
17
|
-
let(:
|
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
|
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 '
|
5
|
-
require_relative '../../lib/mini_kraken/core/
|
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
|
-
|
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(
|
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) {
|
30
|
-
let(:pod) {
|
31
|
-
let(:var_q) {
|
32
|
-
let(:ref_q) {
|
33
|
-
let(:var_x) {
|
34
|
-
let(:ref_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
|
data/spec/core/conde_spec.rb
CHANGED
@@ -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 '
|
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/
|
10
|
-
require_relative '../../lib/mini_kraken/core/
|
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) {
|
32
|
-
let(:corn) {
|
33
|
-
let(:meal) {
|
34
|
-
let(:oil) {
|
35
|
-
let(:olive) {
|
36
|
-
let(:pea) {
|
37
|
-
let(:red) {
|
38
|
-
let(: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) {
|
42
|
-
let(:var_x) {
|
43
|
-
let(:var_y) {
|
44
|
-
let(:ref_q) {
|
45
|
-
let(:ref_x) {
|
46
|
-
let(:ref_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)
|
data/spec/core/conj2_spec.rb
CHANGED
@@ -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 '
|
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/
|
10
|
-
require_relative '../../lib/mini_kraken/core/
|
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) {
|
34
|
-
let(:corn) {
|
35
|
-
let(: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) {
|
39
|
-
let(:ref_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/
|
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) {
|
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) {
|
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(
|
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(
|
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
|
data/spec/core/disj2_spec.rb
CHANGED
@@ -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 '
|
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/
|
10
|
-
require_relative '../../lib/mini_kraken/core/
|
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) {
|
32
|
-
let(:meal) {
|
33
|
-
let(:oil) {
|
34
|
-
let(:olive) {
|
35
|
-
let(: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) {
|
39
|
-
let(:ref_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 '
|
5
|
-
require_relative '../../lib/mini_kraken/core/
|
6
|
-
require_relative '../../lib/mini_kraken/core/
|
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) {
|
44
|
-
let(:var_b) {
|
45
|
-
let(:var_c) {
|
46
|
-
let(:var_c_bis) {
|
47
|
-
let(:pea) {
|
48
|
-
let(:pod) {
|
49
|
-
let(: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)
|
data/spec/core/equals_spec.rb
CHANGED
@@ -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 =
|
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
|
-
|
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) {
|
46
|
-
let(: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
|