5
class SegmentTests(unittest.TestCase):
9
(self.error, self.seg) = segment_new(self.abc, 0, 0, None)
12
segment_free(self.seg)
16
self.assertNotEqual(self.seg, None)
17
self.assertEqual(segment_get_size(self.seg)[1], 0)
18
self.assert_(segment_get_data(self.seg)[1] is self.abc)
23
self.testChangeRange()
25
(err, seg1) = segment_copy(self.seg)
27
self.assertEqual(segment_get_start(seg1)[1],
28
segment_get_start(self.seg)[1])
30
self.assertEqual(segment_get_size(seg1)[1],
31
segment_get_size(self.seg)[1])
33
self.assert_(segment_get_data(seg1)[1] is
34
segment_get_data(self.seg)[1])
40
self.testChangeRange()
42
segment_clear(self.seg)
43
self.assertEqual(segment_get_size(self.seg)[1], 0)
45
def testChangeRange(self):
47
segment_set_range(self.seg, 666, 112358)
49
self.assertEqual(segment_get_start(self.seg)[1], 666)
51
self.assertEqual(segment_get_size(self.seg)[1], 112358)
53
def testSplitMiddle(self):
54
"Split a segment in the middle"
55
segment_set_range(self.seg, 0, 1000)
57
(err, seg1) = segment_split(self.seg, 99)
59
self.assertEqual(segment_get_start(self.seg)[1], 0)
60
self.assertEqual(segment_get_size(self.seg)[1], 99)
62
self.assertEqual(segment_get_start(seg1)[1], 99)
63
self.assertEqual(segment_get_size(seg1)[1], 901)
67
def testSplitEnd(self):
68
"Split a segment at the end"
69
segment_set_range(self.seg, 0, 1000)
71
(err, seg1) = segment_split(self.seg, 999)
73
self.assertEqual(segment_get_start(self.seg)[1], 0)
74
self.assertEqual(segment_get_size(self.seg)[1], 999)
76
self.assertEqual(segment_get_start(seg1)[1], 999)
77
self.assertEqual(segment_get_size(seg1)[1], 1)
81
def testSplitStart(self):
82
"Split a segment at the start"
83
segment_set_range(self.seg, 0, 1000)
85
(err, seg1) = segment_split(self.seg, 0)
87
self.assertEqual(segment_get_size(self.seg)[1], 0)
89
self.assertEqual(segment_get_start(seg1)[1], 0)
90
self.assertEqual(segment_get_size(seg1)[1], 1000)
94
def testSplitOutOfRange(self):
95
"Try to split at a point out of range"
96
segment_set_range(self.seg, 0, 1000)
98
(err, seg1) = segment_split(self.seg, 1000)
100
self.assertNotEqual(err, 0)
101
self.assertEqual(seg1, None)
105
segment_set_range(self.seg, 0, 1000)
107
(err, seg1) = segment_split(self.seg, 600)
108
self.assertEqual(err, 0)
110
self.assertEqual(segment_get_start(self.seg)[1], 0)
111
self.assertEqual(segment_get_size(self.seg)[1], 600)
113
self.assertEqual(segment_get_start(seg1)[1], 600)
114
self.assertEqual(segment_get_size(seg1)[1], 400)
117
err = segment_merge(self.seg, seg1)
118
self.assertEqual(err, 0)
119
self.assertEqual(segment_get_start(self.seg)[1], 0)
120
self.assertEqual(segment_get_size(self.seg)[1], 1000)
122
self.assertEqual(segment_get_start(seg1)[1], 600)
123
self.assertEqual(segment_get_size(seg1)[1], 400)
127
def testMergeBoundaryCases(self):
128
"Try boundary conditions when merging"
130
err = segment_set_range(self.seg, 0, 1000)
131
self.assertEqual(err, 0)
133
(err, seg1) = segment_copy(self.seg)
134
self.assertEqual(err, 0)
136
err = segment_set_range(self.seg, 1001, 10)
137
self.assertEqual(err, 0)
139
err = segment_merge(self.seg, seg1)
140
self.assertNotEqual(err, 0)
144
def testMergeOverflow(self):
145
"Try boundary conditions for overflow when merging"
147
err = segment_set_range(self.seg, 0, 1)
148
self.assertEqual(err, 0)
150
(err, seg1) = segment_copy(self.seg)
151
self.assertEqual(err, 0)
153
err = segment_set_range(seg1, 1, get_max_off_t())
154
self.assertEqual(err, 0)
156
err = segment_merge(self.seg, seg1)
157
self.assertEqual(err, errno.EOVERFLOW)
159
# This should succeed
160
err = segment_set_range(seg1, 1, get_max_off_t() - 1)
161
self.assertEqual(err, 0)
163
err = segment_merge(self.seg, seg1)
164
self.assertEqual(err, 0)
168
def testRangeOverflow(self):
169
"Try boundary conditions for overflow"
171
# These should succeed
172
err = segment_set_range(self.seg, 0, get_max_off_t())
173
self.assertEqual(err, 0)
175
err = segment_set_range(self.seg, get_max_off_t(), 0)
176
self.assertEqual(err, 0)
178
err = segment_set_range(self.seg, 1, get_max_off_t())
179
self.assertEqual(err, 0)
181
err = segment_set_range(self.seg, get_max_off_t(), 1)
182
self.assertEqual(err, 0)
185
err = segment_set_range(self.seg, 2, get_max_off_t())
186
self.assertNotEqual(err, 0)
188
err = segment_set_range(self.seg, get_max_off_t(), 2)
189
self.assertNotEqual(err, 0)
191
if __name__ == '__main__':