~vcs-imports/libiconv/trunk

« back to all changes in this revision

Viewing changes to tests/test-discard.c

  • Committer: Bruno Haible
  • Date: 2024-12-15 12:23:08 UTC
  • Revision ID: git-v1:8d618a87265040dc882b451e39c6a39e610395be
Prepare for version 1.18.

* configure.ac: Bump version number to 1.18.
* include/iconv.h.in (_LIBICONV_VERSION): Likewise.
* lib/Makefile.in (LIBICONV_VERSION_INFO): Bump to 9:0:7.
* src/iconv.c (print_version): Update copyright year.
* windows/iconv.rc: Likewise.
* windows/libiconv.rc: Likewise.
* README: Update download link.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2024 Free Software Foundation, Inc.
 
2
   This file is part of the GNU LIBICONV Library.
 
3
 
 
4
   The GNU LIBICONV Library is free software; you can redistribute it
 
5
   and/or modify it under the terms of the GNU Lesser General Public
 
6
   License as published by the Free Software Foundation; either version 2.1
 
7
   of the License, or (at your option) any later version.
 
8
 
 
9
   The GNU LIBICONV Library is distributed in the hope that it will be
 
10
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
   Lesser General Public License for more details.
 
13
 
 
14
   You should have received a copy of the GNU Lesser General Public
 
15
   License along with the GNU LIBICONV Library; see the file COPYING.LIB.
 
16
   If not, see <https://www.gnu.org/licenses/>.  */
 
17
 
 
18
/* Comment out this line, to build against glibc instead of libiconv. */
 
19
#include "config.h"
 
20
 
 
21
#include <locale.h>
 
22
#include <stdlib.h>
 
23
#include <iconv.h>
 
24
#include <errno.h>
 
25
 
 
26
/* This test checks the behaviour of iconv() with suffixes //IGNORE and
 
27
   //NON_IDENTICAL_DISCARD, and also the equivalent options set through
 
28
   iconvctl(). */
 
29
 
 
30
static const char input1[7] = "3\xd4\xe2\x84\x83\xc3\x9f"; /* "3<D4>℃ß" */
 
31
static const char input2[7] = "3\xe2\x84\x83\xd4\xc3\x9f"; /* "3℃<D4>ß" */
 
32
 
 
33
static void test_default (iconv_t cd)
 
34
{
 
35
  {
 
36
    char output[10];
 
37
    char *inbuf = (char *) input1;
 
38
    size_t inbytesleft = sizeof (input1);
 
39
    char *outbuf = output;
 
40
    size_t outbytesleft = sizeof (output);
 
41
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
42
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 1))
 
43
      abort ();
 
44
    if (!(sizeof (output) - outbytesleft == 1
 
45
          && output[0] == '3'))
 
46
      abort ();
 
47
  }
 
48
  {
 
49
    char output[10];
 
50
    char *inbuf = (char *) input2;
 
51
    size_t inbytesleft = sizeof (input2);
 
52
    char *outbuf = output;
 
53
    size_t outbytesleft = sizeof (output);
 
54
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
55
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input2) - inbytesleft == 1))
 
56
      abort ();
 
57
    if (!(sizeof (output) - outbytesleft == 1
 
58
          && output[0] == '3'))
 
59
      abort ();
 
60
  }
 
61
  #ifdef _LIBICONV_VERSION
 
62
  int x;
 
63
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
64
    abort ();
 
65
  if (x != 0)
 
66
    abort ();
 
67
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
68
    abort ();
 
69
  if (x != 0)
 
70
    abort ();
 
71
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
72
    abort ();
 
73
  if (x != 0)
 
74
    abort ();
 
75
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
76
    abort ();
 
77
  if (x != 0)
 
78
    abort ();
 
79
  #endif
 
80
}
 
81
 
 
82
static void test_translit (iconv_t cd)
 
