Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add tests for btowc(3)/wctob(3) and enable compilation of th...



details:   https://anonhg.NetBSD.org/src/rev/fdca3a920baa
branches:  trunk
changeset: 354023:fdca3a920baa
user:      perseant <perseant%NetBSD.org@localhost>
date:      Thu Jun 01 15:45:02 2017 +0000

description:
Add tests for btowc(3)/wctob(3) and enable compilation of the test for
digittoint(3).

The digittoint(3) test is skipped since we don't provide that function yet.

One of the test cases for btowc(3) is also skipped, since it tests conversion
to Unicode---whereas our wchar_t representation is locale-dependent.

diffstat:

 distrib/sets/lists/debug/mi          |    4 +-
 distrib/sets/lists/tests/mi          |    4 +-
 tests/lib/libc/locale/Makefile       |    7 +-
 tests/lib/libc/locale/t_btowc.c      |  189 +++++++++++++++++++++++++++++++++++
 tests/lib/libc/locale/t_digittoint.c |   15 ++-
 5 files changed, 213 insertions(+), 6 deletions(-)

diffs (truncated from 312 to 300 lines):

diff -r 8d025f8a3e33 -r fdca3a920baa distrib/sets/lists/debug/mi
--- a/distrib/sets/lists/debug/mi       Thu Jun 01 09:59:13 2017 +0000
+++ b/distrib/sets/lists/debug/mi       Thu Jun 01 15:45:02 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.215 2017/05/31 00:22:06 pgoyette Exp $
+# $NetBSD: mi,v 1.216 2017/06/01 15:45:02 perseant Exp $
 ./etc/mtree/set.debug                           comp-sys-root
 ./usr/lib                                      comp-sys-usr            compatdir
 ./usr/lib/i18n/libBIG5_g.a                     comp-c-debuglib         debuglib,compatfile
@@ -1943,6 +1943,8 @@
 ./usr/libdata/debug/usr/tests/lib/libc/inet/t_inet_network.debug       tests-lib-debug         debug,atf,compattestfile
 ./usr/libdata/debug/usr/tests/lib/libc/locale/t_ctype1.debug           tests-obsolete          obsolete,compattestfile
 ./usr/libdata/debug/usr/tests/lib/libc/locale/t_ctype2.debug           tests-obsolete          obsolete,compattestfile
+./usr/libdata/debug/usr/tests/lib/libc/locale/t_btowc.debug            tests-lib-debug         debug,atf,compattestfile
+./usr/libdata/debug/usr/tests/lib/libc/locale/t_digittoint.debug       tests-lib-debug         debug,atf,compattestfile
 ./usr/libdata/debug/usr/tests/lib/libc/locale/t_io.debug               tests-lib-debug         debug,atf,compattestfile
 ./usr/libdata/debug/usr/tests/lib/libc/locale/t_mbrtowc.debug          tests-lib-debug         debug,atf,compattestfile
 ./usr/libdata/debug/usr/tests/lib/libc/locale/t_mbsnrtowcs.debug       tests-lib-debug         debug,atf,compattestfile
diff -r 8d025f8a3e33 -r fdca3a920baa distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Thu Jun 01 09:59:13 2017 +0000
+++ b/distrib/sets/lists/tests/mi       Thu Jun 01 15:45:02 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.751 2017/05/31 00:18:21 perseant Exp $
+# $NetBSD: mi,v 1.752 2017/06/01 15:45:02 perseant Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -2541,6 +2541,8 @@
 ./usr/tests/lib/libc/locale/Kyuafile           tests-lib-tests         compattestfile,atf,kyua
 ./usr/tests/lib/libc/locale/t_ctype1           tests-obsolete          obsolete
 ./usr/tests/lib/libc/locale/t_ctype2           tests-obsolete          obsolete
+./usr/tests/lib/libc/locale/t_btowc            tests-lib-tests         compattestfile,atf
+./usr/tests/lib/libc/locale/t_digittoint       tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libc/locale/t_io               tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libc/locale/t_mbrtowc          tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libc/locale/t_mbsnrtowcs       tests-lib-tests         compattestfile,atf
diff -r 8d025f8a3e33 -r fdca3a920baa tests/lib/libc/locale/Makefile
--- a/tests/lib/libc/locale/Makefile    Thu Jun 01 09:59:13 2017 +0000
+++ b/tests/lib/libc/locale/Makefile    Thu Jun 01 15:45:02 2017 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.8 2017/05/30 23:44:02 perseant Exp $
+# $NetBSD: Makefile,v 1.9 2017/06/01 15:45:02 perseant Exp $
 
 .include <bsd.own.mk>
 
