@@ -818,6 +818,89 @@ def test_default_missing_with_wrong_type_value(self):
818
818
self .MainEnum ('RED' )
819
819
self .assertIs (ctx .exception .__context__ , None )
820
820
821
+ def test_closed_invert_expectations (self ):
822
+ class ClosedAB (self .enum_type ):
823
+ A = 1
824
+ B = 2
825
+ MASK = 3
826
+ A , B = ClosedAB
827
+ AB_MASK = ClosedAB .MASK
828
+ #
829
+ self .assertIs (~ A , B )
830
+ self .assertIs (~ B , A )
831
+ self .assertIs (~ (A | B ), ClosedAB (0 ))
832
+ self .assertIs (~ AB_MASK , ClosedAB (0 ))
833
+ self .assertIs (~ ClosedAB (0 ), (A | B ))
834
+ #
835
+ class ClosedXYZ (self .enum_type ):
836
+ X = 4
837
+ Y = 2
838
+ Z = 1
839
+ MASK = 7
840
+ X , Y , Z = ClosedXYZ
841
+ XYZ_MASK = ClosedXYZ .MASK
842
+ #
843
+ self .assertIs (~ X , Y | Z )
844
+ self .assertIs (~ Y , X | Z )
845
+ self .assertIs (~ Z , X | Y )
846
+ self .assertIs (~ (X | Y ), Z )
847
+ self .assertIs (~ (X | Z ), Y )
848
+ self .assertIs (~ (Y | Z ), X )
849
+ self .assertIs (~ (X | Y | Z ), ClosedXYZ (0 ))
850
+ self .assertIs (~ XYZ_MASK , ClosedXYZ (0 ))
851
+ self .assertIs (~ ClosedXYZ (0 ), (X | Y | Z ))
852
+
853
+ def test_open_invert_expectations (self ):
854
+ class OpenAB (self .enum_type ):
855
+ A = 1
856
+ B = 2
857
+ MASK = 255
858
+ A , B = OpenAB
859
+ AB_MASK = OpenAB .MASK
860
+ #
861
+ if OpenAB ._boundary_ in (EJECT , KEEP ):
862
+ self .assertIs (~ A , OpenAB (254 ))
863
+ self .assertIs (~ B , OpenAB (253 ))
864
+ self .assertIs (~ (A | B ), OpenAB (252 ))
865
+ self .assertIs (~ AB_MASK , OpenAB (0 ))
866
+ self .assertIs (~ OpenAB (0 ), AB_MASK )
867
+ else :
868
+ self .assertIs (~ A , B )
869
+ self .assertIs (~ B , A )
870
+ self .assertIs (~ (A | B ), OpenAB (0 ))
871
+ self .assertIs (~ AB_MASK , OpenAB (0 ))
872
+ self .assertIs (~ OpenAB (0 ), (A | B ))
873
+ #
874
+ class OpenXYZ (self .enum_type ):
875
+ X = 4
876
+ Y = 2
877
+ Z = 1
878
+ MASK = 31
879
+ X , Y , Z = OpenXYZ
880
+ XYZ_MASK = OpenXYZ .MASK
881
+ #
882
+ if OpenXYZ ._boundary_ in (EJECT , KEEP ):
883
+ self .assertIs (~ X , OpenXYZ (27 ))
884
+ self .assertIs (~ Y , OpenXYZ (29 ))
885
+ self .assertIs (~ Z , OpenXYZ (30 ))
886
+ self .assertIs (~ (X | Y ), OpenXYZ (25 ))
887
+ self .assertIs (~ (X | Z ), OpenXYZ (26 ))
888
+ self .assertIs (~ (Y | Z ), OpenXYZ (28 ))
889
+ self .assertIs (~ (X | Y | Z ), OpenXYZ (24 ))
890
+ self .assertIs (~ XYZ_MASK , OpenXYZ (0 ))
891
+ self .assertTrue (~ OpenXYZ (0 ), XYZ_MASK )
892
+ else :
893
+ self .assertIs (~ X , Y | Z )
894
+ self .assertIs (~ Y , X | Z )
895
+ self .assertIs (~ Z , X | Y )
896
+ self .assertIs (~ (X | Y ), Z )
897
+ self .assertIs (~ (X | Z ), Y )
898
+ self .assertIs (~ (Y | Z ), X )
899
+ self .assertIs (~ (X | Y | Z ), OpenXYZ (0 ))
900
+ self .assertIs (~ XYZ_MASK , OpenXYZ (0 ))
901
+ self .assertTrue (~ OpenXYZ (0 ), (X | Y | Z ))
902
+
903
+
821
904
class TestPlainEnum (_EnumTests , _PlainOutputTests , unittest .TestCase ):
822
905
enum_type = Enum
823
906
@@ -3045,33 +3128,6 @@ class Color(Flag):
3045
3128
WHITE = RED | GREEN | BLUE
3046
3129
BLANCO = RED | GREEN | BLUE
3047
3130
3048
- class Complete (Flag ):
3049
- A = 0x01
3050
- B = 0x02
3051
-
3052
- class Partial (Flag ):
3053
- A = 0x01
3054
- B = 0x02
3055
- MASK = 0xff
3056
-
3057
- class CompleteInt (IntFlag ):
3058
- A = 0x01
3059
- B = 0x02
3060
-
3061
- class PartialInt (IntFlag ):
3062
- A = 0x01
3063
- B = 0x02
3064
- MASK = 0xff
3065
-
3066
- class CompleteIntStrict (IntFlag , boundary = STRICT ):
3067
- A = 0x01
3068
- B = 0x02
3069
-
3070
- class PartialIntStrict (IntFlag , boundary = STRICT ):
3071
- A = 0x01
3072
- B = 0x02
3073
- MASK = 0xff
3074
-
3075
3131
def test_or (self ):
3076
3132
Perm = self .Perm
3077
3133
for i in Perm :
@@ -3115,34 +3171,6 @@ def test_xor(self):
3115
3171
self .assertIs (Open .RO ^ Open .CE , Open .CE )
3116
3172
self .assertIs (Open .CE ^ Open .CE , Open .RO )
3117
3173
3118
- def test_invert (self ):
3119
- Perm = self .Perm
3120
- RW = Perm .R | Perm .W
3121
- RX = Perm .R | Perm .X
3122
- WX = Perm .W | Perm .X
3123
- RWX = Perm .R | Perm .W | Perm .X
3124
- values = list (Perm ) + [RW , RX , WX , RWX , Perm (0 )]
3125
- for i in values :
3126
- self .assertIs (type (~ i ), Perm )
3127
- self .assertEqual (~ ~ i , i )
3128
- for i in Perm :
3129
- self .assertIs (~ ~ i , i )
3130
- Open = self .Open
3131
- self .assertIs (Open .WO & ~ Open .WO , Open .RO )
3132
- self .assertIs ((Open .WO | Open .CE ) & ~ Open .WO , Open .CE )
3133
- Complete = self .Complete
3134
- self .assertIs (~ Complete .A , Complete .B )
3135
- Partial = self .Partial
3136
- self .assertIs (~ Partial .A , Partial .B )
3137
- CompleteInt = self .CompleteInt
3138
- self .assertIs (~ CompleteInt .A , CompleteInt .B )
3139
- PartialInt = self .PartialInt
3140
- self .assertIs (~ PartialInt .A , PartialInt (254 ))
3141
- CompleteIntStrict = self .CompleteIntStrict
3142
- self .assertIs (~ CompleteIntStrict .A , CompleteIntStrict .B )
3143
- PartialIntStrict = self .PartialIntStrict
3144
- self .assertIs (~ PartialIntStrict .A , PartialIntStrict .B )
3145
-
3146
3174
def test_bool (self ):
3147
3175
Perm = self .Perm
3148
3176
for f in Perm :
0 commit comments