83
{
 
84
  {
 
85
    char output[10];
 
86
    char *inbuf = (char *) input1;
 
87
    size_t inbytesleft = sizeof (input1);
 
88
    char *outbuf = output;
 
89
    size_t outbytesleft = sizeof (output);
 
90
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
91
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 1))
 
92
      abort ();
 
93
    if (!(sizeof (output) - outbytesleft == 1
 
94
          && output[0] == '3'))
 
95
      abort ();
 
96
  }
 
97
  {
 
98
    char output[10];
 
99
    char *inbuf = (char *) input2;
 
100
    size_t inbytesleft = sizeof (input2);
 
101
    char *outbuf = output;
 
102
    size_t outbytesleft = sizeof (output);
 
103
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
104
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input2) - inbytesleft == 4))
 
105
      abort ();
 
106
    if (!(sizeof (output) - outbytesleft == 3
 
107
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C'))
 
108
      abort ();
 
109
  }
 
110
  #ifdef _LIBICONV_VERSION
 
111
  int x;
 
112
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
113
    abort ();
 
114
  if (x != 1)
 
115
    abort ();
 
116
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
117
    abort ();
 
118
  if (x != 0)
 
119
    abort ();
 
120
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
121
    abort ();
 
122
  if (x != 0)
 
123
    abort ();
 
124
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
125
    abort ();
 
126
  if (x != 0)
 
127
    abort ();
 
128
  #endif
 
129
}
 
130
 
 
131
static void test_ignore (iconv_t cd)
 
132
{
 
133
  {
 
134
    char output[10];
 
135
    char *inbuf = (char *) input1;
 
136
    size_t inbytesleft = sizeof (input1);
 
137
    char *outbuf = output;
 
138
    size_t outbytesleft = sizeof (output);
 
139
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
140
    #ifdef _LIBICONV_VERSION
 
141
    if (!(ret == 1 && inbytesleft == 0))
 
142
      abort ();
 
143
    #else /* glibc */
 
144
    if (!(ret == (size_t)(-1) && errno == EILSEQ && inbytesleft == 0))
 
145
      abort ();
 
146
    #endif
 
147
    if (!(sizeof (output) - outbytesleft == 2
 
148
          && output[0] == '3' && output[1] == '\xdf'))
 
149
      abort ();
 
150
  }
 
151
  {
 
152
    char output[10];
 
153
    char *inbuf = (char *) input2;
 
154
    size_t inbytesleft = sizeof (input2);
 
155
    char *outbuf = output;
 
156
    size_t outbytesleft = sizeof (output);
 
157
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
158
    #ifdef _LIBICONV_VERSION
 
159
    if (!(ret == 1 && inbytesleft == 0))
 
160
      abort ();
 
161
    #else /* glibc */
 
162
    if (!(ret == (size_t)(-1) && errno == EILSEQ && inbytesleft == 0))
 
163
      abort ();
 
164
    #endif
 
165
    if (!(sizeof (output) - outbytesleft == 2
 
166
          && output[0] == '3' && output[1] == '\xdf'))
 
167
      abort ();
 
168
  }
 
169
  #ifdef _LIBICONV_VERSION
 
170
  int x;
 
171
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
172
    abort ();
 
173
  if (x != 0)
 
174
    abort ();
 
175
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
176
    abort ();
 
177
  if (x != 1)
 
178
    abort ();
 
179
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
180
    abort ();
 
181
  if (x != 1)
 
182
    abort ();
 
183
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
184
    abort ();
 
185
  if (x != 1)
 
186
    abort ();
 
187
  #endif
 
188
}
 
189
 
 
190
static void test_ignore_translit (iconv_t cd)
 
