ndtypes 0.2.0dev5 → 0.2.0dev6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +12 -0
- data/Rakefile +8 -0
- data/ext/ruby_ndtypes/GPATH +0 -0
- data/ext/ruby_ndtypes/GRTAGS +0 -0
- data/ext/ruby_ndtypes/GTAGS +0 -0
- data/ext/ruby_ndtypes/extconf.rb +1 -1
- data/ext/ruby_ndtypes/include/ndtypes.h +231 -122
- data/ext/ruby_ndtypes/include/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/lib/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/lib/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/Makefile +87 -0
- data/ext/ruby_ndtypes/ndtypes/config.h +68 -0
- data/ext/ruby_ndtypes/ndtypes/config.log +477 -0
- data/ext/ruby_ndtypes/ndtypes/config.status +1027 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_static/style.css +7 -0
- data/ext/ruby_ndtypes/ndtypes/doc/_templates/layout.html +2 -0
- data/ext/ruby_ndtypes/ndtypes/doc/conf.py +40 -4
- data/ext/ruby_ndtypes/ndtypes/doc/images/xndlogo.png +0 -0
- data/ext/ruby_ndtypes/ndtypes/doc/ndtypes/types.rst +1 -1
- data/ext/ruby_ndtypes/ndtypes/doc/requirements.txt +2 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile +287 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.in +20 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/Makefile.vc +22 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.c +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/alloc.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/attr.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/Makefile +73 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.c +246 -229
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.h +15 -11
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bpgrammar.y +38 -28
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.c +91 -91
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.l +4 -3
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/bplexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.c +8 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/export.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/compat/import.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/context.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.c +263 -182
- data/ext/ruby_ndtypes/ndtypes/libndtypes/copy.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/encodings.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.c +67 -7
- data/ext/ruby_ndtypes/ndtypes/libndtypes/equal.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.c +1112 -1000
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.h +69 -58
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/grammar.y +150 -99
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.c +185 -15
- data/ext/ruby_ndtypes/ndtypes/libndtypes/io.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.c +301 -276
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.l +9 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/lexer.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.c +729 -228
- data/ext/ruby_ndtypes/ndtypes/libndtypes/match.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.c +768 -403
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.h.in +231 -122
- data/ext/ruby_ndtypes/ndtypes/libndtypes/ndtypes.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.c +176 -84
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.h +26 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parsefuncs.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.c +57 -35
- data/ext/ruby_ndtypes/ndtypes/libndtypes/parser.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.c +420 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/primitive.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.c +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/seq.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/Makefile +48 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.c +200 -116
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/deserialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.c +46 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/serialize/serialize.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.c +58 -27
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.h +1 -1
- data/ext/ruby_ndtypes/ndtypes/libndtypes/substitute.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.c +3 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.h +12 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/symtable.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile +55 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.in +8 -8
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/Makefile.vc +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/runtest.c +274 -172
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test.h +24 -4
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_array.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_buffer.c +14 -14
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_match.c +32 -30
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse.c +37 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_error.c +36 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_parse_roundtrip.c +16 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_record.c +5 -5
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_typecheck.c +706 -253
- data/ext/ruby_ndtypes/ndtypes/libndtypes/tests/test_unify.c +132 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.c +703 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/unify.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.c +335 -127
- data/ext/ruby_ndtypes/ndtypes/libndtypes/util.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.c +2 -2
- data/ext/ruby_ndtypes/ndtypes/libndtypes/values.o +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndt_randtype.py +88 -71
- data/ext/ruby_ndtypes/ndtypes/python/ndt_support.py +0 -1
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/__init__.py +10 -13
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/_ndtypes.c +395 -314
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.a +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0 +1 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/libndtypes.so.0.2.0dev3 +0 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/ndtypes.h +1002 -0
- data/ext/ruby_ndtypes/ndtypes/python/ndtypes/pyndtypes.h +15 -33
- data/ext/ruby_ndtypes/ndtypes/python/test_ndtypes.py +340 -132
- data/ext/ruby_ndtypes/ndtypes/setup.py +11 -2
- data/ext/ruby_ndtypes/ruby_ndtypes.c +364 -241
- data/ext/ruby_ndtypes/ruby_ndtypes.h +1 -1
- data/ext/ruby_ndtypes/ruby_ndtypes_internal.h +0 -1
- data/lib/ndtypes.rb +11 -0
- data/lib/ndtypes/version.rb +2 -2
- data/lib/ruby_ndtypes.so +0 -0
- data/ndtypes.gemspec +3 -0
- data/spec/ndtypes_spec.rb +6 -0
- metadata +98 -4
- data/ext/ruby_ndtypes/gc_guard.c +0 -36
- data/ext/ruby_ndtypes/gc_guard.h +0 -12
|
@@ -14,23 +14,23 @@ default: runtest runtest_shared
|
|
|
14
14
|
|
|
15
15
|
runtest:\
|
|
16
16
|
Makefile runtest.c alloc_fail.c test_parse.c test_parse_error.c test_parse_roundtrip.c \
|
|
17
|
-
test_indent.c test_typecheck.c test_numba.c test_typedef.c test_match.c
|
|
18
|
-
test.h alloc_fail.h \
|
|
17
|
+
test_indent.c test_typecheck.c test_numba.c test_typedef.c test_match.c test_unify.c \
|
|
18
|
+
test_buffer.c test.h alloc_fail.h \
|
|
19
19
|
$(SRCDIR)\ndtypes.h $(SRCDIR)\$(LIBSTATIC)
|
|
20
20
|
$(CC) -I$(SRCDIR) $(CFLAGS) -DTEST_ALLOC /Feruntest runtest.c \
|
|
21
21
|
alloc_fail.c test_parse.c test_parse_error.c test_parse_roundtrip.c \
|
|
22
22
|
test_indent.c test_typecheck.c test_numba.c test_typedef.c test_match.c \
|
|
23
|
-
test_buffer.c \
|
|
23
|
+
test_unify.c test_buffer.c \
|
|
24
24
|
$(SRCDIR)\$(LIBSTATIC)
|
|
25
25
|
|
|
26
26
|
runtest_shared:\
|
|
27
27
|
Makefile runtest.c alloc_fail.c test_parse.c test_parse_error.c test_parse_roundtrip.c \
|
|
28
|
-
test_indent.c test_typedef.c test_match.c test.h alloc_fail.h \
|
|
28
|
+
test_indent.c test_typedef.c test_match.c test_unify.c test.h alloc_fail.h \
|
|
29
29
|
$(SRCDIR)\ndtypes.h $(SRCDIR)\$(LIBSHARED)
|
|
30
30
|
$(CC) -I$(SRCDIR) $(CFLAGS_SHARED) -DTEST_ALLOC /Feruntest_shared runtest.c \
|
|
31
31
|
alloc_fail.c test_parse.c test_parse_error.c test_parse_roundtrip.c \
|
|
32
32
|
test_indent.c test_typecheck.c test_numba.c test_typedef.c test_match.c \
|
|
33
|
-
test_buffer.c \
|
|
33
|
+
test_unify.c test_buffer.c \
|
|
34
34
|
$(SRCDIR)\$(LIBSHARED)
|
|
35
35
|
|
|
36
36
|
|
|
@@ -53,7 +53,8 @@ static int
|
|
|
53
53
|
init_tests(void)
|
|
54
54
|
{
|
|
55
55
|
ndt_context_t *ctx;
|
|
56
|
-
ndt_t *t = NULL;
|
|
56
|
+
const ndt_t *t = NULL;
|
|
57
|
+
int ret;
|
|
57
58
|
|
|
58
59
|
ctx = ndt_context_new();
|
|
59
60
|
if (ctx == NULL) {
|
|
@@ -73,7 +74,10 @@ init_tests(void)
|
|
|
73
74
|
ndt_context_del(ctx);
|
|
74
75
|
return -1;
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
|
|
78
|
+
ret = ndt_typedef("defined_t", t, NULL, ctx);
|
|
79
|
+
ndt_decref(t);
|
|
80
|
+
if (ret < 0) {
|
|
77
81
|
ndt_err_fprint(stderr, ctx);
|
|
78
82
|
ndt_context_del(ctx);
|
|
79
83
|
return -1;
|
|
@@ -85,7 +89,10 @@ init_tests(void)
|
|
|
85
89
|
ndt_context_del(ctx);
|
|
86
90
|
return -1;
|
|
87
91
|
}
|
|
88
|
-
|
|
92
|
+
|
|
93
|
+
ret = ndt_typedef("foo_t", t, NULL, ctx);
|
|
94
|
+
ndt_decref(t);
|
|
95
|
+
if (ret < 0) {
|
|
89
96
|
ndt_err_fprint(stderr, ctx);
|
|
90
97
|
ndt_context_del(ctx);
|
|
91
98
|
return -1;
|
|
@@ -100,7 +107,7 @@ test_parse(void)
|
|
|
100
107
|
{
|
|
101
108
|
const char **c;
|
|
102
109
|
ndt_context_t *ctx;
|
|
103
|
-
ndt_t *t;
|
|
110
|
+
const ndt_t *t;
|
|
104
111
|
char *s;
|
|
105
112
|
int count = 0;
|
|
106
113
|
|
|
@@ -123,7 +130,7 @@ test_parse(void)
|
|
|
123
130
|
}
|
|
124
131
|
|
|
125
132
|
if (t != NULL) {
|
|
126
|
-
|
|
133
|
+
ndt_decref(t);
|
|
127
134
|
ndt_context_del(ctx);
|
|
128
135
|
fprintf(stderr, "test_parse: parse: FAIL: t != NULL after MemoryError\n");
|
|
129
136
|
fprintf(stderr, "test_parse: parse: FAIL: %s\n", *c);
|
|
@@ -152,7 +159,7 @@ test_parse(void)
|
|
|
152
159
|
|
|
153
160
|
if (s != NULL) {
|
|
154
161
|
ndt_free(s);
|
|
155
|
-
|
|
162
|
+
ndt_decref(t);
|
|
156
163
|
ndt_context_del(ctx);
|
|
157
164
|
fprintf(stderr, "test_parse: convert: FAIL: s != NULL after MemoryError\n");
|
|
158
165
|
fprintf(stderr, "test_parse: parse: FAIL: %s\n", *c);
|
|
@@ -164,13 +171,13 @@ test_parse(void)
|
|
|
164
171
|
fprintf(stderr, "test_parse: convert: FAIL: got: %s: %s\n\n",
|
|
165
172
|
ndt_err_as_string(ctx->err),
|
|
166
173
|
ndt_context_msg(ctx));
|
|
167
|
-
|
|
174
|
+
ndt_decref(t);
|
|
168
175
|
ndt_context_del(ctx);
|
|
169
176
|
return -1;
|
|
170
177
|
}
|
|
171
178
|
|
|
172
179
|
ndt_free(s);
|
|
173
|
-
|
|
180
|
+
ndt_decref(t);
|
|
174
181
|
count++;
|
|
175
182
|
}
|
|
176
183
|
fprintf(stderr, "test_parse (%d test cases)\n", count);
|
|
@@ -184,7 +191,7 @@ test_parse_roundtrip(void)
|
|
|
184
191
|
{
|
|
185
192
|
const char **c;
|
|
186
193
|
ndt_context_t *ctx;
|
|
187
|
-
ndt_t *t;
|
|
194
|
+
const ndt_t *t;
|
|
188
195
|
char *s;
|
|
189
196
|
int count = 0;
|
|
190
197
|
|
|
@@ -211,7 +218,7 @@ test_parse_roundtrip(void)
|
|
|
211
218
|
fprintf(stderr, "test_parse_roundtrip: convert: FAIL: got: %s: %s\n\n",
|
|
212
219
|
ndt_err_as_string(ctx->err),
|
|
213
220
|
ndt_context_msg(ctx));
|
|
214
|
-
|
|
221
|
+
ndt_decref(t);
|
|
215
222
|
ndt_context_del(ctx);
|
|
216
223
|
return -1;
|
|
217
224
|
}
|
|
@@ -220,13 +227,13 @@ test_parse_roundtrip(void)
|
|
|
220
227
|
fprintf(stderr, "test_parse_roundtrip: convert: FAIL: input: \"%s\"\n", *c);
|
|
221
228
|
fprintf(stderr, "test_parse_roundtrip: convert: FAIL: roundtrip: \"%s\"\n", s);
|
|
222
229
|
ndt_free(s);
|
|
223
|
-
|
|
230
|
+
ndt_decref(t);
|
|
224
231
|
ndt_context_del(ctx);
|
|
225
232
|
return -1;
|
|
226
233
|
}
|
|
227
234
|
|
|
228
235
|
ndt_free(s);
|
|
229
|
-
|
|
236
|
+
ndt_decref(t);
|
|
230
237
|
count++;
|
|
231
238
|
}
|
|
232
239
|
fprintf(stderr, "test_parse_roundtrip (%d test cases)\n", count);
|
|
@@ -240,7 +247,7 @@ test_parse_error(void)
|
|
|
240
247
|
{
|
|
241
248
|
const char **c;
|
|
242
249
|
ndt_context_t *ctx;
|
|
243
|
-
ndt_t *t;
|
|
250
|
+
const ndt_t *t;
|
|
244
251
|
int count = 0;
|
|
245
252
|
|
|
246
253
|
ctx = ndt_context_new();
|
|
@@ -262,7 +269,7 @@ test_parse_error(void)
|
|
|
262
269
|
}
|
|
263
270
|
|
|
264
271
|
if (t != NULL) {
|
|
265
|
-
|
|
272
|
+
ndt_decref(t);
|
|
266
273
|
ndt_context_del(ctx);
|
|
267
274
|
fprintf(stderr, "test_parse_error: FAIL: t != NULL after MemoryError\n");
|
|
268
275
|
fprintf(stderr, "test_parse_error: FAIL: input: %s\n", *c);
|
|
@@ -274,7 +281,7 @@ test_parse_error(void)
|
|
|
274
281
|
fprintf(stderr, "test_parse_error: FAIL: t != NULL after %s: %s\n",
|
|
275
282
|
ndt_err_as_string(ctx->err),
|
|
276
283
|
ndt_context_msg(ctx));
|
|
277
|
-
|
|
284
|
+
ndt_decref(t);
|
|
278
285
|
ndt_context_del(ctx);
|
|
279
286
|
return -1;
|
|
280
287
|
}
|
|
@@ -292,7 +299,7 @@ test_indent(void)
|
|
|
292
299
|
const indent_testcase_t *tc;
|
|
293
300
|
const char **c;
|
|
294
301
|
ndt_context_t *ctx;
|
|
295
|
-
ndt_t *t;
|
|
302
|
+
const ndt_t *t;
|
|
296
303
|
char *s;
|
|
297
304
|
int count = 0;
|
|
298
305
|
|
|
@@ -326,7 +333,7 @@ test_indent(void)
|
|
|
326
333
|
|
|
327
334
|
if (s != NULL) {
|
|
328
335
|
ndt_free(s);
|
|
329
|
-
|
|
336
|
+
ndt_decref(t);
|
|
330
337
|
ndt_context_del(ctx);
|
|
331
338
|
fprintf(stderr, "test_indent: convert: FAIL: s != NULL after MemoryError\n");
|
|
332
339
|
fprintf(stderr, "test_indent: convert: FAIL: %s\n", *c);
|
|
@@ -338,13 +345,13 @@ test_indent(void)
|
|
|
338
345
|
fprintf(stderr, "test_indent: convert: FAIL: got: %s: %s\n\n",
|
|
339
346
|
ndt_err_as_string(ctx->err),
|
|
340
347
|
ndt_context_msg(ctx));
|
|
341
|
-
|
|
348
|
+
ndt_decref(t);
|
|
342
349
|
ndt_context_del(ctx);
|
|
343
350
|
return -1;
|
|
344
351
|
}
|
|
345
352
|
|
|
346
353
|
ndt_free(s);
|
|
347
|
-
|
|
354
|
+
ndt_decref(t);
|
|
348
355
|
count++;
|
|
349
356
|
}
|
|
350
357
|
|
|
@@ -372,7 +379,7 @@ test_indent(void)
|
|
|
372
379
|
|
|
373
380
|
if (s != NULL) {
|
|
374
381
|
ndt_free(s);
|
|
375
|
-
|
|
382
|
+
ndt_decref(t);
|
|
376
383
|
ndt_context_del(ctx);
|
|
377
384
|
fprintf(stderr, "test_indent: convert: FAIL: s != NULL after MemoryError\n");
|
|
378
385
|
fprintf(stderr, "test_indent: convert: FAIL: %s\n", tc->input);
|
|
@@ -384,7 +391,7 @@ test_indent(void)
|
|
|
384
391
|
fprintf(stderr, "test_indent: convert: FAIL: got: %s: %s\n\n",
|
|
385
392
|
ndt_err_as_string(ctx->err),
|
|
386
393
|
ndt_context_msg(ctx));
|
|
387
|
-
|
|
394
|
+
ndt_decref(t);
|
|
388
395
|
ndt_context_del(ctx);
|
|
389
396
|
return -1;
|
|
390
397
|
}
|
|
@@ -394,13 +401,13 @@ test_indent(void)
|
|
|
394
401
|
fprintf(stderr, "test_indent: convert: FAIL: got: %s: %s\n\n",
|
|
395
402
|
ndt_err_as_string(ctx->err),
|
|
396
403
|
ndt_context_msg(ctx));
|
|
397
|
-
|
|
404
|
+
ndt_decref(t);
|
|
398
405
|
ndt_context_del(ctx);
|
|
399
406
|
return -1;
|
|
400
407
|
}
|
|
401
408
|
|
|
402
409
|
ndt_free(s);
|
|
403
|
-
|
|
410
|
+
ndt_decref(t);
|
|
404
411
|
count++;
|
|
405
412
|
}
|
|
406
413
|
|
|
@@ -415,7 +422,7 @@ test_typedef(void)
|
|
|
415
422
|
{
|
|
416
423
|
const char **c;
|
|
417
424
|
ndt_context_t *ctx;
|
|
418
|
-
ndt_t *t;
|
|
425
|
+
const ndt_t *t;
|
|
419
426
|
int count = 0;
|
|
420
427
|
|
|
421
428
|
ctx = ndt_context_new();
|
|
@@ -433,6 +440,7 @@ test_typedef(void)
|
|
|
433
440
|
ndt_set_alloc_fail();
|
|
434
441
|
(void)ndt_typedef(*c, t, NULL, ctx);
|
|
435
442
|
ndt_set_alloc();
|
|
443
|
+
ndt_decref(t);
|
|
436
444
|
|
|
437
445
|
if (ctx->err != NDT_MemoryError) {
|
|
438
446
|
break;
|
|
@@ -469,7 +477,7 @@ test_typedef_duplicates(void)
|
|
|
469
477
|
{
|
|
470
478
|
const char **c;
|
|
471
479
|
ndt_context_t *ctx;
|
|
472
|
-
ndt_t *t;
|
|
480
|
+
const ndt_t *t;
|
|
473
481
|
int count = 0;
|
|
474
482
|
|
|
475
483
|
ctx = ndt_context_new();
|
|
@@ -487,19 +495,23 @@ test_typedef_duplicates(void)
|
|
|
487
495
|
ndt_set_alloc_fail();
|
|
488
496
|
(void)ndt_typedef(*c, t, NULL, ctx);
|
|
489
497
|
ndt_set_alloc();
|
|
498
|
+
ndt_decref(t);
|
|
490
499
|
|
|
491
500
|
if (ctx->err != NDT_MemoryError) {
|
|
501
|
+
if (ndt_typedef_find(*c, ctx) == NULL) {
|
|
502
|
+
fprintf(stderr, "test_typedef: FAIL: key should be in map\n");
|
|
503
|
+
fprintf(stderr, "test_typedef: FAIL: input: %s\n", *c);
|
|
504
|
+
ndt_context_del(ctx);
|
|
505
|
+
return -1;
|
|
506
|
+
}
|
|
492
507
|
break;
|
|
493
508
|
}
|
|
494
|
-
|
|
495
|
-
if (ndt_typedef_find(*c, ctx) == NULL) {
|
|
496
|
-
fprintf(stderr, "test_typedef: FAIL: key should be in map\n");
|
|
497
|
-
fprintf(stderr, "test_typedef: FAIL: input: %s\n", *c);
|
|
498
|
-
ndt_context_del(ctx);
|
|
499
|
-
return -1;
|
|
500
|
-
}
|
|
501
509
|
}
|
|
502
510
|
|
|
511
|
+
t = ndt_from_string("10 * 20 * {a : int64, b : ref(float64)}", ctx);
|
|
512
|
+
(void)ndt_typedef(*c, t, NULL, ctx);
|
|
513
|
+
ndt_decref(t);
|
|
514
|
+
|
|
503
515
|
if (ctx->err != NDT_ValueError) {
|
|
504
516
|
fprintf(stderr, "test_typedef: FAIL: no value error after duplicate key\n");
|
|
505
517
|
fprintf(stderr, "test_typedef: FAIL: input: %s\n", *c);
|
|
@@ -521,7 +533,7 @@ test_typedef_error(void)
|
|
|
521
533
|
{
|
|
522
534
|
const char **c;
|
|
523
535
|
ndt_context_t *ctx;
|
|
524
|
-
ndt_t *t;
|
|
536
|
+
const ndt_t *t;
|
|
525
537
|
int count = 0;
|
|
526
538
|
|
|
527
539
|
ctx = ndt_context_new();
|
|
@@ -539,6 +551,7 @@ test_typedef_error(void)
|
|
|
539
551
|
ndt_set_alloc_fail();
|
|
540
552
|
(void)ndt_typedef(*c, t, NULL, ctx);
|
|
541
553
|
ndt_set_alloc();
|
|
554
|
+
ndt_decref(t);
|
|
542
555
|
|
|
543
556
|
if (ctx->err != NDT_MemoryError) {
|
|
544
557
|
break;
|
|
@@ -575,7 +588,7 @@ test_equal(void)
|
|
|
575
588
|
{
|
|
576
589
|
const char **c;
|
|
577
590
|
ndt_context_t *ctx;
|
|
578
|
-
ndt_t *t, *u;
|
|
591
|
+
const ndt_t *t, *u;
|
|
579
592
|
int count = 0;
|
|
580
593
|
|
|
581
594
|
ctx = ndt_context_new();
|
|
@@ -596,29 +609,29 @@ test_equal(void)
|
|
|
596
609
|
|
|
597
610
|
u = ndt_from_string(*(c+1), ctx);
|
|
598
611
|
if (u == NULL) {
|
|
599
|
-
|
|
612
|
+
ndt_decref(t);
|
|
600
613
|
ndt_context_del(ctx);
|
|
601
614
|
fprintf(stderr, "test_equal: FAIL: could not parse \"%s\"\n", *(c+1));
|
|
602
615
|
return -1;
|
|
603
616
|
}
|
|
604
617
|
|
|
605
618
|
if (!ndt_equal(t, t)) {
|
|
606
|
-
|
|
607
|
-
|
|
619
|
+
ndt_decref(t);
|
|
620
|
+
ndt_decref(u);
|
|
608
621
|
ndt_context_del(ctx);
|
|
609
622
|
fprintf(stderr, "test_equal: FAIL: \"%s\" != \"%s\"\n", *c, *c);
|
|
610
623
|
return -1;
|
|
611
624
|
}
|
|
612
625
|
|
|
613
626
|
if (ndt_equal(t, u)) {
|
|
614
|
-
|
|
615
|
-
|
|
627
|
+
ndt_decref(t);
|
|
628
|
+
ndt_decref(u);
|
|
616
629
|
fprintf(stderr, "test_equal: FAIL: \"%s\" == \"%s\"\n", *c, *(c+1));
|
|
617
630
|
return -1;
|
|
618
631
|
}
|
|
619
632
|
|
|
620
|
-
|
|
621
|
-
|
|
633
|
+
ndt_decref(t);
|
|
634
|
+
ndt_decref(u);
|
|
622
635
|
count++;
|
|
623
636
|
}
|
|
624
637
|
|
|
@@ -633,8 +646,8 @@ test_match(void)
|
|
|
633
646
|
{
|
|
634
647
|
const match_testcase_t *t;
|
|
635
648
|
ndt_context_t *ctx;
|
|
636
|
-
ndt_t *p;
|
|
637
|
-
ndt_t *c;
|
|
649
|
+
const ndt_t *p;
|
|
650
|
+
const ndt_t *c;
|
|
638
651
|
int ret, count = 0;
|
|
639
652
|
|
|
640
653
|
ctx = ndt_context_new();
|
|
@@ -653,7 +666,7 @@ test_match(void)
|
|
|
653
666
|
|
|
654
667
|
c = ndt_from_string(t->candidate, ctx);
|
|
655
668
|
if (c == NULL) {
|
|
656
|
-
|
|
669
|
+
ndt_decref(p);
|
|
657
670
|
ndt_context_del(ctx);
|
|
658
671
|
fprintf(stderr, "test_match: FAIL: could not parse \"%s\"\n", t->candidate);
|
|
659
672
|
return -1;
|
|
@@ -671,8 +684,8 @@ test_match(void)
|
|
|
671
684
|
}
|
|
672
685
|
|
|
673
686
|
if (ret != -1) {
|
|
674
|
-
|
|
675
|
-
|
|
687
|
+
ndt_decref(p);
|
|
688
|
+
ndt_decref(c);
|
|
676
689
|
ndt_context_del(ctx);
|
|
677
690
|
fprintf(stderr, "test_match: FAIL: expect ret == -1 after MemoryError\n");
|
|
678
691
|
fprintf(stderr, "test_match: FAIL: \"%s\"\n", t->pattern);
|
|
@@ -681,8 +694,8 @@ test_match(void)
|
|
|
681
694
|
}
|
|
682
695
|
|
|
683
696
|
if (ret != t->expected) {
|
|
684
|
-
|
|
685
|
-
|
|
697
|
+
ndt_decref(p);
|
|
698
|
+
ndt_decref(c);
|
|
686
699
|
ndt_context_del(ctx);
|
|
687
700
|
fprintf(stderr, "test_match: FAIL: expected %s\n", t->expected ? "true" : "false");
|
|
688
701
|
fprintf(stderr, "test_match: FAIL: pattern: \"%s\"\n", t->pattern);
|
|
@@ -690,8 +703,8 @@ test_match(void)
|
|
|
690
703
|
return -1;
|
|
691
704
|
}
|
|
692
705
|
|
|
693
|
-
|
|
694
|
-
|
|
706
|
+
ndt_decref(p);
|
|
707
|
+
ndt_decref(c);
|
|
695
708
|
count++;
|
|
696
709
|
}
|
|
697
710
|
fprintf(stderr, "test_match (%d test cases)\n", count);
|
|
@@ -700,9 +713,104 @@ test_match(void)
|
|
|
700
713
|
return 0;
|
|
701
714
|
}
|
|
702
715
|
|
|
716
|
+
static int
|
|
717
|
+
test_unify(void)
|
|
718
|
+
{
|
|
719
|
+
const unify_testcase_t *t;
|
|
720
|
+
ndt_context_t *ctx;
|
|
721
|
+
const ndt_t *t1;
|
|
722
|
+
const ndt_t *t2;
|
|
723
|
+
const ndt_t *expected;
|
|
724
|
+
const ndt_t *ret;
|
|
725
|
+
int count = 0;
|
|
726
|
+
|
|
727
|
+
ctx = ndt_context_new();
|
|
728
|
+
if (ctx == NULL) {
|
|
729
|
+
fprintf(stderr, "error: out of memory");
|
|
730
|
+
return -1;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
for (t = unify_tests; t->t1 != NULL; t++) {
|
|
734
|
+
t1 = ndt_from_string(t->t1, ctx);
|
|
735
|
+
if (t1 == NULL) {
|
|
736
|
+
fprintf(stderr, "test_unify: FAIL: could not parse t1 \"%s\"\n", t->t1);
|
|
737
|
+
ndt_context_del(ctx);
|
|
738
|
+
return -1;
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
t2 = ndt_from_string(t->t2, ctx);
|
|
742
|
+
if (t2 == NULL) {
|
|
743
|
+
ndt_decref(t1);
|
|
744
|
+
ndt_context_del(ctx);
|
|
745
|
+
fprintf(stderr, "test_unify: FAIL: could not parse t2 \"%s\"\n", t->t2);
|
|
746
|
+
return -1;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
expected = NULL;
|
|
750
|
+
if (t->expected) {
|
|
751
|
+
expected = ndt_from_string(t->expected, ctx);
|
|
752
|
+
if (expected == NULL) {
|
|
753
|
+
ndt_decref(t1);
|
|
754
|
+
ndt_decref(t2);
|
|
755
|
+
ndt_context_del(ctx);
|
|
756
|
+
fprintf(stderr, "test_unify: FAIL: could not parse expected \"%s\"\n", t->expected);
|
|
757
|
+
return -1;
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
for (alloc_fail = 1; alloc_fail < INT_MAX; alloc_fail++) {
|
|
762
|
+
ndt_err_clear(ctx);
|
|
763
|
+
|
|
764
|
+
ndt_set_alloc_fail();
|
|
765
|
+
ret = ndt_unify(t1, t2, ctx);
|
|
766
|
+
ndt_set_alloc();
|
|
767
|
+
|
|
768
|
+
if (ctx->err != NDT_MemoryError) {
|
|
769
|
+
break;
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
if (ret != NULL) {
|
|
773
|
+
ndt_decref(t1);
|
|
774
|
+
ndt_decref(t2);
|
|
775
|
+
ndt_decref(expected);
|
|
776
|
+
ndt_context_del(ctx);
|
|
777
|
+
fprintf(stderr, "test_unify: FAIL: expect ret == NULL after MemoryError\n");
|
|
778
|
+
fprintf(stderr, "test_unify: FAIL: \"%s\"\n", t->t1);
|
|
779
|
+
return -1;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
ndt_decref(t1);
|
|
784
|
+
ndt_decref(t2);
|
|
785
|
+
|
|
786
|
+
if (ret == NULL && expected == NULL) {
|
|
787
|
+
ndt_err_clear(ctx);
|
|
788
|
+
continue;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
if ((ret != NULL && expected != NULL) && ndt_equal(ret, expected)) {
|
|
792
|
+
ndt_decref(ret);
|
|
793
|
+
ndt_decref(expected);
|
|
794
|
+
count++;
|
|
795
|
+
continue;
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
ndt_decref(expected);
|
|
799
|
+
ndt_decref(ret);
|
|
800
|
+
fprintf(stderr, "test_unify: FAIL: expected \"%s\"\n", t->expected);
|
|
801
|
+
fprintf(stderr, "test_unify: FAIL: t1: \"%s\"\n", t->t1);
|
|
802
|
+
fprintf(stderr, "test_unify: FAIL: t2: \"%s\"\n", t->t2);
|
|
803
|
+
return -1;
|
|
804
|
+
}
|
|
805
|
+
fprintf(stderr, "test_unify (%d test cases)\n", count);
|
|
806
|
+
|
|
807
|
+
ndt_context_del(ctx);
|
|
808
|
+
return 0;
|
|
809
|
+
}
|
|
810
|
+
|
|
703
811
|
typedef struct {
|
|
704
812
|
int64_t size;
|
|
705
|
-
ndt_t *types[NDT_MAX_ARGS];
|
|
813
|
+
const ndt_t *types[NDT_MAX_ARGS];
|
|
706
814
|
} type_array_t;
|
|
707
815
|
|
|
708
816
|
static type_array_t
|
|
@@ -726,14 +834,13 @@ types_from_string(const char * const *s, ndt_context_t *ctx)
|
|
|
726
834
|
}
|
|
727
835
|
|
|
728
836
|
static int
|
|
729
|
-
validate_typecheck_test(
|
|
837
|
+
validate_typecheck_test(ndt_apply_spec_t *spec,
|
|
730
838
|
const ndt_t *sig,
|
|
731
|
-
|
|
839
|
+
const typecheck_testcase_t *test,
|
|
732
840
|
int ret,
|
|
733
841
|
ndt_context_t *ctx)
|
|
734
842
|
{
|
|
735
|
-
type_array_t
|
|
736
|
-
type_array_t broadcast;
|
|
843
|
+
type_array_t expected;
|
|
737
844
|
int64_t i;
|
|
738
845
|
|
|
739
846
|
if (!test->success) {
|
|
@@ -741,68 +848,62 @@ validate_typecheck_test(const typecheck_testcase_t *test,
|
|
|
741
848
|
return 0;
|
|
742
849
|
}
|
|
743
850
|
ndt_err_format(ctx, NDT_RuntimeError,
|
|
744
|
-
"test_typecheck:
|
|
745
|
-
|
|
851
|
+
"test_typecheck: %s: expected success=false, got success=true",
|
|
852
|
+
test->loc);
|
|
746
853
|
return -1;
|
|
747
854
|
}
|
|
748
855
|
|
|
749
|
-
|
|
750
|
-
if (
|
|
856
|
+
expected = types_from_string(test->types, ctx);
|
|
857
|
+
if (expected.size < 0) {
|
|
751
858
|
return -1;
|
|
752
859
|
}
|
|
753
860
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
861
|
+
if (spec->outer_dims != test->outer_dims) {
|
|
862
|
+
ndt_err_format(ctx, NDT_RuntimeError,
|
|
863
|
+
"test_typecheck: %s: expected outer_dims=%d, got outer_dims=%d",
|
|
864
|
+
test->loc, test->outer_dims, spec->outer_dims);
|
|
865
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
757
866
|
return -1;
|
|
758
867
|
}
|
|
759
868
|
|
|
760
|
-
if (spec->
|
|
761
|
-
spec->nout != out.size) {
|
|
869
|
+
if (spec->nin != sig->Function.nin || spec->nin != test->nin) {
|
|
762
870
|
ndt_err_format(ctx, NDT_RuntimeError,
|
|
763
|
-
"test_typecheck: expected
|
|
764
|
-
|
|
871
|
+
"test_typecheck: %s: expected nin=%d, got nin=%d",
|
|
872
|
+
test->loc, test->nin, spec->nin);
|
|
873
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
765
874
|
return -1;
|
|
766
875
|
}
|
|
767
876
|
|
|
768
|
-
if (spec->
|
|
877
|
+
if (spec->nout != sig->Function.nout || spec->nout != test->nout) {
|
|
769
878
|
ndt_err_format(ctx, NDT_RuntimeError,
|
|
770
|
-
"test_typecheck: expected
|
|
771
|
-
|
|
879
|
+
"test_typecheck: %s: expected nout=%d, got nout=%d",
|
|
880
|
+
test->loc, test->nout, spec->nout);
|
|
881
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
772
882
|
return -1;
|
|
773
883
|
}
|
|
774
884
|
|
|
775
|
-
if (spec->
|
|
885
|
+
if (spec->nargs != sig->Function.nargs || spec->nargs != test->nargs ||
|
|
886
|
+
spec->nargs != expected.size) {
|
|
776
887
|
ndt_err_format(ctx, NDT_RuntimeError,
|
|
777
|
-
"test_typecheck: expected
|
|
778
|
-
|
|
888
|
+
"test_typecheck: %s: expected nargs=%d, got nargs=%d",
|
|
889
|
+
test->loc, test->nargs, spec->nargs);
|
|
890
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
779
891
|
return -1;
|
|
780
892
|
}
|
|
781
893
|
|
|
782
|
-
for (i = 0; i < spec->
|
|
783
|
-
if (!ndt_equal(spec->
|
|
894
|
+
for (i = 0; i < spec->nargs; i++) {
|
|
895
|
+
if (!ndt_equal(spec->types[i], expected.types[i])) {
|
|
784
896
|
ndt_err_format(ctx, NDT_RuntimeError,
|
|
785
|
-
"test_typecheck:
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
897
|
+
"test_typecheck: %s: expected %s, got %s",
|
|
898
|
+
test->loc,
|
|
899
|
+
ndt_ast_repr(expected.types[i], ctx),
|
|
900
|
+
ndt_ast_repr(spec->types[i], ctx));
|
|
901
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
789
902
|
return -1;
|
|
790
903
|
}
|
|
791
904
|
}
|
|
792
905
|
|
|
793
|
-
|
|
794
|
-
if (!ndt_equal(spec->broadcast[i], broadcast.types[i])) {
|
|
795
|
-
ndt_err_format(ctx, NDT_RuntimeError,
|
|
796
|
-
"test_typecheck: broadcast value %d: expected %s, got %s",
|
|
797
|
-
i, test->broadcast[i], ndt_ast_repr(spec->broadcast[i], ctx));
|
|
798
|
-
ndt_type_array_clear(out.types, out.size);
|
|
799
|
-
ndt_type_array_clear(broadcast.types, broadcast.size);
|
|
800
|
-
return -1;
|
|
801
|
-
}
|
|
802
|
-
}
|
|
803
|
-
|
|
804
|
-
ndt_type_array_clear(out.types, out.size);
|
|
805
|
-
ndt_type_array_clear(broadcast.types, broadcast.size);
|
|
906
|
+
ndt_type_array_clear(expected.types, expected.size);
|
|
806
907
|
|
|
807
908
|
return 0;
|
|
808
909
|
}
|
|
@@ -813,8 +914,11 @@ test_typecheck(void)
|
|
|
813
914
|
NDT_STATIC_CONTEXT(ctx);
|
|
814
915
|
ndt_apply_spec_t spec = ndt_apply_spec_empty;
|
|
815
916
|
const typecheck_testcase_t *test;
|
|
917
|
+
const ndt_t *types[NDT_MAX_DIM] = {NULL};
|
|
918
|
+
const int64_t li[NDT_MAX_DIM] = {0};
|
|
919
|
+
type_array_t args;
|
|
920
|
+
type_array_t kwargs;
|
|
816
921
|
const ndt_t *sig = NULL;
|
|
817
|
-
type_array_t in;
|
|
818
922
|
int count = 0;
|
|
819
923
|
int ret = -1;
|
|
820
924
|
|
|
@@ -826,36 +930,60 @@ test_typecheck(void)
|
|
|
826
930
|
goto error;
|
|
827
931
|
}
|
|
828
932
|
|
|
829
|
-
|
|
830
|
-
if (
|
|
933
|
+
args = types_from_string(test->args, &ctx);
|
|
934
|
+
if (args.size < 0) {
|
|
935
|
+
goto error;
|
|
936
|
+
}
|
|
937
|
+
const int nin = args.size;
|
|
938
|
+
|
|
939
|
+
kwargs = types_from_string(test->kwargs, &ctx);
|
|
940
|
+
if (kwargs.size < 0) {
|
|
831
941
|
goto error;
|
|
832
942
|
}
|
|
943
|
+
const int nout = kwargs.size;
|
|
944
|
+
|
|
945
|
+
for (int i = 0; i < nin; i++) {
|
|
946
|
+
types[i] = args.types[i];
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
for (int i = 0; i < nout; i++) {
|
|
950
|
+
types[nin+i] = kwargs.types[i];
|
|
951
|
+
}
|
|
833
952
|
|
|
834
953
|
for (alloc_fail = 1; alloc_fail < INT_MAX; alloc_fail++) {
|
|
835
954
|
ndt_err_clear(&ctx);
|
|
836
955
|
|
|
837
956
|
ndt_set_alloc_fail();
|
|
838
|
-
ret = ndt_typecheck(&spec, sig,
|
|
957
|
+
ret = ndt_typecheck(&spec, sig, types, li, nin, nout, false, NULL,
|
|
958
|
+
NULL, &ctx);
|
|
839
959
|
ndt_set_alloc();
|
|
840
960
|
|
|
841
961
|
if (ctx.err != NDT_MemoryError) {
|
|
842
962
|
break;
|
|
843
963
|
}
|
|
844
964
|
|
|
845
|
-
|
|
965
|
+
assert(spec.flags == 0);
|
|
966
|
+
assert(spec.outer_dims == 0);
|
|
967
|
+
assert(spec.nin == 0);
|
|
968
|
+
assert(spec.nout == 0);
|
|
969
|
+
assert(spec.nargs == 0);
|
|
970
|
+
|
|
846
971
|
if (ret != -1) {
|
|
847
972
|
ndt_err_format(&ctx, NDT_RuntimeError,
|
|
848
|
-
"test_typecheck:
|
|
849
|
-
|
|
973
|
+
"test_typecheck: %s: nout != -1 after MemoryError\n",
|
|
974
|
+
test->loc);
|
|
850
975
|
goto error;
|
|
851
976
|
}
|
|
852
977
|
}
|
|
853
978
|
|
|
979
|
+
ndt_type_array_clear(args.types, args.size);
|
|
980
|
+
ndt_type_array_clear(kwargs.types, kwargs.size);
|
|
854
981
|
ndt_err_clear(&ctx);
|
|
855
|
-
|
|
856
|
-
|
|
982
|
+
|
|
983
|
+
ret = validate_typecheck_test(&spec, sig, test, ret, &ctx);
|
|
984
|
+
|
|
857
985
|
ndt_apply_spec_clear(&spec);
|
|
858
|
-
|
|
986
|
+
ndt_decref(sig);
|
|
859
987
|
|
|
860
988
|
if (ret < 0) {
|
|
861
989
|
goto error;
|
|
@@ -883,7 +1011,7 @@ test_numba(void)
|
|
|
883
1011
|
{
|
|
884
1012
|
NDT_STATIC_CONTEXT(ctx);
|
|
885
1013
|
const numba_testcase_t *test;
|
|
886
|
-
ndt_t *t;
|
|
1014
|
+
const ndt_t *t;
|
|
887
1015
|
char *sig = NULL;
|
|
888
1016
|
char *core = NULL;
|
|
889
1017
|
int count = 0;
|
|
@@ -909,7 +1037,7 @@ test_numba(void)
|
|
|
909
1037
|
}
|
|
910
1038
|
|
|
911
1039
|
if (ret != -1) {
|
|
912
|
-
|
|
1040
|
+
ndt_decref(t);
|
|
913
1041
|
ndt_err_format(&ctx, NDT_RuntimeError,
|
|
914
1042
|
"test_numba: expect ret == -1 after MemoryError\n"
|
|
915
1043
|
"test_numba: \"%s\"\n", test->signature);
|
|
@@ -918,7 +1046,7 @@ test_numba(void)
|
|
|
918
1046
|
}
|
|
919
1047
|
|
|
920
1048
|
ndt_err_clear(&ctx);
|
|
921
|
-
|
|
1049
|
+
ndt_decref(t);
|
|
922
1050
|
|
|
923
1051
|
if (sig == NULL || strcmp(sig, test->sig) != 0) {
|
|
924
1052
|
ndt_err_format(&ctx, NDT_RuntimeError,
|
|
@@ -958,7 +1086,7 @@ test_static_context(void)
|
|
|
958
1086
|
{
|
|
959
1087
|
const char **c;
|
|
960
1088
|
NDT_STATIC_CONTEXT(ctx);
|
|
961
|
-
ndt_t *t;
|
|
1089
|
+
const ndt_t *t;
|
|
962
1090
|
char *s;
|
|
963
1091
|
int count = 0;
|
|
964
1092
|
|
|
@@ -975,7 +1103,7 @@ test_static_context(void)
|
|
|
975
1103
|
}
|
|
976
1104
|
|
|
977
1105
|
if (t != NULL) {
|
|
978
|
-
|
|
1106
|
+
ndt_decref(t);
|
|
979
1107
|
fprintf(stderr, "test_static_context: FAIL: t != NULL after MemoryError\n");
|
|
980
1108
|
fprintf(stderr, "test_static_context: FAIL: %s\n", *c);
|
|
981
1109
|
return -1;
|
|
@@ -1003,7 +1131,7 @@ test_static_context(void)
|
|
|
1003
1131
|
|
|
1004
1132
|
if (s != NULL) {
|
|
1005
1133
|
ndt_free(s);
|
|
1006
|
-
|
|
1134
|
+
ndt_decref(t);
|
|
1007
1135
|
fprintf(stderr, "test_static_context: FAIL: s != NULL after MemoryError\n");
|
|
1008
1136
|
fprintf(stderr, "test_static_context: FAIL: %s\n", *c);
|
|
1009
1137
|
ndt_context_del(&ctx);
|
|
@@ -1015,13 +1143,13 @@ test_static_context(void)
|
|
|
1015
1143
|
fprintf(stderr, "test_static_context: FAIL: got: %s: %s\n\n",
|
|
1016
1144
|
ndt_err_as_string(ctx.err),
|
|
1017
1145
|
ndt_context_msg(&ctx));
|
|
1018
|
-
|
|
1146
|
+
ndt_decref(t);
|
|
1019
1147
|
ndt_context_del(&ctx);
|
|
1020
1148
|
return -1;
|
|
1021
1149
|
}
|
|
1022
1150
|
|
|
1023
1151
|
ndt_free(s);
|
|
1024
|
-
|
|
1152
|
+
ndt_decref(t);
|
|
1025
1153
|
count++;
|
|
1026
1154
|
}
|
|
1027
1155
|
|
|
@@ -1029,7 +1157,7 @@ test_static_context(void)
|
|
|
1029
1157
|
t = ndt_from_string(s, &ctx);
|
|
1030
1158
|
if (s == NULL) {
|
|
1031
1159
|
fprintf(stderr, "test_static_context: FAIL: expected failure: \"%s\"\n", s);
|
|
1032
|
-
|
|
1160
|
+
ndt_decref(t);
|
|
1033
1161
|
ndt_context_del(&ctx);
|
|
1034
1162
|
return -1;
|
|
1035
1163
|
}
|
|
@@ -1069,7 +1197,7 @@ test_hash(void)
|
|
|
1069
1197
|
hash_testcase_t buf[1000];
|
|
1070
1198
|
ptrdiff_t n = 1;
|
|
1071
1199
|
const char **c;
|
|
1072
|
-
ndt_t *t;
|
|
1200
|
+
const ndt_t *t;
|
|
1073
1201
|
hash_testcase_t x;
|
|
1074
1202
|
int i;
|
|
1075
1203
|
|
|
@@ -1093,7 +1221,7 @@ test_hash(void)
|
|
|
1093
1221
|
|
|
1094
1222
|
x.hash = ndt_hash(t, &ctx);
|
|
1095
1223
|
x.str = *c;
|
|
1096
|
-
|
|
1224
|
+
ndt_decref(t);
|
|
1097
1225
|
|
|
1098
1226
|
if (x.hash == -1) {
|
|
1099
1227
|
fprintf(stderr, "test_hash: FAIL: hash==-1\n\n");
|
|
@@ -1125,7 +1253,7 @@ test_hash(void)
|
|
|
1125
1253
|
x.hash = ndt_hash(t, &ctx);
|
|
1126
1254
|
ndt_set_alloc();
|
|
1127
1255
|
|
|
1128
|
-
|
|
1256
|
+
ndt_decref(t);
|
|
1129
1257
|
|
|
1130
1258
|
if (x.hash != -1 || ctx.err != NDT_MemoryError) {
|
|
1131
1259
|
fprintf(stderr, "test_hash: FAIL: expected failure, got %" PRI_ndt_ssize "\n\n", x.hash);
|
|
@@ -1144,7 +1272,7 @@ test_copy(void)
|
|
|
1144
1272
|
{
|
|
1145
1273
|
NDT_STATIC_CONTEXT(ctx);
|
|
1146
1274
|
const char **c;
|
|
1147
|
-
ndt_t *t, *u;
|
|
1275
|
+
const ndt_t *t, *u;
|
|
1148
1276
|
int count = 0;
|
|
1149
1277
|
|
|
1150
1278
|
for (c = parse_tests; *c != NULL; c++) {
|
|
@@ -1171,8 +1299,8 @@ test_copy(void)
|
|
|
1171
1299
|
|
|
1172
1300
|
if (u != NULL) {
|
|
1173
1301
|
fprintf(stderr, "test_copy: FAIL: unexpected success: \"%s\"\n", *c);
|
|
1174
|
-
|
|
1175
|
-
|
|
1302
|
+
ndt_decref(u);
|
|
1303
|
+
ndt_decref(t);
|
|
1176
1304
|
ndt_context_del(&ctx);
|
|
1177
1305
|
return -1;
|
|
1178
1306
|
}
|
|
@@ -1182,21 +1310,21 @@ test_copy(void)
|
|
|
1182
1310
|
fprintf(stderr, "test_copy: FAIL: got: %s: %s\n\n",
|
|
1183
1311
|
ndt_err_as_string(ctx.err),
|
|
1184
1312
|
ndt_context_msg(&ctx));
|
|
1185
|
-
|
|
1313
|
+
ndt_decref(t);
|
|
1186
1314
|
ndt_context_del(&ctx);
|
|
1187
1315
|
return -1;
|
|
1188
1316
|
}
|
|
1189
1317
|
|
|
1190
1318
|
if (!ndt_equal(t, u)) {
|
|
1191
1319
|
fprintf(stderr, "test_copy: FAIL: copy: not equal\n\n");
|
|
1192
|
-
|
|
1193
|
-
|
|
1320
|
+
ndt_decref(t);
|
|
1321
|
+
ndt_decref(u);
|
|
1194
1322
|
ndt_context_del(&ctx);
|
|
1195
1323
|
return -1;
|
|
1196
1324
|
}
|
|
1197
1325
|
|
|
1198
|
-
|
|
1199
|
-
|
|
1326
|
+
ndt_decref(u);
|
|
1327
|
+
ndt_decref(t);
|
|
1200
1328
|
count++;
|
|
1201
1329
|
}
|
|
1202
1330
|
|
|
@@ -1211,7 +1339,7 @@ test_buffer(void)
|
|
|
1211
1339
|
{
|
|
1212
1340
|
const char **c;
|
|
1213
1341
|
ndt_context_t *ctx;
|
|
1214
|
-
ndt_t *t;
|
|
1342
|
+
const ndt_t *t;
|
|
1215
1343
|
int count = 0;
|
|
1216
1344
|
|
|
1217
1345
|
ctx = ndt_context_new();
|
|
@@ -1233,7 +1361,7 @@ test_buffer(void)
|
|
|
1233
1361
|
}
|
|
1234
1362
|
|
|
1235
1363
|
if (t != NULL) {
|
|
1236
|
-
|
|
1364
|
+
ndt_decref(t);
|
|
1237
1365
|
ndt_context_del(ctx);
|
|
1238
1366
|
fprintf(stderr, "test_buffer: convert: FAIL: t != NULL after MemoryError\n");
|
|
1239
1367
|
fprintf(stderr, "test_buffer: convert: FAIL: %s\n", *c);
|
|
@@ -1249,7 +1377,7 @@ test_buffer(void)
|
|
|
1249
1377
|
return -1;
|
|
1250
1378
|
}
|
|
1251
1379
|
|
|
1252
|
-
|
|
1380
|
+
ndt_decref(t);
|
|
1253
1381
|
count++;
|
|
1254
1382
|
}
|
|
1255
1383
|
fprintf(stderr, "test_buffer (%d test cases)\n", count);
|
|
@@ -1263,7 +1391,7 @@ test_buffer_roundtrip(void)
|
|
|
1263
1391
|
{
|
|
1264
1392
|
const char **c;
|
|
1265
1393
|
ndt_context_t *ctx;
|
|
1266
|
-
ndt_t *t;
|
|
1394
|
+
const ndt_t *t;
|
|
1267
1395
|
char *s;
|
|
1268
1396
|
int count = 0;
|
|
1269
1397
|
int ret;
|
|
@@ -1287,7 +1415,7 @@ test_buffer_roundtrip(void)
|
|
|
1287
1415
|
}
|
|
1288
1416
|
|
|
1289
1417
|
if (t != NULL) {
|
|
1290
|
-
|
|
1418
|
+
ndt_decref(t);
|
|
1291
1419
|
ndt_context_del(ctx);
|
|
1292
1420
|
fprintf(stderr, "test_buffer: convert: FAIL: t != NULL after MemoryError\n");
|
|
1293
1421
|
fprintf(stderr, "test_buffer: convert: FAIL: %s\n", *c);
|
|
@@ -1316,7 +1444,7 @@ test_buffer_roundtrip(void)
|
|
|
1316
1444
|
|
|
1317
1445
|
if (s != NULL) {
|
|
1318
1446
|
ndt_free(s);
|
|
1319
|
-
|
|
1447
|
+
ndt_decref(t);
|
|
1320
1448
|
ndt_context_del(ctx);
|
|
1321
1449
|
fprintf(stderr, "test_buffer_roundtrip: convert: FAIL: s != NULL after MemoryError\n");
|
|
1322
1450
|
fprintf(stderr, "test_buffer_roundtrip: convert: FAIL: %s\n", *c);
|
|
@@ -1328,13 +1456,13 @@ test_buffer_roundtrip(void)
|
|
|
1328
1456
|
fprintf(stderr, "test_buffer_roundtrip: convert: FAIL: got: %s: %s\n\n",
|
|
1329
1457
|
ndt_err_as_string(ctx->err),
|
|
1330
1458
|
ndt_context_msg(ctx));
|
|
1331
|
-
|
|
1459
|
+
ndt_decref(t);
|
|
1332
1460
|
ndt_context_del(ctx);
|
|
1333
1461
|
return -1;
|
|
1334
1462
|
}
|
|
1335
1463
|
|
|
1336
1464
|
ret = strcmp(s, *c);
|
|
1337
|
-
|
|
1465
|
+
ndt_decref(t);
|
|
1338
1466
|
|
|
1339
1467
|
if (ret != 0) {
|
|
1340
1468
|
fprintf(stderr, "test_buffer_roundtrip: convert: FAIL: input: \"%s\" output: \"%s\"\n", *c, s);
|
|
@@ -1357,7 +1485,7 @@ test_buffer_error(void)
|
|
|
1357
1485
|
{
|
|
1358
1486
|
const char **c;
|
|
1359
1487
|
ndt_context_t *ctx;
|
|
1360
|
-
ndt_t *t;
|
|
1488
|
+
const ndt_t *t;
|
|
1361
1489
|
int count = 0;
|
|
1362
1490
|
|
|
1363
1491
|
ctx = ndt_context_new();
|
|
@@ -1379,7 +1507,7 @@ test_buffer_error(void)
|
|
|
1379
1507
|
}
|
|
1380
1508
|
|
|
1381
1509
|
if (t != NULL) {
|
|
1382
|
-
|
|
1510
|
+
ndt_decref(t);
|
|
1383
1511
|
ndt_context_del(ctx);
|
|
1384
1512
|
fprintf(stderr, "test_buffer_error: FAIL: t != NULL after MemoryError\n");
|
|
1385
1513
|
fprintf(stderr, "test_buffer_error: FAIL: input: %s\n", *c);
|
|
@@ -1391,7 +1519,7 @@ test_buffer_error(void)
|
|
|
1391
1519
|
fprintf(stderr, "test_buffer_error: FAIL: t != NULL after %s: %s\n",
|
|
1392
1520
|
ndt_err_as_string(ctx->err),
|
|
1393
1521
|
ndt_context_msg(ctx));
|
|
1394
|
-
|
|
1522
|
+
ndt_decref(t);
|
|
1395
1523
|
ndt_context_del(ctx);
|
|
1396
1524
|
return -1;
|
|
1397
1525
|
}
|
|
@@ -1407,9 +1535,8 @@ static int
|
|
|
1407
1535
|
test_serialize(void)
|
|
1408
1536
|
{
|
|
1409
1537
|
const char **c;
|
|
1410
|
-
ndt_meta_t *m;
|
|
1411
1538
|
ndt_context_t *ctx;
|
|
1412
|
-
ndt_t *t, *u;
|
|
1539
|
+
const ndt_t *t, *u;
|
|
1413
1540
|
int count = 0;
|
|
1414
1541
|
char *bytes;
|
|
1415
1542
|
int64_t len;
|
|
@@ -1421,17 +1548,8 @@ test_serialize(void)
|
|
|
1421
1548
|
}
|
|
1422
1549
|
|
|
1423
1550
|
for (c = parse_tests; *c != NULL; c++) {
|
|
1424
|
-
m = ndt_meta_new(ctx);
|
|
1425
|
-
if (m == NULL) {
|
|
1426
|
-
ndt_context_del(ctx);
|
|
1427
|
-
fprintf(stderr,
|
|
1428
|
-
"test_serialize: FAIL: unexpected failure in meta_new");
|
|
1429
|
-
return -1;
|
|
1430
|
-
}
|
|
1431
|
-
|
|
1432
1551
|
t = ndt_from_string(*c, ctx);
|
|
1433
1552
|
if (t == NULL) {
|
|
1434
|
-
ndt_meta_del(m);
|
|
1435
1553
|
ndt_context_del(ctx);
|
|
1436
1554
|
fprintf(stderr,
|
|
1437
1555
|
"test_serialize: FAIL: unexpected failure in from_string");
|
|
@@ -1451,9 +1569,8 @@ test_serialize(void)
|
|
|
1451
1569
|
}
|
|
1452
1570
|
|
|
1453
1571
|
if (len >= 0 || bytes != NULL) {
|
|
1454
|
-
|
|
1572
|
+
ndt_decref(t);
|
|
1455
1573
|
ndt_free(bytes);
|
|
1456
|
-
ndt_meta_del(m);
|
|
1457
1574
|
ndt_context_del(ctx);
|
|
1458
1575
|
fprintf(stderr, "test_serialize: FAIL: invalid len or bytes after MemoryError\n");
|
|
1459
1576
|
fprintf(stderr, "test_serialize: FAIL: %s\n", *c);
|
|
@@ -1462,9 +1579,8 @@ test_serialize(void)
|
|
|
1462
1579
|
}
|
|
1463
1580
|
|
|
1464
1581
|
if (len < 0 || bytes == NULL) {
|
|
1465
|
-
|
|
1582
|
+
ndt_decref(t);
|
|
1466
1583
|
ndt_free(bytes);
|
|
1467
|
-
ndt_meta_del(m);
|
|
1468
1584
|
ndt_context_del(ctx);
|
|
1469
1585
|
fprintf(stderr, "test_serialize: FAIL: invalid len or bytes (expected success)\n");
|
|
1470
1586
|
fprintf(stderr, "test_serialize: FAIL: %s\n", *c);
|
|
@@ -1475,7 +1591,7 @@ test_serialize(void)
|
|
|
1475
1591
|
ndt_err_clear(ctx);
|
|
1476
1592
|
|
|
1477
1593
|
ndt_set_alloc_fail();
|
|
1478
|
-
u = ndt_deserialize(
|
|
1594
|
+
u = ndt_deserialize(bytes, len, ctx);
|
|
1479
1595
|
ndt_set_alloc();
|
|
1480
1596
|
|
|
1481
1597
|
if (ctx->err != NDT_MemoryError) {
|
|
@@ -1483,10 +1599,9 @@ test_serialize(void)
|
|
|
1483
1599
|
}
|
|
1484
1600
|
|
|
1485
1601
|
if (u != NULL) {
|
|
1486
|
-
|
|
1487
|
-
|
|
1602
|
+
ndt_decref(t);
|
|
1603
|
+
ndt_decref(u);
|
|
1488
1604
|
ndt_free(bytes);
|
|
1489
|
-
ndt_meta_del(m);
|
|
1490
1605
|
ndt_context_del(ctx);
|
|
1491
1606
|
fprintf(stderr, "test_serialize: FAIL: u != NULL after MemoryError\n");
|
|
1492
1607
|
fprintf(stderr, "test_serialize: FAIL: %s\n", *c);
|
|
@@ -1499,9 +1614,8 @@ test_serialize(void)
|
|
|
1499
1614
|
fprintf(stderr, "test_serialize: FAIL: got: %s: %s\n\n",
|
|
1500
1615
|
ndt_err_as_string(ctx->err),
|
|
1501
1616
|
ndt_context_msg(ctx));
|
|
1502
|
-
|
|
1617
|
+
ndt_decref(t);
|
|
1503
1618
|
ndt_free(bytes);
|
|
1504
|
-
ndt_meta_del(m);
|
|
1505
1619
|
ndt_context_del(ctx);
|
|
1506
1620
|
return -1;
|
|
1507
1621
|
}
|
|
@@ -1510,17 +1624,15 @@ test_serialize(void)
|
|
|
1510
1624
|
|
|
1511
1625
|
if (!ndt_equal(u, t)) {
|
|
1512
1626
|
fprintf(stderr, "test_serialize: FAIL: u != v in %s\n", *c);
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
ndt_meta_del(m);
|
|
1627
|
+
ndt_decref(t);
|
|
1628
|
+
ndt_decref(u);
|
|
1516
1629
|
ndt_context_del(ctx);
|
|
1517
1630
|
return -1;
|
|
1518
1631
|
}
|
|
1519
1632
|
|
|
1520
|
-
|
|
1521
|
-
|
|
1633
|
+
ndt_decref(t);
|
|
1634
|
+
ndt_decref(u);
|
|
1522
1635
|
|
|
1523
|
-
ndt_meta_del(m);
|
|
1524
1636
|
count++;
|
|
1525
1637
|
}
|
|
1526
1638
|
fprintf(stderr, "test_serialize (%d test cases)\n", count);
|
|
@@ -1534,7 +1646,6 @@ static int
|
|
|
1534
1646
|
test_serialize_fuzz(void)
|
|
1535
1647
|
{
|
|
1536
1648
|
ndt_context_t *ctx;
|
|
1537
|
-
ndt_meta_t *m;
|
|
1538
1649
|
char *buf;
|
|
1539
1650
|
ssize_t ret, n;
|
|
1540
1651
|
int src;
|
|
@@ -1572,23 +1683,13 @@ test_serialize_fuzz(void)
|
|
|
1572
1683
|
return -1;
|
|
1573
1684
|
}
|
|
1574
1685
|
|
|
1575
|
-
m = ndt_meta_new(ctx);
|
|
1576
|
-
if (m == NULL) {
|
|
1577
|
-
ndt_free(buf);
|
|
1578
|
-
close(src);
|
|
1579
|
-
ndt_context_del(ctx);
|
|
1580
|
-
fprintf(stderr, "\nmalloc error in fuzz tests\n");
|
|
1581
|
-
return -1;
|
|
1582
|
-
}
|
|
1583
|
-
|
|
1584
1686
|
ndt_err_clear(ctx);
|
|
1585
|
-
ndt_t *t = ndt_deserialize(
|
|
1687
|
+
const ndt_t *t = ndt_deserialize(buf, n, ctx);
|
|
1586
1688
|
if (t != NULL) {
|
|
1587
|
-
|
|
1689
|
+
ndt_decref(t);
|
|
1588
1690
|
}
|
|
1589
1691
|
|
|
1590
1692
|
ndt_free(buf);
|
|
1591
|
-
ndt_meta_del(m);
|
|
1592
1693
|
}
|
|
1593
1694
|
fprintf(stderr, "test_serialize_fuzz (%" PRIi64 " test cases)\n", i);
|
|
1594
1695
|
|
|
@@ -1608,6 +1709,7 @@ static int (*tests[])(void) = {
|
|
|
1608
1709
|
test_typedef_error,
|
|
1609
1710
|
test_equal,
|
|
1610
1711
|
test_match,
|
|
1712
|
+
test_unify,
|
|
1611
1713
|
test_typecheck,
|
|
1612
1714
|
test_numba,
|
|
1613
1715
|
test_static_context,
|