@@ -789,6 +789,89 @@ def test_default_missing_with_wrong_type_value(self):
789
789
self .MainEnum ('RED' )
790
790
self .assertIs (ctx .exception .__context__ , None )
791
791
792
+ def test_closed_invert_expectations (self ):
793
+ class ClosedAB (self .enum_type ):
794
+ A = 1
795
+ B = 2
796
+ MASK = 3
797
+ A , B = ClosedAB
798
+ AB_MASK = ClosedAB .MASK
799
+ #
800
+ self .assertIs (~ A , B )
801
+ self .assertIs (~ B , A )
802
+ self .assertIs (~ (A | B ), ClosedAB (0 ))
803
+ self .assertIs (~ AB_MASK , ClosedAB (0 ))
804
+ self .assertIs (~ ClosedAB (0 ), (A | B ))
805
+ #
806
+ class ClosedXYZ (self .enum_type ):
807
+ X = 4
808
+ Y = 2
809
+ Z = 1
810
+ MASK = 7
811
+ X , Y , Z = ClosedXYZ
812
+ XYZ_MASK = ClosedXYZ .MASK
813
+ #
814
+ self .assertIs (~ X , Y | Z )
815
+ self .assertIs (~ Y , X | Z )
816
+ self .assertIs (~ Z , X | Y )
817
+ self .assertIs (~ (X | Y ), Z )
818
+ self .assertIs (~ (X | Z ), Y )
819
+ self .assertIs (~ (Y | Z ), X )
820
+ self .assertIs (~ (X | Y | Z ), ClosedXYZ (0 ))
821
+ self .assertIs (~ XYZ_MASK , ClosedXYZ (0 ))
822
+ self .assertIs (~ ClosedXYZ (0 ), (X | Y | Z ))
823
+
824
+ def test_open_invert_expectations (self ):
825
+ class OpenAB (self .enum_type ):
826
+ A = 1
827
+ B = 2
828
+ MASK = 255
829
+ A , B = OpenAB
830
+ AB_MASK = OpenAB .MASK
831
+ #
832
+ if OpenAB ._boundary_ in (EJECT , KEEP ):
833
+ self .assertIs (~ A , OpenAB (254 ))
834
+ self .assertIs (~ B , OpenAB (253 ))
835
+ self .assertIs (~ (A | B ), OpenAB (252 ))
836
+ self .assertIs (~ AB_MASK , OpenAB (0 ))
837
+ self .assertIs (~ OpenAB (0 ), AB_MASK )
838
+ else :
839
+ self .assertIs (~ A , B )
840
+ self .assertIs (~ B , A )
841
+ self .assertIs (~ (A | B ), OpenAB (0 ))
842
+ self .assertIs (~ AB_MASK , OpenAB (0 ))
843
+ self .assertIs (~ OpenAB (0 ), (A | B ))
844
+ #
845
+ class OpenXYZ (self .enum_type ):
846
+ X = 4
847
+ Y = 2
848
+ Z = 1
849
+ MASK = 31
850
+ X , Y , Z = OpenXYZ
851
+ XYZ_MASK = OpenXYZ .MASK
852
+ #
853
+ if OpenXYZ ._boundary_ in (EJECT , KEEP ):
854
+ self .assertIs (~ X , OpenXYZ (27 ))
855
+ self .assertIs (~ Y , OpenXYZ (29 ))
856
+ self .assertIs (~ Z , OpenXYZ (30 ))
857
+ self .assertIs (~ (X | Y ), OpenXYZ (25 ))
858
+ self .assertIs (~ (X | Z ), OpenXYZ (26 ))
859
+ self .assertIs (~ (Y | Z ), OpenXYZ (28 ))
860
+ self .assertIs (~ (X | Y | Z ), OpenXYZ (24 ))
861
+ self .assertIs (~ XYZ_MASK , OpenXYZ (0 ))
862
+ self .assertTrue (~ OpenXYZ (0 ), XYZ_MASK )
863
+ else :
864
+ self .assertIs (~ X , Y | Z )
865
+ self .assertIs (~ Y , X | Z )
866
+ self .assertIs (~ Z , X | Y )
867
+ self .assertIs (~ (X | Y ), Z )
868
+ self .assertIs (~ (X | Z ), Y )
869
+ self .assertIs (~ (Y | Z ), X )
870
+ self .assertIs (~ (X | Y | Z ), OpenXYZ (0 ))
871
+ self .assertIs (~ XYZ_MASK , OpenXYZ (0 ))
872
+ self .assertTrue (~ OpenXYZ (0 ), (X | Y | Z ))
873
+
874
+
792
875
class TestPlainEnum (_EnumTests , _PlainOutputTests , unittest .TestCase ):
793
876
enum_type = Enum
794
877
@@ -2913,33 +2996,6 @@ class Color(Flag):
2913
2996
WHITE = RED | GREEN | BLUE
2914
2997
BLANCO = RED | GREEN | BLUE
2915
2998
2916
- class Complete (Flag ):
2917
- A = 0x01
2918
- B = 0x02
2919
-
2920
- class Partial (Flag ):
2921
- A = 0x01
2922
- B = 0x02
2923
- MASK = 0xff
2924
-
2925
- class CompleteInt (IntFlag ):
2926
- A = 0x01
2927
- B = 0x02
2928
-
2929
- class PartialInt (IntFlag ):
2930
- A = 0x01
2931
- B = 0x02
2932
- MASK = 0xff
2933
-
2934
- class CompleteIntStrict (IntFlag , boundary = STRICT ):
2935
- A = 0x01
2936
- B = 0x02
2937
-
2938
- class PartialIntStrict (IntFlag , boundary = STRICT ):
2939
- A = 0x01
2940
- B = 0x02
2941
- MASK = 0xff
2942
-
2943
2999
def test_or (self ):
2944
3000
Perm = self .Perm
2945
3001
for i in Perm :
@@ -2983,34 +3039,6 @@ def test_xor(self):
2983
3039
self .assertIs (Open .RO ^ Open .CE , Open .CE )
2984
3040
self .assertIs (Open .CE ^ Open .CE , Open .RO )
2985
3041
2986
- def test_invert (self ):
2987
- Perm = self .Perm
2988
- RW = Perm .R | Perm .W
2989
- RX = Perm .R | Perm .X
2990
- WX = Perm .W | Perm .X
2991
- RWX = Perm .R | Perm .W | Perm .X
2992
- values = list (Perm ) + [RW , RX , WX , RWX , Perm (0 )]
2993
- for i in values :
2994
- self .assertIs (type (~ i ), Perm )
2995
- self .assertEqual (~ ~ i , i )
2996
- for i in Perm :
2997
- self .assertIs (~ ~ i , i )
2998
- Open = self .Open
2999
- self .assertIs (Open .WO & ~ Open .WO , Open .RO )
3000
- self .assertIs ((Open .WO | Open .CE ) & ~ Open .WO , Open .CE )
3001
- Complete = self .Complete
3002
- self .assertIs (~ Complete .A , Complete .B )
3003
- Partial = self .Partial
3004
- self .assertIs (~ Partial .A , Partial .B )
3005
- CompleteInt = self .CompleteInt
3006
- self .assertIs (~ CompleteInt .A , CompleteInt .B )
3007
- PartialInt = self .PartialInt
3008
- self .assertIs (~ PartialInt .A , PartialInt (254 ))
3009
- CompleteIntStrict = self .CompleteIntStrict
3010
- self .assertIs (~ CompleteIntStrict .A , CompleteIntStrict .B )
3011
- PartialIntStrict = self .PartialIntStrict
3012
- self .assertIs (~ PartialIntStrict .A , PartialIntStrict .B )
3013
-
3014
3042
def test_bool (self ):
3015
3043
Perm = self .Perm
3016
3044
for f in Perm :
0 commit comments