191
{
 
192
  {
 
193
    char output[10];
 
194
    char *inbuf = (char *) input1;
 
195
    size_t inbytesleft = sizeof (input1);
 
196
    char *outbuf = output;
 
197
    size_t outbytesleft = sizeof (output);
 
198
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
199
    if (!(ret == 1 && inbytesleft == 0))
 
200
      abort ();
 
201
    if (!(sizeof (output) - outbytesleft == 4
 
202
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C' && output[3] == '\xdf'))
 
203
      abort ();
 
204
  }
 
205
  {
 
206
    char output[10];
 
207
    char *inbuf = (char *) input2;
 
208
    size_t inbytesleft = sizeof (input2);
 
209
    char *outbuf = output;
 
210
    size_t outbytesleft = sizeof (output);
 
211
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
212
    if (!(ret == 1 && inbytesleft == 0))
 
213
      abort ();
 
214
    if (!(sizeof (output) - outbytesleft == 4
 
215
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C' && output[3] == '\xdf'))
 
216
      abort ();
 
217
  }
 
218
  #ifdef _LIBICONV_VERSION
 
219
  int x;
 
220
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
221
    abort ();
 
222
  if (x != 1)
 
223
    abort ();
 
224
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
225
    abort ();
 
226
  if (x != 1)
 
227
    abort ();
 
228
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
229
    abort ();
 
230
  if (x != 1)
 
231
    abort ();
 
232
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
233
    abort ();
 
234
  if (x != 1)
 
235
    abort ();
 
236
  #endif
 
237
}
 
238
 
 
239
static void test_nid (iconv_t cd)
 
240
{
 
241
  {
 
242
    char output[10];
 
243
    char *inbuf = (char *) input1;
 
244
    size_t inbytesleft = sizeof (input1);
 
245
    char *outbuf = output;
 
246
    size_t outbytesleft = sizeof (output);
 
247
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
248
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 1))
 
249
      abort ();
 
250
    if (!(sizeof (output) - outbytesleft == 1
 
251
          && output[0] == '3'))
 
252
      abort ();
 
253
  }
 
254
  {
 
255
    char output[10];
 
256
    char *inbuf = (char *) input2;
 
257
    size_t inbytesleft = sizeof (input2);
 
258
    char *outbuf = output;
 
259
    size_t outbytesleft = sizeof (output);
 
260
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
261
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input2) - inbytesleft == 4))
 
262
      abort ();
 
263
    if (!(sizeof (output) - outbytesleft == 1
 
264
          && output[0] == '3'))
 
265
      abort ();
 
266
  }
 
267
  #ifdef _LIBICONV_VERSION
 
268
  int x;
 
269
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
270
    abort ();
 
271
  if (x != 0)
 
272
    abort ();
 
273
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
274
    abort ();
 
275
  if (x != 0)
 
276
    abort ();
 
277
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
278
    abort ();
 
279
  if (x != 1)
 
280
    abort ();
 
281
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
282
    abort ();
 
283
  if (x != 0)
 
284
    abort ();
 
285
  #endif
 
286
}
 
287
 
 
288
static void test_nid_translit (iconv_t cd)
 
289
{
 
290
  {
 
291
    char output[10];
 
292
    char *inbuf = (char *) input1;
 
293
    size_t inbytesleft = sizeof (input1);
 
294
    char *outbuf = output;
 
295
    size_t outbytesleft = sizeof (output);
 
296
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
297
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 1))
 
298
      abort ();
 
299
    if (!(sizeof (output) - outbytesleft == 1
 
300
          && output[0] == '3'))
 
301
      abort ();
 
302
  }
 
303
  {
 
304
    char output[10];
 
305
    char *inbuf = (char *) input2;
 
306
    size_t inbytesleft = sizeof (input2);
 
307
    char *outbuf = output;
 
308
    size_t outbytesleft = sizeof (output);
 
309
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
310
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input2) - inbytesleft == 4))
 
311
      abort ();
 
312
    if (!(sizeof (output) - outbytesleft == 3
 
313
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C'))
 
314
      abort ();
 
315
  }
 
316
  #ifdef _LIBICONV_VERSION
 
317
  int x;
 
318
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
319
    abort ();
 
320
  if (x != 1)
 
321
    abort ();
 
322
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
323
    abort ();
 
324
  if (x != 0)
 
325
    abort ();
 
326
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
327
    abort ();
 
328
  if (x != 1)
 
329
    abort ();
 
330
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
331
    abort ();
 
332
  if (x != 0)
 
333
    abort ();
 
334
  #endif
 
335
}
 
