aboutsummaryrefslogtreecommitdiffstats
path: root/tests/quanta.py
blob: 8b2e7dbe3c43b4dd9fdc172d451142cd5a45773d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
from __future__ import division

import unittest

from fractions import Fraction

import schedcat.overheads.quanta as q
import schedcat.model.tasks as tasks

from schedcat.util.math import is_integral

class Overheads(unittest.TestCase):
    def setUp(self):
        self.ts = tasks.TaskSystem([
                tasks.SporadicTask(100, 1000),
                tasks.SporadicTask(39, 1050),
                tasks.SporadicTask(51, 599),
            ])
        self.qlen = 50

    def test_wcet(self):
        q.quantize_wcet(self.qlen, self.ts)
        self.assertEqual(self.ts[0].cost, 100)
        self.assertEqual(self.ts[1].cost,  50)
        self.assertEqual(self.ts[2].cost, 100)

        self.assertTrue(is_integral(self.ts[0].cost))
        self.assertTrue(is_integral(self.ts[1].cost))
        self.assertTrue(is_integral(self.ts[2].cost))

        self.assertEqual(self.ts[0].period, 1000)
        self.assertEqual(self.ts[1].period, 1050)
        self.assertEqual(self.ts[2].period, 599)

        self.assertEqual(self.ts[0].deadline, 1000)
        self.assertEqual(self.ts[1].deadline, 1050)
        self.assertEqual(self.ts[2].deadline, 599)

    def test_ewcet(self):
        q.quantize_wcet(self.qlen, self.ts, effective_qlen=25)
        self.assertEqual(self.ts[0].cost, 200)
        self.assertEqual(self.ts[1].cost, 100)
        self.assertEqual(self.ts[2].cost, 150)

        self.assertTrue(is_integral(self.ts[0].cost))
        self.assertTrue(is_integral(self.ts[1].cost))
        self.assertTrue(is_integral(self.ts[2].cost))

        self.assertEqual(self.ts[0].period, 1000)
        self.assertEqual(self.ts[1].period, 1050)
        self.assertEqual(self.ts[2].period, 599)

        self.assertEqual(self.ts[0].deadline, 1000)
        self.assertEqual(self.ts[1].deadline, 1050)
        self.assertEqual(self.ts[2].deadline, 599)

    def test_period(self):
        q.quantize_period(self.qlen, self.ts)
        self.assertEqual(self.ts[0].cost, 100)
        self.assertEqual(self.ts[1].cost,  39)
        self.assertEqual(self.ts[2].cost,  51)

        self.assertTrue(is_integral(self.ts[0].period))
        self.assertTrue(is_integral(self.ts[1].period))
        self.assertTrue(is_integral(self.ts[2].period))

        self.assertEqual(self.ts[0].period, 1000)
        self.assertEqual(self.ts[1].period, 1050)
        self.assertEqual(self.ts[2].period,  550)

        self.assertEqual(self.ts[0].deadline, 1000)
        self.assertEqual(self.ts[1].deadline, 1050)
        self.assertEqual(self.ts[2].deadline,  599)

    def test_release_delay(self):
        q.account_for_delayed_release(101, self.ts)
        q.quantize_period(self.qlen, self.ts)
        self.assertEqual(self.ts[0].cost, 100)
        self.assertEqual(self.ts[1].cost,  39)
        self.assertEqual(self.ts[2].cost,  51)

        self.assertTrue(is_integral(self.ts[0].period))
        self.assertTrue(is_integral(self.ts[1].period))
        self.assertTrue(is_integral(self.ts[2].period))

        self.assertEqual(self.ts[0].period,  850)
        self.assertEqual(self.ts[1].period,  900)
        self.assertEqual(self.ts[2].period,  450)

    def test_staggering(self):
        q.account_for_staggering(self.qlen, 4, self.ts)

        self.assertAlmostEqual(self.ts[0].period,  1000 - 37.5)
        self.assertAlmostEqual(self.ts[1].period,  1050 - 37.5)
        self.assertAlmostEqual(self.ts[2].period,   599 - 37.5)

        self.assertEqual(self.ts[0].cost, 100)
        self.assertEqual(self.ts[1].cost,  39)
        self.assertEqual(self.ts[2].cost,  51)

        q.quantize_period(self.qlen, self.ts)

        self.assertEqual(self.ts[0].period,  950)
        self.assertEqual(self.ts[1].period, 1000)
        self.assertEqual(self.ts[2].period,  550)