d8eff5278c555ae7f03f513f15907f87e568c388
2 from pybind11_tests
import enums
as m
5 def test_unscoped_enum():
6 assert str(m
.UnscopedEnum
.EOne
) == "UnscopedEnum.EOne"
7 assert str(m
.UnscopedEnum
.ETwo
) == "UnscopedEnum.ETwo"
8 assert str(m
.EOne
) == "UnscopedEnum.EOne"
10 assert m
.UnscopedEnum
.__members
__ == \
11 {"EOne": m
.UnscopedEnum
.EOne
, "ETwo": m
.UnscopedEnum
.ETwo
}
12 # __members__ readonly
13 with pytest
.raises(AttributeError):
14 m
.UnscopedEnum
.__members
__ = {}
15 # __members__ returns a copy
16 foo
= m
.UnscopedEnum
.__members
__
18 assert m
.UnscopedEnum
.__members
__ == \
19 {"EOne": m
.UnscopedEnum
.EOne
, "ETwo": m
.UnscopedEnum
.ETwo
}
21 # no TypeError exception for unscoped enum ==/!= int comparisons
22 y
= m
.UnscopedEnum
.ETwo
26 assert int(m
.UnscopedEnum
.ETwo
) == 2
27 assert str(m
.UnscopedEnum(2)) == "UnscopedEnum.ETwo"
30 assert m
.UnscopedEnum
.EOne
< m
.UnscopedEnum
.ETwo
31 assert m
.UnscopedEnum
.EOne
< 2
32 assert m
.UnscopedEnum
.ETwo
> m
.UnscopedEnum
.EOne
33 assert m
.UnscopedEnum
.ETwo
> 1
34 assert m
.UnscopedEnum
.ETwo
<= 2
35 assert m
.UnscopedEnum
.ETwo
>= 2
36 assert m
.UnscopedEnum
.EOne
<= m
.UnscopedEnum
.ETwo
37 assert m
.UnscopedEnum
.EOne
<= 2
38 assert m
.UnscopedEnum
.ETwo
>= m
.UnscopedEnum
.EOne
39 assert m
.UnscopedEnum
.ETwo
>= 1
40 assert not (m
.UnscopedEnum
.ETwo
< m
.UnscopedEnum
.EOne
)
41 assert not (2 < m
.UnscopedEnum
.EOne
)
44 def test_scoped_enum():
45 assert m
.test_scoped_enum(m
.ScopedEnum
.Three
) == "ScopedEnum::Three"
47 assert m
.test_scoped_enum(z
) == "ScopedEnum::Two"
49 # expected TypeError exceptions for scoped enum ==/!= int comparisons
50 with pytest
.raises(TypeError):
52 with pytest
.raises(TypeError):
56 assert m
.ScopedEnum
.Two
< m
.ScopedEnum
.Three
57 assert m
.ScopedEnum
.Three
> m
.ScopedEnum
.Two
58 assert m
.ScopedEnum
.Two
<= m
.ScopedEnum
.Three
59 assert m
.ScopedEnum
.Two
<= m
.ScopedEnum
.Two
60 assert m
.ScopedEnum
.Two
>= m
.ScopedEnum
.Two
61 assert m
.ScopedEnum
.Three
>= m
.ScopedEnum
.Two
64 def test_implicit_conversion():
65 assert str(m
.ClassWithUnscopedEnum
.EMode
.EFirstMode
) == "EMode.EFirstMode"
66 assert str(m
.ClassWithUnscopedEnum
.EFirstMode
) == "EMode.EFirstMode"
68 f
= m
.ClassWithUnscopedEnum
.test_function
69 first
= m
.ClassWithUnscopedEnum
.EFirstMode
70 second
= m
.ClassWithUnscopedEnum
.ESecondMode
74 assert f(first
) == f(first
)
75 assert not f(first
) != f(first
)
77 assert f(first
) != f(second
)
78 assert not f(first
) == f(second
)
80 assert f(first
) == int(f(first
))
81 assert not f(first
) != int(f(first
))
83 assert f(first
) != int(f(second
))
84 assert not f(first
) == int(f(second
))
86 # noinspection PyDictCreation
87 x
= {f(first
): 1, f(second
): 2}
91 assert str(x
) == "{EMode.EFirstMode: 3, EMode.ESecondMode: 4}"
94 def test_binary_operators():
95 assert int(m
.Flags
.Read
) == 4
96 assert int(m
.Flags
.Write
) == 2
97 assert int(m
.Flags
.Execute
) == 1
98 assert int(m
.Flags
.Read | m
.Flags
.Write | m
.Flags
.Execute
) == 7
99 assert int(m
.Flags
.Read | m
.Flags
.Write
) == 6
100 assert int(m
.Flags
.Read | m
.Flags
.Execute
) == 5
101 assert int(m
.Flags
.Write | m
.Flags
.Execute
) == 3
102 assert int(m
.Flags
.Write |
1) == 3
104 state
= m
.Flags
.Read | m
.Flags
.Write
105 assert (state
& m
.Flags
.Read
) != 0
106 assert (state
& m
.Flags
.Write
) != 0
107 assert (state
& m
.Flags
.Execute
) == 0
108 assert (state
& 1) == 0
112 assert int(state ^ state2
) == -1
115 def test_enum_to_int():
116 m
.test_enum_to_int(m
.Flags
.Read
)
117 m
.test_enum_to_int(m
.ClassWithUnscopedEnum
.EMode
.EFirstMode
)
118 m
.test_enum_to_uint(m
.Flags
.Read
)
119 m
.test_enum_to_uint(m
.ClassWithUnscopedEnum
.EMode
.EFirstMode
)
120 m
.test_enum_to_long_long(m
.Flags
.Read
)
121 m
.test_enum_to_long_long(m
.ClassWithUnscopedEnum
.EMode
.EFirstMode
)