336
 
 
337
static void test_invd (iconv_t cd)
 
338
{
 
339
  {
 
340
    char output[10];
 
341
    char *inbuf = (char *) input1;
 
342
    size_t inbytesleft = sizeof (input1);
 
343
    char *outbuf = output;
 
344
    size_t outbytesleft = sizeof (output);
 
345
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
346
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 2))
 
347
      abort ();
 
348
    if (!(sizeof (output) - outbytesleft == 1
 
349
          && output[0] == '3'))
 
350
      abort ();
 
351
  }
 
352
  {
 
353
    char output[10];
 
354
    char *inbuf = (char *) input2;
 
355
    size_t inbytesleft = sizeof (input2);
 
356
    char *outbuf = output;
 
357
    size_t outbytesleft = sizeof (output);
 
358
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
359
    if (!(ret == (size_t)(-1) && errno == EILSEQ && sizeof (input1) - inbytesleft == 1))
 
360
      abort ();
 
361
    if (!(sizeof (output) - outbytesleft == 1
 
362
          && output[0] == '3'))
 
363
      abort ();
 
364
  }
 
365
  #ifdef _LIBICONV_VERSION
 
366
  int x;
 
367
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
368
    abort ();
 
369
  if (x != 0)
 
370
    abort ();
 
371
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
372
    abort ();
 
373
  if (x != 1)
 
374
    abort ();
 
375
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
376
    abort ();
 
377
  if (x != 0)
 
378
    abort ();
 
379
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
380
    abort ();
 
381
  if (x != 0)
 
382
    abort ();
 
383
  #endif
 
384
}
 
385
 
 
386
static void test_invd_translit (iconv_t cd)
 
