comparison src/tests.c @ 4747:294a86d29f99

Eliminate C asserts from c-tests.
author Stephen J. Turnbull <stephen@xemacs.org>
date Mon, 16 Nov 2009 12:00:38 +0900
parents 4d0f773d5e21
children b8afe0f9cbe3
comparison
equal deleted inserted replaced
4746:ae862598ee56 4747:294a86d29f99
36 #include "file-coding.h" /* XCODING_SYSTEM_EOL_TYPE and its values */ 36 #include "file-coding.h" /* XCODING_SYSTEM_EOL_TYPE and its values */
37 37
38 static Lisp_Object Vtest_function_list; 38 static Lisp_Object Vtest_function_list;
39 39
40 DEFUN ("test-data-format-conversion", Ftest_data_format_conversion, 0, 0, "", /* 40 DEFUN ("test-data-format-conversion", Ftest_data_format_conversion, 0, 0, "", /*
41 Test TO_EXTERNAL_FORMAT() and TO_INTERNAL_FORMAT() 41 Return list of results of test TO_EXTERNAL_FORMAT() and TO_INTERNAL_FORMAT().
42 For use by the automated test suite. See tests/automated/c-tests.
43
44 Each element is a list (DESCRIPTION, STATUS, REASON).
45 DESCRIPTION is a string describing the test.
46 STATUS is a symbol, either t (pass) or nil (fail).
47 REASON is nil or a string describing the failure (not required).
42 */ 48 */
43 ()) 49 ())
44 { 50 {
45 void *ptr; Bytecount len; 51 void *ptr; Bytecount len;
46 Lisp_Object string, opaque; 52 Lisp_Object string, opaque, conversion_result = Qnil;
47 53
48 Ibyte int_foo[] = "\n\nfoo\nbar"; 54 Ibyte int_foo[] = "\n\nfoo\nbar";
49 Extbyte ext_unix[]= "\n\nfoo\nbar"; 55 Extbyte ext_unix[]= "\n\nfoo\nbar";
50 56
51 Extbyte ext_dos[] = "\r\n\r\nfoo\r\nbar"; 57 Extbyte ext_dos[] = "\r\n\r\nfoo\r\nbar";
73 /* #### Any code below that uses iso-latin-2-with-esc is ill-conceived. */ 79 /* #### Any code below that uses iso-latin-2-with-esc is ill-conceived. */
74 80
75 #ifdef MULE 81 #ifdef MULE
76 #define DFC_CHECK_DATA_COND_MULE(ptr,len, \ 82 #define DFC_CHECK_DATA_COND_MULE(ptr,len, \
77 constant_string_mule, \ 83 constant_string_mule, \
78 constant_string_non_mule) \ 84 constant_string_non_mule, \
79 DFC_CHECK_DATA (ptr, len, constant_string_mule) 85 description) \
86 DFC_CHECK_DATA (ptr, len, constant_string_mule, description)
80 #define DFC_CHECK_DATA_COND_MULE_NUL(ptr,len, \ 87 #define DFC_CHECK_DATA_COND_MULE_NUL(ptr,len, \
81 constant_string_mule, \ 88 constant_string_mule, \
82 constant_string_non_mule) \ 89 constant_string_non_mule, \
83 DFC_CHECK_DATA_NUL (ptr, len, constant_string_mule) 90 description) \
91 DFC_CHECK_DATA_NUL (ptr, len, constant_string_mule, description)
84 #else 92 #else
85 #define DFC_CHECK_DATA_COND_MULE(ptr,len, \ 93 #define DFC_CHECK_DATA_COND_MULE(ptr,len, \
86 constant_string_mule, \ 94 constant_string_mule, \
87 constant_string_non_mule) \ 95 constant_string_non_mule, \
88 DFC_CHECK_DATA (ptr, len, constant_string_non_mule) 96 description) \
97 DFC_CHECK_DATA (ptr, len, constant_string_non_mule, description)
89 #define DFC_CHECK_DATA_COND_MULE_NUL(ptr,len, \ 98 #define DFC_CHECK_DATA_COND_MULE_NUL(ptr,len, \
90 constant_string_mule, \ 99 constant_string_mule, \
91 constant_string_non_mule) \ 100 constant_string_non_mule, \
92 DFC_CHECK_DATA_NUL (ptr, len, constant_string_non_mule) 101 description) \
102 DFC_CHECK_DATA_NUL (ptr, len, constant_string_non_mule, description)
93 #endif 103 #endif
94 104
95 /* These now only apply to base coding systems, and 105 /* These now only apply to base coding systems, and
96 need to test `eol-detection-enabled-p' at runtime. */ 106 need to test `eol-detection-enabled-p' at runtime. */
97 #define DFC_CHECK_DATA_COND_EOL(ptr,len, \ 107 #define DFC_CHECK_DATA_COND_EOL(ptr,len, \
98 constant_string_eol, \ 108 constant_string_eol, \
99 constant_string_non_eol) do { \ 109 constant_string_non_eol, \
100 if (autodetect_eol_p) \ 110 description) do { \
101 DFC_CHECK_DATA (ptr, len, constant_string_eol); \ 111 if (autodetect_eol_p) \
102 else \ 112 DFC_CHECK_DATA (ptr, len, constant_string_eol, description); \
103 DFC_CHECK_DATA (ptr, len, constant_string_non_eol); \ 113 else \
114 DFC_CHECK_DATA (ptr, len, constant_string_non_eol, description); \
104 } while (0) 115 } while (0)
105 #define DFC_CHECK_DATA_COND_EOL_NUL(ptr,len, \ 116 #define DFC_CHECK_DATA_COND_EOL_NUL(ptr,len, \
106 constant_string_eol, \ 117 constant_string_eol, \
107 constant_string_non_eol) do { \ 118 constant_string_non_eol, \
108 if (autodetect_eol_p) \ 119 description) do { \
109 DFC_CHECK_DATA_NUL (ptr, len, constant_string_eol); \ 120 if (autodetect_eol_p) \
110 else \ 121 DFC_CHECK_DATA_NUL (ptr, len, constant_string_eol, description); \
111 DFC_CHECK_DATA_NUL (ptr, len, constant_string_non_eol); \ 122 else \
123 DFC_CHECK_DATA_NUL (ptr, len, constant_string_non_eol, description); \
112 } while (0) 124 } while (0)
113 125
114 /* Check for expected strings before and after conversion. */ 126 /* Check for expected strings before and after conversion. */
115 #define DFC_CHECK_DATA(ptr,len, constant_string) do { \ 127 #define DFC_CHECK_DATA(ptr,len,constant_string,test) do { \
116 assert ((len) == sizeof (constant_string) - 1); \ 128 DFC_INITIALIZE (test); \
117 assert (!memcmp (ptr, constant_string, len)); \ 129 DFC_CHECK_LENGTH (len, sizeof (constant_string) - 1, test); \
130 DFC_CHECK_CONTENT (ptr, constant_string, len, test); \
131 DFC_RESULT_PASS (test); \
118 } while (0) 132 } while (0)
119 133
120 /* Macro version that includes the trailing NULL byte. */ 134 /* Macro version that includes the trailing NULL byte. */
121 #define DFC_CHECK_DATA_NUL(ptr,len,constant_string) do {\ 135 #define DFC_CHECK_DATA_NUL(ptr,len,constant_string,test) do { \
122 assert ((len) == sizeof (constant_string)); \ 136 DFC_INITIALIZE (test); \
123 assert (!memcmp (ptr, constant_string, len)); \ 137 DFC_CHECK_LENGTH (len, sizeof (constant_string), test); \
138 DFC_CHECK_CONTENT (ptr, constant_string, len, test); \
139 DFC_RESULT_PASS (test); \
124 } while (0) 140 } while (0)
125 141
142 /* WARNING WARNING WARNING!
143 The following macros are NOT protected by "do { ... } while (0)"!!
144 */
145
146 #define DFC_INITIALIZE(test_name) if (0)
147
148 #define DFC_CHECK_LENGTH(len1,len2,str1) \
149 else if ((len1) != (len2)) \
150 conversion_result = \
151 Fcons (list3 (build_string(str1), Qnil, build_string("wrong length")), \
152 conversion_result)
153
154 #define DFC_CHECK_CONTENT(str1,str2,len1,str3) \
155 else if (memcmp (str1, str2, len1)) \
156 conversion_result = \
157 Fcons (list3 (build_string(str3), Qnil, \
158 build_string("octet comparison failed")), \
159 conversion_result)
160
161 #define DFC_RESULT_PASS(str1) \
162 else \
163 conversion_result = \
164 Fcons (list3 (build_string(str1), Qt, Qnil), \
165 conversion_result)
166
126 #ifdef MULE 167 #ifdef MULE
127 ptr = NULL, len = rand(); 168 ptr = NULL, len = rand();
128 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)), 169 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)),
129 ALLOCA, (ptr, len), 170 ALLOCA, (ptr, len),
130 intern ("iso-8859-2")); 171 intern ("iso-8859-2"));
131 DFC_CHECK_DATA_NUL (ptr, len, ext_latin); 172 DFC_CHECK_DATA_NUL (ptr, len, ext_latin,
173 "Latin-2 DATA, ALLOCA, Latin 2/NUL");
132 174
133 ptr = NULL, len = rand(); 175 ptr = NULL, len = rand();
134 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin2, 176 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin2,
135 ALLOCA, (ptr, len), 177 ALLOCA, (ptr, len),
136 intern ("iso-8859-2")); 178 intern ("iso-8859-2"));
137 DFC_CHECK_DATA (ptr, len, ext_latin); 179 DFC_CHECK_DATA (ptr, len, ext_latin,
180 "Latin-2 Lisp string, ALLOCA, Latin 2");
138 181
139 ptr = NULL, len = rand(); 182 ptr = NULL, len = rand();
140 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1, 183 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1,
141 ALLOCA, (ptr, len), 184 ALLOCA, (ptr, len),
142 intern ("iso-latin-2-with-esc")); 185 intern ("iso-latin-2-with-esc"));
143 DFC_CHECK_DATA (ptr, len, ext_latin12); 186 DFC_CHECK_DATA (ptr, len, ext_latin12,
187 "Latin-1 Lisp string, ALLOCA, Latin 2/ESC");
144 188
145 ptr = NULL, len = rand(); 189 ptr = NULL, len = rand();
146 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1), 190 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1),
147 MALLOC, (ptr, len), 191 MALLOC, (ptr, len),
148 intern ("iso-8859-2")); 192 intern ("iso-8859-2"));
149 DFC_CHECK_DATA (ptr, len, ext_latin); 193 DFC_CHECK_DATA (ptr, len, ext_latin, "Latin-2 DATA, MALLOC, Latin-2");
150 xfree (ptr, void *); 194 xfree (ptr, void *);
151 195
152 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1), 196 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1),
153 LISP_OPAQUE, opaque, 197 LISP_OPAQUE, opaque,
154 intern ("iso-8859-2")); 198 intern ("iso-8859-2"));
155 DFC_CHECK_DATA (XOPAQUE_DATA (opaque), XOPAQUE_SIZE (opaque), ext_latin); 199 DFC_CHECK_DATA (XOPAQUE_DATA (opaque), XOPAQUE_SIZE (opaque), ext_latin,
200 "Latin-2 DATA, Lisp opaque, Latin-2");
156 201
157 ptr = NULL, len = rand(); 202 ptr = NULL, len = rand();
158 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1), 203 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1),
159 ALLOCA, (ptr, len), 204 ALLOCA, (ptr, len),
160 intern ("iso-latin-2-with-esc")); 205 intern ("iso-latin-2-with-esc"));
161 DFC_CHECK_DATA (ptr, len, int_latin2); 206 DFC_CHECK_DATA (ptr, len, int_latin2,
207 "Latin-2/ESC, ALLOCA, Latin-1 DATA");
162 208
163 ptr = NULL, len = rand(); 209 ptr = NULL, len = rand();
164 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1), 210 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1),
165 MALLOC, (ptr, len), 211 MALLOC, (ptr, len),
166 intern ("iso-latin-2-with-esc")); 212 intern ("iso-latin-2-with-esc"));
167 DFC_CHECK_DATA (ptr, len, int_latin2); 213 DFC_CHECK_DATA (ptr, len, int_latin2,
214 "Latin-2/ESC, MALLOC, Latin-1 DATA");
168 xfree (ptr, void *); 215 xfree (ptr, void *);
169 216
170 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1), 217 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1),
171 LISP_STRING, string, 218 LISP_STRING, string,
172 intern ("iso-latin-2-with-esc")); 219 intern ("iso-latin-2-with-esc"));
173 DFC_CHECK_DATA (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2); 220 DFC_CHECK_DATA (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2,
221 "Latin-2/ESC, Lisp string, Latin-2");
174 222
175 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin, 223 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin,
176 LISP_STRING, string, 224 LISP_STRING, string,
177 intern ("iso-latin-2-with-esc")); 225 intern ("iso-latin-2-with-esc"));
178 DFC_CHECK_DATA (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2); 226 DFC_CHECK_DATA (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2,
227 "Lisp opaque, Lisp string, Latin-2/ESC");
179 228
180 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin, 229 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin,
181 LISP_STRING, string, 230 LISP_STRING, string,
182 intern ("iso-latin-2-with-esc")); 231 intern ("iso-latin-2-with-esc"));
183 DFC_CHECK_DATA_NUL (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2); 232 DFC_CHECK_DATA_NUL (XSTRING_DATA (string), XSTRING_LENGTH (string), int_latin2,
233 "Lisp opaque, Lisp string, Latin-2/ESC/NUL");
184 234
185 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin, 235 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin,
186 LISP_BUFFER, Fcurrent_buffer(), 236 LISP_BUFFER, Fcurrent_buffer(),
187 intern ("iso-latin-2-with-esc")); 237 intern ("iso-latin-2-with-esc"));
188 DFC_CHECK_DATA_NUL (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)), 238 DFC_CHECK_DATA_NUL (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)),
189 sizeof (int_latin2), int_latin2); 239 sizeof (int_latin2), int_latin2,
240 "Lisp opaque, Lisp buffer, Latin-2/ESC/NUL");
190 241
191 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin, 242 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin,
192 LISP_BUFFER, Fcurrent_buffer(), 243 LISP_BUFFER, Fcurrent_buffer(),
193 intern ("iso-8859-1")); 244 intern ("iso-8859-1"));
194 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)), 245 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)),
195 sizeof (int_latin1) - 1, int_latin1); 246 sizeof (int_latin1) - 1, int_latin1,
247 "Lisp opaque, Lisp buffer, Latin-1");
196 248
197 TO_INTERNAL_FORMAT (DATA, (ext_latin12, sizeof (ext_latin12) - 1), 249 TO_INTERNAL_FORMAT (DATA, (ext_latin12, sizeof (ext_latin12) - 1),
198 ALLOCA, (ptr, len), 250 ALLOCA, (ptr, len),
199 intern ("iso-latin-2-with-esc")); 251 intern ("iso-latin-2-with-esc"));
200 DFC_CHECK_DATA (ptr, len, int_latin1); 252 DFC_CHECK_DATA (ptr, len, int_latin1, "DATA, ALLOCA, Latin-1");
201 253
202 #endif /* MULE */ 254 #endif /* MULE */
203 255
204 ptr = NULL, len = rand(); 256 ptr = NULL, len = rand();
205 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 257 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
206 ALLOCA, (ptr, len), 258 ALLOCA, (ptr, len),
207 Qbinary); 259 Qbinary);
208 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 260 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
261 "Latin-1 DATA, ALLOCA, binary");
209 262
210 ptr = NULL, len = rand(); 263 ptr = NULL, len = rand();
211 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1)), 264 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1)),
212 ALLOCA, (ptr, len), 265 ALLOCA, (ptr, len),
213 Qbinary); 266 Qbinary);
214 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, ext_latin, int_latin1); 267 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, ext_latin, int_latin1,
268 "Latin-1 DATA, ALLOCA, binary/NUL");
215 269
216 ptr = NULL, len = rand(); 270 ptr = NULL, len = rand();
217 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1), 271 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2) - 1),
218 ALLOCA, (ptr, len), 272 ALLOCA, (ptr, len),
219 Qbinary); 273 Qbinary);
220 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_tilde, int_latin2); 274 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_tilde, int_latin2,
275 "Latin-2 DATA, ALLOCA, binary");
221 276
222 ptr = NULL, len = rand(); 277 ptr = NULL, len = rand();
223 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 278 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
224 ALLOCA, (ptr, len), 279 ALLOCA, (ptr, len),
225 intern ("iso-8859-1")); 280 intern ("iso-8859-1"));
226 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 281 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
282 "Latin-1 DATA, ALLOCA, Latin-1");
227 283
228 284
229 ptr = NULL, len = rand(); 285 ptr = NULL, len = rand();
230 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1, 286 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1,
231 ALLOCA, (ptr, len), 287 ALLOCA, (ptr, len),
232 Qbinary); 288 Qbinary);
233 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 289 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
290 "Latin-1 Lisp string, ALLOCA, binary");
234 291
235 ptr = NULL, len = rand(); 292 ptr = NULL, len = rand();
236 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1, 293 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1,
237 ALLOCA, (ptr, len), 294 ALLOCA, (ptr, len),
238 Qbinary); 295 Qbinary);
239 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 296 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
297 "Latin-1 Lisp string, ALLOCA, binary");
240 298
241 ptr = NULL, len = rand(); 299 ptr = NULL, len = rand();
242 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1, 300 TO_EXTERNAL_FORMAT (LISP_STRING, string_latin1,
243 ALLOCA, (ptr, len), 301 ALLOCA, (ptr, len),
244 intern ("iso-8859-1")); 302 intern ("iso-8859-1"));
245 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 303 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
304 "Latin-1 Lisp string, ALLOCA, Latin-1");
246 305
247 ptr = NULL, len = rand(); 306 ptr = NULL, len = rand();
248 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 307 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
249 MALLOC, (ptr, len), 308 MALLOC, (ptr, len),
250 Qbinary); 309 Qbinary);
251 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 310 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
311 "Latin-1 DATA, MALLOC, binary");
252 xfree (ptr, void *); 312 xfree (ptr, void *);
253 313
254 ptr = NULL, len = rand(); 314 ptr = NULL, len = rand();
255 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)), 315 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)),
256 MALLOC, (ptr, len), 316 MALLOC, (ptr, len),
257 Qbinary); 317 Qbinary);
258 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, ext_tilde, int_latin2); 318 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, ext_tilde, int_latin2,
319 "Latin-2 DATA, MALLOC, binary/NUL");
259 xfree (ptr, void *); 320 xfree (ptr, void *);
260 321
261 ptr = NULL, len = rand(); 322 ptr = NULL, len = rand();
262 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 323 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
263 MALLOC, (ptr, len), 324 MALLOC, (ptr, len),
264 intern ("iso-8859-1")); 325 intern ("iso-8859-1"));
265 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1); 326 DFC_CHECK_DATA_COND_MULE (ptr, len, ext_latin, int_latin1,
327 "Latin-1 DATA, MALLOC, Latin-1");
266 xfree (ptr, void *); 328 xfree (ptr, void *);
267 329
268 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 330 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
269 LISP_OPAQUE, opaque, 331 LISP_OPAQUE, opaque,
270 Qbinary); 332 Qbinary);
271 DFC_CHECK_DATA_COND_MULE (XOPAQUE_DATA (opaque), 333 DFC_CHECK_DATA_COND_MULE (XOPAQUE_DATA (opaque),
272 XOPAQUE_SIZE (opaque), ext_latin, int_latin1); 334 XOPAQUE_SIZE (opaque), ext_latin, int_latin1,
335 "Latin-1 DATA, Lisp opaque, binary");
273 336
274 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)), 337 TO_EXTERNAL_FORMAT (DATA, (int_latin2, sizeof (int_latin2)),
275 LISP_OPAQUE, opaque, 338 LISP_OPAQUE, opaque,
276 Qbinary); 339 Qbinary);
277 DFC_CHECK_DATA_COND_MULE_NUL (XOPAQUE_DATA (opaque), 340 DFC_CHECK_DATA_COND_MULE_NUL (XOPAQUE_DATA (opaque),
278 XOPAQUE_SIZE (opaque), ext_tilde, int_latin2); 341 XOPAQUE_SIZE (opaque), ext_tilde, int_latin2,
342 "Latin-2 DATA, Lisp opaque, binary");
279 343
280 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1), 344 TO_EXTERNAL_FORMAT (DATA, (int_latin1, sizeof (int_latin1) - 1),
281 LISP_OPAQUE, opaque, 345 LISP_OPAQUE, opaque,
282 intern ("iso-8859-1")); 346 intern ("iso-8859-1"));
283 DFC_CHECK_DATA_COND_MULE (XOPAQUE_DATA (opaque), 347 DFC_CHECK_DATA_COND_MULE (XOPAQUE_DATA (opaque),
284 XOPAQUE_SIZE (opaque), ext_latin, int_latin1); 348 XOPAQUE_SIZE (opaque), ext_latin, int_latin1,
349 "Latin-1 DATA, Lisp opaque, Latin-1");
285 350
286 ptr = NULL, len = rand(); 351 ptr = NULL, len = rand();
287 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1), 352 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1),
288 ALLOCA, (ptr, len), 353 ALLOCA, (ptr, len),
289 Qbinary); 354 Qbinary);
290 DFC_CHECK_DATA_COND_MULE (ptr, len, int_latin1, ext_latin); 355 DFC_CHECK_DATA_COND_MULE (ptr, len, int_latin1, ext_latin,
356 "Latin-1 DATA, ALLOCA, binary");
291 357
292 ptr = NULL, len = rand(); 358 ptr = NULL, len = rand();
293 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)), 359 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)),
294 ALLOCA, (ptr, len), 360 ALLOCA, (ptr, len),
295 intern ("iso-8859-1")); 361 intern ("iso-8859-1"));
296 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin); 362 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin,
363 "Latin-1 DATA, ALLOCA, Latin-1");
297 364
298 ptr = NULL, len = rand(); 365 ptr = NULL, len = rand();
299 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)), 366 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)),
300 MALLOC, (ptr, len), 367 MALLOC, (ptr, len),
301 intern ("iso-8859-1")); 368 intern ("iso-8859-1"));
302 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin); 369 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin,
370 "Latin-1 DATA, MALLOC, Latin-1");
303 xfree (ptr, void *); 371 xfree (ptr, void *);
304 372
305 ptr = NULL, len = rand(); 373 ptr = NULL, len = rand();
306 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)), 374 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin)),
307 MALLOC, (ptr, len), 375 MALLOC, (ptr, len),
308 Qnil); 376 Qnil);
309 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin); 377 DFC_CHECK_DATA_COND_MULE_NUL (ptr, len, int_latin1, ext_latin,
378 "Latin-1 DATA, MALLOC, nil");
310 xfree (ptr, void *); 379 xfree (ptr, void *);
311 380
312 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1), 381 TO_INTERNAL_FORMAT (DATA, (ext_latin, sizeof (ext_latin) - 1),
313 LISP_STRING, string, 382 LISP_STRING, string,
314 intern ("iso-8859-1")); 383 intern ("iso-8859-1"));
315 DFC_CHECK_DATA_COND_MULE (XSTRING_DATA (string), 384 DFC_CHECK_DATA_COND_MULE (XSTRING_DATA (string),
316 XSTRING_LENGTH (string), int_latin1, ext_latin); 385 XSTRING_LENGTH (string), int_latin1, ext_latin,
386 "Latin-1 DATA, Lisp stirng, Latin-1");
317 387
318 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin, 388 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_latin,
319 LISP_STRING, string, 389 LISP_STRING, string,
320 intern ("iso-8859-1")); 390 intern ("iso-8859-1"));
321 DFC_CHECK_DATA_COND_MULE (XSTRING_DATA (string), 391 DFC_CHECK_DATA_COND_MULE (XSTRING_DATA (string),
322 XSTRING_LENGTH (string), int_latin1, ext_latin); 392 XSTRING_LENGTH (string), int_latin1, ext_latin,
393 "Latin-1 Lisp opaque, Lisp string, Latin-1");
323 394
324 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin, 395 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque0_latin,
325 LISP_STRING, string, 396 LISP_STRING, string,
326 intern ("iso-8859-1")); 397 intern ("iso-8859-1"));
327 DFC_CHECK_DATA_COND_MULE_NUL (XSTRING_DATA (string), 398 DFC_CHECK_DATA_COND_MULE_NUL (XSTRING_DATA (string),
328 XSTRING_LENGTH (string), int_latin1, ext_latin); 399 XSTRING_LENGTH (string), int_latin1, ext_latin,
400 "Latin-1 Lisp opaque, Lisp string, Latin-1/NUL");
329 401
330 /* This next group used to use the COND_EOL macros, but with the new Mule, 402 /* This next group used to use the COND_EOL macros, but with the new Mule,
331 they all specify an EOL convention, and all XEmacsen can grok them. */ 403 they all specify an EOL convention, and all XEmacsen can grok them. */
332 ptr = NULL, len = rand(); 404 ptr = NULL, len = rand();
333 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo)), 405 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo)),
334 MALLOC, (ptr, len), 406 MALLOC, (ptr, len),
335 Qbinary); 407 Qbinary);
336 DFC_CHECK_DATA_NUL (ptr, len, ext_unix); 408 DFC_CHECK_DATA_NUL (ptr, len, ext_unix,
409 "ASCII DATA, MALLOC, binary/LF/NUL");
337 xfree (ptr, void *); 410 xfree (ptr, void *);
338 411
339 ptr = NULL, len = rand(); 412 ptr = NULL, len = rand();
340 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1), 413 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1),
341 LISP_OPAQUE, opaque, 414 LISP_OPAQUE, opaque,
342 intern ("raw-text-mac")); 415 intern ("raw-text-mac"));
343 DFC_CHECK_DATA (XOPAQUE_DATA (opaque), XOPAQUE_SIZE (opaque), ext_mac); 416 DFC_CHECK_DATA (XOPAQUE_DATA (opaque), XOPAQUE_SIZE (opaque), ext_mac,
417 "ASCII DATA, Lisp opaque, binary/CR");
344 418
345 ptr = NULL, len = rand(); 419 ptr = NULL, len = rand();
346 TO_EXTERNAL_FORMAT (LISP_STRING, string_foo, 420 TO_EXTERNAL_FORMAT (LISP_STRING, string_foo,
347 ALLOCA, (ptr, len), 421 ALLOCA, (ptr, len),
348 intern ("raw-text-dos")); 422 intern ("raw-text-dos"));
349 DFC_CHECK_DATA (ptr, len, ext_dos); 423 DFC_CHECK_DATA (ptr, len, ext_dos, "ASCII Lisp string, ALLOCA, binary/CRLF");
350 424
351 ptr = NULL, len = rand(); 425 ptr = NULL, len = rand();
352 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1), 426 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1),
353 ALLOCA, (ptr, len), 427 ALLOCA, (ptr, len),
354 intern ("raw-text-unix")); 428 intern ("raw-text-unix"));
355 DFC_CHECK_DATA (ptr, len, ext_unix); 429 DFC_CHECK_DATA (ptr, len, ext_unix, "ASCII DATA, ALLOCA, binary/LF");
356 430
357 ptr = NULL, len = rand(); 431 ptr = NULL, len = rand();
358 TO_EXTERNAL_FORMAT (LISP_STRING, string_foo, 432 TO_EXTERNAL_FORMAT (LISP_STRING, string_foo,
359 MALLOC, (ptr, len), 433 MALLOC, (ptr, len),
360 intern ("no-conversion-mac")); 434 intern ("no-conversion-mac"));
361 DFC_CHECK_DATA (ptr, len, ext_mac); 435 DFC_CHECK_DATA (ptr, len, ext_mac, "ASCII Lisp string, MALLOC, binary/CR");
362 xfree (ptr, void *); 436 xfree (ptr, void *);
363 437
364 ptr = NULL, len = rand(); 438 ptr = NULL, len = rand();
365 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1), 439 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo) - 1),
366 ALLOCA, (ptr, len), 440 ALLOCA, (ptr, len),
367 intern ("no-conversion-dos")); 441 intern ("no-conversion-dos"));
368 DFC_CHECK_DATA (ptr, len, ext_dos); 442 DFC_CHECK_DATA (ptr, len, ext_dos, "ASCII DATA, ALLOCA, binary/CRLF");
369 443
370 ptr = NULL, len = rand(); 444 ptr = NULL, len = rand();
371 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo)), 445 TO_EXTERNAL_FORMAT (DATA, (int_foo, sizeof (int_foo)),
372 ALLOCA, (ptr, len), 446 ALLOCA, (ptr, len),
373 intern ("no-conversion-unix")); 447 intern ("no-conversion-unix"));
374 DFC_CHECK_DATA_NUL (ptr, len, ext_unix); 448 DFC_CHECK_DATA_NUL (ptr, len, ext_unix, "ASCII DATA, ALLOCA, binary/LF/NUL");
375 449
376 /* Oh, Lawdy, Lawdy, Lawdy, this done broke mah heart! 450 /* Oh, Lawdy, Lawdy, Lawdy, this done broke mah heart!
377 451
378 I tried using the technique 452 I tried using the technique
379 453
399 Lisp_Object cs_to_use = Fget_coding_system (intern ("undecided-unix")); 473 Lisp_Object cs_to_use = Fget_coding_system (intern ("undecided-unix"));
400 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_dos, 474 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_dos,
401 LISP_BUFFER, Fcurrent_buffer(), 475 LISP_BUFFER, Fcurrent_buffer(),
402 cs_to_use); 476 cs_to_use);
403 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)), 477 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)),
404 sizeof (ext_dos) - 1, ext_dos); 478 sizeof (ext_dos) - 1, ext_dos,
479 "DOS Lisp opaque, Lisp buffer, undecided-unix");
405 480
406 /* Check eol autodetection works when enabled -- honest. */ 481 /* Check eol autodetection works when enabled -- honest. */
407 cs_to_use = 482 cs_to_use =
408 Fget_coding_system (call2 483 Fget_coding_system (call2
409 (intern ("coding-system-change-eol-conversion"), 484 (intern ("coding-system-change-eol-conversion"),
411 XCODING_SYSTEM_EOL_TYPE (cs_to_use) = EOL_AUTODETECT; 486 XCODING_SYSTEM_EOL_TYPE (cs_to_use) = EOL_AUTODETECT;
412 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_dos, 487 TO_INTERNAL_FORMAT (LISP_OPAQUE, opaque_dos,
413 LISP_BUFFER, Fcurrent_buffer(), 488 LISP_BUFFER, Fcurrent_buffer(),
414 cs_to_use); 489 cs_to_use);
415 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)), 490 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, BUF_PT (current_buffer)),
416 sizeof (int_foo) - 1, int_foo); 491 sizeof (int_foo) - 1, int_foo,
492 "DOS Lisp opaque, Lisp buffer, undecided");
417 /* reset to default */ 493 /* reset to default */
418 XCODING_SYSTEM_EOL_TYPE (cs_to_use) = 494 XCODING_SYSTEM_EOL_TYPE (cs_to_use) =
419 autodetect_eol_p ? EOL_AUTODETECT : EOL_LF; 495 autodetect_eol_p ? EOL_AUTODETECT : EOL_LF;
420 } 496 }
421 497
425 LISP_BUFFER, Fcurrent_buffer(), 501 LISP_BUFFER, Fcurrent_buffer(),
426 intern ("undecided")); 502 intern ("undecided"));
427 if (autodetect_eol_p) 503 if (autodetect_eol_p)
428 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, 504 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer,
429 BUF_PT (current_buffer)), 505 BUF_PT (current_buffer)),
430 sizeof (int_foo) - 1, int_foo); 506 sizeof (int_foo) - 1, int_foo,
507 "DOS Lisp opaque, Lisp buffer, autodetect eol");
431 else 508 else
432 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer, 509 DFC_CHECK_DATA (BUF_BYTE_ADDRESS (current_buffer,
433 BUF_PT (current_buffer)), 510 BUF_PT (current_buffer)),
434 sizeof (ext_dos) - 1, ext_dos); 511 sizeof (ext_dos) - 1, ext_dos,
512 "DOS Lisp opaque, Lisp buffer, no autodetect eol");
435 513
436 TO_INTERNAL_FORMAT (DATA, (ext_mac, sizeof (ext_mac) - 1), 514 TO_INTERNAL_FORMAT (DATA, (ext_mac, sizeof (ext_mac) - 1),
437 LISP_STRING, string, 515 LISP_STRING, string,
438 intern ("iso-8859-1")); 516 intern ("iso-8859-1"));
439 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string), 517 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string),
440 XSTRING_LENGTH (string), int_foo, ext_mac); 518 XSTRING_LENGTH (string), int_foo, ext_mac,
441 519 "Mac DATA, Lisp string, Latin-1/EOL");
442 { 520 {
443 Lisp_Object stream = 521 Lisp_Object stream =
444 make_fixed_buffer_input_stream (ext_dos, sizeof (ext_dos) - 1); 522 make_fixed_buffer_input_stream (ext_dos, sizeof (ext_dos) - 1);
445 TO_INTERNAL_FORMAT (LISP_LSTREAM, stream, 523 TO_INTERNAL_FORMAT (LISP_LSTREAM, stream,
446 LISP_STRING, string, 524 LISP_STRING, string,
447 intern ("iso-8859-1")); 525 intern ("iso-8859-1"));
448 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string), 526 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string),
449 XSTRING_LENGTH (string), int_foo, ext_dos); 527 XSTRING_LENGTH (string), int_foo, ext_dos,
528 "DOS lstream, Lisp string, Latin-1/EOL");
450 } 529 }
451 530
452 TO_INTERNAL_FORMAT (DATA, (ext_unix, sizeof (ext_unix) - 1), 531 TO_INTERNAL_FORMAT (DATA, (ext_unix, sizeof (ext_unix) - 1),
453 LISP_STRING, string, 532 LISP_STRING, string,
454 intern ("no-conversion")); 533 intern ("no-conversion"));
455 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string), 534 DFC_CHECK_DATA_COND_EOL (XSTRING_DATA (string),
456 XSTRING_LENGTH (string), int_foo, ext_unix); 535 XSTRING_LENGTH (string), int_foo, ext_unix,
457 536 "Unix DATA, Lisp string, no-conversion");
458 537
459 ptr = NULL, len = rand(); 538 ptr = NULL, len = rand();
460 TO_EXTERNAL_FORMAT (LISP_OPAQUE, opaque_dos, 539 TO_EXTERNAL_FORMAT (LISP_OPAQUE, opaque_dos,
461 ALLOCA, (ptr, len), 540 ALLOCA, (ptr, len),
462 Qbinary); 541 Qbinary);
463 DFC_CHECK_DATA (ptr, len, ext_dos); 542 DFC_CHECK_DATA (ptr, len, ext_dos, "DOS Lisp opaque, ALLOCA, binary");
464 543
465 return intern ("PASS"); 544 return conversion_result;
466 } 545 }
467 546
468 547
469 /* Hash Table testing */ 548 /* Hash Table testing */
470 549
508 DEFUN ("test-hash-tables", Ftest_hash_tables, 0, 0, "", /* 587 DEFUN ("test-hash-tables", Ftest_hash_tables, 0, 0, "", /*
509 Test C interface to hash tables. 588 Test C interface to hash tables.
510 */ 589 */
511 ()) 590 ())
512 { 591 {
592 Lisp_Object hash_result = Qnil;
593
513 test_hash_tables_data data; 594 test_hash_tables_data data;
514 data.hash_table = make_lisp_hash_table (50, HASH_TABLE_NON_WEAK, 595 data.hash_table = make_lisp_hash_table (50, HASH_TABLE_NON_WEAK,
515 HASH_TABLE_EQUAL); 596 HASH_TABLE_EQUAL);
516 597
517 Fputhash (make_int (1), make_int (2), data.hash_table); 598 Fputhash (make_int (1), make_int (2), data.hash_table);
518 Fputhash (make_int (3), make_int (4), data.hash_table); 599 Fputhash (make_int (3), make_int (4), data.hash_table);
519 600
520 data.sum = 0; 601 data.sum = 0;
521 elisp_maphash_unsafe (test_hash_tables_mapper, 602 elisp_maphash_unsafe (test_hash_tables_mapper,
522 data.hash_table, (void *) &data); 603 data.hash_table, (void *) &data);
523 assert (data.sum == 2 + 4); 604 hash_result = Fcons (list3 (build_string ("simple mapper"),
605 (data.sum == 2 + 4) ? Qt : Qnil,
606 build_string ("sum != 2 + 4")),
607 hash_result);
524 608
525 data.sum = 0; 609 data.sum = 0;
526 elisp_maphash (test_hash_tables_modifying_mapper, 610 elisp_maphash (test_hash_tables_modifying_mapper,
527 data.hash_table, (void *) &data); 611 data.hash_table, (void *) &data);
528 assert (data.sum == 2 + 4); 612 hash_result = Fcons (list3 (build_string ("modifying mapper"),
613 (data.sum == 2 + 4) ? Qt : Qnil,
614 build_string ("sum != 2 + 4")),
615 hash_result);
529 616
530 /* hash table now contains: (1, 2) (3, 4) (-1, 2*2) (-3, 2*4) */ 617 /* hash table now contains: (1, 2) (3, 4) (-1, 2*2) (-3, 2*4) */
531 618
532 data.sum = 0; 619 data.sum = 0;
533 elisp_maphash_unsafe (test_hash_tables_mapper, 620 elisp_maphash_unsafe (test_hash_tables_mapper,
534 data.hash_table, (void *) &data); 621 data.hash_table, (void *) &data);
535 assert (data.sum == 3 * (2 + 4)); 622 hash_result = Fcons (list3 (build_string ("simple mapper"),
623 (data.sum == 3 * (2 + 4)) ? Qt : Qnil,
624 build_string ("sum != 3 * (2 + 4)")),
625 hash_result);
536 626
537 /* Remove entries with negative keys, added by modifying mapper */ 627 /* Remove entries with negative keys, added by modifying mapper */
538 elisp_map_remhash (test_hash_tables_predicate, 628 elisp_map_remhash (test_hash_tables_predicate,
539 data.hash_table, 0); 629 data.hash_table, 0);
540 630
541 data.sum = 0; 631 data.sum = 0;
542 elisp_maphash_unsafe (test_hash_tables_mapper, 632 elisp_maphash_unsafe (test_hash_tables_mapper,
543 data.hash_table, (void *) &data); 633 data.hash_table, (void *) &data);
544 assert (data.sum == 2 + 4); 634 hash_result = Fcons (list3 (build_string ("remove negatives mapper"),
545 635 (data.sum == 2 + 4) ? Qt : Qnil,
546 return intern ("PASS"); 636 build_string ("sum != 2 + 4")),
637 hash_result);
638
639 return hash_result;
547 } 640 }
548 641
549 642
550 643
551 #ifdef NEW_GC 644 #ifdef NEW_GC
581 DEFVAR_LISP ("test-function-list", &Vtest_function_list /* 674 DEFVAR_LISP ("test-function-list", &Vtest_function_list /*
582 List of all test functions defined in tests.c. 675 List of all test functions defined in tests.c.
583 For use by the automated test suite. See tests/automated/c-tests. 676 For use by the automated test suite. See tests/automated/c-tests.
584 */ ); 677 */ );
585 } 678 }
679