39
39
40
40
import sys
41
41
from . import CPyExtType , CPyExtTestCase , CPyExtFunction , CPyExtFunctionOutVars , unhandled_error_compare , GRAALPYTHON
42
+
42
43
__dir__ = __file__ .rpartition ("/" )[0 ]
43
44
44
- #
45
- # class TestPyStructSequenceTypes(object):
46
- # def test_properties(self):
47
- # TestPyStructSequence = CPyExtType("TestPyStructSequence",
48
- # """
49
- # static PyStructSequence_Field typeinfo_fields[] = {
50
- # {"element0", "The first element."},
51
- # {"element1", "The second element."},
52
- # {NULL, NULL,}
53
- # };
54
- #
55
- # static PyStructSequence_Desc typeinfo_desc = {
56
- # "TestPyStructSequenceTypes.TestPyStructSequence",
57
- # "Information about some custom struct type",
58
- # typeinfo_fields,
59
- # 2,
60
- # };
61
- # """,
62
- # ready_code="""if(PyStructSequence_InitType2(&TestPyStructSequenceType, &typeinfo_desc) < 0) {
63
- # return NULL;
64
- # }
65
- # Py_INCREF(&TestPyStructSequenceType);
66
- # """,
67
- # )
68
- # assert TestPyStructSequence.__doc__ == "Information about some custom struct type"
69
- #
70
- # tester = TestPyStructSequence()
71
- # assert hasattr(tester.element0)
72
- # assert hasattr(tester.element1)
45
+
46
+ class TestPyStructSequenceTypes (object ):
47
+ def test_properties (self ):
48
+ TestPyStructSequence = CPyExtType ("TestPyStructSequence" ,
49
+ """
50
+ static PyStructSequence_Field typeinfo_fields[] = {
51
+ {"element0", "The first element."},
52
+ {"element1", "The second element."},
53
+ {NULL, NULL,}
54
+ };
55
+
56
+ static PyStructSequence_Desc typeinfo_desc = {
57
+ "TestPyStructSequenceTypes.TestPyStructSequence",
58
+ "Information about some custom struct type",
59
+ typeinfo_fields,
60
+ 2,
61
+ };
62
+ """ ,
63
+ ready_code = """
64
+ /* our template initializes refcnt to 1; so reset */
65
+ Py_REFCNT(&TestPyStructSequenceType) = 0;
66
+ if(PyStructSequence_InitType2(&TestPyStructSequenceType, &typeinfo_desc) < 0) {
67
+ return NULL;
68
+ }
69
+ Py_INCREF(&TestPyStructSequenceType);
70
+ """ ,
71
+ )
72
+ assert TestPyStructSequence .__doc__ == "Information about some custom struct type"
73
+
74
+ tester = TestPyStructSequence (("hello" , "world" ))
75
+ assert hasattr (tester , "element0" )
76
+ assert hasattr (tester , "element1" )
77
+ assert tester .element0 == "hello"
78
+ assert tester .element1 == "world"
79
+
80
+ def test_structseq_newtype (self ):
81
+ TestPyStructSequenceNewType = CPyExtType ("TestPyStructSequenceNewType" , """
82
+ static PyStructSequence_Field typeinfo_fields[] = {
83
+ {"element0", "The first element."},
84
+ {"element1", "The second element."},
85
+ {"element2", "The third element."},
86
+ {NULL, NULL,}
87
+ };
88
+
89
+ static PyStructSequence_Desc typeinfo_desc = {
90
+ "TestPyStructSequenceNewType.TestPyStructSequenceNewType",
91
+ "Information about some new struct type",
92
+ typeinfo_fields,
93
+ 3,
94
+ };
95
+ """ ,
96
+ post_ready_code = """
97
+ PyTypeObject *new_type = PyStructSequence_NewType(&typeinfo_desc);
98
+ if (new_type == NULL)
99
+ return NULL;
100
+ PyModule_AddObject(m, "TestPyStructSequenceNewType", (PyObject *)new_type);
101
+ return m;
102
+ """ ,
103
+ )
104
+ assert TestPyStructSequenceNewType .__doc__ == "Information about some new struct type"
105
+
106
+ tester = TestPyStructSequenceNewType (("hello" , "beautiful" , "world" ))
107
+ assert hasattr (tester , "element0" )
108
+ assert hasattr (tester , "element1" )
109
+ assert hasattr (tester , "element2" )
110
+ assert tester .element0 == "hello"
111
+ assert tester .element1 == "beautiful"
112
+ assert tester .element2 == "world"
73
113
74
114
75
115
class TestPyStructSequence (CPyExtTestCase ):
76
-
116
+
77
117
def compile_module (self , name ):
78
118
type (self ).mro ()[1 ].__dict__ ["test_%s" % name ].create_module (name )
79
119
super (TestPyStructSequence , self ).compile_module (name )
80
-
120
+
81
121
test_PyStructSequence_InitType2 = CPyExtFunction (
82
122
lambda args : 0 ,
83
- lambda : ( (0 ,), ),
123
+ lambda : ((0 ,),),
84
124
code = '''
85
125
static PyTypeObject CustomStructSeqType;
86
-
126
+
87
127
static PyStructSequence_Field typeinfo_fields[] = {
88
128
{"element0", "The first element."},
89
129
{"element1", "The second element."},
90
130
{NULL, NULL,}
91
131
};
92
-
132
+
93
133
static PyStructSequence_Desc typeinfo_desc = {
94
134
"custom.named.tuple",
95
135
"Information about some custom struct type",
96
136
typeinfo_fields,
97
137
2,
98
138
};
99
-
139
+
100
140
int wrap_PyStructSequence_InitType2(int n) {
101
141
return PyStructSequence_InitType2(&CustomStructSeqType, &typeinfo_desc);
102
142
}
@@ -110,12 +150,8 @@ def compile_module(self, name):
110
150
111
151
test_PyStructSequence_Usage = CPyExtFunction (
112
152
lambda args : args [0 ],
113
- lambda : (
153
+ lambda : (
114
154
(("hello" , "world" ,),),
115
- # ("john", "doe",),
116
- # (1, "doe",),
117
- # ("john", False,),
118
- # ("john", None,),
119
155
),
120
156
code = '''
121
157
static PyTypeObject CustomStructSeqType;
@@ -125,14 +161,14 @@ def compile_module(self, name):
125
161
{"element1", "The second element."},
126
162
{NULL, NULL,}
127
163
};
128
-
129
- static PyStructSequence_Desc typeinfo_desc = {
164
+
165
+ static PyStructSequence_Desc typeinfo_desc = {
130
166
"custom.named.tuple",
131
167
"Information about some custom struct type",
132
168
typeinfo_fields,
133
169
2,
134
170
};
135
-
171
+
136
172
PyObject* wrap_PyStructSequence_Usage(PyObject* elements) {
137
173
Py_ssize_t i = 0;
138
174
PyObject* elem = NULL;
0 commit comments