precedence 0.6.0 → 0.8.0
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.
- data/CHANGELOG +118 -0
- data/README +41 -9
- data/TODO +10 -5
- data/lib/precedence/activity.rb +429 -80
- data/lib/precedence/network.rb +223 -88
- data/lib/precedence/utilities.rb +44 -0
- data/lib/precedence.rb +1 -0
- data/tests/tc_activity.rb +287 -45
- data/tests/tc_network.rb +277 -39
- data/tests/ts_precedence.rb +2 -0
- metadata +3 -2
data/tests/tc_network.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
require('lib/precedence/network')
|
2
2
|
|
3
3
|
class TC_ActivityHash < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@start = Precedence::StartActivity.new
|
6
|
+
@finish = Precedence::FinishActivity.new
|
7
|
+
end
|
4
8
|
def test_all
|
5
9
|
activityHash = nil
|
6
|
-
assert_nothing_raised do
|
7
|
-
activityHash = Precedence::ActivityHash.new
|
10
|
+
assert_nothing_raised do
|
11
|
+
activityHash = Precedence::Utilities::ActivityHash.new(@start,@finish)
|
8
12
|
end
|
9
13
|
|
10
14
|
assert_nothing_raised do
|
@@ -19,9 +23,18 @@ class TC_Network < Test::Unit::TestCase
|
|
19
23
|
|
20
24
|
def setup
|
21
25
|
@network = Precedence::Network.new
|
22
|
-
@activity1 = Precedence::Activity.new('a1'
|
23
|
-
|
24
|
-
|
26
|
+
@activity1 = Precedence::Activity.new('a1') do |act1|
|
27
|
+
act1.expected_duration = 1
|
28
|
+
act1.description = 'Activity1'
|
29
|
+
end
|
30
|
+
@activity2 = Precedence::Activity.new('a2') do |act2|
|
31
|
+
act2.expected_duration = 2
|
32
|
+
act2.description = 'Activity2'
|
33
|
+
end
|
34
|
+
@activity3 = Precedence::Activity.new('a3') do |act3|
|
35
|
+
act3.expected_duration = 3
|
36
|
+
act3.description = 'Activity3'
|
37
|
+
end
|
25
38
|
end
|
26
39
|
|
27
40
|
def test_initialize
|
@@ -29,17 +42,10 @@ class TC_Network < Test::Unit::TestCase
|
|
29
42
|
assert_nothing_raised do
|
30
43
|
net = Precedence::Network.new
|
31
44
|
end
|
32
|
-
assert_equal(
|
45
|
+
assert_equal(0,net.activities.size)
|
33
46
|
assert_equal('start',net.activities[:start].reference)
|
34
47
|
assert_equal('finish',net.activities[:finish].reference)
|
35
|
-
|
36
|
-
assert_equal('Finish',net.activities[:finish].description)
|
37
|
-
|
38
|
-
assert_nothing_raised do
|
39
|
-
net = Precedence::Network.new('Begin','End')
|
40
|
-
end
|
41
|
-
assert_equal('Begin',net.activities[:start].description)
|
42
|
-
assert_equal('End',net.activities[:finish].description)
|
48
|
+
|
43
49
|
end
|
44
50
|
|
45
51
|
def test_new_activity
|
@@ -48,32 +54,44 @@ class TC_Network < Test::Unit::TestCase
|
|
48
54
|
end
|
49
55
|
|
50
56
|
assert_nothing_raised do
|
51
|
-
@network.new_activity('a1'
|
57
|
+
@network.new_activity('a1') do |act|
|
58
|
+
act.expected_duration = 1
|
59
|
+
end
|
52
60
|
end
|
53
|
-
assert_equal(
|
61
|
+
assert_equal(1,@network.activities.size)
|
54
62
|
assert_equal('a1',@network.activities['a1'].reference)
|
55
63
|
assert_equal(1,@network.activities['a1'].duration)
|
56
64
|
|
57
65
|
assert_nothing_raised do
|
58
|
-
@network.new_activity('a2'
|
66
|
+
@network.new_activity('a2') do |act|
|
67
|
+
act.expected_duration = 2
|
68
|
+
act.description = 'Activity Two'
|
69
|
+
end
|
59
70
|
end
|
60
|
-
assert_equal(
|
71
|
+
assert_equal(2,@network.activities.size)
|
61
72
|
assert_equal('a2',@network.activities['a2'].reference)
|
62
73
|
assert_equal('Activity Two',@network.activities['a2'].description)
|
63
74
|
assert_equal(2,@network.activities['a2'].duration)
|
64
75
|
|
65
76
|
assert_nothing_raised do
|
66
|
-
@network.new_activity('a3'
|
77
|
+
@network.new_activity('a3') do |act|
|
78
|
+
act.expected_duration = 3
|
79
|
+
act.description = 'Activity Three'
|
80
|
+
end
|
67
81
|
end
|
68
|
-
assert_equal(
|
82
|
+
assert_equal(3,@network.activities.size)
|
69
83
|
assert_equal('a3',@network.activities['a3'].reference)
|
70
84
|
assert_equal('Activity Three',@network.activities['a3'].description)
|
71
85
|
assert_equal(3,@network.activities['a3'].duration)
|
72
86
|
|
73
87
|
assert_nothing_raised do
|
74
|
-
@network.new_activity('a4'
|
88
|
+
@network.new_activity('a4') do |act|
|
89
|
+
act.expected_duration = 4
|
90
|
+
act.description = 'Activity Four'
|
91
|
+
end
|
92
|
+
@network.connect('a4','a3')
|
75
93
|
end
|
76
|
-
assert_equal(
|
94
|
+
assert_equal(4,@network.activities.size)
|
77
95
|
assert_equal('a4',@network.activities['a4'].reference)
|
78
96
|
assert_equal('Activity Four',@network.activities['a4'].description)
|
79
97
|
assert_equal(4,@network.activities['a4'].duration)
|
@@ -82,9 +100,14 @@ class TC_Network < Test::Unit::TestCase
|
|
82
100
|
assert_equal('a4',@network.activities['a3'].pre_activities[0].reference)
|
83
101
|
|
84
102
|
assert_nothing_raised do
|
85
|
-
@network.new_activity('a5'
|
103
|
+
@network.new_activity('a5') do |act|
|
104
|
+
act.expected_duration = 5
|
105
|
+
act.description = 'Activity Five'
|
106
|
+
end
|
107
|
+
@network.connect('a5','a3')
|
108
|
+
@network.connect('a4','a5')
|
86
109
|
end
|
87
|
-
assert_equal(
|
110
|
+
assert_equal(5,@network.activities.size)
|
88
111
|
assert_equal('a5',@network.activities['a5'].reference)
|
89
112
|
assert_equal('Activity Five',@network.activities['a5'].description)
|
90
113
|
assert_equal(5,@network.activities['a5'].duration)
|
@@ -96,11 +119,20 @@ class TC_Network < Test::Unit::TestCase
|
|
96
119
|
assert_equal('a5',@network.activities['a4'].post_activities[1].reference)
|
97
120
|
|
98
121
|
assert_raises(RuntimeError) do
|
99
|
-
@network.new_activity('a6'
|
122
|
+
@network.new_activity('a6') do |act|
|
123
|
+
act.expected_duration = 6
|
124
|
+
act.description = 'Activity Six'
|
125
|
+
@network.connect('a6','a7')
|
126
|
+
end
|
100
127
|
end
|
101
128
|
|
102
129
|
assert_raises(RuntimeError) do
|
103
|
-
@network.new_activity('a6'
|
130
|
+
@network.new_activity('a6') do |act|
|
131
|
+
act.expected_duration = 6
|
132
|
+
act.description = 'Activity Six'
|
133
|
+
@network.connect('a6','a5')
|
134
|
+
@network.connect('a6','a7')
|
135
|
+
end
|
104
136
|
end
|
105
137
|
assert_equal(nil,
|
106
138
|
@network.activities['a5'].pre_activities.detect do |activity|
|
@@ -108,7 +140,12 @@ class TC_Network < Test::Unit::TestCase
|
|
108
140
|
end)
|
109
141
|
|
110
142
|
assert_raises(RuntimeError) do
|
111
|
-
@network.new_activity('a6'
|
143
|
+
@network.new_activity('a6') do |act|
|
144
|
+
act.expected_duration = 6
|
145
|
+
act.description = 'Activity Six'
|
146
|
+
@network.connect('a5','a6')
|
147
|
+
@network.connect('a7','a6')
|
148
|
+
end
|
112
149
|
end
|
113
150
|
assert_equal(nil,
|
114
151
|
@network.activities['a5'].post_activities.detect do |activity|
|
@@ -120,7 +157,7 @@ class TC_Network < Test::Unit::TestCase
|
|
120
157
|
assert_nothing_raised do
|
121
158
|
@network.add_activity(@activity1)
|
122
159
|
end
|
123
|
-
assert_equal(
|
160
|
+
assert_equal(1,@network.activities.size)
|
124
161
|
assert_equal(@activity1,@network.activities[@activity1.reference])
|
125
162
|
|
126
163
|
assert_raises(RuntimeError) do
|
@@ -132,7 +169,7 @@ class TC_Network < Test::Unit::TestCase
|
|
132
169
|
assert_raises(RuntimeError) do
|
133
170
|
@network.add_activity(@activity1)
|
134
171
|
end
|
135
|
-
assert_equal(
|
172
|
+
assert_equal(0,@network.activities.size)
|
136
173
|
end
|
137
174
|
|
138
175
|
def test_connect
|
@@ -159,6 +196,33 @@ class TC_Network < Test::Unit::TestCase
|
|
159
196
|
assert_equal(1,@activity2.pre_activities.size)
|
160
197
|
assert_equal('a1',@activity2.pre_activities[0].reference)
|
161
198
|
end
|
199
|
+
|
200
|
+
def test_disconnect
|
201
|
+
@network.add_activity(@activity1)
|
202
|
+
@network.add_activity(@activity2)
|
203
|
+
@network.add_activity(@activity3)
|
204
|
+
@network.connect(@activity1.reference,@activity2.reference)
|
205
|
+
@network.connect(@activity1.reference,@activity3.reference)
|
206
|
+
|
207
|
+
assert_nothing_raised do
|
208
|
+
@network.disconnect(@activity1.reference,@activity2.reference,@activity3.reference)
|
209
|
+
end
|
210
|
+
assert_equal(0,@activity1.post_activities.size)
|
211
|
+
assert_equal(0,@activity2.pre_activities.size)
|
212
|
+
assert_equal(0,@activity3.pre_activities.size)
|
213
|
+
|
214
|
+
@network.connect(@activity1.reference,@activity2.reference)
|
215
|
+
|
216
|
+
assert_raises(RuntimeError) do
|
217
|
+
@network.disconnect(@activity1.reference,'bogus reference')
|
218
|
+
end
|
219
|
+
assert_equal(1,@activity1.post_activities.size)
|
220
|
+
|
221
|
+
assert_raises(RuntimeError) do
|
222
|
+
@network.disconnect('bogus reference',@activity2.reference)
|
223
|
+
end
|
224
|
+
assert_equal(1,@activity2.pre_activities.size)
|
225
|
+
end
|
162
226
|
|
163
227
|
def test_fix_connections!
|
164
228
|
@network.add_activity(@activity1)
|
@@ -175,15 +239,39 @@ class TC_Network < Test::Unit::TestCase
|
|
175
239
|
end
|
176
240
|
|
177
241
|
def test_to_dot
|
178
|
-
net = Precedence::Network.new
|
179
|
-
net.new_activity('act-1-1'
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
net.new_activity('act-
|
184
|
-
|
185
|
-
|
186
|
-
|
242
|
+
net = Precedence::Network.new
|
243
|
+
net.new_activity('act-1-1') do |act|
|
244
|
+
act.expected_duration = 3
|
245
|
+
act.description = 'System specification'
|
246
|
+
end
|
247
|
+
net.new_activity('act-1-2') do |act|
|
248
|
+
act.expected_duration = 2
|
249
|
+
act.description = 'Review'
|
250
|
+
end
|
251
|
+
net.new_activity('act-1-3') do |act|
|
252
|
+
act.expected_duration = 2
|
253
|
+
act.description = 'System re-specification'
|
254
|
+
end
|
255
|
+
net.new_activity('act-2-1') do |act|
|
256
|
+
act.expected_duration = 3
|
257
|
+
act.description = 'Test tool design'
|
258
|
+
end
|
259
|
+
net.new_activity('act-2-2') do |act|
|
260
|
+
act.expected_duration = 5
|
261
|
+
act.description = 'Test tool implementation'
|
262
|
+
end
|
263
|
+
net.new_activity('act-3-1') do |act|
|
264
|
+
act.expected_duration = 3
|
265
|
+
act.description = 'System design'
|
266
|
+
end
|
267
|
+
net.new_activity('act-3-2') do |act|
|
268
|
+
act.expected_duration = 12
|
269
|
+
act.description = 'System implementation'
|
270
|
+
end
|
271
|
+
net.new_activity('act-2-3') do |act|
|
272
|
+
act.expected_duration = 10
|
273
|
+
act.description = 'System testing'
|
274
|
+
end
|
187
275
|
net.connect('act-1-1','act-1-2')
|
188
276
|
net.connect('act-1-2','act-1-3')
|
189
277
|
net.connect('act-1-3','act-3-1')
|
@@ -205,4 +293,154 @@ class TC_Network < Test::Unit::TestCase
|
|
205
293
|
$stdout.puts("Test png file test_to_dot.png files generated.")
|
206
294
|
end
|
207
295
|
end
|
208
|
-
|
296
|
+
|
297
|
+
def test_to_yaml
|
298
|
+
@activity1.resources['coffee'] = 5
|
299
|
+
@activity1.resources['sugar'] = 10
|
300
|
+
@network.add_activity(@activity1)
|
301
|
+
@activity2.resources['coffee'] = 7.5
|
302
|
+
@network.add_activity(@activity2)
|
303
|
+
@network.connect('a1','a2')
|
304
|
+
@network.fix_connections!
|
305
|
+
activities=[]
|
306
|
+
yamlArray = YAML::load_documents(@network.to_yaml) do |doc|
|
307
|
+
activities << Precedence::Activity.from_yaml_object(doc)
|
308
|
+
end
|
309
|
+
assert_equal(2,activities.size)
|
310
|
+
|
311
|
+
act1 = activities.detect do |activity|
|
312
|
+
activity.reference == 'a1'
|
313
|
+
end
|
314
|
+
assert_equal(@activity1.reference,act1.reference)
|
315
|
+
assert_equal(@activity1.expected_duration,act1.expected_duration)
|
316
|
+
assert_equal(@activity1.description,act1.description)
|
317
|
+
|
318
|
+
act2 = activities.detect do |activity|
|
319
|
+
activity.reference == 'a2'
|
320
|
+
end
|
321
|
+
assert_equal(@activity2.reference,act2.reference)
|
322
|
+
assert_equal(@activity2.expected_duration,act2.expected_duration)
|
323
|
+
assert_equal(@activity2.description,act2.description)
|
324
|
+
|
325
|
+
assert_nothing_raised do
|
326
|
+
File.open('test_to_yaml.yaml',File::CREAT|File::TRUNC|File::WRONLY) do|f|
|
327
|
+
f.puts(@network.to_yaml)
|
328
|
+
end
|
329
|
+
end
|
330
|
+
$stdout.puts("\nTest yaml file test_to_yaml.yaml file generated.")
|
331
|
+
end
|
332
|
+
|
333
|
+
def test_from_yaml
|
334
|
+
@network.add_activity(@activity1)
|
335
|
+
@network.add_activity(@activity2)
|
336
|
+
@network.add_activity(@activity3)
|
337
|
+
@network.connect('a1','a2')
|
338
|
+
@network.connect('a1','a3')
|
339
|
+
|
340
|
+
|
341
|
+
network = Precedence::Network.from_yaml(@network.to_yaml)
|
342
|
+
assert_equal(3,network.activities.size)
|
343
|
+
network.fix_connections!
|
344
|
+
|
345
|
+
start = network.activities['start']
|
346
|
+
assert_equal('start',start.reference)
|
347
|
+
assert_equal(0,start.expected_duration)
|
348
|
+
assert_equal(1,start.post_activities.size)
|
349
|
+
assert_equal(0,start.pre_activities.size)
|
350
|
+
assert_equal(@activity1,start.post_activities[0])
|
351
|
+
|
352
|
+
a1 = network.activities['a1']
|
353
|
+
assert_equal('a1',a1.reference)
|
354
|
+
assert_equal(1,a1.expected_duration)
|
355
|
+
assert_equal('Activity1',a1.description)
|
356
|
+
assert_equal(2,a1.post_activities.size)
|
357
|
+
assert_equal(true,(((a1.post_activities[0].reference == 'a2') and (a1.post_activities[1].reference == 'a3'))or
|
358
|
+
((a1.post_activities[1].reference == 'a2') and (a1.post_activities[0].reference == 'a3'))))
|
359
|
+
|
360
|
+
a2 = network.activities['a2']
|
361
|
+
assert_equal('a2',a2.reference)
|
362
|
+
assert_equal(2,a2.expected_duration)
|
363
|
+
assert_equal('Activity2',a2.description)
|
364
|
+
assert_equal(1,a2.post_activities.size)
|
365
|
+
assert_equal(1,a2.pre_activities.size)
|
366
|
+
assert_equal('a1',a2.pre_activities[0].reference)
|
367
|
+
assert_equal('finish',a2.post_activities[0].reference)
|
368
|
+
|
369
|
+
a3 = network.activities['a3']
|
370
|
+
assert_equal('a3',a3.reference)
|
371
|
+
assert_equal(3,a3.expected_duration)
|
372
|
+
assert_equal('Activity3',a3.description)
|
373
|
+
assert_equal(1,a3.post_activities.size)
|
374
|
+
assert_equal(1,a3.pre_activities.size)
|
375
|
+
assert_equal('a1',a3.pre_activities[0].reference)
|
376
|
+
assert_equal('finish',a3.post_activities[0].reference)
|
377
|
+
|
378
|
+
finish = network.activities['finish']
|
379
|
+
assert_equal('finish',finish.reference)
|
380
|
+
assert_equal(0,finish.expected_duration)
|
381
|
+
assert_equal(0,finish.post_activities.size)
|
382
|
+
assert_equal(2,finish.pre_activities.size)
|
383
|
+
assert_equal(true,(((finish.pre_activities[0].reference == 'a2') and (finish.pre_activities[1].reference == 'a3'))or
|
384
|
+
((finish.pre_activities[1].reference == 'a2') and (finish.pre_activities[0].reference == 'a3'))))
|
385
|
+
end
|
386
|
+
|
387
|
+
def test_activities_at_time
|
388
|
+
@network.add_activity(@activity1)
|
389
|
+
@network.add_activity(@activity2)
|
390
|
+
@network.add_activity(@activity3)
|
391
|
+
@network.connect('a1','a2')
|
392
|
+
@network.connect('a1','a3')
|
393
|
+
@network.fix_connections!
|
394
|
+
|
395
|
+
assert_equal([@activity1],@network.activities_at_time(0.5))
|
396
|
+
assert_equal([@activity2,@activity3],@network.activities_at_time(2.5))
|
397
|
+
assert_equal([@activity3],@network.activities_at_time(3))
|
398
|
+
end
|
399
|
+
|
400
|
+
def test_activities_during_time
|
401
|
+
@network.add_activity(@activity1)
|
402
|
+
@network.add_activity(@activity2)
|
403
|
+
@network.add_activity(@activity3)
|
404
|
+
@network.connect('a1','a2')
|
405
|
+
@network.connect('a1','a3')
|
406
|
+
@network.fix_connections!
|
407
|
+
|
408
|
+
assert_equal([@activity1],@network.activities_during_time(0..1.0))
|
409
|
+
assert_equal([@activity1,@activity2,@activity3],@network.activities_during_time(0..2.0))
|
410
|
+
assert_equal([@activity2,@activity3],@network.activities_during_time(1.0..2.0))
|
411
|
+
assert_equal([@activity2,@activity3],@network.activities_during_time(1.5..2.5))
|
412
|
+
|
413
|
+
assert_equal([],@network.activities_during_time(4.0..5.0))
|
414
|
+
end
|
415
|
+
|
416
|
+
def test_each_time
|
417
|
+
@network.add_activity(@activity1)
|
418
|
+
@network.add_activity(@activity2)
|
419
|
+
@network.add_activity(@activity3)
|
420
|
+
@network.connect('a1','a2')
|
421
|
+
@network.connect('a1','a3')
|
422
|
+
@network.fix_connections!
|
423
|
+
|
424
|
+
expected_activities = {0.0=>[@activity1],1.0=>[@activity2,@activity3],
|
425
|
+
2.0=>[@activity2,@activity3],3.0=>[@activity3]}
|
426
|
+
actual_activities = {}
|
427
|
+
|
428
|
+
day = 0.0
|
429
|
+
assert_nothing_raised do
|
430
|
+
@network.each_time_period do |activities|
|
431
|
+
actual_activities[day] = activities
|
432
|
+
day += 1
|
433
|
+
end
|
434
|
+
end
|
435
|
+
assert_equal(expected_activities,actual_activities)
|
436
|
+
|
437
|
+
actual_activities = {}
|
438
|
+
assert_nothing_raised do
|
439
|
+
@network.each_time_period_with_index do |activities,index|
|
440
|
+
actual_activities[index] = activities
|
441
|
+
end
|
442
|
+
end
|
443
|
+
assert_equal(expected_activities,actual_activities)
|
444
|
+
end
|
445
|
+
end
|
446
|
+
|
data/tests/ts_precedence.rb
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.10
|
|
3
3
|
specification_version: 1
|
4
4
|
name: precedence
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.8.0
|
7
|
+
date: 2005-07-04
|
8
8
|
summary: A library for the creation manipulation and analysis of precedence networks.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,6 +31,7 @@ files:
|
|
31
31
|
- lib/precedence.rb
|
32
32
|
- lib/precedence/activity.rb
|
33
33
|
- lib/precedence/network.rb
|
34
|
+
- lib/precedence/utilities.rb
|
34
35
|
- tests/tc_activity.rb
|
35
36
|
- tests/tc_network.rb
|
36
37
|
- tests/ts_precedence.rb
|