porolog 1.0.2 → 1.0.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.
- checksums.yaml +4 -4
- data/README.md +22 -13
- data/coverage/index.html +4564 -4552
- data/doc/Array.html +9 -9
- data/doc/Object.html +1 -1
- data/doc/Porolog.html +77 -67
- data/doc/Symbol.html +1 -1
- data/doc/_index.html +1 -1
- data/doc/file.README.html +22 -14
- data/doc/index.html +22 -14
- data/doc/top-level-namespace.html +1 -1
- data/lib/porolog.rb +4 -2
- data/lib/porolog/core_ext.rb +8 -8
- data/lib/porolog/goal.rb +2 -2
- data/lib/porolog/predicate/builtin.rb +34 -34
- data/lib/porolog/rule.rb +1 -1
- data/lib/porolog/variable.rb +7 -7
- data/test/porolog/arguments_test.rb +73 -73
- data/test/porolog/core_ext_test.rb +39 -39
- data/test/porolog/goal_test.rb +72 -72
- data/test/porolog/instantiation_test.rb +153 -153
- data/test/porolog/porolog_test.rb +272 -270
- data/test/porolog/predicate/builtin_test.rb +166 -166
- data/test/porolog/predicate_test.rb +85 -85
- data/test/porolog/rule_test.rb +69 -69
- data/test/porolog/scope_test.rb +89 -89
- data/test/porolog/tail_test.rb +23 -23
- data/test/porolog/value_test.rb +32 -34
- data/test/porolog/variable_test.rb +120 -120
- data/test/samples_test.rb +11 -11
- data/test/test_helper.rb +56 -61
- metadata +2 -2
@@ -11,7 +11,7 @@ describe 'Porolog' do
|
|
11
11
|
|
12
12
|
describe 'Variable' do
|
13
13
|
|
14
|
-
let(:predicate1) { Predicate.new :generic }
|
14
|
+
let(:predicate1) { Porolog::Predicate.new :generic }
|
15
15
|
let(:arguments1) { predicate1.arguments(:m,:n) }
|
16
16
|
let(:goal1) { arguments1.goal }
|
17
17
|
let(:goal2) { arguments1.goal }
|
@@ -24,10 +24,10 @@ describe 'Porolog' do
|
|
24
24
|
describe '.new' do
|
25
25
|
|
26
26
|
it 'should create a new variable in a goal' do
|
27
|
-
variable = Variable.new :x, goal1
|
27
|
+
variable = Porolog::Variable.new :x, goal1
|
28
28
|
|
29
|
-
assert_instance_of Variable,
|
30
|
-
assert_Goal_variables goal1,
|
29
|
+
assert_instance_of Porolog::Variable, variable
|
30
|
+
assert_Goal_variables goal1, { m: nil, n: nil, x: nil }, [
|
31
31
|
'Goal1.:m',
|
32
32
|
'Goal1.:n',
|
33
33
|
'Goal1.:x',
|
@@ -39,20 +39,20 @@ describe 'Porolog' do
|
|
39
39
|
describe '#initialize' do
|
40
40
|
|
41
41
|
it 'should initialize name, goal, instantiations, and values' do
|
42
|
-
variable = Variable.new :x, goal1
|
42
|
+
variable = Porolog::Variable.new :x, goal1
|
43
43
|
|
44
44
|
assert_Variable variable, :x, goal1, [], []
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'should convert a string name to a symbol name' do
|
48
|
-
variable = Variable.new 's', goal1
|
48
|
+
variable = Porolog::Variable.new 's', goal1
|
49
49
|
|
50
50
|
assert_equal :s, variable.name
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'should convert a variable name to its name' do
|
54
|
-
other = Variable.new 'other', goal1
|
55
|
-
variable = Variable.new other, goal1
|
54
|
+
other = Porolog::Variable.new 'other', goal1
|
55
|
+
variable = Porolog::Variable.new other, goal1
|
56
56
|
|
57
57
|
assert_equal :other, variable.name
|
58
58
|
assert_Goal_variables goal1, { m: nil, n: nil, other: nil }, [
|
@@ -63,8 +63,8 @@ describe 'Porolog' do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'should convert a value name to its name and initialize its values' do
|
66
|
-
value = Value.new 'other', goal1
|
67
|
-
variable = Variable.new value, goal1
|
66
|
+
value = Porolog::Value.new 'other', goal1
|
67
|
+
variable = Porolog::Variable.new value, goal1
|
68
68
|
|
69
69
|
assert_equal 'other', variable.name
|
70
70
|
assert_equal [value], variable.values
|
@@ -74,7 +74,7 @@ describe 'Porolog' do
|
|
74
74
|
|
75
75
|
it 'should convert other types as a name to its value' do
|
76
76
|
# TECH-DEBT: Not super sure about this spec!
|
77
|
-
variable = Variable.new 0.875, goal1
|
77
|
+
variable = Porolog::Variable.new 0.875, goal1
|
78
78
|
|
79
79
|
assert_equal '0.875', variable.name
|
80
80
|
assert_instance_of Array, variable.values
|
@@ -85,13 +85,13 @@ describe 'Porolog' do
|
|
85
85
|
end
|
86
86
|
|
87
87
|
it 'should raise an error when a goal is not provided' do
|
88
|
-
assert_raises Variable::GoalError do
|
89
|
-
Variable.new :x, 'goal'
|
88
|
+
assert_raises Porolog::Variable::GoalError do
|
89
|
+
Porolog::Variable.new :x, 'goal'
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
93
|
it 'should declare the variable in the goal' do
|
94
|
-
Variable.new :x, goal1
|
94
|
+
Porolog::Variable.new :x, goal1
|
95
95
|
|
96
96
|
assert_Goal_variables goal1, { m: nil, n: nil, x: nil }, [
|
97
97
|
'Goal1.:m',
|
@@ -105,7 +105,7 @@ describe 'Porolog' do
|
|
105
105
|
describe '#to_sym' do
|
106
106
|
|
107
107
|
it 'should convert a variable to a Symbol' do
|
108
|
-
variable = Variable.new 'v', goal1
|
108
|
+
variable = Porolog::Variable.new 'v', goal1
|
109
109
|
|
110
110
|
assert_equal :v, variable.to_sym
|
111
111
|
end
|
@@ -115,13 +115,13 @@ describe 'Porolog' do
|
|
115
115
|
describe '#type' do
|
116
116
|
|
117
117
|
it 'should return variable from uninstantiated variables' do
|
118
|
-
variable = Variable.new 'v', goal1
|
118
|
+
variable = Porolog::Variable.new 'v', goal1
|
119
119
|
|
120
120
|
assert_equal :variable, variable.type
|
121
121
|
end
|
122
122
|
|
123
123
|
it 'should return variable from instantiated variables' do
|
124
|
-
variable = Variable.new 'v', goal1
|
124
|
+
variable = Porolog::Variable.new 'v', goal1
|
125
125
|
variable.instantiate 'string value'
|
126
126
|
|
127
127
|
assert_equal :variable, variable.type
|
@@ -132,7 +132,7 @@ describe 'Porolog' do
|
|
132
132
|
describe '#inspect' do
|
133
133
|
|
134
134
|
it 'should show the goal and name' do
|
135
|
-
variable = Variable.new 'v', goal1
|
135
|
+
variable = Porolog::Variable.new 'v', goal1
|
136
136
|
|
137
137
|
assert_equal 'Goal1.:v', variable.inspect
|
138
138
|
end
|
@@ -142,15 +142,15 @@ describe 'Porolog' do
|
|
142
142
|
describe '#inspect_with_instantiations' do
|
143
143
|
|
144
144
|
it 'should show a variable without instantiations as inspect does' do
|
145
|
-
variable = Variable.new :x, goal1
|
145
|
+
variable = Porolog::Variable.new :x, goal1
|
146
146
|
|
147
147
|
assert_equal variable.inspect, variable.inspect_with_instantiations
|
148
148
|
end
|
149
149
|
|
150
150
|
it 'should return all instantiations of a variable with nested instantiations' do
|
151
|
-
variable1 = Variable.new :x, goal1
|
152
|
-
variable2 = Variable.new :y, goal1
|
153
|
-
variable3 = Variable.new :z, goal1
|
151
|
+
variable1 = Porolog::Variable.new :x, goal1
|
152
|
+
variable2 = Porolog::Variable.new :y, goal1
|
153
|
+
variable3 = Porolog::Variable.new :z, goal1
|
154
154
|
|
155
155
|
variable1.instantiate variable2
|
156
156
|
variable2.instantiate variable3
|
@@ -167,16 +167,16 @@ describe 'Porolog' do
|
|
167
167
|
assert_equal 2, variable2.instantiations.size
|
168
168
|
assert_equal 1, variable3.instantiations.size
|
169
169
|
|
170
|
-
assert_instance_of Instantiation,
|
170
|
+
assert_instance_of Porolog::Instantiation, variable1.instantiations.first
|
171
171
|
assert_equal 'Goal1.:x = Goal1.:y', variable1.instantiations.first.inspect
|
172
172
|
|
173
|
-
assert_instance_of Instantiation,
|
173
|
+
assert_instance_of Porolog::Instantiation, variable2.instantiations[0]
|
174
174
|
assert_equal 'Goal1.:x = Goal1.:y', variable2.instantiations[0].inspect
|
175
175
|
|
176
|
-
assert_instance_of Instantiation,
|
176
|
+
assert_instance_of Porolog::Instantiation, variable2.instantiations[1]
|
177
177
|
assert_equal 'Goal1.:y = Goal1.:z', variable2.instantiations[1].inspect
|
178
178
|
|
179
|
-
assert_instance_of Instantiation,
|
179
|
+
assert_instance_of Porolog::Instantiation, variable3.instantiations.first
|
180
180
|
assert_equal 'Goal1.:y = Goal1.:z', variable3.instantiations.first.inspect
|
181
181
|
|
182
182
|
assert_equal variable1.instantiations + variable3.instantiations, variable2.instantiations
|
@@ -206,8 +206,8 @@ describe 'Porolog' do
|
|
206
206
|
describe '#value' do
|
207
207
|
|
208
208
|
it 'should return the variable when no value has been instantiated' do
|
209
|
-
variable1 = Variable.new :x, goal1
|
210
|
-
variable2 = Variable.new :y, goal1
|
209
|
+
variable1 = Porolog::Variable.new :x, goal1
|
210
|
+
variable2 = Porolog::Variable.new :y, goal1
|
211
211
|
|
212
212
|
variable1.instantiate variable2
|
213
213
|
|
@@ -215,9 +215,9 @@ describe 'Porolog' do
|
|
215
215
|
end
|
216
216
|
|
217
217
|
it 'should return the indirect value through instantiations' do
|
218
|
-
variable1 = Variable.new :x, goal1
|
219
|
-
variable2 = Variable.new :y, goal1
|
220
|
-
value = Value.new [1,2,3], goal1
|
218
|
+
variable1 = Porolog::Variable.new :x, goal1
|
219
|
+
variable2 = Porolog::Variable.new :y, goal1
|
220
|
+
value = Porolog::Value.new [1,2,3], goal1
|
221
221
|
|
222
222
|
variable1.instantiate variable2
|
223
223
|
variable2.instantiate value
|
@@ -229,9 +229,9 @@ describe 'Porolog' do
|
|
229
229
|
assert_Goal goal1, :generic, [:m, :n]
|
230
230
|
|
231
231
|
# -- Create Variables --
|
232
|
-
variable1 = Variable.new :x, goal1
|
233
|
-
variable2 = Variable.new :y, goal1
|
234
|
-
variable3 = Variable.new :z, goal1
|
232
|
+
variable1 = Porolog::Variable.new :x, goal1
|
233
|
+
variable2 = Porolog::Variable.new :y, goal1
|
234
|
+
variable3 = Porolog::Variable.new :z, goal1
|
235
235
|
|
236
236
|
assert_Goal_variables goal1, { m: nil, n: nil, x: nil, y: nil, z: nil }, [
|
237
237
|
'Goal1.:m',
|
@@ -245,8 +245,8 @@ describe 'Porolog' do
|
|
245
245
|
headtail = goal1.variablise(:m/:n)
|
246
246
|
assert_Array_with_Tail headtail, [goal1.variable(:m)], '*Goal1.:n'
|
247
247
|
|
248
|
-
value1 = Value.new headtail, goal1
|
249
|
-
value2 = Value.new [1,2,3], goal1
|
248
|
+
value1 = Porolog::Value.new headtail, goal1
|
249
|
+
value2 = Porolog::Value.new [1,2,3], goal1
|
250
250
|
|
251
251
|
assert_Value value1, headtail, goal1
|
252
252
|
assert_Value value2, [1,2,3], goal1
|
@@ -314,9 +314,9 @@ describe 'Porolog' do
|
|
314
314
|
assert_Goal_variables goal1, {
|
315
315
|
m: nil,
|
316
316
|
n: nil,
|
317
|
-
x: [nil, UNKNOWN_TAIL],
|
318
|
-
y: [nil, UNKNOWN_TAIL],
|
319
|
-
z: [nil, UNKNOWN_TAIL]
|
317
|
+
x: [nil, Porolog::UNKNOWN_TAIL],
|
318
|
+
y: [nil, Porolog::UNKNOWN_TAIL],
|
319
|
+
z: [nil, Porolog::UNKNOWN_TAIL]
|
320
320
|
}, [
|
321
321
|
'Goal1.:m',
|
322
322
|
' Goal1.:y[:head]',
|
@@ -398,9 +398,9 @@ describe 'Porolog' do
|
|
398
398
|
end
|
399
399
|
|
400
400
|
it 'should not return the indirect value through instantiations after uninstantiating' do
|
401
|
-
variable1 = Variable.new :x, goal1
|
402
|
-
variable2 = Variable.new :y, goal1
|
403
|
-
value = Value.new [1,2,3], goal1
|
401
|
+
variable1 = Porolog::Variable.new :x, goal1
|
402
|
+
variable2 = Porolog::Variable.new :y, goal1
|
403
|
+
value = Porolog::Value.new [1,2,3], goal1
|
404
404
|
|
405
405
|
variable1.instantiate variable2
|
406
406
|
variable2.instantiate value
|
@@ -414,12 +414,12 @@ describe 'Porolog' do
|
|
414
414
|
end
|
415
415
|
|
416
416
|
it 'should not instantiate multiple unequal values' do
|
417
|
-
variable1 = Variable.new :x, goal1
|
418
|
-
variable2 = Variable.new :y, goal2
|
419
|
-
variable3 = Variable.new :z, goal3
|
417
|
+
variable1 = Porolog::Variable.new :x, goal1
|
418
|
+
variable2 = Porolog::Variable.new :y, goal2
|
419
|
+
variable3 = Porolog::Variable.new :z, goal3
|
420
420
|
|
421
|
-
value1 = Value.new [1,2,3], goal2
|
422
|
-
value2 = Value.new 'word', goal3
|
421
|
+
value1 = Porolog::Value.new [1,2,3], goal2
|
422
|
+
value2 = Porolog::Value.new 'word', goal3
|
423
423
|
|
424
424
|
i1 = variable1.instantiate variable2
|
425
425
|
i2 = variable1.instantiate variable3
|
@@ -458,12 +458,12 @@ describe 'Porolog' do
|
|
458
458
|
end
|
459
459
|
|
460
460
|
it 'should not raise an exception when multiple values are equal' do
|
461
|
-
variable1 = Variable.new :x, goal1
|
462
|
-
variable2 = Variable.new :y, goal2
|
463
|
-
variable3 = Variable.new :z, goal3
|
461
|
+
variable1 = Porolog::Variable.new :x, goal1
|
462
|
+
variable2 = Porolog::Variable.new :y, goal2
|
463
|
+
variable3 = Porolog::Variable.new :z, goal3
|
464
464
|
|
465
|
-
value1 = Value.new 'word', goal2
|
466
|
-
value2 = Value.new 'word', goal3
|
465
|
+
value1 = Porolog::Value.new 'word', goal2
|
466
|
+
value2 = Porolog::Value.new 'word', goal3
|
467
467
|
|
468
468
|
variable1.instantiate variable2
|
469
469
|
variable1.instantiate variable3
|
@@ -482,7 +482,7 @@ describe 'Porolog' do
|
|
482
482
|
end
|
483
483
|
|
484
484
|
it 'should raise an exception when the variable has multiple different non-array values' do
|
485
|
-
variable1 = Variable.new :x, goal1
|
485
|
+
variable1 = Porolog::Variable.new :x, goal1
|
486
486
|
|
487
487
|
variable1.values << 1
|
488
488
|
variable1.values << 'one'
|
@@ -495,7 +495,7 @@ describe 'Porolog' do
|
|
495
495
|
end
|
496
496
|
|
497
497
|
it 'should prioritise non-variables over variables' do
|
498
|
-
variable1 = Variable.new :x, goal1
|
498
|
+
variable1 = Porolog::Variable.new :x, goal1
|
499
499
|
|
500
500
|
assert_equal goal1[:x], variable1.value
|
501
501
|
|
@@ -510,50 +510,50 @@ describe 'Porolog' do
|
|
510
510
|
end
|
511
511
|
|
512
512
|
it 'should prioritise variables over an unknown array' do
|
513
|
-
variable1 = Variable.new :x, goal1
|
513
|
+
variable1 = Porolog::Variable.new :x, goal1
|
514
514
|
|
515
515
|
assert_equal goal1[:x], variable1.value
|
516
516
|
|
517
|
-
variable1.values << UNKNOWN_ARRAY
|
517
|
+
variable1.values << Porolog::UNKNOWN_ARRAY
|
518
518
|
|
519
|
-
assert_equal UNKNOWN_ARRAY, variable1.value
|
519
|
+
assert_equal Porolog::UNKNOWN_ARRAY, variable1.value
|
520
520
|
|
521
521
|
variable1.values << :variable1
|
522
522
|
variable1.values << :variable2
|
523
|
-
variable1.values << UNKNOWN_ARRAY
|
523
|
+
variable1.values << Porolog::UNKNOWN_ARRAY
|
524
524
|
|
525
525
|
assert_equal :variable1, variable1.value
|
526
526
|
end
|
527
527
|
|
528
528
|
it 'should unify a matching flathead and flattail pair' do
|
529
|
-
variable1 = Variable.new :x, goal1
|
529
|
+
variable1 = Porolog::Variable.new :x, goal1
|
530
530
|
|
531
|
-
variable1.values << [1,2,UNKNOWN_TAIL]
|
532
|
-
variable1.values << [UNKNOWN_TAIL,3,4]
|
531
|
+
variable1.values << [1, 2, Porolog::UNKNOWN_TAIL]
|
532
|
+
variable1.values << [Porolog::UNKNOWN_TAIL, 3, 4]
|
533
533
|
|
534
534
|
assert_equal [1,2,3,4], variable1.value
|
535
535
|
end
|
536
536
|
|
537
537
|
it 'should unify a matching flattail and flathead pair' do
|
538
|
-
variable1 = Variable.new :x, goal1
|
538
|
+
variable1 = Porolog::Variable.new :x, goal1
|
539
539
|
|
540
|
-
variable1.values << [UNKNOWN_TAIL,3,4]
|
541
|
-
variable1.values << [1,2,UNKNOWN_TAIL]
|
540
|
+
variable1.values << [Porolog::UNKNOWN_TAIL, 3, 4]
|
541
|
+
variable1.values << [1, 2, Porolog::UNKNOWN_TAIL]
|
542
542
|
|
543
543
|
assert_equal [1,2,3,4], variable1.value
|
544
544
|
end
|
545
545
|
|
546
546
|
it 'should return nil when the values are incompatible' do
|
547
|
-
variable1 = Variable.new :x, goal1
|
547
|
+
variable1 = Porolog::Variable.new :x, goal1
|
548
548
|
|
549
|
-
variable1.values << [1,3,4]
|
550
|
-
variable1.values << [1,2,UNKNOWN_TAIL]
|
549
|
+
variable1.values << [1, 3, 4]
|
550
|
+
variable1.values << [1, 2, Porolog::UNKNOWN_TAIL]
|
551
551
|
|
552
552
|
assert_nil variable1.value
|
553
553
|
end
|
554
554
|
|
555
555
|
it 'should unify a special case' do
|
556
|
-
variable1 = Variable.new :x, goal1
|
556
|
+
variable1 = Porolog::Variable.new :x, goal1
|
557
557
|
|
558
558
|
variable1.values << [1,[3,4]]
|
559
559
|
variable1.values << goal1[:h]/goal1[:t]
|
@@ -566,8 +566,8 @@ describe 'Porolog' do
|
|
566
566
|
describe '#instantiate' do
|
567
567
|
|
568
568
|
it 'should instantiate with another variable' do
|
569
|
-
variable1 = Variable.new :x, goal1
|
570
|
-
variable2 = Variable.new :y, goal2
|
569
|
+
variable1 = Porolog::Variable.new :x, goal1
|
570
|
+
variable2 = Porolog::Variable.new :y, goal2
|
571
571
|
|
572
572
|
variable1.instantiate variable2
|
573
573
|
|
@@ -576,9 +576,9 @@ describe 'Porolog' do
|
|
576
576
|
end
|
577
577
|
|
578
578
|
it 'should instantiate with a value' do
|
579
|
-
variable1 = Variable.new :x, goal1
|
580
|
-
variable2 = Variable.new :y, goal2
|
581
|
-
value = Value.new 'word', goal2
|
579
|
+
variable1 = Porolog::Variable.new :x, goal1
|
580
|
+
variable2 = Porolog::Variable.new :y, goal2
|
581
|
+
value = Porolog::Value.new 'word', goal2
|
582
582
|
|
583
583
|
variable1.instantiate variable2
|
584
584
|
variable2.instantiate value
|
@@ -590,9 +590,9 @@ describe 'Porolog' do
|
|
590
590
|
|
591
591
|
it 'should instantiate with an indexed variable' do
|
592
592
|
# -- Elements --
|
593
|
-
variable1 = Variable.new :x, goal1
|
594
|
-
variable2 = Variable.new :y, goal2
|
595
|
-
value = Value.new [7,11,13,23,29], goal2
|
593
|
+
variable1 = Porolog::Variable.new :x, goal1
|
594
|
+
variable2 = Porolog::Variable.new :y, goal2
|
595
|
+
value = Porolog::Value.new [7,11,13,23,29], goal2
|
596
596
|
|
597
597
|
# -- Make Instantiations --
|
598
598
|
#
|
@@ -628,10 +628,10 @@ describe 'Porolog' do
|
|
628
628
|
|
629
629
|
it 'should instantiate indexed with an indexed variable' do
|
630
630
|
# -- Elements --
|
631
|
-
variable1 = Variable.new :x, goal1
|
632
|
-
variable2 = Variable.new :y, goal2
|
633
|
-
variable3 = Variable.new :z, goal2
|
634
|
-
value = Value.new [[],[1,2,3],'word',[7,11,13,23,29]], goal2
|
631
|
+
variable1 = Porolog::Variable.new :x, goal1
|
632
|
+
variable2 = Porolog::Variable.new :y, goal2
|
633
|
+
variable3 = Porolog::Variable.new :z, goal2
|
634
|
+
value = Porolog::Value.new [[],[1,2,3],'word',[7,11,13,23,29]], goal2
|
635
635
|
|
636
636
|
assert_Value value, [[],[1,2,3],'word',[7,11,13,23,29]], goal2
|
637
637
|
|
@@ -729,9 +729,9 @@ describe 'Porolog' do
|
|
729
729
|
end
|
730
730
|
|
731
731
|
it 'should instantiate with an indexed value' do
|
732
|
-
variable1 = Variable.new :x, goal1
|
733
|
-
variable2 = Variable.new :y, goal2
|
734
|
-
value = Value.new [7,11,13,23,29], goal2
|
732
|
+
variable1 = Porolog::Variable.new :x, goal1
|
733
|
+
variable2 = Porolog::Variable.new :y, goal2
|
734
|
+
value = Porolog::Value.new [7,11,13,23,29], goal2
|
735
735
|
|
736
736
|
variable1.instantiate variable2
|
737
737
|
variable2.instantiate value, 3
|
@@ -741,9 +741,9 @@ describe 'Porolog' do
|
|
741
741
|
end
|
742
742
|
|
743
743
|
it 'should instantiate with an indexed variable' do
|
744
|
-
variable1 = Variable.new :x, goal1
|
745
|
-
variable2 = Variable.new :y, goal2
|
746
|
-
value = Value.new [7,11,13,23,29], goal2
|
744
|
+
variable1 = Porolog::Variable.new :x, goal1
|
745
|
+
variable2 = Porolog::Variable.new :y, goal2
|
746
|
+
value = Porolog::Value.new [7,11,13,23,29], goal2
|
747
747
|
|
748
748
|
variable1.instantiate variable2, 2
|
749
749
|
variable2.instantiate value
|
@@ -754,9 +754,9 @@ describe 'Porolog' do
|
|
754
754
|
end
|
755
755
|
|
756
756
|
it 'should instantiate with an indexed value' do
|
757
|
-
variable1 = Variable.new :x, goal1
|
758
|
-
variable2 = Variable.new :y, goal2
|
759
|
-
value = Value.new [7,11,13,23,29], goal2
|
757
|
+
variable1 = Porolog::Variable.new :x, goal1
|
758
|
+
variable2 = Porolog::Variable.new :y, goal2
|
759
|
+
value = Porolog::Value.new [7,11,13,23,29], goal2
|
760
760
|
|
761
761
|
variable1.instantiate variable2
|
762
762
|
variable2.instantiate value, 3
|
@@ -788,15 +788,15 @@ describe 'Porolog' do
|
|
788
788
|
f = g6.variable :f
|
789
789
|
g = g7.variable :g
|
790
790
|
|
791
|
-
assert_instance_of Instantiation,
|
792
|
-
assert_instance_of Instantiation,
|
791
|
+
assert_instance_of Porolog::Instantiation, f.instantiate(g6.value(8))
|
792
|
+
assert_instance_of Porolog::Instantiation, g.instantiate(g7.value(9))
|
793
793
|
|
794
|
-
assert_instance_of Instantiation,
|
795
|
-
assert_instance_of Instantiation,
|
796
|
-
assert_instance_of Instantiation,
|
797
|
-
assert_instance_of Instantiation,
|
798
|
-
assert_instance_of Instantiation,
|
799
|
-
assert_nil
|
794
|
+
assert_instance_of Porolog::Instantiation, a.instantiate(b)
|
795
|
+
assert_instance_of Porolog::Instantiation, a.instantiate(c)
|
796
|
+
assert_instance_of Porolog::Instantiation, b.instantiate(d)
|
797
|
+
assert_instance_of Porolog::Instantiation, d.instantiate(f)
|
798
|
+
assert_instance_of Porolog::Instantiation, c.instantiate(e)
|
799
|
+
assert_nil e.instantiate(g)
|
800
800
|
|
801
801
|
assert_Goal_variables g1, { m: nil, n: nil, a: 8 }, [
|
802
802
|
'Goal1.:m',
|
@@ -873,8 +873,8 @@ describe 'Porolog' do
|
|
873
873
|
end
|
874
874
|
|
875
875
|
it 'should return nil when the there are multiple different values' do
|
876
|
-
variable1 = Variable.new :x, goal1
|
877
|
-
value = Value.new 111, goal2
|
876
|
+
variable1 = Porolog::Variable.new :x, goal1
|
877
|
+
value = Porolog::Value.new 111, goal2
|
878
878
|
|
879
879
|
variable1.values << 112
|
880
880
|
|
@@ -887,11 +887,11 @@ describe 'Porolog' do
|
|
887
887
|
|
888
888
|
describe '#remove' do
|
889
889
|
|
890
|
-
let(:variable1) { Variable.new :x, goal1 }
|
891
|
-
let(:variable2) { Variable.new :y, goal2 }
|
892
|
-
let(:variable3) { Variable.new :z, goal3 }
|
893
|
-
let(:value1) { Value.new 'word', goal2 }
|
894
|
-
let(:value2) { Value.new 'word', goal3 }
|
890
|
+
let(:variable1) { Porolog::Variable.new :x, goal1 }
|
891
|
+
let(:variable2) { Porolog::Variable.new :y, goal2 }
|
892
|
+
let(:variable3) { Porolog::Variable.new :z, goal3 }
|
893
|
+
let(:value1) { Porolog::Value.new 'word', goal2 }
|
894
|
+
let(:value2) { Porolog::Value.new 'word', goal3 }
|
895
895
|
|
896
896
|
before do
|
897
897
|
variable1.instantiate variable2
|
@@ -1073,11 +1073,11 @@ describe 'Porolog' do
|
|
1073
1073
|
|
1074
1074
|
describe '#uninstantiate' do
|
1075
1075
|
|
1076
|
-
let(:variable1) { Variable.new :x, goal1 }
|
1077
|
-
let(:variable2) { Variable.new :y, goal2 }
|
1078
|
-
let(:variable3) { Variable.new :z, goal3 }
|
1079
|
-
let(:value1) { Value.new 'word', goal2 }
|
1080
|
-
let(:value2) { Value.new 'word', goal3 }
|
1076
|
+
let(:variable1) { Porolog::Variable.new :x, goal1 }
|
1077
|
+
let(:variable2) { Porolog::Variable.new :y, goal2 }
|
1078
|
+
let(:variable3) { Porolog::Variable.new :z, goal3 }
|
1079
|
+
let(:value1) { Porolog::Value.new 'word', goal2 }
|
1080
|
+
let(:value2) { Porolog::Value.new 'word', goal3 }
|
1081
1081
|
|
1082
1082
|
before do
|
1083
1083
|
variable1.instantiate variable2
|
@@ -1548,8 +1548,8 @@ describe 'Porolog' do
|
|
1548
1548
|
describe '#[]' do
|
1549
1549
|
|
1550
1550
|
it 'should return the element at the specified index' do
|
1551
|
-
variable = Variable.new :x, goal1
|
1552
|
-
value = Value.new [3,5,7,11,13,17], goal2
|
1551
|
+
variable = Porolog::Variable.new :x, goal1
|
1552
|
+
value = Porolog::Value.new [3,5,7,11,13,17], goal2
|
1553
1553
|
|
1554
1554
|
variable.instantiate value
|
1555
1555
|
|
@@ -1558,8 +1558,8 @@ describe 'Porolog' do
|
|
1558
1558
|
end
|
1559
1559
|
|
1560
1560
|
it 'should return nil for an out of range index' do
|
1561
|
-
variable = Variable.new :x, goal1
|
1562
|
-
value = Value.new [3,5,7,11,13,17], goal2
|
1561
|
+
variable = Porolog::Variable.new :x, goal1
|
1562
|
+
value = Porolog::Value.new [3,5,7,11,13,17], goal2
|
1563
1563
|
|
1564
1564
|
variable.instantiate value
|
1565
1565
|
|
@@ -1568,8 +1568,8 @@ describe 'Porolog' do
|
|
1568
1568
|
end
|
1569
1569
|
|
1570
1570
|
it 'should return nil when the value is not an array' do
|
1571
|
-
variable = Variable.new :x, goal1
|
1572
|
-
value = Value.new 12, goal2
|
1571
|
+
variable = Porolog::Variable.new :x, goal1
|
1572
|
+
value = Porolog::Value.new 12, goal2
|
1573
1573
|
|
1574
1574
|
variable.instantiate value
|
1575
1575
|
|
@@ -1578,8 +1578,8 @@ describe 'Porolog' do
|
|
1578
1578
|
end
|
1579
1579
|
|
1580
1580
|
it 'should return the head' do
|
1581
|
-
variable = Variable.new :x, goal1
|
1582
|
-
value = Value.new [3,5,7,11,13,17], goal2
|
1581
|
+
variable = Porolog::Variable.new :x, goal1
|
1582
|
+
value = Porolog::Value.new [3,5,7,11,13,17], goal2
|
1583
1583
|
|
1584
1584
|
variable.instantiate value
|
1585
1585
|
|
@@ -1588,8 +1588,8 @@ describe 'Porolog' do
|
|
1588
1588
|
end
|
1589
1589
|
|
1590
1590
|
it 'should return the tail' do
|
1591
|
-
variable = Variable.new :x, goal1
|
1592
|
-
value = Value.new [3,5,7,11,13,17], goal2
|
1591
|
+
variable = Porolog::Variable.new :x, goal1
|
1592
|
+
value = Porolog::Value.new [3,5,7,11,13,17], goal2
|
1593
1593
|
|
1594
1594
|
variable.instantiate value
|
1595
1595
|
|
@@ -1602,7 +1602,7 @@ describe 'Porolog' do
|
|
1602
1602
|
describe '#variables' do
|
1603
1603
|
|
1604
1604
|
it 'should return an Array of itself' do
|
1605
|
-
variable = Variable.new :x, goal1
|
1605
|
+
variable = Porolog::Variable.new :x, goal1
|
1606
1606
|
|
1607
1607
|
assert_equal [variable], variable.variables
|
1608
1608
|
end
|