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