test_enum.py revision 11986:c12e4625ab56
110428Sandreas.hansson@arm.comimport pytest 210428Sandreas.hansson@arm.com 310428Sandreas.hansson@arm.com 410428Sandreas.hansson@arm.comdef test_unscoped_enum(): 510428Sandreas.hansson@arm.com from pybind11_tests import UnscopedEnum, EOne 610428Sandreas.hansson@arm.com 710428Sandreas.hansson@arm.com assert str(UnscopedEnum.EOne) == "UnscopedEnum.EOne" 810428Sandreas.hansson@arm.com assert str(UnscopedEnum.ETwo) == "UnscopedEnum.ETwo" 910428Sandreas.hansson@arm.com assert str(EOne) == "UnscopedEnum.EOne" 1010428Sandreas.hansson@arm.com 1110428Sandreas.hansson@arm.com # no TypeError exception for unscoped enum ==/!= int comparisons 1210428Sandreas.hansson@arm.com y = UnscopedEnum.ETwo 1310428Sandreas.hansson@arm.com assert y == 2 1410428Sandreas.hansson@arm.com assert y != 3 1510428Sandreas.hansson@arm.com 1610428Sandreas.hansson@arm.com assert int(UnscopedEnum.ETwo) == 2 1710428Sandreas.hansson@arm.com assert str(UnscopedEnum(2)) == "UnscopedEnum.ETwo" 1810428Sandreas.hansson@arm.com 1910428Sandreas.hansson@arm.com # order 2010428Sandreas.hansson@arm.com assert UnscopedEnum.EOne < UnscopedEnum.ETwo 2110428Sandreas.hansson@arm.com assert UnscopedEnum.EOne < 2 2210428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo > UnscopedEnum.EOne 2310428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo > 1 2410428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo <= 2 2510428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo >= 2 2610428Sandreas.hansson@arm.com assert UnscopedEnum.EOne <= UnscopedEnum.ETwo 2710428Sandreas.hansson@arm.com assert UnscopedEnum.EOne <= 2 2810428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo >= UnscopedEnum.EOne 2910428Sandreas.hansson@arm.com assert UnscopedEnum.ETwo >= 1 3010428Sandreas.hansson@arm.com assert not (UnscopedEnum.ETwo < UnscopedEnum.EOne) 3110428Sandreas.hansson@arm.com assert not (2 < UnscopedEnum.EOne) 3210428Sandreas.hansson@arm.com 3310428Sandreas.hansson@arm.com 3410428Sandreas.hansson@arm.comdef test_scoped_enum(): 3510428Sandreas.hansson@arm.com from pybind11_tests import ScopedEnum, test_scoped_enum 3610428Sandreas.hansson@arm.com 3710428Sandreas.hansson@arm.com assert test_scoped_enum(ScopedEnum.Three) == "ScopedEnum::Three" 3810428Sandreas.hansson@arm.com z = ScopedEnum.Two 3910428Sandreas.hansson@arm.com assert test_scoped_enum(z) == "ScopedEnum::Two" 4010428Sandreas.hansson@arm.com 4110428Sandreas.hansson@arm.com # expected TypeError exceptions for scoped enum ==/!= int comparisons 4210428Sandreas.hansson@arm.com with pytest.raises(TypeError): 4310428Sandreas.hansson@arm.com assert z == 2 4410428Sandreas.hansson@arm.com with pytest.raises(TypeError): 4512266Sradhika.jagtap@arm.com assert z != 3 4612266Sradhika.jagtap@arm.com 4711555Sjungma@eit.uni-kl.de # order 4811555Sjungma@eit.uni-kl.de assert ScopedEnum.Two < ScopedEnum.Three 4911555Sjungma@eit.uni-kl.de assert ScopedEnum.Three > ScopedEnum.Two 5011555Sjungma@eit.uni-kl.de assert ScopedEnum.Two <= ScopedEnum.Three 5110428Sandreas.hansson@arm.com assert ScopedEnum.Two <= ScopedEnum.Two 5210428Sandreas.hansson@arm.com assert ScopedEnum.Two >= ScopedEnum.Two 5311555Sjungma@eit.uni-kl.de assert ScopedEnum.Three >= ScopedEnum.Two 5410428Sandreas.hansson@arm.com 5510428Sandreas.hansson@arm.com 5611555Sjungma@eit.uni-kl.dedef test_implicit_conversion(): 5710428Sandreas.hansson@arm.com from pybind11_tests import ClassWithUnscopedEnum 5810428Sandreas.hansson@arm.com 5910428Sandreas.hansson@arm.com assert str(ClassWithUnscopedEnum.EMode.EFirstMode) == "EMode.EFirstMode" 6010428Sandreas.hansson@arm.com assert str(ClassWithUnscopedEnum.EFirstMode) == "EMode.EFirstMode" 6110428Sandreas.hansson@arm.com 6210428Sandreas.hansson@arm.com f = ClassWithUnscopedEnum.test_function 6310428Sandreas.hansson@arm.com first = ClassWithUnscopedEnum.EFirstMode 6410428Sandreas.hansson@arm.com second = ClassWithUnscopedEnum.ESecondMode 6510428Sandreas.hansson@arm.com 6610428Sandreas.hansson@arm.com assert f(first) == 1 6710428Sandreas.hansson@arm.com 6810428Sandreas.hansson@arm.com assert f(first) == f(first) 6910428Sandreas.hansson@arm.com assert not f(first) != f(first) 7010428Sandreas.hansson@arm.com 7110428Sandreas.hansson@arm.com assert f(first) != f(second) 7210428Sandreas.hansson@arm.com assert not f(first) == f(second) 7310428Sandreas.hansson@arm.com 7410428Sandreas.hansson@arm.com assert f(first) == int(f(first)) 7510428Sandreas.hansson@arm.com assert not f(first) != int(f(first)) 7610428Sandreas.hansson@arm.com 7710428Sandreas.hansson@arm.com assert f(first) != int(f(second)) 7810428Sandreas.hansson@arm.com assert not f(first) == int(f(second)) 7910428Sandreas.hansson@arm.com 8010428Sandreas.hansson@arm.com # noinspection PyDictCreation 8110428Sandreas.hansson@arm.com x = {f(first): 1, f(second): 2} 8210428Sandreas.hansson@arm.com x[f(first)] = 3 8312266Sradhika.jagtap@arm.com x[f(second)] = 4 8410428Sandreas.hansson@arm.com # Hashing test 8510428Sandreas.hansson@arm.com assert str(x) == "{EMode.EFirstMode: 3, EMode.ESecondMode: 4}" 8610428Sandreas.hansson@arm.com 8710428Sandreas.hansson@arm.com 8810428Sandreas.hansson@arm.comdef test_binary_operators(): 8910428Sandreas.hansson@arm.com from pybind11_tests import Flags 9010428Sandreas.hansson@arm.com 9110428Sandreas.hansson@arm.com assert int(Flags.Read) == 4 9210428Sandreas.hansson@arm.com assert int(Flags.Write) == 2 9310428Sandreas.hansson@arm.com assert int(Flags.Execute) == 1 9410428Sandreas.hansson@arm.com assert int(Flags.Read | Flags.Write | Flags.Execute) == 7 9510428Sandreas.hansson@arm.com assert int(Flags.Read | Flags.Write) == 6 9612266Sradhika.jagtap@arm.com assert int(Flags.Read | Flags.Execute) == 5 9710428Sandreas.hansson@arm.com assert int(Flags.Write | Flags.Execute) == 3 9810428Sandreas.hansson@arm.com assert int(Flags.Write | 1) == 3 9910428Sandreas.hansson@arm.com 10010428Sandreas.hansson@arm.com state = Flags.Read | Flags.Write 10110428Sandreas.hansson@arm.com assert (state & Flags.Read) != 0 10212266Sradhika.jagtap@arm.com assert (state & Flags.Write) != 0 10310428Sandreas.hansson@arm.com assert (state & Flags.Execute) == 0 10410428Sandreas.hansson@arm.com assert (state & 1) == 0 10510428Sandreas.hansson@arm.com 10610428Sandreas.hansson@arm.com state2 = ~state 10710428Sandreas.hansson@arm.com assert state2 == -7 10810428Sandreas.hansson@arm.com assert int(state ^ state2) == -1 10910428Sandreas.hansson@arm.com