387
{
 
388
  {
 
389
    char output[10];
 
390
    char *inbuf = (char *) input1;
 
391
    size_t inbytesleft = sizeof (input1);
 
392
    char *outbuf = output;
 
393
    size_t outbytesleft = sizeof (output);
 
394
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
395
    if (!(ret == 1 && inbytesleft == 0))
 
396
      abort ();
 
397
    if (!(sizeof (output) - outbytesleft == 4
 
398
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C' && output[3] == '\xdf'))
 
399
      abort ();
 
400
  }
 
401
  {
 
402
    char output[10];
 
403
    char *inbuf = (char *) input2;
 
404
    size_t inbytesleft = sizeof (input2);
 
405
    char *outbuf = output;
 
406
    size_t outbytesleft = sizeof (output);
 
407
    size_t ret = iconv (cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
 
408
    if (!(ret == 1 && inbytesleft == 0))
 
409
      abort ();
 
410
    if (!(sizeof (output) - outbytesleft == 4
 
411
          && output[0] == '3' && output[1] == '\xb0' && output[2] == 'C' && output[3] == '\xdf'))
 
412
      abort ();
 
413
  }
 
414
  #ifdef _LIBICONV_VERSION
 
415
  int x;
 
416
  if (iconvctl (cd, ICONV_GET_TRANSLITERATE, &x) != 0)
 
417
    abort ();
 
418
  if (x != 1)
 
419
    abort ();
 
420
  if (iconvctl (cd, ICONV_GET_DISCARD_INVALID, &x) != 0)
 
421
    abort ();
 
422
  if (x != 1)
 
423
    abort ();
 
424
  if (iconvctl (cd, ICONV_GET_DISCARD_NON_IDENTICAL, &x) != 0)
 
425
    abort ();
 
426
  if (x != 0)
 
427
    abort ();
 
428
  if (iconvctl (cd, ICONV_GET_DISCARD_ILSEQ, &x) != 0)
 
429
    abort ();
 
430
  if (x != 0)
 
431
    abort ();
 
432
  #endif
 
433
}
 
434
 
 
435
int main ()
 
436
{
 
437
  #ifndef _LIBICONV_VERSION
 
438
  /* For glibc: Enable locale-dependent transliterations. */
 
439
  setlocale (LC_ALL, "en_US.UTF-8");
 
440
  #endif
 
441
 
 
442
  {
 
443
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
444
    test_default (cd);
 
445
    iconv_close (cd);
 
446
  }
 
447
 
 
448
  {
 
449
    iconv_t cd = iconv_open ("ISO-8859-1//TRANSLIT", "UTF-8");
 
450
    test_translit (cd);
 
451
    iconv_close (cd);
 
452
  }
 
453
  #ifdef _LIBICONV_VERSION
 
454
  {
 
455
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
456
    { int x = 1; iconvctl (cd, ICONV_SET_TRANSLITERATE, &x); }
 
457
    test_translit (cd);
 
458
    iconv_close (cd);
 
459
  }
 
460
  #endif
 
461
 
 
462
  {
 
463
    iconv_t cd = iconv_open ("ISO-8859-1//IGNORE", "UTF-8");
 
464
    test_ignore (cd);
 
465
    iconv_close (cd);
 
466
  }
 
467
  #ifdef _LIBICONV_VERSION
 
468
  {
 
469
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
470
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_ILSEQ, &x); }
 
471
    test_ignore (cd);
 
472
    iconv_close (cd);
 
473
  }
 
474
  #endif
 
475
  {
 
476
    iconv_t cd = iconv_open ("ISO-8859-1//NON_IDENTICAL_DISCARD//IGNORE", "UTF-8");
 
477
    test_ignore (cd);
 
478
    iconv_close (cd);
 
479
  }
 
480
  {
 
481
    iconv_t cd = iconv_open ("ISO-8859-1//IGNORE//NON_IDENTICAL_DISCARD", "UTF-8");
 
482
    test_ignore (cd);
 
483
    iconv_close (cd);
 
484
  }
 
485
  #ifdef _LIBICONV_VERSION
 
486
  {
 
487
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
488
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_ILSEQ, &x); }
 
489
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_NON_IDENTICAL, &x); }
 
490
    test_ignore (cd);
 
491
    iconv_close (cd);
 
492
  }
 
493
  #endif
 
494
  #ifdef _LIBICONV_VERSION
 
495
  {
 
496
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
497
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_INVALID, &x); }
 
498
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_NON_IDENTICAL, &x); }
 
499
    test_ignore (cd);
 
500
    iconv_close (cd);
 
501
  }
 
502
  #endif
 
503
 
 
504
  {
 
505
    iconv_t cd = iconv_open ("ISO-8859-1//IGNORE//TRANSLIT", "UTF-8");
 
506
    test_ignore_translit (cd);
 
507
    iconv_close (cd);
 
508
  }
 
509
  {
 
510
    iconv_t cd = iconv_open ("ISO-8859-1//TRANSLIT//IGNORE", "UTF-8");
 
511
    test_ignore_translit (cd);
 
512
    iconv_close (cd);
 
513
  }
 
514
  #ifdef _LIBICONV_VERSION
 
515
  {
 
516
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
517
    { int x = 1; iconvctl (cd, ICONV_SET_TRANSLITERATE, &x); }
 
518
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_ILSEQ, &x); }
 
519
    test_ignore_translit (cd);
 
520
    iconv_close (cd);
 
521
  }
 
522
  #endif
 
523
  {
 
524
    iconv_t cd = iconv_open ("ISO-8859-1//NON_IDENTICAL_DISCARD//IGNORE//TRANSLIT", "UTF-8");
 
525
    test_ignore_translit (cd);
 
526
    iconv_close (cd);
 
527
  }
 
528
  {
 
529
    iconv_t cd = iconv_open ("ISO-8859-1//IGNORE//NON_IDENTICAL_DISCARD//TRANSLIT", "UTF-8");
 
530
    test_ignore_translit (cd);
 
531
    iconv_close (cd);
 
532
  }
 
