From 01251da14f0d3fb2bf4ed2299a70998ff3aa5a1f Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Sun, 30 Sep 2012 09:33:40 +0200 Subject: TaskSystem.copy() should make deep copies Otherwise, the resource model will not be copied correctly, which can lead to wrong results if parameters are inflated to account for overheads. --- schedcat/model/tasks.py | 2 +- tests/model.py | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/schedcat/model/tasks.py b/schedcat/model/tasks.py index a6d6d11..f7fb9b1 100644 --- a/schedcat/model/tasks.py +++ b/schedcat/model/tasks.py @@ -143,5 +143,5 @@ class TaskSystem(list): return max([t.wss for t in self]) def copy(self): - ts = TaskSystem([copy.copy(t) for t in self]) + ts = TaskSystem((copy.deepcopy(t) for t in self)) return ts diff --git a/tests/model.py b/tests/model.py index 60c7cb4..341abb5 100644 --- a/tests/model.py +++ b/tests/model.py @@ -18,7 +18,7 @@ class Tasks(unittest.TestCase): self.assertTrue(self.t1.implicit_deadline()) self.assertFalse(self.t2.implicit_deadline()) self.assertFalse(self.t3.implicit_deadline()) - + self.assertTrue(self.t1.constrained_deadline()) self.assertTrue(self.t2.constrained_deadline()) self.assertFalse(self.t3.implicit_deadline()) @@ -80,6 +80,22 @@ class Tasks(unittest.TestCase): self.assertEqual(req.max_read_length, 4) self.assertEqual(req.max_length, 10) + def test_copy(self): + ts = m.TaskSystem([ + m.SporadicTask(10, 100), + ]) + r.initialize_resource_model(ts) + ts[0].resmodel[0].add_request(10) + + ts2 = ts.copy() + ts[0].resmodel[0].add_request(30) + + self.assertEqual(ts[0].resmodel[0].max_length, 30) + self.assertEqual(ts[0].resmodel[0].max_requests, 2) + + self.assertEqual(ts2[0].resmodel[0].max_length, 10) + self.assertEqual(ts2[0].resmodel[0].max_requests, 1) + class Serialization(unittest.TestCase): def setUp(self): -- cgit v1.2.2