1
1
import copy
2
- import pickle
3
2
import dis
3
+ import pickle
4
4
import threading
5
5
import types
6
6
import unittest
7
- from test .support import threading_helper , check_impl_detail
7
+
8
+ from test .support import check_impl_detail , Py_GIL_DISABLED , threading_helper
8
9
9
10
# Skip this module on other interpreters, it is cpython specific:
10
11
if check_impl_detail (cpython = False ):
11
- raise unittest .SkipTest (' implementation detail specific to cpython' )
12
+ raise unittest .SkipTest (" implementation detail specific to cpython" )
12
13
13
14
import _testinternalcapi
14
15
@@ -28,6 +29,7 @@ def wrapper(*args, **kwargs):
28
29
class TestLoadSuperAttrCache (unittest .TestCase ):
29
30
def test_descriptor_not_double_executed_on_spec_fail (self ):
30
31
calls = []
32
+
31
33
class Descriptor :
32
34
def __get__ (self , instance , owner ):
33
35
calls .append ((instance , owner ))
@@ -56,6 +58,7 @@ class Descriptor:
56
58
class C :
57
59
def __init__ (self ):
58
60
self .x = 1
61
+
59
62
x = Descriptor ()
60
63
61
64
def f (o ):
@@ -921,9 +924,7 @@ def write(items):
921
924
item .__globals__ [None ] = None
922
925
923
926
opname = "LOAD_GLOBAL_MODULE"
924
- self .assert_races_do_not_crash (
925
- opname , get_items , read , write , check_items = True
926
- )
927
+ self .assert_races_do_not_crash (opname , get_items , read , write , check_items = True )
927
928
928
929
def test_store_attr_instance_value (self ):
929
930
def get_items ():
@@ -1018,64 +1019,53 @@ def write(items):
1018
1019
opname = "UNPACK_SEQUENCE_LIST"
1019
1020
self .assert_races_do_not_crash (opname , get_items , read , write )
1020
1021
1022
+
1021
1023
class C :
1022
1024
pass
1023
1025
1024
- class TestInstanceDict (unittest .TestCase ):
1025
1026
1027
+ class TestInstanceDict (unittest .TestCase ):
1026
1028
def setUp (self ):
1027
1029
c = C ()
1028
- c .a , c .b , c .c = 0 ,0 , 0
1030
+ c .a , c .b , c .c = 0 , 0 , 0
1029
1031
1030
1032
def test_values_on_instance (self ):
1031
1033
c = C ()
1032
1034
c .a = 1
1033
1035
C ().b = 2
1034
1036
c .c = 3
1035
- self .assertEqual (
1036
- _testinternalcapi .get_object_dict_values (c ),
1037
- (1 , '<NULL>' , 3 )
1038
- )
1037
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c ), (1 , "<NULL>" , 3 ))
1039
1038
1040
1039
def test_dict_materialization (self ):
1041
1040
c = C ()
1042
1041
c .a = 1
1043
1042
c .b = 2
1044
1043
c .__dict__
1045
- self .assertIs (
1046
- _testinternalcapi .get_object_dict_values (c ),
1047
- None
1048
- )
1044
+ self .assertIs (_testinternalcapi .get_object_dict_values (c ), None )
1049
1045
1046
+ @unittest .skipIf (Py_GIL_DISABLED , "dematerialization disabled without the GIL" )
1050
1047
def test_dict_dematerialization (self ):
1051
1048
c = C ()
1052
1049
c .a = 1
1053
1050
c .b = 2
1054
1051
c .__dict__
1055
- self .assertIs (
1056
- _testinternalcapi .get_object_dict_values (c ),
1057
- None
1058
- )
1052
+ self .assertIs (_testinternalcapi .get_object_dict_values (c ), None )
1059
1053
for _ in range (100 ):
1060
1054
c .a
1061
- self .assertEqual (
1062
- _testinternalcapi .get_object_dict_values (c ),
1063
- (1 , 2 , '<NULL>' )
1064
- )
1055
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c ), (1 , 2 , "<NULL>" ))
1065
1056
1057
+ @unittest .skipIf (Py_GIL_DISABLED , "dematerialization disabled without the GIL" )
1066
1058
def test_dict_dematerialization_multiple_refs (self ):
1067
1059
c = C ()
1068
1060
c .a = 1
1069
1061
c .b = 2
1070
1062
d = c .__dict__
1071
1063
for _ in range (100 ):
1072
1064
c .a
1073
- self .assertIs (
1074
- _testinternalcapi .get_object_dict_values (c ),
1075
- None
1076
- )
1065
+ self .assertIs (_testinternalcapi .get_object_dict_values (c ), None )
1077
1066
self .assertIs (c .__dict__ , d )
1078
1067
1068
+ @unittest .skipIf (Py_GIL_DISABLED , "dematerialization disabled without the GIL" )
1079
1069
def test_dict_dematerialization_copy (self ):
1080
1070
c = C ()
1081
1071
c .a = 1
@@ -1084,24 +1074,16 @@ def test_dict_dematerialization_copy(self):
1084
1074
for _ in range (100 ):
1085
1075
c .a
1086
1076
c2 .a
1087
- self .assertEqual (
1088
- _testinternalcapi .get_object_dict_values (c ),
1089
- (1 , 2 , '<NULL>' )
1090
- )
1091
- self .assertEqual (
1092
- _testinternalcapi .get_object_dict_values (c2 ),
1093
- (1 , 2 , '<NULL>' )
1094
- )
1077
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c ), (1 , 2 , "<NULL>" ))
1078
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c2 ), (1 , 2 , "<NULL>" ))
1095
1079
c3 = copy .deepcopy (c )
1096
1080
for _ in range (100 ):
1097
1081
c .a
1098
1082
c3 .a
1099
- self .assertEqual (
1100
- _testinternalcapi .get_object_dict_values (c ),
1101
- (1 , 2 , '<NULL>' )
1102
- )
1103
- #NOTE -- c3.__dict__ does not de-materialize
1083
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c ), (1 , 2 , "<NULL>" ))
1084
+ # NOTE -- c3.__dict__ does not de-materialize
1104
1085
1086
+ @unittest .skipIf (Py_GIL_DISABLED , "dematerialization disabled without the GIL" )
1105
1087
def test_dict_dematerialization_pickle (self ):
1106
1088
c = C ()
1107
1089
c .a = 1
@@ -1110,31 +1092,21 @@ def test_dict_dematerialization_pickle(self):
1110
1092
for _ in range (100 ):
1111
1093
c .a
1112
1094
c2 .a
1113
- self .assertEqual (
1114
- _testinternalcapi .get_object_dict_values (c ),
1115
- (1 , 2 , '<NULL>' )
1116
- )
1117
- self .assertEqual (
1118
- _testinternalcapi .get_object_dict_values (c2 ),
1119
- (1 , 2 , '<NULL>' )
1120
- )
1095
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c ), (1 , 2 , "<NULL>" ))
1096
+ self .assertEqual (_testinternalcapi .get_object_dict_values (c2 ), (1 , 2 , "<NULL>" ))
1121
1097
1122
1098
def test_dict_dematerialization_subclass (self ):
1123
- class D (dict ): pass
1099
+ class D (dict ):
1100
+ pass
1101
+
1124
1102
c = C ()
1125
1103
c .a = 1
1126
1104
c .b = 2
1127
1105
c .__dict__ = D (c .__dict__ )
1128
1106
for _ in range (100 ):
1129
1107
c .a
1130
- self .assertIs (
1131
- _testinternalcapi .get_object_dict_values (c ),
1132
- None
1133
- )
1134
- self .assertEqual (
1135
- c .__dict__ ,
1136
- {'a' :1 , 'b' :2 }
1137
- )
1108
+ self .assertIs (_testinternalcapi .get_object_dict_values (c ), None )
1109
+ self .assertEqual (c .__dict__ , {"a" : 1 , "b" : 2 })
1138
1110
1139
1111
1140
1112
if __name__ == "__main__" :
0 commit comments