5from pybind11_tests
import enums
as m
9 assert str(m.UnscopedEnum.EOne) ==
"UnscopedEnum.EOne"
10 assert str(m.UnscopedEnum.ETwo) ==
"UnscopedEnum.ETwo"
11 assert str(m.EOne) ==
"UnscopedEnum.EOne"
12 assert repr(m.UnscopedEnum.EOne) ==
"<UnscopedEnum.EOne: 1>"
13 assert repr(m.UnscopedEnum.ETwo) ==
"<UnscopedEnum.ETwo: 2>"
14 assert repr(m.EOne) ==
"<UnscopedEnum.EOne: 1>"
17 assert m.UnscopedEnum.EOne.name ==
"EOne"
18 assert m.UnscopedEnum.EOne.value == 1
19 assert m.UnscopedEnum.ETwo.name ==
"ETwo"
20 assert m.UnscopedEnum.ETwo.value == 2
21 assert m.EOne
is m.UnscopedEnum.EOne
23 with pytest.raises(AttributeError):
24 m.UnscopedEnum.EOne.name =
""
25 with pytest.raises(AttributeError):
26 m.UnscopedEnum.EOne.value = 10
30 nonaliased_name = m.UnscopedEnum.EOne.name
31 nonaliased_name =
"bar"
32 assert m.UnscopedEnum.EOne.name ==
"EOne"
33 nonaliased_value = m.UnscopedEnum.EOne.value
35 assert m.UnscopedEnum.EOne.value == 1
38 assert m.UnscopedEnum.__members__ == {
39 "EOne": m.UnscopedEnum.EOne,
40 "ETwo": m.UnscopedEnum.ETwo,
41 "EThree": m.UnscopedEnum.EThree,
44 with pytest.raises(AttributeError):
45 m.UnscopedEnum.__members__ = {}
47 nonaliased_members = m.UnscopedEnum.__members__
48 nonaliased_members[
"bar"] =
"baz"
49 assert m.UnscopedEnum.__members__ == {
50 "EOne": m.UnscopedEnum.EOne,
51 "ETwo": m.UnscopedEnum.ETwo,
52 "EThree": m.UnscopedEnum.EThree,
55 for docstring_line
in """An unscoped enumeration
59 EOne : Docstring for EOne
61 ETwo : Docstring
for ETwo
63 EThree : Docstring
for EThree
""".split(
66 assert docstring_line
in m.UnscopedEnum.__doc__
69 y = m.UnscopedEnum.ETwo
76 assert not (y ==
None)
86 with pytest.raises(TypeError):
89 with pytest.raises(TypeError):
92 with pytest.raises(TypeError):
95 with pytest.raises(TypeError):
98 with pytest.raises(TypeError):
101 with pytest.raises(TypeError):
104 with pytest.raises(TypeError):
107 assert int(m.UnscopedEnum.ETwo) == 2
108 assert str(m.UnscopedEnum(2)) ==
"UnscopedEnum.ETwo"
111 assert m.UnscopedEnum.EOne < m.UnscopedEnum.ETwo
112 assert m.UnscopedEnum.EOne < 2
113 assert m.UnscopedEnum.ETwo > m.UnscopedEnum.EOne
114 assert m.UnscopedEnum.ETwo > 1
115 assert m.UnscopedEnum.ETwo <= 2
116 assert m.UnscopedEnum.ETwo >= 2
117 assert m.UnscopedEnum.EOne <= m.UnscopedEnum.ETwo
118 assert m.UnscopedEnum.EOne <= 2
119 assert m.UnscopedEnum.ETwo >= m.UnscopedEnum.EOne
120 assert m.UnscopedEnum.ETwo >= 1
121 assert not (m.UnscopedEnum.ETwo < m.UnscopedEnum.EOne)
122 assert not (2 < m.UnscopedEnum.EOne)
125 assert m.UnscopedEnum.EOne & m.UnscopedEnum.EThree == m.UnscopedEnum.EOne
126 assert m.UnscopedEnum.EOne | m.UnscopedEnum.ETwo == m.UnscopedEnum.EThree
127 assert m.UnscopedEnum.EOne ^ m.UnscopedEnum.EThree == m.UnscopedEnum.ETwo
131 assert m.test_scoped_enum(m.ScopedEnum.Three) ==
"ScopedEnum::Three"
133 assert m.test_scoped_enum(z) ==
"ScopedEnum::Two"
142 assert not (z ==
None)
145 assert not (z ==
object())
147 with pytest.raises(TypeError):
149 with pytest.raises(TypeError):
151 with pytest.raises(TypeError):
153 with pytest.raises(TypeError):
157 assert m.ScopedEnum.Two < m.ScopedEnum.Three
158 assert m.ScopedEnum.Three > m.ScopedEnum.Two
159 assert m.ScopedEnum.Two <= m.ScopedEnum.Three
160 assert m.ScopedEnum.Two <= m.ScopedEnum.Two
161 assert m.ScopedEnum.Two >= m.ScopedEnum.Two
162 assert m.ScopedEnum.Three >= m.ScopedEnum.Two
166 assert str(m.ClassWithUnscopedEnum.EMode.EFirstMode) ==
"EMode.EFirstMode"
167 assert str(m.ClassWithUnscopedEnum.EFirstMode) ==
"EMode.EFirstMode"
168 assert repr(m.ClassWithUnscopedEnum.EMode.EFirstMode) ==
"<EMode.EFirstMode: 1>"
169 assert repr(m.ClassWithUnscopedEnum.EFirstMode) ==
"<EMode.EFirstMode: 1>"
171 f = m.ClassWithUnscopedEnum.test_function
172 first = m.ClassWithUnscopedEnum.EFirstMode
173 second = m.ClassWithUnscopedEnum.ESecondMode
177 assert f(first) == f(first)
178 assert not f(first) != f(first)
180 assert f(first) != f(second)
181 assert not f(first) == f(second)
183 assert f(first) == int(f(first))
184 assert not f(first) != int(f(first))
186 assert f(first) != int(f(second))
187 assert not f(first) == int(f(second))
190 x = {f(first): 1, f(second): 2}
194 assert repr(x) ==
"{<EMode.EFirstMode: 1>: 3, <EMode.ESecondMode: 2>: 4}"
198 assert int(m.Flags.Read) == 4
199 assert int(m.Flags.Write) == 2
200 assert int(m.Flags.Execute) == 1
201 assert int(m.Flags.Read | m.Flags.Write | m.Flags.Execute) == 7
202 assert int(m.Flags.Read | m.Flags.Write) == 6
203 assert int(m.Flags.Read | m.Flags.Execute) == 5
204 assert int(m.Flags.Write | m.Flags.Execute) == 3
205 assert int(m.Flags.Write | 1) == 3
206 assert ~m.Flags.Write == -3
208 state = m.Flags.Read | m.Flags.Write
209 assert (state & m.Flags.Read) != 0
210 assert (state & m.Flags.Write) != 0
211 assert (state & m.Flags.Execute) == 0
212 assert (state & 1) == 0
216 assert int(state ^ state2) == -1
220 m.test_enum_to_int(m.Flags.Read)
221 m.test_enum_to_int(m.ClassWithUnscopedEnum.EMode.EFirstMode)
222 m.test_enum_to_int(m.ScopedCharEnum.Positive)
223 m.test_enum_to_int(m.ScopedBoolEnum.TRUE)
224 m.test_enum_to_uint(m.Flags.Read)
225 m.test_enum_to_uint(m.ClassWithUnscopedEnum.EMode.EFirstMode)
226 m.test_enum_to_uint(m.ScopedCharEnum.Positive)
227 m.test_enum_to_uint(m.ScopedBoolEnum.TRUE)
228 m.test_enum_to_long_long(m.Flags.Read)
229 m.test_enum_to_long_long(m.ClassWithUnscopedEnum.EMode.EFirstMode)
230 m.test_enum_to_long_long(m.ScopedCharEnum.Positive)
231 m.test_enum_to_long_long(m.ScopedBoolEnum.TRUE)
235 with pytest.raises(ValueError)
as excinfo:
236 m.register_bad_enum()
237 assert str(excinfo.value) ==
'SimpleEnum: element "ONE" already exists!'
241 assert type(m.ScopedCharEnum.Positive.__int__())
is int
242 assert int(m.ScopedChar16Enum.Zero) == 0
243 assert hash(m.ScopedChar32Enum.Positive) == 1
245 assert m.ScopedCharEnum.Positive.__getstate__() == 1
247 assert type(m.ScopedCharEnum.Positive.__getstate__())
is int
248 assert m.ScopedWCharEnum(1) == m.ScopedWCharEnum.Positive
249 with pytest.raises(TypeError):
251 m.ScopedCharEnum(
"0")
255 assert type(m.ScopedBoolEnum.TRUE.__int__())
is int
256 assert int(m.ScopedBoolEnum.FALSE) == 0
257 assert hash(m.ScopedBoolEnum.TRUE) == 1
259 assert m.ScopedBoolEnum.TRUE.__getstate__() == 1
261 assert type(m.ScopedBoolEnum.TRUE.__getstate__())
is int
262 assert m.ScopedBoolEnum(1) == m.ScopedBoolEnum.TRUE
265 assert m.ScopedBoolEnum(
False) == m.ScopedBoolEnum.FALSE
269 for enum_type
in [m.ScopedEnum, m.UnscopedEnum]:
270 for attr
in enum_type.__dict__.values():
272 assert "arg0" not in (attr.__doc__
or "")
\rst Holds a reference to a Python object (with reference counting)
def test_bool_underlying_enum()
def test_docstring_signatures()
def test_binary_operators()
def test_implicit_conversion()
def test_duplicate_enum_name()
def test_char_underlying_enum()