test_enum.py (12037:d28054ac6ec9) | test_enum.py (12391:ceeca8b41e4b) |
---|---|
1import pytest | 1import pytest |
2from pybind11_tests import enums as m |
|
2 3 4def test_unscoped_enum(): | 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" |
10 # __members__ property | 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): | 12 # __members__ readonly 13 with pytest.raises(AttributeError): |
14 UnscopedEnum.__members__ = {} | 14 m.UnscopedEnum.__members__ = {} |
15 # __members__ returns a copy | 15 # __members__ returns a copy |
16 foo = UnscopedEnum.__members__ | 16 foo = m.UnscopedEnum.__members__ |
17 foo["bar"] = "baz" | 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} |
19 20 # no TypeError exception for unscoped enum ==/!= int comparisons | 20 21 # no TypeError exception for unscoped enum ==/!= int comparisons |
21 y = UnscopedEnum.ETwo | 22 y = m.UnscopedEnum.ETwo |
22 assert y == 2 23 assert y != 3 24 | 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" |
27 28 # order | 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) |
41 42 43def test_scoped_enum(): | 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" |
45 | 48 |
46 assert test_scoped_enum(ScopedEnum.Three) == "ScopedEnum::Three" 47 z = ScopedEnum.Two 48 assert test_scoped_enum(z) == "ScopedEnum::Two" 49 | |
50 # expected TypeError exceptions for scoped enum ==/!= int comparisons 51 with pytest.raises(TypeError): 52 assert z == 2 53 with pytest.raises(TypeError): 54 assert z != 3 55 56 # order | 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 |
63 64 65def test_implicit_conversion(): | 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 | 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 |
70 | 71 |
71 f = ClassWithUnscopedEnum.test_function 72 first = ClassWithUnscopedEnum.EFirstMode 73 second = ClassWithUnscopedEnum.ESecondMode 74 | |
75 assert f(first) == 1 76 77 assert f(first) == f(first) 78 assert not f(first) != f(first) 79 80 assert f(first) != f(second) 81 assert not f(first) == f(second) 82 --- 7 unchanged lines hidden (view full) --- 90 x = {f(first): 1, f(second): 2} 91 x[f(first)] = 3 92 x[f(second)] = 4 93 # Hashing test 94 assert str(x) == "{EMode.EFirstMode: 3, EMode.ESecondMode: 4}" 95 96 97def test_binary_operators(): | 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 --- 7 unchanged lines hidden (view full) --- 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 |
99 | 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 |
113 assert (state & 1) == 0 114 115 state2 = ~state 116 assert state2 == -7 117 assert int(state ^ state2) == -1 | 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) |
|