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 83 assert f(first) == int(f(first)) 84 assert not f(first) != int(f(first)) 85 86 assert f(first) != int(f(second)) 87 assert not f(first) == int(f(second)) 88 89 # noinspection PyDictCreation 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 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
|
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)
|
| |