@@ -15,10 +15,13 @@
 TESTS_C+=      t_wctomb
 TESTS_C+=      t_io
 TESTS_C+=      t_toupper
-#TESTS_C+=     t_digittoint
+TESTS_C+=      t_digittoint
 TESTS_C+=      t_sprintf
 TESTS_C+=      t_wctype
+TESTS_C+=      t_btowc
 
 COPTS.t_wctomb.c += -Wno-stack-protector
+COPTS.t_digittoint.c += -Wno-unused-variable
+COPTS.t_btowc.c += -Wno-unused-variable
 
 .include <bsd.test.mk>
diff -r 8d025f8a3e33 -r fdca3a920baa tests/lib/libc/locale/t_btowc.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/lib/libc/locale/t_btowc.c   Thu Jun 01 15:45:02 2017 +0000
@@ -0,0 +1,189 @@
+/* $NetBSD: t_btowc.c,v 1.1 2017/06/01 15:45:02 perseant Exp $ */
+
+/*-
+ * Copyright (c) 2017 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Konrad Schroder.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__COPYRIGHT("@(#) Copyright (c) 2017\
+ The NetBSD Foundation, inc. All rights reserved.");
+__RCSID("$NetBSD: t_btowc.c,v 1.1 2017/06/01 15:45:02 perseant Exp $");
+
+#include <locale.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#include <atf-c.h>
+
+struct test {
+       const char *locale;
+       const char *illegal; /* Illegal single-byte characters, if any */
+       const char *legal;   /* Legal single-byte characters */
+       /* The next two are only used if __STDC_ISO_10646__ is defined */
+       const wchar_t wlegal[8]; /* The same characters, but in ISO-10646 */
+       const wchar_t willegal[8]; /* ISO-10646 that do not map into charset */
+} tests[] = {
+       {
+               "C",
+               "\377",
+               "ABC123@\t",
+               { 'A', 'B', 'C', '1', '2', '3', '@', '\t' },
+               { 0x0430, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
+       },
+       {
+               "en_US.UTF-8",
+               "\200",
+               "ABC123@\t",
+               { 'A', 'B', 'C', '1', '2', '3', '@', '\t' },
+               { 0xfdd0, 0x10fffe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}
+       },
+       {
+                "ru_RU.KOI8-R",
+               "", /* No illegal characters in KOI8-R */
+                "A\xc2\xd7\xc7\xc4\xc5\xa3",
+               { 'A', 0x0431, 0x432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0 },
+               { 0x00c5, 0x00e6, 0x00fe, 0x0630, 0x06fc, 0x56cd, 0x0, 0x0 }
+       },
+       {
+               NULL,
+                NULL,
+                NULL,
+               { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 },
+               { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }
+       },
+};
+
+#ifdef __STDC_ISO_10646__
+static void
+h_iso10646(struct test *t)
+{
+       const char *cp;
+       unsigned char c;
+       char *str;
+       const wchar_t *wcp;
+
+       /* These should have valid wchar representations */
+       for (cp = t->legal, wcp = t->wlegal; *cp != '\0'; ++cp, ++wcp) {
+               c = (unsigned char)*cp;
+               printf("Checking legal character 0x%x\n", c);
+
+               /* It should map to the known Unicode equivalent */
+               printf("btowc(0x%2.2x) = 0x%x, expecting 0x%x\n",
+                       c, btowc(c), *wcp);
+               ATF_REQUIRE(btowc(c) == *wcp);
+       }
+
+       /* These are invalid characters in the target set */
+       for (wcp = t->willegal; *wcp != '\0'; ++wcp) {
+               printf("Checking illegal wide character 0x%lx\n",
+                       (unsigned long)*wcp);
+               ATF_REQUIRE_EQ(wctob(*wcp), EOF);
+       }
+}
+#endif
+
+static void
+h_btowc(struct test *t)
+{
+       const char *cp;
+       unsigned char c;
+       char *str;
+       const wchar_t *wcp;
+
+       ATF_REQUIRE_STREQ(setlocale(LC_ALL, "C"), "C");
+       printf("Trying locale: %s\n", t->locale);
+       ATF_REQUIRE(setlocale(LC_CTYPE, t->locale) != NULL);
+
+       /* btowc(EOF) -> WEOF */
+       ATF_REQUIRE_EQ(btowc(EOF), WEOF);
+
+       /* wctob(WEOF) -> EOF */
+       ATF_REQUIRE_EQ(wctob(WEOF), EOF);
+
+       /* Invalid in initial shift state -> WEOF */
+       for (cp = t->illegal; *cp != '\0'; ++cp) {
+               printf("Checking illegal character 0x%x\n",
+                       (unsigned char)*cp);
+               ATF_REQUIRE_EQ(btowc(*cp), WEOF);
+       }
+
+       /* These should have valid wchar representations */
+       for (cp = t->legal; *cp != '\0'; ++cp) {
+               c = (unsigned char)*cp;
+               printf("Checking legal character 0x%x\n", c);
+
+               /* A legal character never maps to EOF */
+               ATF_REQUIRE(btowc(c) != WEOF);
+
+               /* And the mapping should be reversible */
+               printf("0x%x -> wide 0x%x -> 0x%x\n",
+                       c, btowc(c), (unsigned char)wctob(btowc(c)));
+               ATF_REQUIRE_EQ(wctob(btowc(c)), c);
+       }
+}
+
+ATF_TC(btowc);
+ATF_TC_HEAD(btowc, tc)
+{
+       atf_tc_set_md_var(tc, "descr", "Checks btowc(3) and wctob(3)");
+}
+ATF_TC_BODY(btowc, tc)
+{
+       struct test *t;
+
+       for (t = tests; t->locale != NULL; ++t)
+               h_btowc(t);
+}
+
+ATF_TC(stdc_iso_10646);
+ATF_TC_HEAD(stdc_iso_10646, tc)
+{
+       atf_tc_set_md_var(tc, "descr",
+               "Checks btowc(3) conversion to ISO10646");
+}
+ATF_TC_BODY(stdc_iso_10646, tc)
+{
+       struct test *t;
+
+#ifdef __STDC_ISO_10646__
+       for (t = tests; t->locale != NULL; ++t)
+               h_iso10646(t);
+#else /* ! __STDC_ISO_10646__ */
+       atf_tc_skip("__STDC_ISO_10646__ not defined");
+#endif /* ! __STDC_ISO_10646__ */
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+       ATF_TP_ADD_TC(tp, btowc);
+       ATF_TP_ADD_TC(tp, stdc_iso_10646);
+
+       return atf_no_error();
+}
diff -r 8d025f8a3e33 -r fdca3a920baa tests/lib/libc/locale/t_digittoint.c
--- a/tests/lib/libc/locale/t_digittoint.c      Thu Jun 01 09:59:13 2017 +0000
+++ b/tests/lib/libc/locale/t_digittoint.c      Thu Jun 01 15:45:02 2017 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: t_digittoint.c,v 1.1 2017/05/30 23:44:02 perseant Exp $ */
+/* $NetBSD: t_digittoint.c,v 1.2 2017/06/01 15:45:02 perseant Exp $ */
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #include <sys/cdefs.h>
 __COPYRIGHT("@(#) Copyright (c) 2017\
  The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_digittoint.c,v 1.1 2017/05/30 23:44:02 perseant Exp $");
+__RCSID("$NetBSD: t_digittoint.c,v 1.2 2017/06/01 15:45:02 perseant Exp $");
 
 #include <locale.h>
 #include <stdio.h>
@@ -42,6 +42,11 @@
 
 #include <atf-c.h>
 
+/* Use this until we have a better way to tell if it is defined */
+#ifdef digittoint
+# define DIGITTOINT_DEFINED
+#endif
+
 static struct test {
        const char *locale;
        const char *digits;
@@ -61,6 +66,7 @@
        }
 };
 
+#ifdef DIGITTOINT_DEFINED
 static void
 h_digittoint(const struct test *t)
 {
@@ -75,6 +81,7 @@
                ATF_REQUIRE_EQ(digittoint(t->digits[i]), i);
        }
 }
+#endif /* DIGITTOINT_DEFINED */
 
 ATF_TC(digittoint);
 
@@ -88,8 +95,12 @@



Home | Main Index | Thread Index | Old Index