533
  {
 
534
    iconv_t cd = iconv_open ("ISO-8859-1//NON_IDENTICAL_DISCARD//TRANSLIT//IGNORE", "UTF-8");
 
535
    test_ignore_translit (cd);
 
536
    iconv_close (cd);
 
537
  }
 
538
  {
 
539
    iconv_t cd = iconv_open ("ISO-8859-1//IGNORE//TRANSLIT//NON_IDENTICAL_DISCARD", "UTF-8");
 
540
    test_ignore_translit (cd);
 
541
    iconv_close (cd);
 
542
  }
 
543
  {
 
544
    iconv_t cd = iconv_open ("ISO-8859-1//TRANSLIT//NON_IDENTICAL_DISCARD//IGNORE", "UTF-8");
 
545
    test_ignore_translit (cd);
 
546
    iconv_close (cd);
 
547
  }
 
548
  {
 
549
    iconv_t cd = iconv_open ("ISO-8859-1//TRANSLIT//IGNORE//NON_IDENTICAL_DISCARD", "UTF-8");
 
550
    test_ignore_translit (cd);
 
551
    iconv_close (cd);
 
552
  }
 
553
  #ifdef _LIBICONV_VERSION
 
554
  {
 
555
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
556
    { int x = 1; iconvctl (cd, ICONV_SET_TRANSLITERATE, &x); }
 
557
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_INVALID, &x); }
 
558
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_NON_IDENTICAL, &x); }
 
559
    test_ignore_translit (cd);
 
560
    iconv_close (cd);
 
561
  }
 
562
  #endif
 
563
 
 
564
  {
 
565
    iconv_t cd = iconv_open ("ISO-8859-1//NON_IDENTICAL_DISCARD", "UTF-8");
 
566
    test_nid (cd);
 
567
    iconv_close (cd);
 
568
  }
 
569
  #ifdef _LIBICONV_VERSION
 
570
  {
 
571
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
572
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_NON_IDENTICAL, &x); }
 
573
    test_nid (cd);
 
574
    iconv_close (cd);
 
575
  }
 
576
  #endif
 
577
 
 
578
  {
 
579
    iconv_t cd = iconv_open ("ISO-8859-1//NON_IDENTICAL_DISCARD//TRANSLIT", "UTF-8");
 
580
    test_nid_translit (cd);
 
581
    iconv_close (cd);
 
582
  }
 
583
  {
 
584
    iconv_t cd = iconv_open ("ISO-8859-1//TRANSLIT//NON_IDENTICAL_DISCARD", "UTF-8");
 
585
    test_nid_translit (cd);
 
586
    iconv_close (cd);
 
587
  }
 
588
  #ifdef _LIBICONV_VERSION
 
589
  {
 
590
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
591
    { int x = 1; iconvctl (cd, ICONV_SET_TRANSLITERATE, &x); }
 
592
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_NON_IDENTICAL, &x); }
 
593
    test_nid_translit (cd);
 
594
    iconv_close (cd);
 
595
  }
 
596
  #endif
 
597
 
 
598
  #ifdef _LIBICONV_VERSION
 
599
  {
 
600
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
601
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_INVALID, &x); }
 
602
    test_invd (cd);
 
603
    iconv_close (cd);
 
604
  }
 
605
  #endif
 
606
 
 
607
  #ifdef _LIBICONV_VERSION
 
608
  {
 
609
    iconv_t cd = iconv_open ("ISO-8859-1", "UTF-8");
 
610
    { int x = 1; iconvctl (cd, ICONV_SET_TRANSLITERATE, &x); }
 
611
    { int x = 1; iconvctl (cd, ICONV_SET_DISCARD_INVALID, &x); }
 
612
    test_invd_translit (cd);
 
613
    iconv_close (cd);
 
614
  }
 
615
  #endif
 
616
 
 
617
  return 0;
 
618
}