1import pytest
|
2from pybind11_tests import enums as m |
3 4 5def test_unscoped_enum():
|
5 from pybind11_tests import UnscopedEnum, EOne
6
7 assert str(UnscopedEnum.EOne) == "UnscopedEnum.EOne"
8 assert str(UnscopedEnum.ETwo) == "UnscopedEnum.ETwo"
9 assert str(EOne) == "UnscopedEnum.EOne"
|
6 assert str(m.UnscopedEnum.EOne) == "UnscopedEnum.EOne" 7 assert str(m.UnscopedEnum.ETwo) == "UnscopedEnum.ETwo" 8 assert str(m.EOne) == "UnscopedEnum.EOne" |
9 # __members__ property
|
11 assert UnscopedEnum.__members__ == {"EOne": UnscopedEnum.EOne, "ETwo": UnscopedEnum.ETwo}
|
10 assert m.UnscopedEnum.__members__ == \ 11 {"EOne": m.UnscopedEnum.EOne, "ETwo": m.UnscopedEnum.ETwo} |
12 # __members__ readonly 13 with pytest.raises(AttributeError):
|
14 UnscopedEnum.__members__ = {}
|
14 m.UnscopedEnum.__members__ = {} |
15 # __members__ returns a copy
|
16 foo = UnscopedEnum.__members__
|
16 foo = m.UnscopedEnum.__members__ |
17 foo["bar"] = "baz"
|
18 assert UnscopedEnum.__members__ == {"EOne": UnscopedEnum.EOne, "ETwo": UnscopedEnum.ETwo}
|
18 assert m.UnscopedEnum.__members__ == \ 19 {"EOne": m.UnscopedEnum.EOne, "ETwo": m.UnscopedEnum.ETwo} |
20 21 # no TypeError exception for unscoped enum ==/!= int comparisons
|
21 y = UnscopedEnum.ETwo
|
22 y = m.UnscopedEnum.ETwo |
23 assert y == 2 24 assert y != 3 25
|
25 assert int(UnscopedEnum.ETwo) == 2
26 assert str(UnscopedEnum(2)) == "UnscopedEnum.ETwo"
|
26 assert int(m.UnscopedEnum.ETwo) == 2 27 assert str(m.UnscopedEnum(2)) == "UnscopedEnum.ETwo" |
28 29 # order
|
29 assert UnscopedEnum.EOne < UnscopedEnum.ETwo
30 assert UnscopedEnum.EOne < 2
31 assert UnscopedEnum.ETwo > UnscopedEnum.EOne
32 assert UnscopedEnum.ETwo > 1
33 assert UnscopedEnum.ETwo <= 2
34 assert UnscopedEnum.ETwo >= 2
35 assert UnscopedEnum.EOne <= UnscopedEnum.ETwo
36 assert UnscopedEnum.EOne <= 2
37 assert UnscopedEnum.ETwo >= UnscopedEnum.EOne
38 assert UnscopedEnum.ETwo >= 1
39 assert not (UnscopedEnum.ETwo < UnscopedEnum.EOne)
40 assert not (2 < UnscopedEnum.EOne)
|
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) |
42 43 44def test_scoped_enum():
|
44 from pybind11_tests import ScopedEnum, test_scoped_enum
|
45 assert m.test_scoped_enum(m.ScopedEnum.Three) == "ScopedEnum::Three" 46 z = m.ScopedEnum.Two 47 assert m.test_scoped_enum(z) == "ScopedEnum::Two" |
48
|
46 assert test_scoped_enum(ScopedEnum.Three) == "ScopedEnum::Three"
47 z = ScopedEnum.Two
48 assert test_scoped_enum(z) == "ScopedEnum::Two"
49
|
49 # expected TypeError exceptions for scoped enum ==/!= int comparisons 50 with pytest.raises(TypeError): 51 assert z == 2 52 with pytest.raises(TypeError): 53 assert z != 3 54 55 # order
|
57 assert ScopedEnum.Two < ScopedEnum.Three
58 assert ScopedEnum.Three > ScopedEnum.Two
59 assert ScopedEnum.Two <= ScopedEnum.Three
60 assert ScopedEnum.Two <= ScopedEnum.Two
61 assert ScopedEnum.Two >= ScopedEnum.Two
62 assert ScopedEnum.Three >= ScopedEnum.Two
|
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 |
62 63 64def test_implicit_conversion():
|
66 from pybind11_tests import ClassWithUnscopedEnum
|
65 assert str(m.ClassWithUnscopedEnum.EMode.EFirstMode) == "EMode.EFirstMode" 66 assert str(m.ClassWithUnscopedEnum.EFirstMode) == "EMode.EFirstMode" |
67
|
68 assert str(ClassWithUnscopedEnum.EMode.EFirstMode) == "EMode.EFirstMode"
69 assert str(ClassWithUnscopedEnum.EFirstMode) == "EMode.EFirstMode"
|
68 f = m.ClassWithUnscopedEnum.test_function 69 first = m.ClassWithUnscopedEnum.EFirstMode 70 second = m.ClassWithUnscopedEnum.ESecondMode |
71
|
71 f = ClassWithUnscopedEnum.test_function
72 first = ClassWithUnscopedEnum.EFirstMode
73 second = ClassWithUnscopedEnum.ESecondMode
74
|
72 assert f(first) == 1 73 74 assert f(first) == f(first) 75 assert not f(first) != f(first) 76 77 assert f(first) != f(second) 78 assert not f(first) == f(second) 79 80 assert f(first) == int(f(first)) 81 assert not f(first) != int(f(first)) 82 83 assert f(first) != int(f(second)) 84 assert not f(first) == int(f(second)) 85 86 # noinspection PyDictCreation 87 x = {f(first): 1, f(second): 2} 88 x[f(first)] = 3 89 x[f(second)] = 4 90 # Hashing test 91 assert str(x) == "{EMode.EFirstMode: 3, EMode.ESecondMode: 4}" 92 93 94def test_binary_operators():
|
98 from pybind11_tests import Flags
|
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 |
103
|
100 assert int(Flags.Read) == 4
101 assert int(Flags.Write) == 2
102 assert int(Flags.Execute) == 1
103 assert int(Flags.Read | Flags.Write | Flags.Execute) == 7
104 assert int(Flags.Read | Flags.Write) == 6
105 assert int(Flags.Read | Flags.Execute) == 5
106 assert int(Flags.Write | Flags.Execute) == 3
107 assert int(Flags.Write | 1) == 3
108
109 state = Flags.Read | Flags.Write
110 assert (state & Flags.Read) != 0
111 assert (state & Flags.Write) != 0
112 assert (state & Flags.Execute) == 0
|
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 109 110 state2 = ~state 111 assert state2 == -7 112 assert int(state ^ state2) == -1
|
113 114 115def 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) |
|