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.
@@ -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 Arguments added'
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 Arguments added'
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 Arguments added'
319
+ skip 'until Rule added'
302
320
 
303
321
  alpha = Predicate.new 'alpha'
304
322
 
@@ -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
- assert_scope Scope[:default], :default, []
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 Arguments added'
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
- assert_scope Scope[:default], :default, []
45
- assert_scope Scope[:first], :first, [prime1]
46
- assert_scope Scope[:second], :second, [prime2]
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
- assert_scope Scope[:default], :default, [delta]
95
- assert_scope Scope[:alpha], :alpha, []
96
- assert_scope Scope[:bravo], :bravo, []
97
- assert_scope Scope[:carly], :carly, []
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
- assert_scope Scope[:default], :default, []
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
- assert_scope Scope[:default], :default, []
250
- assert_scope Scope[:test], :test, [test_predicate]
251
- assert_scope Scope[:scope], :scope, [test_predicate]
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 assert_scope(scope, name, predicates)
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 assert_predicate(predicate, name, rules)
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.3
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