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