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/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',1,'Activity1')
23
- @activity2 = Precedence::Activity.new('a2',1,'Activity2')
24
- @activity3 = Precedence::Activity.new('a3',1,'Activity3')
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(2,net.activities.size)
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
- assert_equal('Start',net.activities[:start].description)
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',1)
57
+ @network.new_activity('a1') do |act|
58
+ act.expected_duration = 1
59
+ end
52
60
  end
53
- assert_equal(3,@network.activities.size)
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',2,'Activity Two')
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(4,@network.activities.size)
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',3,'Activity Three')
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(5,@network.activities.size)
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',4,'Activity Four',['a3'])
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(6,@network.activities.size)
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',5,'Activity Five',['a3'],['a4'])
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(7,@network.activities.size)
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',6,'Activity Six',['a7'])
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',6,'Activity Six',['a5','a7'])
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',6,'Activity Six',[],['a5','a7'])
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(3,@network.activities.size)
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(2,@network.activities.size)
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('Begin','End')
179
- net.new_activity('act-1-1',3,'System specification')
180
- net.new_activity('act-1-2',2,'Review')
181
- net.new_activity('act-1-3',2,'System re-specification')
182
- net.new_activity('act-2-1',3,'Test tool design')
183
- net.new_activity('act-2-2',5,'Test tool implementation')
184
- net.new_activity('act-3-1',3,'System design')
185
- net.new_activity('act-3-2',12,'System implementation')
186
- net.new_activity('act-2-3',10,'System testing')
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
- end
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
+
@@ -3,6 +3,8 @@ require('test/unit')
3
3
  require('tests/tc_activity')
4
4
  require('tests/tc_network')
5
5
 
6
+ require('lib/precedence/utilities')
7
+
6
8
  class TS_Precedence < Test::Unit::TestSuite
7
9
  def initialize(name="Precedence Test Suite")
8
10
  super(name)
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.6.0
7
- date: 2005-05-15
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