X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftsticonv.c;h=1799002476956682f043cc35d8a5f803fdea99d6;hp=6410e5734f1313fd115ea6ee5843ffcf53e0b27a;hb=00106dc85fcaa3b02f9a0d471ea90a594bf3a175;hpb=b1133253fc7a5ebb20ae41cac2a38c061d6facc0 diff --git a/test/tsticonv.c b/test/tsticonv.c index 6410e57..1799002 100644 --- a/test/tsticonv.c +++ b/test/tsticonv.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 2002-2003, Index Data + * Copyright (c) 2002-2004, Index Data * See the file LICENSE for details. * - * $Id: tsticonv.c,v 1.1 2003-10-27 12:21:38 adam Exp $ + * $Id: tsticonv.c,v 1.2 2004-03-15 21:39:06 adam Exp $ */ #if HAVE_CONFIG_H @@ -16,7 +16,7 @@ #include /* some test strings in ISO-8859-1 format */ -const char *buf[] = { +static const char *iso_8859_1_a[] = { "ax" , "\330", "eneb\346r", @@ -25,8 +25,8 @@ const char *buf[] = { "\xfbr", 0 }; -/* some test strings in MARC-8 format */ -const char *marc8_strings[] = { +/* same test strings in MARC-8 format */ +static const char *marc8_a[] = { "ax", "\xa2", /* latin capital letter o with stroke */ "eneb\xb5r", /* latin small letter ae */ @@ -36,16 +36,21 @@ const char *marc8_strings[] = { 0 }; -static void marc8_tst() +static void marc8_tst_a() { int i; yaz_iconv_t cd; cd = yaz_iconv_open("ISO-8859-1", "MARC8"); - for (i = 0; buf[i]; i++) + if (!cd) + { + printf("tsticonv 10 yaz_iconv_open failed\n"); + exit(10); + } + for (i = 0; iso_8859_1_a[i]; i++) { size_t r; - char *inbuf= (char*) marc8_strings[i]; + char *inbuf= (char*) marc8_a[i]; size_t inbytesleft = strlen(inbuf); char outbuf0[24]; char *outbuf = outbuf0; @@ -56,15 +61,131 @@ static void marc8_tst() { int e = yaz_iconv_error(cd); - printf ("tsticonv 6 i=%d e=%d\n", i, e); - exit(6); + printf ("tsticonv 11 i=%d e=%d\n", i, e); + exit(11); + } + if ((outbuf - outbuf0) != strlen(iso_8859_1_a[i]) + || memcmp(outbuf0, iso_8859_1_a[i], + strlen(iso_8859_1_a[i]))) + { + printf ("tsticonv 12 i=%d\n", i); + printf ("buf=%s out=%s\n", iso_8859_1_a[i], outbuf0); + exit(12); + } + } + yaz_iconv_close(cd); +} + +static void marc8_tst_b() +{ + static const char *marc8_b[] = { + "\033$1" "\x21\x2B\x3B" /* FF1F */ "\033(B" "o", + "\033$1" "\x6F\x77\x29" /* AE0E */ "\x6F\x52\x7C" /* c0F4 */ "\033(B", + "\033$1" + "\x21\x50\x6E" /* 7CFB */ + "\x21\x51\x31" /* 7D71 */ + "\x21\x3A\x67" /* 5B89 */ + "\x21\x33\x22" /* 5168 */ + "\x21\x33\x53" /* 5206 */ + "\x21\x44\x2B" /* 6790 */ + "\033(B", + 0 + }; + static const char *ucs4_b[] = { + "\x00\x00\xFF\x1F" "\x00\x00\x00o", + "\x00\x00\xAE\x0E" "\x00\x00\xC0\xF4", + "\x00\x00\x7C\xFB" + "\x00\x00\x7D\x71" + "\x00\x00\x5B\x89" + "\x00\x00\x51\x68" + "\x00\x00\x52\x06" + "\x00\x00\x67\x90", + 0 + }; + int i; + yaz_iconv_t cd; + + cd = yaz_iconv_open("UCS4", "MARC8"); + if (!cd) + { + printf ("tsticonv 20 yaz_iconv_open failed\n"); + exit(20); + } + for (i = 0; marc8_b[i]; i++) + { + size_t r; + size_t len; + size_t expect_len = (i == 2 ? 24 : 8); + char *inbuf= (char*) marc8_b[i]; + size_t inbytesleft = strlen(inbuf); + char outbuf0[24]; + char *outbuf = outbuf0; + size_t outbytesleft = sizeof(outbuf0); + + r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); + if (r == (size_t) (-1)) + { + int e = yaz_iconv_error(cd); + + printf ("tsticonv 21 i=%d e=%d\n", i, e); + exit(21); + } + len = outbuf - outbuf0; + if (len != expect_len || memcmp(outbuf0, ucs4_b[i], len)) + { + printf ("tsticonv 22 len=%d gotlen=%d i=%d\n", expect_len, len, i); + exit(22); + } + } + yaz_iconv_close(cd); +} + +static void marc8_tst_c() +{ + static const char *ucs4_c[] = { + "\x00\x00\xFF\x1F\x00\x00\x00o", + "\x00\x00\xAE\x0E\x00\x00\xC0\xF4", + 0 + }; + static const char *utf8_c[] = { + "\xEF\xBC\x9F\x6F", + "\xEA\xB8\x8E\xEC\x83\xB4", + 0 + }; + + int i; + yaz_iconv_t cd; + + cd = yaz_iconv_open("UTF8", "UCS4"); + if (!cd) + { + printf ("tsticonv 30 yaz_iconv_open failed\n"); + exit(30); + } + for (i = 0; ucs4_c[i]; i++) + { + size_t r; + size_t len; + char *inbuf= (char*) ucs4_c[i]; + size_t inbytesleft = 8; + char outbuf0[24]; + char *outbuf = outbuf0; + size_t outbytesleft = sizeof(outbuf0); + + r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); + if (r == (size_t) (-1)) + { + int e = yaz_iconv_error(cd); + + printf ("tsticonv 31 i=%d e=%d\n", i, e); + exit(31); } - if ((outbuf - outbuf0) != strlen(buf[i]) - || memcmp(outbuf0, buf[i], strlen(buf[i]))) + len = outbuf - outbuf0; + if (len != strlen(utf8_c[i]) || memcmp(outbuf0, utf8_c[i], len)) { - printf ("tsticonv 7 i=%d\n", i); - printf ("buf=%s out=%s\n", buf[i], outbuf0); - exit(7); + printf ("tsticonv 32 len=%d gotlen=%d i=%d\n", + strlen(utf8_c[i]), len, i); + exit(32); } } yaz_iconv_close(cd); @@ -74,10 +195,10 @@ static void dconvert(int mandatory, const char *tmpcode) { int i; yaz_iconv_t cd; - for (i = 0; buf[i]; i++) + for (i = 0; iso_8859_1_a[i]; i++) { size_t r; - char *inbuf = (char*) buf[i]; + char *inbuf = (char*) iso_8859_1_a[i]; size_t inbytesleft = strlen(inbuf); char outbuf0[24]; char outbuf1[10]; @@ -89,7 +210,7 @@ static void dconvert(int mandatory, const char *tmpcode) { if (!mandatory) return; - printf ("tsticonv 1\n"); + printf ("tsticonv code=%s 1\n", tmpcode); exit(1); } r = yaz_iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); @@ -97,7 +218,7 @@ static void dconvert(int mandatory, const char *tmpcode) { int e = yaz_iconv_error(cd); - printf ("tsticonv 2 e=%d\n", e); + printf ("tsticonv code=%s 2 e=%d\n", tmpcode, e); exit(2); } yaz_iconv_close(cd); @@ -107,7 +228,7 @@ static void dconvert(int mandatory, const char *tmpcode) { if (!mandatory) return; - printf ("tsticonv 3\n"); + printf ("tsticonv code=%s 3\n", tmpcode); exit(3); } inbuf = outbuf0; @@ -119,13 +240,15 @@ static void dconvert(int mandatory, const char *tmpcode) if (r == (size_t)(-1)) { int e = yaz_iconv_error(cd); - printf ("tsticonv 4 e=%d\n", e); + printf ("tsticonv code=%s 4 e=%d\n", tmpcode, e); exit(4); } - if (strlen(buf[i]) == (sizeof(outbuf1) - outbytesleft) && - memcmp(outbuf1, buf[i], strlen(buf[i]))) + if (strlen(iso_8859_1_a[i]) == + (sizeof(outbuf1) - outbytesleft) && + memcmp(outbuf1, iso_8859_1_a[i], + strlen(iso_8859_1_a[i]))) { - printf ("tsticonv 5\n"); + printf ("tsticonv code=%s 5\n", tmpcode); exit(5); } yaz_iconv_close(cd); @@ -137,7 +260,10 @@ int main (int argc, char **argv) dconvert(1, "UTF-8"); dconvert(1, "ISO-8859-1"); dconvert(1, "UCS4"); + dconvert(1, "UCS4LE"); dconvert(0, "CP865"); - marc8_tst(); + marc8_tst_a(); + marc8_tst_b(); + marc8_tst_c(); exit (0); }