porolog 0.0.3 → 0.0.4
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 +5 -2
- data/coverage/badge.svg +1 -0
- data/coverage/index.html +7090 -0
- data/doc/Porolog.html +337 -0
- data/doc/_index.html +187 -0
- data/doc/class_list.html +51 -0
- data/doc/file.README.html +250 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +250 -0
- data/doc/method_list.html +403 -0
- data/doc/top-level-namespace.html +110 -0
- data/lib/porolog/arguments.rb +173 -0
- data/lib/porolog/predicate.rb +3 -2
- data/lib/porolog/scope.rb +3 -2
- data/lib/porolog.rb +4 -2
- data/test/porolog/arguments_test.rb +790 -0
- data/test/porolog/porolog_test.rb +67 -0
- data/test/porolog/predicate_test.rb +27 -9
- data/test/porolog/scope_test.rb +13 -13
- data/test/test_helper.rb +22 -2
- metadata +20 -3
@@ -0,0 +1,67 @@
|
|
1
|
+
#
|
2
|
+
# test/porolog/porolog_test.rb - Test Suite for Porolog module
|
3
|
+
#
|
4
|
+
# Luis Esteban 4 May 2018
|
5
|
+
# created
|
6
|
+
#
|
7
|
+
|
8
|
+
require_relative '../test_helper'
|
9
|
+
|
10
|
+
describe 'Porolog' do
|
11
|
+
|
12
|
+
before(:all) do
|
13
|
+
reset
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '#predicate' do
|
17
|
+
|
18
|
+
it 'should create a Predicate' do
|
19
|
+
assert_equal 0, Scope[:default].predicates.size
|
20
|
+
|
21
|
+
single_predicate = predicate :single
|
22
|
+
|
23
|
+
assert_equal 1, Scope[:default].predicates.size
|
24
|
+
assert_equal :single, Scope[:default].predicates.first.name
|
25
|
+
assert_Predicate single_predicate, :single, []
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should define a method to create Arguments for solving' do
|
29
|
+
refute respond_to?(:delta)
|
30
|
+
|
31
|
+
predicate :delta
|
32
|
+
|
33
|
+
assert respond_to?(:delta)
|
34
|
+
assert_Arguments delta(1, :X, ['left','right']), :delta, [1, :X, ['left','right']]
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should create multiple Predicates' do
|
38
|
+
assert_equal 0, Scope[:default].predicates.size
|
39
|
+
|
40
|
+
multiple_predicates = predicate :alpha, :beta, :gamma
|
41
|
+
|
42
|
+
assert_equal 3, Scope[:default].predicates.size
|
43
|
+
assert_equal :alpha, Scope[:default].predicates[0].name
|
44
|
+
assert_equal :beta, Scope[:default].predicates[1].name
|
45
|
+
assert_equal :gamma, Scope[:default].predicates[2].name
|
46
|
+
assert_instance_of Array, multiple_predicates
|
47
|
+
assert_equal 3, multiple_predicates.size
|
48
|
+
assert_Predicate multiple_predicates[0], :alpha, []
|
49
|
+
assert_Predicate multiple_predicates[1], :beta, []
|
50
|
+
assert_Predicate multiple_predicates[2], :gamma, []
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should define multiple methods to create Arguments for solving' do
|
54
|
+
refute respond_to?(:epsilon)
|
55
|
+
refute respond_to?(:upsilon)
|
56
|
+
|
57
|
+
predicate :epsilon, :upsilon
|
58
|
+
|
59
|
+
assert respond_to?(:epsilon)
|
60
|
+
assert_Arguments epsilon(), :epsilon, []
|
61
|
+
assert respond_to?(:upsilon)
|
62
|
+
assert_Arguments upsilon([]), :upsilon, [[]]
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -152,6 +152,22 @@ describe 'Porolog' do
|
|
152
152
|
|
153
153
|
end
|
154
154
|
|
155
|
+
describe '.builtin' do
|
156
|
+
|
157
|
+
it 'should incremently return Predicates' do
|
158
|
+
iota1 = Predicate.builtin :iota
|
159
|
+
zeta1 = Predicate.builtin :zeta
|
160
|
+
iota2 = Predicate.builtin :iota
|
161
|
+
zeta2 = Predicate.builtin :zeta
|
162
|
+
|
163
|
+
assert_Predicate iota1, :_iota_1, []
|
164
|
+
assert_Predicate zeta1, :_zeta_1, []
|
165
|
+
assert_Predicate iota2, :_iota_2, []
|
166
|
+
assert_Predicate zeta2, :_zeta_2, []
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
155
171
|
describe '#initialize' do
|
156
172
|
|
157
173
|
it 'can create predicates in different scopes' do
|
@@ -196,8 +212,6 @@ describe 'Porolog' do
|
|
196
212
|
describe '#call' do
|
197
213
|
|
198
214
|
it 'should create an Arguments when "called"' do
|
199
|
-
skip 'until Arguments added'
|
200
|
-
|
201
215
|
p = Predicate.new :p
|
202
216
|
|
203
217
|
arguments = p.(1,2,3)
|
@@ -212,8 +226,6 @@ describe 'Porolog' do
|
|
212
226
|
describe '#arguments' do
|
213
227
|
|
214
228
|
it 'should provide a convenience method to create an Arguments' do
|
215
|
-
skip 'until Arguments added'
|
216
|
-
|
217
229
|
p = Predicate.new :p
|
218
230
|
|
219
231
|
arguments = p.arguments(1,2,3)
|
@@ -246,7 +258,7 @@ describe 'Porolog' do
|
|
246
258
|
end
|
247
259
|
|
248
260
|
it 'should add new facts to a predicate' do
|
249
|
-
skip 'until
|
261
|
+
skip 'until Rule added'
|
250
262
|
|
251
263
|
alpha = Predicate.new 'alpha'
|
252
264
|
|
@@ -261,7 +273,7 @@ describe 'Porolog' do
|
|
261
273
|
end
|
262
274
|
|
263
275
|
it 'should add new falicies to a predicate' do
|
264
|
-
skip 'until
|
276
|
+
skip 'until Rule added'
|
265
277
|
|
266
278
|
alpha = Predicate.new 'alpha'
|
267
279
|
|
@@ -280,16 +292,22 @@ describe 'Porolog' do
|
|
280
292
|
describe '#inspect' do
|
281
293
|
|
282
294
|
it 'should return a summary of the predicate' do
|
283
|
-
skip 'until Arguments added'
|
284
|
-
|
285
295
|
alpha = Predicate.new 'alpha'
|
296
|
+
|
286
297
|
assert_equal 'alpha:-', alpha.inspect
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'should return a summary of the predicate with rules' do
|
301
|
+
skip 'until Rule added'
|
302
|
+
|
303
|
+
alpha = Predicate.new 'alpha'
|
287
304
|
|
288
305
|
alpha.(:x,:y) << [
|
289
306
|
alpha.(:x,:y),
|
290
307
|
alpha.(:y,:x),
|
291
308
|
:CUT
|
292
309
|
]
|
310
|
+
|
293
311
|
assert_equal 'alpha:- alpha(:x,:y):- [alpha(:x,:y), alpha(:y,:x), :CUT]', alpha.inspect
|
294
312
|
end
|
295
313
|
|
@@ -298,7 +316,7 @@ describe 'Porolog' do
|
|
298
316
|
describe '#<<' do
|
299
317
|
|
300
318
|
it 'should add new rules to a predicate' do
|
301
|
-
skip 'until
|
319
|
+
skip 'until Rule added'
|
302
320
|
|
303
321
|
alpha = Predicate.new 'alpha'
|
304
322
|
|
data/test/porolog/scope_test.rb
CHANGED
@@ -19,11 +19,11 @@ describe 'Porolog' do
|
|
19
19
|
assert_equal 1, Scope.scopes.size
|
20
20
|
assert_equal [:default], Scope.scopes
|
21
21
|
|
22
|
-
|
22
|
+
assert_Scope Scope[:default], :default, []
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should allow predicates with the same name to coexist in different scopes' do
|
26
|
-
skip 'until
|
26
|
+
skip 'until Rule added'
|
27
27
|
|
28
28
|
prime = prime1 = Predicate.new :prime, :first
|
29
29
|
|
@@ -41,9 +41,9 @@ describe 'Porolog' do
|
|
41
41
|
prime.('pump D').fact!
|
42
42
|
|
43
43
|
assert_equal [:default,:first,:second], Scope.scopes
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
assert_Scope Scope[:default], :default, []
|
45
|
+
assert_Scope Scope[:first], :first, [prime1]
|
46
|
+
assert_Scope Scope[:second], :second, [prime2]
|
47
47
|
|
48
48
|
assert_equal :prime, prime1.name
|
49
49
|
assert_equal :prime, prime2.name
|
@@ -91,17 +91,17 @@ describe 'Porolog' do
|
|
91
91
|
assert_equal 4, Scope.scopes.size
|
92
92
|
assert_equal [:default, :alpha, :bravo, :carly], Scope.scopes
|
93
93
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
94
|
+
assert_Scope Scope[:default], :default, [delta]
|
95
|
+
assert_Scope Scope[:alpha], :alpha, []
|
96
|
+
assert_Scope Scope[:bravo], :bravo, []
|
97
|
+
assert_Scope Scope[:carly], :carly, []
|
98
98
|
|
99
99
|
Scope.reset
|
100
100
|
|
101
101
|
assert_equal 1, Scope.scopes.size
|
102
102
|
assert_equal [:default], Scope.scopes
|
103
103
|
|
104
|
-
|
104
|
+
assert_Scope Scope[:default], :default, []
|
105
105
|
|
106
106
|
assert_nil Scope[:alpha]
|
107
107
|
assert_nil Scope[:bravo]
|
@@ -246,9 +246,9 @@ describe 'Porolog' do
|
|
246
246
|
assert_equal 3, Scope.scopes.size
|
247
247
|
assert_equal [:default, :test, :scope], Scope.scopes
|
248
248
|
|
249
|
-
|
250
|
-
|
251
|
-
|
249
|
+
assert_Scope Scope[:default], :default, []
|
250
|
+
assert_Scope Scope[:test], :test, [test_predicate]
|
251
|
+
assert_Scope Scope[:scope], :scope, [test_predicate]
|
252
252
|
end
|
253
253
|
|
254
254
|
end
|
data/test/test_helper.rb
CHANGED
@@ -5,24 +5,44 @@
|
|
5
5
|
# created
|
6
6
|
#
|
7
7
|
|
8
|
+
# -- Test Coverage --
|
9
|
+
require 'simplecov'
|
10
|
+
SimpleCov.start
|
11
|
+
|
12
|
+
require 'shields_badge'
|
13
|
+
SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([
|
14
|
+
SimpleCov::Formatter::HTMLFormatter,
|
15
|
+
SimpleCov::Formatter::ShieldsBadge
|
16
|
+
])
|
17
|
+
|
18
|
+
# -- Testing --
|
8
19
|
require 'minitest/autorun'
|
9
20
|
require 'porolog'
|
10
21
|
|
11
22
|
include Porolog
|
12
23
|
|
24
|
+
|
25
|
+
# -- Helpers --
|
13
26
|
def reset
|
14
27
|
Scope.reset
|
15
28
|
Predicate.reset
|
29
|
+
Arguments.reset
|
16
30
|
end
|
17
31
|
|
18
|
-
def
|
32
|
+
def assert_Scope(scope, name, predicates)
|
19
33
|
assert_instance_of Scope, scope
|
20
34
|
assert_equal name, scope.name
|
21
35
|
assert_equal predicates, scope.predicates
|
22
36
|
end
|
23
37
|
|
24
|
-
def
|
38
|
+
def assert_Predicate(predicate, name, rules)
|
25
39
|
assert_instance_of Predicate, predicate
|
26
40
|
assert_equal name, predicate.name
|
27
41
|
assert_equal rules, predicate.rules
|
28
42
|
end
|
43
|
+
|
44
|
+
def assert_Arguments(arguments, predicate, args)
|
45
|
+
assert_instance_of Arguments, arguments
|
46
|
+
assert_equal predicate, arguments.predicate.name
|
47
|
+
assert_equal args, arguments.arguments
|
48
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: porolog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luis Esteban
|
@@ -10,7 +10,8 @@ bindir: bin
|
|
10
10
|
cert_chain: []
|
11
11
|
date: 2019-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
|
-
description: Implements a Prolog inference engine using Plain Old Ruby Objects
|
13
|
+
description: Implements a Prolog inference engine using Plain Old Ruby Objects (work
|
14
|
+
in progress)
|
14
15
|
email:
|
15
16
|
- luis.esteban.consulting@gmail.com
|
16
17
|
executables: []
|
@@ -20,10 +21,24 @@ files:
|
|
20
21
|
- README.md
|
21
22
|
- Rakefile
|
22
23
|
- bin/porolog
|
24
|
+
- coverage/badge.svg
|
25
|
+
- coverage/index.html
|
26
|
+
- doc/Porolog.html
|
27
|
+
- doc/_index.html
|
28
|
+
- doc/class_list.html
|
29
|
+
- doc/file.README.html
|
30
|
+
- doc/file_list.html
|
31
|
+
- doc/frames.html
|
32
|
+
- doc/index.html
|
33
|
+
- doc/method_list.html
|
34
|
+
- doc/top-level-namespace.html
|
23
35
|
- lib/porolog.rb
|
36
|
+
- lib/porolog/arguments.rb
|
24
37
|
- lib/porolog/error.rb
|
25
38
|
- lib/porolog/predicate.rb
|
26
39
|
- lib/porolog/scope.rb
|
40
|
+
- test/porolog/arguments_test.rb
|
41
|
+
- test/porolog/porolog_test.rb
|
27
42
|
- test/porolog/predicate_test.rb
|
28
43
|
- test/porolog/scope_test.rb
|
29
44
|
- test/test_helper.rb
|
@@ -50,8 +65,10 @@ rubyforge_project:
|
|
50
65
|
rubygems_version: 2.7.6
|
51
66
|
signing_key:
|
52
67
|
specification_version: 4
|
53
|
-
summary: Prolog using Plain Old Ruby Objects
|
68
|
+
summary: Prolog using Plain Old Ruby Objects (work in progress)
|
54
69
|
test_files:
|
55
70
|
- test/test_helper.rb
|
71
|
+
- test/porolog/porolog_test.rb
|
56
72
|
- test/porolog/predicate_test.rb
|
73
|
+
- test/porolog/arguments_test.rb
|
57
74
|
- test/porolog/scope_test.rb
|