precedence 0.6.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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