File: test_type_kind_set.py

package info (click to toggle)
drgn 0.0.33-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,892 kB
  • sloc: python: 59,081; ansic: 51,400; awk: 423; makefile: 339; sh: 113
file content (308 lines) | stat: -rw-r--r-- 12,769 bytes parent folder | download | duplicates (2)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
# Copyright (c) Meta Platforms, Inc. and affiliates.
# SPDX-License-Identifier: LGPL-2.1-or-later

from drgn import TypeKind, TypeKindSet
from tests import TestCase


class TestTypeKindSet(TestCase):
    def test_repr(self):
        self.assertEqual(
            repr(TypeKindSet()),
            "TypeKindSet()",
        )
        self.assertEqual(
            repr(TypeKindSet({TypeKind.STRUCT})),
            "TypeKindSet({TypeKind.STRUCT})",
        )
        self.assertEqual(
            repr(TypeKindSet({TypeKind.STRUCT, TypeKind.CLASS})),
            "TypeKindSet({TypeKind.STRUCT, TypeKind.CLASS})",
        )

    def test_len(self):
        self.assertEqual(len(TypeKindSet()), 0)
        self.assertEqual(len(TypeKindSet({TypeKind.STRUCT})), 1)
        self.assertEqual(len(TypeKindSet({TypeKind.INT, TypeKind.STRUCT})), 2)

    def test_in(self):
        self.assertNotIn(TypeKind.INT, TypeKindSet())
        self.assertIn(TypeKind.INT, TypeKindSet({TypeKind.INT}))
        self.assertIn(TypeKind.INT, TypeKindSet({TypeKind.INT, TypeKind.STRUCT}))
        self.assertIn(TypeKind.STRUCT, TypeKindSet({TypeKind.INT, TypeKind.STRUCT}))
        self.assertNotIn(TypeKind.UNION, TypeKindSet({TypeKind.INT, TypeKind.STRUCT}))
        self.assertNotIn(0, TypeKindSet({TypeKind.INT}))
        self.assertNotIn(TypeKind.INT.value, TypeKindSet({TypeKind.INT}))

    def test_iter(self):
        for s in (
            set(),
            {TypeKind.VOID},
            {TypeKind.ARRAY, TypeKind.POINTER},
        ):
            self.assertEqual(set(TypeKindSet(s)), s)

    def test_eq(self):
        self.assertTrue(TypeKindSet() == TypeKindSet())
        self.assertFalse(TypeKindSet() == TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(TypeKindSet({TypeKind.FLOAT}) == TypeKindSet({TypeKind.FLOAT}))
        self.assertFalse(
            TypeKindSet({TypeKind.FUNCTION}) == TypeKindSet({TypeKind.BOOL})
        )
        self.assertTrue(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            == TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
        )
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL, TypeKind.FUNCTION})
            == TypeKindSet({TypeKind.BOOL, TypeKind.ARRAY}),
        )
        self.assertTrue(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            == {TypeKind.FLOAT, TypeKind.TYPEDEF}
        )
        self.assertFalse(TypeKindSet() == {"asdf"})
        self.assertFalse(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            == {TypeKind.FLOAT, TypeKind.TYPEDEF, "foo"}
        )
        self.assertFalse(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            == [TypeKind.FLOAT, TypeKind.TYPEDEF]
        )

    def test_ne(self):
        self.assertFalse(TypeKindSet() != TypeKindSet())
        self.assertTrue(TypeKindSet() != TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(TypeKindSet({TypeKind.FLOAT}) != TypeKindSet({TypeKind.FLOAT}))
        self.assertTrue(
            TypeKindSet({TypeKind.FUNCTION}) != TypeKindSet({TypeKind.BOOL})
        )
        self.assertFalse(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            != TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
        )
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL, TypeKind.FUNCTION})
            != TypeKindSet({TypeKind.BOOL, TypeKind.ARRAY}),
        )
        self.assertFalse(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            != {TypeKind.FLOAT, TypeKind.TYPEDEF}
        )
        self.assertTrue(TypeKindSet() != {"asdf"})
        self.assertTrue(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            != {TypeKind.FLOAT, TypeKind.TYPEDEF, "foo"}
        )
        self.assertTrue(
            TypeKindSet({TypeKind.FLOAT, TypeKind.TYPEDEF})
            != [TypeKind.FLOAT, TypeKind.TYPEDEF]
        )

    def test_lt(self):
        self.assertFalse(TypeKindSet() < TypeKindSet())
        self.assertTrue(TypeKindSet() < TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(TypeKindSet({TypeKind.BOOL}) < TypeKindSet())
        self.assertFalse(TypeKindSet({TypeKind.BOOL}) < TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL}) < TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT})
        )
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT}) < TypeKindSet({TypeKind.BOOL})
        )
        self.assertFalse(TypeKindSet({TypeKind.INT}) < TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL}) < {TypeKind.BOOL, TypeKind.FLOAT, "foo"}
        )
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.BOOL}) < [TypeKind.BOOL, TypeKind.FLOAT]

    def test_gt(self):
        self.assertFalse(TypeKindSet() > TypeKindSet())
        self.assertFalse(TypeKindSet() > TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(TypeKindSet({TypeKind.BOOL}) > TypeKindSet())
        self.assertFalse(TypeKindSet({TypeKind.BOOL}) > TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL}) > TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT})
        )
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT}) > TypeKindSet({TypeKind.BOOL})
        )
        self.assertFalse(TypeKindSet({TypeKind.INT}) > TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT}) > {TypeKind.BOOL, "foo"}
        )
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.BOOL}) > []

    def test_le(self):
        self.assertTrue(TypeKindSet() <= TypeKindSet())
        self.assertTrue(TypeKindSet() <= TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(TypeKindSet({TypeKind.BOOL}) <= TypeKindSet())
        self.assertTrue(TypeKindSet({TypeKind.BOOL}) <= TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL}) <= TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT})
        )
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT}) <= TypeKindSet({TypeKind.BOOL})
        )
        self.assertFalse(TypeKindSet({TypeKind.INT}) <= TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(TypeKindSet({TypeKind.BOOL}) <= {TypeKind.BOOL, "foo"})
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.BOOL}) <= [TypeKind.BOOL, TypeKind.FLOAT]

    def test_ge(self):
        self.assertTrue(TypeKindSet() >= TypeKindSet())
        self.assertFalse(TypeKindSet() >= TypeKindSet({TypeKind.BOOL}))
        self.assertTrue(TypeKindSet({TypeKind.BOOL}) >= TypeKindSet())
        self.assertTrue(TypeKindSet({TypeKind.BOOL}) >= TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(
            TypeKindSet({TypeKind.BOOL}) >= TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT})
        )
        self.assertTrue(
            TypeKindSet({TypeKind.BOOL, TypeKind.FLOAT}) >= TypeKindSet({TypeKind.BOOL})
        )
        self.assertFalse(TypeKindSet({TypeKind.INT}) >= TypeKindSet({TypeKind.BOOL}))
        self.assertFalse(TypeKindSet({TypeKind.BOOL}) >= {TypeKind.BOOL, "foo"})
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.BOOL}) >= [TypeKind.BOOL]

    def test_isdisjoint(self):
        self.assertTrue(TypeKindSet().isdisjoint(TypeKindSet()))
        self.assertTrue(
            TypeKindSet({TypeKind.POINTER}).isdisjoint(TypeKindSet({TypeKind.ARRAY}))
        )
        self.assertFalse(
            TypeKindSet({TypeKind.POINTER}).isdisjoint(TypeKindSet({TypeKind.POINTER}))
        )
        self.assertFalse(
            TypeKindSet({TypeKind.ARRAY}).isdisjoint(
                TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            )
        )
        self.assertFalse(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}).isdisjoint(
                TypeKindSet({TypeKind.ARRAY})
            )
        )
        self.assertTrue(TypeKindSet({TypeKind.POINTER}).isdisjoint({TypeKind.ARRAY}))
        self.assertTrue(TypeKindSet({TypeKind.POINTER}).isdisjoint([TypeKind.ARRAY]))
        self.assertFalse(TypeKindSet({TypeKind.POINTER}).isdisjoint({TypeKind.POINTER}))
        self.assertFalse(TypeKindSet({TypeKind.POINTER}).isdisjoint([TypeKind.POINTER]))

    def test_sub(self):
        self.assertEqual(TypeKindSet() - TypeKindSet(), TypeKindSet())
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) - TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) - TypeKindSet({TypeKind.POINTER}),
            TypeKindSet(),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.ARRAY})
            - TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
            TypeKindSet(),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            - TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}) - {TypeKind.ARRAY},
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}) - {TypeKind.ARRAY, "asdf"},
            TypeKindSet({TypeKind.POINTER}),
        )

    def test_and(self):
        self.assertEqual(TypeKindSet() & TypeKindSet(), TypeKindSet())
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) & TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet(),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) & TypeKindSet({TypeKind.POINTER}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.ARRAY})
            & TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
            TypeKindSet({TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            & TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}) & {TypeKind.ARRAY},
            TypeKindSet({TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            & {TypeKind.POINTER, "asdf"},
            TypeKindSet({TypeKind.POINTER}),
        )

    def test_xor(self):
        self.assertEqual(TypeKindSet() ^ TypeKindSet(), TypeKindSet())
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) ^ TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) ^ TypeKindSet({TypeKind.POINTER}),
            TypeKindSet(),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.ARRAY})
            ^ TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            ^ TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}) ^ {TypeKind.ARRAY},
            TypeKindSet({TypeKind.POINTER}),
        )
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}) ^ {TypeKind.ARRAY, "asdf"}

    def test_or(self):
        self.assertEqual(TypeKindSet() | TypeKindSet(), TypeKindSet())
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) | TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) | TypeKindSet({TypeKind.POINTER}),
            TypeKindSet({TypeKind.POINTER}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.ARRAY})
            | TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY})
            | TypeKindSet({TypeKind.ARRAY}),
            TypeKindSet({TypeKind.POINTER, TypeKind.ARRAY}),
        )
        self.assertEqual(
            TypeKindSet({TypeKind.POINTER}) | {TypeKind.ARRAY},
            {TypeKind.POINTER, TypeKind.ARRAY},
        )
        with self.assertRaises(TypeError):
            TypeKindSet({TypeKind.POINTER}) | {TypeKind.ARRAY, "asdf"}

    def test_all_kinds(self):
        self.assertEqual(set(TypeKindSet(TypeKind)), set(TypeKind))