1import pytest |
2from pybind11_tests import enums as m |
3 4 5def 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" |
9 # __members__ property |
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__ |
17 foo["bar"] = "baz" |
18 assert m.UnscopedEnum.__members__ == \ 19 {"EOne": m.UnscopedEnum.EOne, "ETwo": m.UnscopedEnum.ETwo} |
20 21 # no TypeError exception for unscoped enum ==/!= int comparisons |
22 y = m.UnscopedEnum.ETwo |
23 assert y == 2 24 assert y != 3 25 |
26 assert int(m.UnscopedEnum.ETwo) == 2 27 assert str(m.UnscopedEnum(2)) == "UnscopedEnum.ETwo" |
28 29 # order |
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(): |
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 |
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 |
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(): |
65 assert str(m.ClassWithUnscopedEnum.EMode.EFirstMode) == "EMode.EFirstMode" 66 assert str(m.ClassWithUnscopedEnum.EFirstMode) == "EMode.EFirstMode" |
67 |
68 f = m.ClassWithUnscopedEnum.test_function 69 first = m.ClassWithUnscopedEnum.EFirstMode 70 second = m.ClassWithUnscopedEnum.ESecondMode |
71 |
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(): |
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 |
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) |