1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85import enum
import pytest
from ordered_enum import OrderedEnum, ValueOrderedEnum
def test_is_enum():
class X(OrderedEnum):
Foo = 1
class Y(ValueOrderedEnum):
Foo = 1
assert issubclass(X, enum.Enum)
assert issubclass(Y, enum.Enum)
def test_total_ordering():
class X(OrderedEnum):
Foo = 3
Bar = 2
Baz = 1
@enum.unique
class Y(ValueOrderedEnum):
Foo = 1
Bar = 2
Baz = 3
for member in X:
assert member == member
assert X.Baz > X.Bar > X.Foo
assert X.Baz >= X.Bar >= X.Foo
assert X.Foo < X.Bar < X.Baz
assert X.Foo <= X.Bar <= X.Baz
assert X.Foo != X.Bar and X.Bar != X.Baz and X.Foo != X.Baz
for member in Y:
assert member == member
assert Y.Baz > Y.Bar > Y.Foo
assert Y.Baz >= Y.Bar >= Y.Foo
assert Y.Foo < Y.Bar < Y.Baz
assert Y.Foo <= Y.Bar <= Y.Baz
assert Y.Foo != Y.Bar and Y.Bar != Y.Baz and Y.Foo != Y.Baz
def test_total_ordering_typesafe():
class X(OrderedEnum):
Foo = "a"
Bar = "b"
Baz = "c"
with pytest.raises(TypeError):
"a" < X.Baz
@enum.unique
class Y(ValueOrderedEnum):
Foo = "a"
Bar = "b"
Baz = "c"
with pytest.raises(TypeError):
"a" < Y.Baz
def test_total_value_ordering_unsound():
class X(ValueOrderedEnum):
Foo = 1
Bar = 1
Baz = 2
assert not (X.Foo < X.Bar)
assert not (X.Foo > X.Bar)
def test_mypy_success():
from mypy import api
result = api.run([__file__])
assert "Success: no issues found in 1 source file" in result[0]