diff options
Diffstat (limited to 'tests')
909 files changed, 19018 insertions, 2781 deletions
diff --git a/tests/Makefile.gnulib b/tests/Makefile.gnulib index 4b3f0ea2..5e989140 100644 --- a/tests/Makefile.gnulib +++ b/tests/Makefile.gnulib @@ -1,6 +1,6 @@  ## DO NOT EDIT! GENERATED AUTOMATICALLY!  ## Process this file with automake to produce Makefile.in. -# Copyright (C) 2002-2022 Free Software Foundation, Inc. +# Copyright (C) 2002-2024 Free Software Foundation, Inc.  #  # This file is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -81,6 +81,14 @@ EXTRA_DIST += test-accept.c signature.h macros.h  ## end   gnulib module accept-tests +## begin gnulib module alignasof-tests + +TESTS += test-alignasof +check_PROGRAMS += test-alignasof +EXTRA_DIST += test-alignasof.c macros.h + +## end   gnulib module alignasof-tests +  ## begin gnulib module alloca @@ -202,6 +210,22 @@ EXTRA_DIST += test-bind.c signature.h macros.h  ## end   gnulib module bind-tests +## begin gnulib module btoc32 + +libtests_a_SOURCES += btoc32.c + +## end   gnulib module btoc32 + +## begin gnulib module btoc32-tests + +TESTS += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh +TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-btoc32 +test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +EXTRA_DIST += test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh test-btoc32.c signature.h macros.h + +## end   gnulib module btoc32-tests +  ## begin gnulib module btowc  if GL_COND_OBJ_BTOWC @@ -212,11 +236,11 @@ endif  ## begin gnulib module btowc-tests -TESTS += test-btowc1.sh test-btowc2.sh +TESTS += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh  TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@'  check_PROGRAMS += test-btowc -test_btowc_LDADD = $(LDADD) $(LIB_SETLOCALE) -EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h +test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) +EXTRA_DIST += test-btowc-1.sh test-btowc-2.sh test-btowc-3.sh test-btowc.c signature.h macros.h  ## end   gnulib module btowc-tests @@ -224,7 +248,7 @@ EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c signature.h macros.h  TESTS += test-c-ctype  check_PROGRAMS += test-c-ctype -test_c_ctype_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB)  EXTRA_DIST += test-c-ctype.c macros.h  ## end   gnulib module c-ctype-tests @@ -234,12 +258,235 @@ EXTRA_DIST += test-c-ctype.c macros.h  TESTS += test-c-strcase.sh  TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@'  check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp -test_c_strcasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strncasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB)  EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c macros.h  ## end   gnulib module c-strcase-tests +## begin gnulib module c32isalnum-tests + +TESTS += test-c32isalnum.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isalnum +test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isalnum.sh test-c32isalnum.c signature.h macros.h + +## end   gnulib module c32isalnum-tests + +## begin gnulib module c32isalpha-tests + +TESTS += test-c32isalpha.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isalpha +test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isalpha.sh test-c32isalpha.c signature.h macros.h + +## end   gnulib module c32isalpha-tests + +## begin gnulib module c32isblank-tests + +TESTS += test-c32isblank.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isblank +test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isblank.sh test-c32isblank.c signature.h macros.h + +## end   gnulib module c32isblank-tests + +## begin gnulib module c32iscntrl-tests + +TESTS += test-c32iscntrl.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32iscntrl +test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h + +## end   gnulib module c32iscntrl-tests + +## begin gnulib module c32isdigit-tests + +TESTS += test-c32isdigit.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isdigit +test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isdigit.sh test-c32isdigit.c signature.h macros.h + +## end   gnulib module c32isdigit-tests + +## begin gnulib module c32isgraph-tests + +TESTS += test-c32isgraph.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isgraph +test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isgraph.sh test-c32isgraph.c signature.h macros.h + +## end   gnulib module c32isgraph-tests + +## begin gnulib module c32islower-tests + +TESTS += test-c32islower.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32islower +test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32islower.sh test-c32islower.c signature.h macros.h + +## end   gnulib module c32islower-tests + +## begin gnulib module c32isprint-tests + +TESTS += test-c32isprint.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isprint +test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isprint.sh test-c32isprint.c signature.h macros.h + +## end   gnulib module c32isprint-tests + +## begin gnulib module c32ispunct-tests + +TESTS += test-c32ispunct.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32ispunct +test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32ispunct.sh test-c32ispunct.c signature.h macros.h + +## end   gnulib module c32ispunct-tests + +## begin gnulib module c32isspace-tests + +TESTS += test-c32isspace.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isspace +test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isspace.sh test-c32isspace.c signature.h macros.h + +## end   gnulib module c32isspace-tests + +## begin gnulib module c32isupper-tests + +TESTS += test-c32isupper.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isupper +test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isupper.sh test-c32isupper.c signature.h macros.h + +## end   gnulib module c32isupper-tests + +## begin gnulib module c32isxdigit-tests + +TESTS += test-c32isxdigit.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32isxdigit +test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h + +## end   gnulib module c32isxdigit-tests + +## begin gnulib module c32rtomb + +if GL_COND_OBJ_C32RTOMB +libtests_a_SOURCES += c32rtomb.c +endif + +## end   gnulib module c32rtomb + +## begin gnulib module c32rtomb-tests + +TESTS += \ +  test-c32rtomb.sh \ +  test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ +  test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh \ +  test-c32rtomb-w32-8.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32rtomb test-c32rtomb-w32 +test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +EXTRA_DIST += test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh test-c32rtomb-w32.c signature.h macros.h + +## end   gnulib module c32rtomb-tests + +## begin gnulib module c32tob + +libtests_a_SOURCES += c32tob.c + +## end   gnulib module c32tob + +## begin gnulib module c32tolower-tests + +TESTS += test-c32tolower.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-c32tolower +test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32tolower.sh test-c32tolower.c signature.h macros.h + +## end   gnulib module c32tolower-tests + +## begin gnulib module c32width-tests + +TESTS += test-c32width +check_PROGRAMS += test-c32width +test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV) +EXTRA_DIST += test-c32width.c signature.h macros.h + +## end   gnulib module c32width-tests +  ## begin gnulib module calloc-gnu @@ -390,10 +637,41 @@ if GL_COND_OBJ_ERROR  libtests_a_SOURCES += error.c  endif -EXTRA_DIST += error.h -  ## end   gnulib module error +## begin gnulib module error-h + +BUILT_SOURCES += error.h + +# We need the following in order to override <error.h>. +error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) +	$(gl_V_at)$(SED_HEADER_STDOUT) \ +	      -e 's|@''GUARD_PREFIX''@|GL|g' \ +	      -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ +	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +	      -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ +	      -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ +	      -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ +	      -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ +	      -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ +	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ +	      $(srcdir)/error.in.h > $@-t +	$(AM_V_at)mv $@-t $@ +MOSTLYCLEANFILES += error.h error.h-t + +EXTRA_DIST += error.in.h + +## end   gnulib module error-h + +## begin gnulib module error-tests + +TESTS += test-error.sh +check_PROGRAMS += test-error +test_error_LDADD = $(LDADD) $(LIBINTL) +EXTRA_DIST += test-error.sh test-error.c macros.h + +## end   gnulib module error-tests +  ## begin gnulib module exitfail  libtests_a_SOURCES += exitfail.c @@ -539,7 +817,7 @@ EXTRA_DIST += test-free.c macros.h  TESTS += test-frexp-nolibm  check_PROGRAMS += test-frexp-nolibm  test_frexp_nolibm_SOURCES = test-frexp.c randomd.c -EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h nan.h signature.h macros.h randomd.c +EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h signature.h macros.h randomd.c  ## end   gnulib module frexp-nolibm-tests @@ -548,7 +826,7 @@ EXTRA_DIST += test-frexp.c test-frexp.h minus-zero.h infinity.h nan.h signature.  TESTS += test-frexpl-nolibm  check_PROGRAMS += test-frexpl-nolibm  test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c -EXTRA_DIST += test-frexpl.c test-frexp.h minus-zero.h infinity.h nan.h signature.h macros.h randoml.c +EXTRA_DIST += test-frexpl.c test-frexp.h minus-zero.h infinity.h signature.h macros.h randoml.c  ## end   gnulib module frexpl-nolibm-tests @@ -667,7 +945,11 @@ endif  ## begin gnulib module getprogname -libtests_a_SOURCES += getprogname.h getprogname.c +if GL_COND_OBJ_GETPROGNAME +libtests_a_SOURCES += getprogname.c +endif + +EXTRA_DIST += getprogname.h  ## end   gnulib module getprogname @@ -700,7 +982,7 @@ endif  TESTS += test-gettimeofday  check_PROGRAMS += test-gettimeofday -EXTRA_DIST += signature.h test-gettimeofday.c +EXTRA_DIST += test-gettimeofday.c signature.h macros.h  ## end   gnulib module gettimeofday-tests @@ -717,7 +999,7 @@ V_GPERF_0 = @echo "  GPERF   " $@;  TESTS += test-hard-locale  check_PROGRAMS += test-hard-locale -test_hard_locale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_HARD_LOCALE@ +test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@  # We cannot call this program 'locale', because the C++ compiler on Mac OS X  # would then barf upon '#include <locale>'. So, call it 'current-locale'.  noinst_PROGRAMS += current-locale @@ -846,7 +1128,7 @@ EXTRA_DIST += test-isblank.c signature.h macros.h  TESTS += test-isnand-nolibm  check_PROGRAMS += test-isnand-nolibm -EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h macros.h  ## end   gnulib module isnand-nolibm-tests @@ -855,7 +1137,7 @@ EXTRA_DIST += test-isnand-nolibm.c test-isnand.h minus-zero.h infinity.h nan.h m  TESTS += test-isnanf-nolibm  check_PROGRAMS += test-isnanf-nolibm -EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h macros.h  ## end   gnulib module isnanf-nolibm-tests @@ -864,7 +1146,7 @@ EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h minus-zero.h infinity.h nan.h m  TESTS += test-isnanl-nolibm  check_PROGRAMS += test-isnanl-nolibm -EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h nan.h macros.h +EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h minus-zero.h infinity.h macros.h  ## end   gnulib module isnanl-nolibm-tests @@ -885,11 +1167,20 @@ TESTS_ENVIRONMENT += \    LOCALE_JA='@LOCALE_JA@' \    LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-iswdigit -test_iswdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB)  EXTRA_DIST += test-iswdigit.sh test-iswdigit.c signature.h macros.h  ## end   gnulib module iswdigit-tests +## begin gnulib module iswpunct-tests + +TESTS += test-iswpunct.sh +check_PROGRAMS += test-iswpunct +test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +EXTRA_DIST += test-iswpunct.sh test-iswpunct.c signature.h macros.h + +## end   gnulib module iswpunct-tests +  ## begin gnulib module iswxdigit-tests  TESTS += test-iswxdigit.sh @@ -899,7 +1190,7 @@ TESTS_ENVIRONMENT += \    LOCALE_JA='@LOCALE_JA@' \    LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-iswxdigit -test_iswxdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB)  EXTRA_DIST += test-iswxdigit.sh test-iswxdigit.c signature.h macros.h  ## end   gnulib module iswxdigit-tests @@ -912,6 +1203,21 @@ EXTRA_DIST += test-langinfo.c  ## end   gnulib module langinfo-tests +## begin gnulib module largefile-tests + +TESTS += test-largefile +check_PROGRAMS += test-largefile +EXTRA_DIST += test-largefile.c + +## end   gnulib module largefile-tests + +## begin gnulib module libc-config + + +EXTRA_DIST += cdefs.h libc-config.h + +## end   gnulib module libc-config +  ## begin gnulib module limits-h-tests  TESTS += test-limits-h @@ -942,7 +1248,7 @@ EXTRA_DIST += test-listen.c signature.h macros.h  ## begin gnulib module localcharset-tests  noinst_PROGRAMS += test-localcharset -test_localcharset_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB)  EXTRA_DIST += test-localcharset.c  ## end   gnulib module localcharset-tests @@ -959,7 +1265,7 @@ EXTRA_DIST += test-locale.c  TESTS += test-localename  check_PROGRAMS += test-localename -test_localename_LDADD = $(LDADD) $(LIB_SETLOCALE) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)  EXTRA_DIST += test-localename.c macros.h @@ -975,7 +1281,7 @@ test_once1_SOURCES = test-once.c  test_once1_LDADD = $(LDADD) @LIBTHREAD@  test_once2_SOURCES = test-once.c  test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ -EXTRA_DIST += test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h +EXTRA_DIST += test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h macros.h  ## end   gnulib module lock-tests @@ -1029,22 +1335,41 @@ EXTRA_DIST += test-math.c macros.h  ## end   gnulib module math-tests +## begin gnulib module mbrtoc32-tests + +TESTS += \ +  test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh \ +  test-mbrtoc32-5.sh \ +  test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh \ +  test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ +  test-mbrtoc32-w32-8.sh +TESTS_ENVIRONMENT += \ +  LOCALE_FR='@LOCALE_FR@' \ +  LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +  LOCALE_JA='@LOCALE_JA@' \ +  LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbrtoc32 test-mbrtoc32-w32 +test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) +EXTRA_DIST += test-mbrtoc32-1.sh test-mbrtoc32-2.sh test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh test-mbrtoc32.c test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h macros.h + +## end   gnulib module mbrtoc32-tests +  ## begin gnulib module mbrtowc-tests  TESTS += \ -  test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ -  test-mbrtowc5.sh \ -  test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ -  test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh \ -  test-mbrtowc-w32-7.sh +  test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh \ +  test-mbrtowc-5.sh \ +  test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ +  test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ +  test-mbrtowc-w32-8.sh  TESTS_ENVIRONMENT += \    LOCALE_FR='@LOCALE_FR@' \    LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \    LOCALE_JA='@LOCALE_JA@' \    LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-mbrtowc test-mbrtowc-w32 -test_mbrtowc_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh test-mbrtowc.c test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32.c signature.h macros.h +test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +EXTRA_DIST += test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h  ## end   gnulib module mbrtowc-tests @@ -1053,7 +1378,7 @@ EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.s  TESTS += test-mbsinit.sh  TESTS_ENVIRONMENT += LOCALE_FR_UTF8='@LOCALE_FR_UTF8@'  check_PROGRAMS += test-mbsinit -test_mbsinit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB)  EXTRA_DIST += test-mbsinit.sh test-mbsinit.c signature.h macros.h  ## end   gnulib module mbsinit-tests @@ -1096,6 +1421,12 @@ EXTRA_DIST += msvc-nothrow.h  ## end   gnulib module msvc-nothrow +## begin gnulib module nan + +libtests_a_SOURCES += nan.h + +## end   gnulib module nan +  ## begin gnulib module nanosleep  if GL_COND_OBJ_NANOSLEEP @@ -1108,7 +1439,7 @@ endif  TESTS += test-nanosleep  check_PROGRAMS += test-nanosleep -test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB)  EXTRA_DIST += test-nanosleep.c signature.h macros.h  ## end   gnulib module nanosleep-tests @@ -1241,7 +1572,7 @@ endif  TESTS += test-pselect  check_PROGRAMS += test-pselect -test_pselect_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ @LIB_PTHREAD_SIGMASK@ $(INET_PTON_LIB) +test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB)  EXTRA_DIST += test-pselect.c test-select.h macros.h signature.h  ## end   gnulib module pselect-tests @@ -1284,6 +1615,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \  	      -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \  	      -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ +	      < $(srcdir)/pthread.in.h > $@-t1 +	$(AM_V_at)sed \  	      -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \  	      -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \  	      -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ @@ -1325,8 +1658,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \  	      -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \  	      -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ -	      < $(srcdir)/pthread.in.h | \ -	  sed -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ +	      < $@-t1 > $@-t2 +	$(AM_V_at)sed \ +	      -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ @@ -1360,6 +1694,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ +	      < $@-t2 > $@-t3 +	$(AM_V_at)sed \  	      -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ @@ -1381,9 +1717,10 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \  	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \  	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ -	      > $@-t -	$(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += pthread.h pthread.h-t +	      < $@-t3 > $@-t4 +	$(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 +	$(AM_V_at)mv $@-t4 $@ +MOSTLYCLEANFILES += pthread.h pthread.h-t1 pthread.h-t2 pthread.h-t3 pthread.h-t4  EXTRA_DIST += pthread.in.h @@ -1426,8 +1763,8 @@ endif  TESTS += test-pthread_sigmask1 test-pthread_sigmask2  check_PROGRAMS += test-pthread_sigmask1 test-pthread_sigmask2 -test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ -test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ +test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ +test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@  EXTRA_DIST += test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h macros.h  ## end   gnulib module pthread_sigmask-tests @@ -1456,6 +1793,39 @@ EXTRA_DIST += test-raise.c signature.h macros.h  ## end   gnulib module raise-tests +## begin gnulib module random + +if GL_COND_OBJ_RANDOM +libtests_a_SOURCES += random.c +endif + +## end   gnulib module random + +## begin gnulib module random-tests + +TESTS += test-random test-random-mt +check_PROGRAMS += test-random test-random-mt +test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) +EXTRA_DIST += test-random.c test-random-mt.c signature.h macros.h + +## end   gnulib module random-tests + +## begin gnulib module random_r + +if GL_COND_OBJ_RANDOM_R +libtests_a_SOURCES += random_r.c +endif + +## end   gnulib module random_r + +## begin gnulib module random_r-tests + +TESTS += test-random_r +check_PROGRAMS += test-random_r +EXTRA_DIST += test-random_r.c signature.h macros.h + +## end   gnulib module random_r-tests +  ## begin gnulib module realloc-gnu @@ -1500,8 +1870,7 @@ EXTRA_DIST += test-reallocarray.c signature.h macros.h  ## begin gnulib module same-inode - -EXTRA_DIST += same-inode.h +libtests_a_SOURCES += same-inode.h same-inode.c  ## end   gnulib module same-inode @@ -1563,9 +1932,9 @@ endif  TESTS += test-select test-select-in.sh test-select-out.sh  # test-select-stdin has to be run by hand.  check_PROGRAMS += test-select test-select-fd test-select-stdin -test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) -test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ -test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ +test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) +test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ +test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@  EXTRA_DIST += macros.h signature.h test-select.c test-select.h test-select-fd.c test-select-in.sh test-select-out.sh test-select-stdin.c  ## end   gnulib module select-tests @@ -1604,13 +1973,21 @@ check_PROGRAMS += \    test-setlocale_null \    test-setlocale_null-mt-one \    test-setlocale_null-mt-all -test_setlocale_null_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ -test_setlocale_null_mt_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale_null_mt_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) +test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ +test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB)  EXTRA_DIST += test-setlocale_null.c test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c  ## end   gnulib module setlocale-null-tests +## begin gnulib module setlocale-null-unlocked-tests + +TESTS += test-setlocale_null-unlocked +check_PROGRAMS += test-setlocale_null-unlocked +EXTRA_DIST += test-setlocale_null-unlocked.c + +## end   gnulib module setlocale-null-unlocked-tests +  ## begin gnulib module setlocale-tests  TESTS += test-setlocale1.sh test-setlocale2.sh @@ -1620,8 +1997,8 @@ TESTS_ENVIRONMENT += \    LOCALE_JA='@LOCALE_JA@' \    LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-setlocale1 test-setlocale2 -test_setlocale1_LDADD = $(LDADD) @LIB_SETLOCALE@ -test_setlocale2_LDADD = $(LDADD) @LIB_SETLOCALE@ +test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ +test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@  EXTRA_DIST += test-setlocale1.sh test-setlocale1.c test-setlocale2.sh test-setlocale2.c signature.h macros.h  ## end   gnulib module setlocale-tests @@ -1702,6 +2079,18 @@ EXTRA_DIST += test-signbit.c minus-zero.h infinity.h macros.h  ## end   gnulib module signbit-tests +## begin gnulib module signed-nan + +libtests_a_SOURCES += signed-nan.h + +## end   gnulib module signed-nan + +## begin gnulib module signed-snan + +libtests_a_SOURCES += signed-snan.h + +## end   gnulib module signed-snan +  ## begin gnulib module sigprocmask  if GL_COND_OBJ_SIGPROCMASK @@ -1734,6 +2123,12 @@ EXTRA_DIST += test-sleep.c signature.h macros.h  ## end   gnulib module sleep-tests +## begin gnulib module snan + +libtests_a_SOURCES += snan.h + +## end   gnulib module snan +  ## begin gnulib module snippet/_Noreturn  # Because this Makefile snippet defines a variable used by other @@ -1842,39 +2237,11 @@ EXTRA_DIST += stat-time.h  TESTS += test-stat-time  check_PROGRAMS += test-stat-time -test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB)  EXTRA_DIST += test-stat-time.c macros.h nap.h  ## end   gnulib module stat-time-tests -## begin gnulib module stdalign - -BUILT_SOURCES += $(STDALIGN_H) - -# We need the following in order to create <stdalign.h> when the system -# doesn't have one that works. -if GL_GENERATE_STDALIGN_H -stdalign.h: stdalign.in.h $(top_builddir)/config.status -	$(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h -	$(AM_V_at)mv $@-t $@ -else -stdalign.h: $(top_builddir)/config.status -	rm -f $@ -endif -MOSTLYCLEANFILES += stdalign.h stdalign.h-t - -EXTRA_DIST += stdalign.in.h - -## end   gnulib module stdalign - -## begin gnulib module stdalign-tests - -TESTS += test-stdalign -check_PROGRAMS += test-stdalign -EXTRA_DIST += test-stdalign.c macros.h - -## end   gnulib module stdalign-tests -  ## begin gnulib module stdbool-tests  TESTS += test-stdbool @@ -1980,14 +2347,17 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \  	      -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \  	      -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ -	      < $(srcdir)/stdio.in.h | \ -	  sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ +	      < $(srcdir)/stdio.in.h > $@-t1 +	$(AM_V_at)sed \ +	      -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \  	      -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \  	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \  	      -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \  	      -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \  	      -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ +	      -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \  	      -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ +	      -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \  	      -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \  	      -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \  	      -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ @@ -1998,6 +2368,8 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \  	      -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \  	      -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ +	      < $@-t1 > $@-t2 +	$(AM_V_at)sed \  	      -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \  	      -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \  	      -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ @@ -2035,9 +2407,10 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \  	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \  	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ -	      > $@-t -	$(AM_V_at)mv $@-t $@ -MOSTLYCLEANFILES += stdio.h stdio.h-t +	      < $@-t2 > $@-t3 +	$(AM_V_at)rm -f $@-t1 $@-t2 +	$(AM_V_at)mv $@-t3 $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3  if GL_COND_OBJ_STDIO_READ  libtests_a_SOURCES += stdio-read.c @@ -2054,7 +2427,7 @@ EXTRA_DIST += stdio.in.h  TESTS += test-stdio  check_PROGRAMS += test-stdio -EXTRA_DIST += test-stdio.c +EXTRA_DIST += test-stdio.c macros.h  ## end   gnulib module stdio-tests @@ -2493,6 +2866,14 @@ EXTRA_DIST += test-thread_self.c test-thread_create.c macros.h  ## begin gnulib module time +if GL_COND_OBJ_TIME +libtests_a_SOURCES += time.c +endif + +## end   gnulib module time + +## begin gnulib module time-h +  BUILT_SOURCES += time.h  # We need the following in order to create <time.h> when the system @@ -2510,6 +2891,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(  	      -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \  	      -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \  	      -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ +	      -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \  	      -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \  	      -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \  	      -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ @@ -2531,7 +2913,10 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(  	      -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \  	      -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \  	      -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ +	      -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \  	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ +	      -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ +	      -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \  	      -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \  	      -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \  	      -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ @@ -2547,16 +2932,32 @@ MOSTLYCLEANFILES += time.h time.h-t  EXTRA_DIST += time.in.h -## end   gnulib module time +## end   gnulib module time-h + +## begin gnulib module time-h-tests + +TESTS += test-time-h +check_PROGRAMS += test-time-h +EXTRA_DIST += test-time-h.c + +## end   gnulib module time-h-tests  ## begin gnulib module time-tests  TESTS += test-time  check_PROGRAMS += test-time -EXTRA_DIST += test-time.c +EXTRA_DIST += test-time.c signature.h macros.h  ## end   gnulib module time-tests +## begin gnulib module uchar-tests + +TESTS += test-uchar +check_PROGRAMS += test-uchar +EXTRA_DIST += test-uchar.c + +## end   gnulib module uchar-tests +  ## begin gnulib module unicase/cased-tests  TESTS += test-cased @@ -2583,7 +2984,7 @@ TESTS += unicase/test-locale-language.sh  TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-locale-language  test_locale_language_SOURCES = unicase/test-locale-language.c -test_locale_language_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_locale_language_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD)  EXTRA_DIST += unicase/test-locale-language.sh unicase/test-locale-language.c macros.h  ## end   gnulib module unicase/locale-language-tests @@ -2959,7 +3360,7 @@ TESTS_ENVIRONMENT += \    LOCALE_FR_UTF8='@LOCALE_FR_UTF8@'  check_PROGRAMS += test-ulc-casecmp  test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c -test_ulc_casecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh unicase/test-ulc-casecmp.c unicase/test-casecmp.h macros.h @@ -2973,7 +3374,7 @@ TESTS_ENVIRONMENT += \    LOCALE_FR_UTF8='@LOCALE_FR_UTF8@'  check_PROGRAMS += test-ulc-casecoll  test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c -test_ulc_casecoll_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecoll_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh unicase/test-ulc-casecoll.c unicase/test-casecmp.h macros.h @@ -3843,6 +4244,36 @@ EXTRA_DIST += unictype/test-digit.c unictype/test-digit.h macros.h  ## end   gnulib module unictype/digit-tests +## begin gnulib module unictype/incb-byname-tests + +TESTS += test-incb_byname +check_PROGRAMS += test-incb_byname +test_incb_byname_SOURCES = unictype/test-incb_byname.c +test_incb_byname_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_byname.c macros.h + +## end   gnulib module unictype/incb-byname-tests + +## begin gnulib module unictype/incb-name-tests + +TESTS += test-incb_name +check_PROGRAMS += test-incb_name +test_incb_name_SOURCES = unictype/test-incb_name.c +test_incb_name_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_name.c macros.h + +## end   gnulib module unictype/incb-name-tests + +## begin gnulib module unictype/incb-of-tests + +TESTS += test-incb_of +check_PROGRAMS += test-incb_of +test_incb_of_SOURCES = unictype/test-incb_of.c +test_incb_of_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-incb_of.c unictype/test-incb_of.h macros.h + +## end   gnulib module unictype/incb-of-tests +  ## begin gnulib module unictype/joininggroup-byname-tests  TESTS += test-joininggroup_byname @@ -4413,6 +4844,26 @@ EXTRA_DIST += unictype/test-pr_hyphen.c unictype/test-predicate-part1.h unictype  ## end   gnulib module unictype/property-hyphen-tests +## begin gnulib module unictype/property-id-compat-math-continue-tests + +TESTS += test-pr_id_compat_math_continue +check_PROGRAMS += test-pr_id_compat_math_continue +test_pr_id_compat_math_continue_SOURCES = unictype/test-pr_id_compat_math_continue.c +test_pr_id_compat_math_continue_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_id_compat_math_continue.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end   gnulib module unictype/property-id-compat-math-continue-tests + +## begin gnulib module unictype/property-id-compat-math-start-tests + +TESTS += test-pr_id_compat_math_start +check_PROGRAMS += test-pr_id_compat_math_start +test_pr_id_compat_math_start_SOURCES = unictype/test-pr_id_compat_math_start.c +test_pr_id_compat_math_start_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_id_compat_math_start.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end   gnulib module unictype/property-id-compat-math-start-tests +  ## begin gnulib module unictype/property-id-continue-tests  TESTS += test-pr_id_continue @@ -4463,6 +4914,16 @@ EXTRA_DIST += unictype/test-pr_ids_trinary_operator.c unictype/test-predicate-pa  ## end   gnulib module unictype/property-ids-trinary-operator-tests +## begin gnulib module unictype/property-ids-unary-operator-tests + +TESTS += test-pr_ids_unary_operator +check_PROGRAMS += test-pr_ids_unary_operator +test_pr_ids_unary_operator_SOURCES = unictype/test-pr_ids_unary_operator.c +test_pr_ids_unary_operator_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_ids_unary_operator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end   gnulib module unictype/property-ids-unary-operator-tests +  ## begin gnulib module unictype/property-ignorable-control-tests  TESTS += test-pr_ignorable_control @@ -4693,6 +5154,16 @@ EXTRA_DIST += unictype/test-pr_pattern_white_space.c unictype/test-predicate-par  ## end   gnulib module unictype/property-pattern-white-space-tests +## begin gnulib module unictype/property-prepended-concatenation-mark-tests + +TESTS += test-pr_prepended_concatenation_mark +check_PROGRAMS += test-pr_prepended_concatenation_mark +test_pr_prepended_concatenation_mark_SOURCES = unictype/test-pr_prepended_concatenation_mark.c +test_pr_prepended_concatenation_mark_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unictype/test-pr_prepended_concatenation_mark.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h macros.h + +## end   gnulib module unictype/property-prepended-concatenation-mark-tests +  ## begin gnulib module unictype/property-private-use-tests  TESTS += test-pr_private_use @@ -4939,7 +5410,7 @@ TESTS += test-u16-grapheme-breaks  check_PROGRAMS += test-u16-grapheme-breaks  test_u16_grapheme_breaks_SOURCES = unigbrk/test-u16-grapheme-breaks.c  test_u16_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u16-grapheme-breaks.c macros.h  ## end   gnulib module unigbrk/u16-grapheme-breaks-tests @@ -4949,7 +5420,7 @@ TESTS += test-u16-grapheme-next  check_PROGRAMS += test-u16-grapheme-next  test_u16_grapheme_next_SOURCES = unigbrk/test-u16-grapheme-next.c  test_u16_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-next.c +EXTRA_DIST += unigbrk/test-u16-grapheme-next.c macros.h  ## end   gnulib module unigbrk/u16-grapheme-next-tests @@ -4959,7 +5430,7 @@ TESTS += test-u16-grapheme-prev  check_PROGRAMS += test-u16-grapheme-prev  test_u16_grapheme_prev_SOURCES = unigbrk/test-u16-grapheme-prev.c  test_u16_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u16-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u16-grapheme-prev.c macros.h  ## end   gnulib module unigbrk/u16-grapheme-prev-tests @@ -4969,7 +5440,7 @@ TESTS += test-u32-grapheme-breaks  check_PROGRAMS += test-u32-grapheme-breaks  test_u32_grapheme_breaks_SOURCES = unigbrk/test-u32-grapheme-breaks.c  test_u32_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u32-grapheme-breaks.c macros.h  ## end   gnulib module unigbrk/u32-grapheme-breaks-tests @@ -4979,7 +5450,7 @@ TESTS += test-u32-grapheme-next  check_PROGRAMS += test-u32-grapheme-next  test_u32_grapheme_next_SOURCES = unigbrk/test-u32-grapheme-next.c  test_u32_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-next.c +EXTRA_DIST += unigbrk/test-u32-grapheme-next.c macros.h  ## end   gnulib module unigbrk/u32-grapheme-next-tests @@ -4989,7 +5460,7 @@ TESTS += test-u32-grapheme-prev  check_PROGRAMS += test-u32-grapheme-prev  test_u32_grapheme_prev_SOURCES = unigbrk/test-u32-grapheme-prev.c  test_u32_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u32-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u32-grapheme-prev.c macros.h  ## end   gnulib module unigbrk/u32-grapheme-prev-tests @@ -4999,7 +5470,7 @@ TESTS += test-u8-grapheme-breaks  check_PROGRAMS += test-u8-grapheme-breaks  test_u8_grapheme_breaks_SOURCES = unigbrk/test-u8-grapheme-breaks.c  test_u8_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-breaks.c +EXTRA_DIST += unigbrk/test-u8-grapheme-breaks.c macros.h  ## end   gnulib module unigbrk/u8-grapheme-breaks-tests @@ -5009,7 +5480,7 @@ TESTS += test-u8-grapheme-next  check_PROGRAMS += test-u8-grapheme-next  test_u8_grapheme_next_SOURCES = unigbrk/test-u8-grapheme-next.c  test_u8_grapheme_next_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-next.c +EXTRA_DIST += unigbrk/test-u8-grapheme-next.c macros.h  ## end   gnulib module unigbrk/u8-grapheme-next-tests @@ -5019,7 +5490,7 @@ TESTS += test-u8-grapheme-prev  check_PROGRAMS += test-u8-grapheme-prev  test_u8_grapheme_prev_SOURCES = unigbrk/test-u8-grapheme-prev.c  test_u8_grapheme_prev_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-u8-grapheme-prev.c +EXTRA_DIST += unigbrk/test-u8-grapheme-prev.c macros.h  ## end   gnulib module unigbrk/u8-grapheme-prev-tests @@ -5039,7 +5510,7 @@ TESTS += unigbrk/test-uc-grapheme-breaks.sh  check_PROGRAMS += test-uc-grapheme-breaks  test_uc_grapheme_breaks_SOURCES = unigbrk/test-uc-grapheme-breaks.c  test_uc_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING) -EXTRA_DIST += unigbrk/test-uc-grapheme-breaks.c unigbrk/test-uc-grapheme-breaks.sh unigbrk/GraphemeBreakTest.txt +EXTRA_DIST += unigbrk/test-uc-grapheme-breaks.c unigbrk/test-uc-grapheme-breaks.sh unigbrk/GraphemeBreakTest.txt macros.h  ## end   gnulib module unigbrk/uc-grapheme-breaks-tests @@ -5059,7 +5530,7 @@ TESTS += unigbrk/test-ulc-grapheme-breaks.sh  TESTS_ENVIRONMENT += LOCALE_AR='@LOCALE_AR@'  check_PROGRAMS += test-ulc-grapheme-breaks  test_ulc_grapheme_breaks_SOURCES = unigbrk/test-ulc-grapheme-breaks.c -test_ulc_grapheme_breaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_grapheme_breaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unigbrk/test-ulc-grapheme-breaks.sh unigbrk/test-ulc-grapheme-breaks.c macros.h  ## end   gnulib module unigbrk/ulc-grapheme-breaks-tests @@ -5146,6 +5617,16 @@ EXTRA_DIST += unilbrk/test-ulc-width-linebreaks.c macros.h  ## end   gnulib module unilbrk/ulc-width-linebreaks-tests +## begin gnulib module unimetadata/u-version-tests + +TESTS += test-u-version +check_PROGRAMS += test-u-version +test_u_version_SOURCES = unimetadata/test-u-version.c +test_u_version_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unimetadata/test-u-version.c macros.h + +## end   gnulib module unimetadata/u-version-tests +  ## begin gnulib module uniname/uniname-tests  # Unlike other libunistring modules, this test passes only when the @@ -5385,9 +5866,9 @@ check_PROGRAMS += test-u16-vasnprintf1 test-u16-vasnprintf2 test-u16-vasnprintf3  test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c  test_u16_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c -test_u16_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c -test_u16_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unistdio/test-u16-vasnprintf1.c unistdio/test-u16-asnprintf1.h unistdio/test-u16-printf1.h unistdio/test-u16-vasnprintf2.sh unistdio/test-u16-vasnprintf2.c unistdio/test-u16-vasnprintf3.sh unistdio/test-u16-vasnprintf3.c macros.h  ## end   gnulib module unistdio/u16-vasnprintf-tests @@ -5440,9 +5921,9 @@ check_PROGRAMS += test-u32-vasnprintf1 test-u32-vasnprintf2 test-u32-vasnprintf3  test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c  test_u32_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c -test_u32_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c -test_u32_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unistdio/test-u32-vasnprintf1.c unistdio/test-u32-asnprintf1.h unistdio/test-u32-printf1.h unistdio/test-u32-vasnprintf2.sh unistdio/test-u32-vasnprintf2.c unistdio/test-u32-vasnprintf3.sh unistdio/test-u32-vasnprintf3.c macros.h  ## end   gnulib module unistdio/u32-vasnprintf-tests @@ -5495,9 +5976,9 @@ check_PROGRAMS += test-u8-vasnprintf1 test-u8-vasnprintf2 test-u8-vasnprintf3  test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c  test_u8_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c -test_u8_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c -test_u8_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += unistdio/test-u8-vasnprintf1.c unistdio/test-u8-asnprintf1.h unistdio/test-u8-printf1.h unistdio/test-u8-vasnprintf2.sh unistdio/test-u8-vasnprintf2.c unistdio/test-u8-vasnprintf3.sh unistdio/test-u8-vasnprintf3.c macros.h  ## end   gnulib module unistdio/u8-vasnprintf-tests @@ -5537,7 +6018,7 @@ EXTRA_DIST += unistdio/test-u8-vsprintf1.c unistdio/test-u8-printf1.h macros.h  TESTS += test-ulc-asnprintf1  check_PROGRAMS += test-ulc-asnprintf1  test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c -test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  EXTRA_DIST += unistdio/test-ulc-asnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h macros.h  ## end   gnulib module unistdio/ulc-asnprintf-tests @@ -5548,11 +6029,11 @@ TESTS += test-ulc-vasnprintf1 unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc  TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@'  check_PROGRAMS += test-ulc-vasnprintf1 test-ulc-vasnprintf2 test-ulc-vasnprintf3  test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c -test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c -test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c -test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  EXTRA_DIST += unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc-vasnprintf2.c unistdio/test-ulc-vasnprintf3.sh unistdio/test-ulc-vasnprintf3.c macros.h  ## end   gnulib module unistdio/ulc-vasnprintf-tests @@ -5562,7 +6043,7 @@ EXTRA_DIST += unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h uni  TESTS += test-ulc-vasprintf1  check_PROGRAMS += test-ulc-vasprintf1  test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c -test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  EXTRA_DIST += unistdio/test-ulc-vasprintf1.c unistdio/test-ulc-printf1.h macros.h  ## end   gnulib module unistdio/ulc-vasprintf-tests @@ -5572,7 +6053,7 @@ EXTRA_DIST += unistdio/test-ulc-vasprintf1.c unistdio/test-ulc-printf1.h macros.  TESTS += test-ulc-vsnprintf1  check_PROGRAMS += test-ulc-vsnprintf1  test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c -test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB)  EXTRA_DIST += unistdio/test-ulc-vsnprintf1.c unistdio/test-ulc-printf1.h macros.h  ## end   gnulib module unistdio/ulc-vsnprintf-tests @@ -5582,7 +6063,7 @@ EXTRA_DIST += unistdio/test-ulc-vsnprintf1.c unistdio/test-ulc-printf1.h macros.  TESTS += test-ulc-vsprintf1  check_PROGRAMS += test-ulc-vsprintf1  test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c -test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB)  EXTRA_DIST += unistdio/test-ulc-vsprintf1.c unistdio/test-ulc-printf1.h macros.h  ## end   gnulib module unistdio/ulc-vsprintf-tests @@ -5717,6 +6198,16 @@ EXTRA_DIST += unistr/test-u16-next.c macros.h  ## end   gnulib module unistr/u16-next-tests +## begin gnulib module unistr/u16-pcpy-tests + +TESTS += test-u16-pcpy +check_PROGRAMS += test-u16-pcpy +test_u16_pcpy_SOURCES = unistr/test-u16-pcpy.c +test_u16_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u16-pcpy.c unistr/test-pcpy.h macros.h + +## end   gnulib module unistr/u16-pcpy-tests +  ## begin gnulib module unistr/u16-prev-tests  TESTS += test-u16-prev @@ -6067,6 +6558,16 @@ EXTRA_DIST += unistr/test-u32-next.c macros.h  ## end   gnulib module unistr/u32-next-tests +## begin gnulib module unistr/u32-pcpy-tests + +TESTS += test-u32-pcpy +check_PROGRAMS += test-u32-pcpy +test_u32_pcpy_SOURCES = unistr/test-u32-pcpy.c +test_u32_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u32-pcpy.c unistr/test-pcpy.h macros.h + +## end   gnulib module unistr/u32-pcpy-tests +  ## begin gnulib module unistr/u32-prev-tests  TESTS += test-u32-prev @@ -6417,6 +6918,16 @@ EXTRA_DIST += unistr/test-u8-next.c macros.h  ## end   gnulib module unistr/u8-next-tests +## begin gnulib module unistr/u8-pcpy-tests + +TESTS += test-u8-pcpy +check_PROGRAMS += test-u8-pcpy +test_u8_pcpy_SOURCES = unistr/test-u8-pcpy.c +test_u8_pcpy_LDADD = $(LDADD) $(LIBUNISTRING) +EXTRA_DIST += unistr/test-u8-pcpy.c unistr/test-pcpy.h macros.h + +## end   gnulib module unistr/u8-pcpy-tests +  ## begin gnulib module unistr/u8-prev-tests  TESTS += test-u8-prev @@ -6675,7 +7186,7 @@ TESTS += uniwbrk/test-ulc-wordbreaks.sh  TESTS_ENVIRONMENT += LOCALE_FR='@LOCALE_FR@'  check_PROGRAMS += test-ulc-wordbreaks  test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c -test_ulc_wordbreaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_wordbreaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  EXTRA_DIST += uniwbrk/test-ulc-wordbreaks.sh uniwbrk/test-ulc-wordbreaks.c macros.h @@ -6829,17 +7340,17 @@ endif  TESTS += \    test-wcrtomb.sh \ -  test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ -  test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ -  test-wcrtomb-w32-7.sh +  test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ +  test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ +  test-wcrtomb-w32-8.sh  TESTS_ENVIRONMENT += \    LOCALE_FR='@LOCALE_FR@' \    LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \    LOCALE_JA='@LOCALE_JA@' \    LOCALE_ZH_CN='@LOCALE_ZH_CN@'  check_PROGRAMS += test-wcrtomb test-wcrtomb-w32 -test_wcrtomb_LDADD = $(LDADD) $(LIB_SETLOCALE) -EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh test-wcrtomb-w32.c signature.h macros.h +test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) +EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h  ## end   gnulib module wcrtomb-tests @@ -6873,7 +7384,7 @@ EXTRA_DIST += test-wctype-h.c macros.h  TESTS += test-wcwidth  check_PROGRAMS += test-wcwidth -test_wcwidth_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) +test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING)  EXTRA_DIST += test-wcwidth.c signature.h macros.h  ## end   gnulib module wcwidth-tests diff --git a/tests/Makefile.in b/tests/Makefile.in index 1da30a6a..4f17e0d7 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -14,7 +14,7 @@  @SET_MAKE@ -# Copyright (C) 2002-2022 Free Software Foundation, Inc. +# Copyright (C) 2002-2024 Free Software Foundation, Inc.  #  # This file is free software; you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -112,17 +112,27 @@ PRE_UNINSTALL = :  POST_UNINSTALL = :  build_triplet = @build@  host_triplet = @host@ -TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ -	test-arpa_inet$(EXEEXT) test-array-mergesort$(EXEEXT) \ -	test-assert$(EXEEXT) test-binary-io.sh test-bind$(EXEEXT) \ -	test-btowc1.sh test-btowc2.sh test-c-ctype$(EXEEXT) \ -	test-c-strcase.sh test-calloc-gnu$(EXEEXT) \ -	test-cloexec$(EXEEXT) test-close$(EXEEXT) \ -	test-connect$(EXEEXT) test-ctype$(EXEEXT) test-dup2$(EXEEXT) \ -	test-environ$(EXEEXT) test-errno$(EXEEXT) \ -	test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ -	test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ -	test-fread$(EXEEXT) test-free$(EXEEXT) \ +TESTS = test-accept$(EXEEXT) test-alignasof$(EXEEXT) \ +	test-alloca-opt$(EXEEXT) test-arpa_inet$(EXEEXT) \ +	test-array-mergesort$(EXEEXT) test-assert$(EXEEXT) \ +	test-binary-io.sh test-bind$(EXEEXT) test-btoc32-1.sh \ +	test-btoc32-2.sh test-btoc32-3.sh test-btowc-1.sh \ +	test-btowc-2.sh test-btowc-3.sh test-c-ctype$(EXEEXT) \ +	test-c-strcase.sh test-c32isalnum.sh test-c32isalpha.sh \ +	test-c32isblank.sh test-c32iscntrl.sh test-c32isdigit.sh \ +	test-c32isgraph.sh test-c32islower.sh test-c32isprint.sh \ +	test-c32ispunct.sh test-c32isspace.sh test-c32isupper.sh \ +	test-c32isxdigit.sh test-c32rtomb.sh test-c32rtomb-w32-2.sh \ +	test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ +	test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh \ +	test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh \ +	test-c32tolower.sh test-c32width$(EXEEXT) \ +	test-calloc-gnu$(EXEEXT) test-cloexec$(EXEEXT) \ +	test-close$(EXEEXT) test-connect$(EXEEXT) test-ctype$(EXEEXT) \ +	test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ +	test-error.sh test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ +	test-fdopen$(EXEEXT) test-fgetc$(EXEEXT) test-float$(EXEEXT) \ +	test-fputc$(EXEEXT) test-fread$(EXEEXT) test-free$(EXEEXT) \  	test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \  	test-fseterr$(EXEEXT) test-fstat$(EXEEXT) test-ftruncate.sh \  	test-fwrite$(EXEEXT) test-getcwd-lgpl$(EXEEXT) \ @@ -134,18 +144,24 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-ioctl$(EXEEXT) test-isblank$(EXEEXT) \  	test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \  	test-isnanl-nolibm$(EXEEXT) test-iswblank$(EXEEXT) \ -	test-iswdigit.sh test-iswxdigit.sh test-langinfo$(EXEEXT) \ +	test-iswdigit.sh test-iswpunct.sh test-iswxdigit.sh \ +	test-langinfo$(EXEEXT) test-largefile$(EXEEXT) \  	test-limits-h$(EXEEXT) test-listen$(EXEEXT) \  	test-locale$(EXEEXT) test-localename$(EXEEXT) \  	test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \  	test-once2$(EXEEXT) test-lstat$(EXEEXT) \  	test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ -	test-math$(EXEEXT) test-mbrtowc1.sh test-mbrtowc2.sh \ -	test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc5.sh \ -	test-mbrtowc-w32-1.sh test-mbrtowc-w32-2.sh \ -	test-mbrtowc-w32-3.sh test-mbrtowc-w32-4.sh \ -	test-mbrtowc-w32-5.sh test-mbrtowc-w32-6.sh \ -	test-mbrtowc-w32-7.sh test-mbsinit.sh test-memchr$(EXEEXT) \ +	test-math$(EXEEXT) test-mbrtoc32-1.sh test-mbrtoc32-2.sh \ +	test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh \ +	test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ +	test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ +	test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ +	test-mbrtoc32-w32-8.sh test-mbrtowc-1.sh test-mbrtowc-2.sh \ +	test-mbrtowc-3.sh test-mbrtowc-4.sh test-mbrtowc-5.sh \ +	test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \ +	test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ +	test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ +	test-mbrtowc-w32-8.sh test-mbsinit.sh test-memchr$(EXEEXT) \  	test-nanosleep$(EXEEXT) test-netinet_in$(EXEEXT) \  	test-open$(EXEEXT) test-pathmax$(EXEEXT) test-perror.sh \  	test-perror2$(EXEEXT) test-pipe$(EXEEXT) \ @@ -153,51 +169,53 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pselect$(EXEEXT) test-pthread$(EXEEXT) \  	test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \  	test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ -	test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ -	test-sched$(EXEEXT) test-select$(EXEEXT) test-select-in.sh \ -	test-select-out.sh test-setenv$(EXEEXT) \ -	test-setlocale_null$(EXEEXT) \ +	test-random$(EXEEXT) test-random-mt$(EXEEXT) \ +	test-random_r$(EXEEXT) test-realloc-gnu$(EXEEXT) \ +	test-reallocarray$(EXEEXT) test-sched$(EXEEXT) \ +	test-select$(EXEEXT) test-select-in.sh test-select-out.sh \ +	test-setenv$(EXEEXT) test-setlocale_null$(EXEEXT) \  	test-setlocale_null-mt-one$(EXEEXT) \ -	test-setlocale_null-mt-all$(EXEEXT) test-setlocale1.sh \ +	test-setlocale_null-mt-all$(EXEEXT) \ +	test-setlocale_null-unlocked$(EXEEXT) test-setlocale1.sh \  	test-setlocale2.sh test-setsockopt$(EXEEXT) \  	test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \  	test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \  	test-sockets$(EXEEXT) test-stat$(EXEEXT) \ -	test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ -	test-stdbool$(EXEEXT) test-stdckdint$(EXEEXT) \ -	test-stddef$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ -	test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ -	test-strerror_r$(EXEEXT) test-striconveh$(EXEEXT) \ -	test-striconveha$(EXEEXT) test-string$(EXEEXT) \ -	test-strncat$(EXEEXT) test-strstr$(EXEEXT) \ -	test-symlink$(EXEEXT) test-sys_ioctl$(EXEEXT) \ -	test-sys_select$(EXEEXT) test-sys_socket$(EXEEXT) \ -	test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ -	test-sys_types$(EXEEXT) test-sys_uio$(EXEEXT) test-init.sh \ -	test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ -	test-time$(EXEEXT) test-cased$(EXEEXT) test-ignorable$(EXEEXT) \ -	unicase/test-locale-language.sh test-uc_tolower$(EXEEXT) \ -	test-uc_totitle$(EXEEXT) test-uc_toupper$(EXEEXT) \ -	test-u16-casecmp$(EXEEXT) test-u16-casecoll$(EXEEXT) \ -	test-u16-casefold$(EXEEXT) test-u16-is-cased$(EXEEXT) \ -	test-u16-is-casefolded$(EXEEXT) test-u16-is-lowercase$(EXEEXT) \ -	test-u16-is-titlecase$(EXEEXT) test-u16-is-uppercase$(EXEEXT) \ -	test-u16-tolower$(EXEEXT) test-u16-totitle$(EXEEXT) \ -	test-u16-toupper$(EXEEXT) test-u32-casecmp$(EXEEXT) \ -	test-u32-casecoll$(EXEEXT) test-u32-casefold$(EXEEXT) \ -	test-u32-is-cased$(EXEEXT) test-u32-is-casefolded$(EXEEXT) \ -	test-u32-is-lowercase$(EXEEXT) test-u32-is-titlecase$(EXEEXT) \ -	test-u32-is-uppercase$(EXEEXT) test-u32-tolower$(EXEEXT) \ -	test-u32-totitle$(EXEEXT) test-u32-toupper$(EXEEXT) \ -	test-u8-casecmp$(EXEEXT) test-u8-casecoll$(EXEEXT) \ -	test-u8-casefold$(EXEEXT) test-u8-is-cased$(EXEEXT) \ -	test-u8-is-casefolded$(EXEEXT) test-u8-is-lowercase$(EXEEXT) \ -	test-u8-is-titlecase$(EXEEXT) test-u8-is-uppercase$(EXEEXT) \ -	test-u8-tolower$(EXEEXT) test-u8-totitle$(EXEEXT) \ -	test-u8-toupper$(EXEEXT) unicase/test-ulc-casecmp1.sh \ -	unicase/test-ulc-casecmp2.sh unicase/test-ulc-casecoll1.sh \ -	unicase/test-ulc-casecoll2.sh test-u16-conv-from-enc$(EXEEXT) \ -	test-u16-conv-to-enc$(EXEEXT) \ +	test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ +	test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ +	test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ +	test-strerror$(EXEEXT) test-strerror_r$(EXEEXT) \ +	test-striconveh$(EXEEXT) test-striconveha$(EXEEXT) \ +	test-string$(EXEEXT) test-strncat$(EXEEXT) \ +	test-strstr$(EXEEXT) test-symlink$(EXEEXT) \ +	test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ +	test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ +	test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ +	test-sys_uio$(EXEEXT) test-init.sh test-thread_self$(EXEEXT) \ +	test-thread_create$(EXEEXT) test-time-h$(EXEEXT) \ +	test-time$(EXEEXT) test-uchar$(EXEEXT) test-cased$(EXEEXT) \ +	test-ignorable$(EXEEXT) unicase/test-locale-language.sh \ +	test-uc_tolower$(EXEEXT) test-uc_totitle$(EXEEXT) \ +	test-uc_toupper$(EXEEXT) test-u16-casecmp$(EXEEXT) \ +	test-u16-casecoll$(EXEEXT) test-u16-casefold$(EXEEXT) \ +	test-u16-is-cased$(EXEEXT) test-u16-is-casefolded$(EXEEXT) \ +	test-u16-is-lowercase$(EXEEXT) test-u16-is-titlecase$(EXEEXT) \ +	test-u16-is-uppercase$(EXEEXT) test-u16-tolower$(EXEEXT) \ +	test-u16-totitle$(EXEEXT) test-u16-toupper$(EXEEXT) \ +	test-u32-casecmp$(EXEEXT) test-u32-casecoll$(EXEEXT) \ +	test-u32-casefold$(EXEEXT) test-u32-is-cased$(EXEEXT) \ +	test-u32-is-casefolded$(EXEEXT) test-u32-is-lowercase$(EXEEXT) \ +	test-u32-is-titlecase$(EXEEXT) test-u32-is-uppercase$(EXEEXT) \ +	test-u32-tolower$(EXEEXT) test-u32-totitle$(EXEEXT) \ +	test-u32-toupper$(EXEEXT) test-u8-casecmp$(EXEEXT) \ +	test-u8-casecoll$(EXEEXT) test-u8-casefold$(EXEEXT) \ +	test-u8-is-cased$(EXEEXT) test-u8-is-casefolded$(EXEEXT) \ +	test-u8-is-lowercase$(EXEEXT) test-u8-is-titlecase$(EXEEXT) \ +	test-u8-is-uppercase$(EXEEXT) test-u8-tolower$(EXEEXT) \ +	test-u8-totitle$(EXEEXT) test-u8-toupper$(EXEEXT) \ +	unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh \ +	unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh \ +	test-u16-conv-from-enc$(EXEEXT) test-u16-conv-to-enc$(EXEEXT) \  	test-u16-strconv-from-enc$(EXEEXT) \  	test-u16-strconv-to-enc$(EXEEXT) \  	test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ @@ -243,7 +261,8 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \  	test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \  	test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ -	test-joininggroup_byname$(EXEEXT) \ +	test-incb_byname$(EXEEXT) test-incb_name$(EXEEXT) \ +	test-incb_of$(EXEEXT) test-joininggroup_byname$(EXEEXT) \  	test-joininggroup_name$(EXEEXT) test-joininggroup_of$(EXEEXT) \  	test-joiningtype_byname$(EXEEXT) \  	test-joiningtype_longname$(EXEEXT) \ @@ -286,10 +305,14 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pr_grapheme_base$(EXEEXT) \  	test-pr_grapheme_extend$(EXEEXT) \  	test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ -	test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ -	test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ +	test-pr_hyphen$(EXEEXT) \ +	test-pr_id_compat_math_continue$(EXEEXT) \ +	test-pr_id_compat_math_start$(EXEEXT) \ +	test-pr_id_continue$(EXEEXT) test-pr_id_start$(EXEEXT) \ +	test-pr_ideographic$(EXEEXT) \  	test-pr_ids_binary_operator$(EXEEXT) \  	test-pr_ids_trinary_operator$(EXEEXT) \ +	test-pr_ids_unary_operator$(EXEEXT) \  	test-pr_ignorable_control$(EXEEXT) \  	test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \  	test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ @@ -307,6 +330,7 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pr_paragraph_separator$(EXEEXT) \  	test-pr_pattern_syntax$(EXEEXT) \  	test-pr_pattern_white_space$(EXEEXT) \ +	test-pr_prepended_concatenation_mark$(EXEEXT) \  	test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \  	test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \  	test-pr_regional_indicator$(EXEEXT) \ @@ -340,8 +364,8 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u8-possible-linebreaks$(EXEEXT) \  	test-u8-width-linebreaks$(EXEEXT) \  	test-ulc-possible-linebreaks$(EXEEXT) \ -	test-ulc-width-linebreaks$(EXEEXT) $(am__append_50) \ -	test-canonical-decomposition$(EXEEXT) \ +	test-ulc-width-linebreaks$(EXEEXT) test-u-version$(EXEEXT) \ +	$(am__append_55) test-canonical-decomposition$(EXEEXT) \  	test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \  	test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \  	test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ @@ -374,24 +398,25 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u16-mblen$(EXEEXT) test-u16-mbsnlen$(EXEEXT) \  	test-u16-mbtouc$(EXEEXT) test-u16-mbtouc-unsafe$(EXEEXT) \  	test-u16-mbtoucr$(EXEEXT) test-u16-move$(EXEEXT) \ -	test-u16-next$(EXEEXT) test-u16-prev$(EXEEXT) \ -	test-u16-set$(EXEEXT) test-u16-stpcpy$(EXEEXT) \ -	test-u16-stpncpy$(EXEEXT) test-u16-strcat$(EXEEXT) \ -	test-u16-strchr$(EXEEXT) test-u16-strcmp$(EXEEXT) \ -	test-u16-strcoll$(EXEEXT) test-u16-strcpy$(EXEEXT) \ -	test-u16-strdup$(EXEEXT) test-u16-strlen$(EXEEXT) \ -	test-u16-strmblen$(EXEEXT) test-u16-strmbtouc$(EXEEXT) \ -	test-u16-strncat$(EXEEXT) test-u16-strncmp$(EXEEXT) \ -	test-u16-strncpy$(EXEEXT) test-u16-strnlen$(EXEEXT) \ -	test-u16-strstr$(EXEEXT) test-u16-strtok$(EXEEXT) \ -	test-u16-to-u32$(EXEEXT) test-u16-to-u8$(EXEEXT) \ -	test-u16-uctomb$(EXEEXT) test-u32-check$(EXEEXT) \ -	test-u32-chr$(EXEEXT) test-u32-cmp$(EXEEXT) \ -	test-u32-cmp2$(EXEEXT) test-u32-cpy-alloc$(EXEEXT) \ -	test-u32-cpy$(EXEEXT) test-u32-mblen$(EXEEXT) \ -	test-u32-mbsnlen$(EXEEXT) test-u32-mbtouc$(EXEEXT) \ -	test-u32-mbtouc-unsafe$(EXEEXT) test-u32-mbtoucr$(EXEEXT) \ -	test-u32-move$(EXEEXT) test-u32-next$(EXEEXT) \ +	test-u16-next$(EXEEXT) test-u16-pcpy$(EXEEXT) \ +	test-u16-prev$(EXEEXT) test-u16-set$(EXEEXT) \ +	test-u16-stpcpy$(EXEEXT) test-u16-stpncpy$(EXEEXT) \ +	test-u16-strcat$(EXEEXT) test-u16-strchr$(EXEEXT) \ +	test-u16-strcmp$(EXEEXT) test-u16-strcoll$(EXEEXT) \ +	test-u16-strcpy$(EXEEXT) test-u16-strdup$(EXEEXT) \ +	test-u16-strlen$(EXEEXT) test-u16-strmblen$(EXEEXT) \ +	test-u16-strmbtouc$(EXEEXT) test-u16-strncat$(EXEEXT) \ +	test-u16-strncmp$(EXEEXT) test-u16-strncpy$(EXEEXT) \ +	test-u16-strnlen$(EXEEXT) test-u16-strstr$(EXEEXT) \ +	test-u16-strtok$(EXEEXT) test-u16-to-u32$(EXEEXT) \ +	test-u16-to-u8$(EXEEXT) test-u16-uctomb$(EXEEXT) \ +	test-u32-check$(EXEEXT) test-u32-chr$(EXEEXT) \ +	test-u32-cmp$(EXEEXT) test-u32-cmp2$(EXEEXT) \ +	test-u32-cpy-alloc$(EXEEXT) test-u32-cpy$(EXEEXT) \ +	test-u32-mblen$(EXEEXT) test-u32-mbsnlen$(EXEEXT) \ +	test-u32-mbtouc$(EXEEXT) test-u32-mbtouc-unsafe$(EXEEXT) \ +	test-u32-mbtoucr$(EXEEXT) test-u32-move$(EXEEXT) \ +	test-u32-next$(EXEEXT) test-u32-pcpy$(EXEEXT) \  	test-u32-prev$(EXEEXT) test-u32-set$(EXEEXT) \  	test-u32-stpcpy$(EXEEXT) test-u32-stpncpy$(EXEEXT) \  	test-u32-strcat$(EXEEXT) test-u32-strchr$(EXEEXT) \ @@ -409,44 +434,54 @@ TESTS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u8-mblen$(EXEEXT) test-u8-mbsnlen$(EXEEXT) \  	test-u8-mbtouc$(EXEEXT) test-u8-mbtouc-unsafe$(EXEEXT) \  	test-u8-mbtoucr$(EXEEXT) test-u8-move$(EXEEXT) \ -	test-u8-next$(EXEEXT) test-u8-prev$(EXEEXT) \ -	test-u8-set$(EXEEXT) test-u8-stpcpy$(EXEEXT) \ -	test-u8-stpncpy$(EXEEXT) test-u8-strcat$(EXEEXT) \ -	test-u8-strchr$(EXEEXT) test-u8-strcmp$(EXEEXT) \ -	test-u8-strcoll$(EXEEXT) test-u8-strcpy$(EXEEXT) \ -	test-u8-strdup$(EXEEXT) test-u8-strlen$(EXEEXT) \ -	test-u8-strmblen$(EXEEXT) test-u8-strmbtouc$(EXEEXT) \ -	test-u8-strncat$(EXEEXT) test-u8-strncmp$(EXEEXT) \ -	test-u8-strncpy$(EXEEXT) test-u8-strnlen$(EXEEXT) \ -	test-u8-strstr$(EXEEXT) test-u8-strtok$(EXEEXT) \ -	test-u8-to-u16$(EXEEXT) test-u8-to-u32$(EXEEXT) \ -	test-u8-uctomb$(EXEEXT) test-u16-wordbreaks$(EXEEXT) \ -	test-u32-wordbreaks$(EXEEXT) uniwbrk/test-uc-wordbreaks.sh \ -	test-u8-wordbreaks$(EXEEXT) uniwbrk/test-ulc-wordbreaks.sh \ -	test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ -	test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ -	test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ -	test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ -	test-unsetenv$(EXEEXT) test-usleep$(EXEEXT) \ -	test-verify$(EXEEXT) test-verify.sh test-wchar$(EXEEXT) \ -	test-wcrtomb.sh test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ +	test-u8-next$(EXEEXT) test-u8-pcpy$(EXEEXT) \ +	test-u8-prev$(EXEEXT) test-u8-set$(EXEEXT) \ +	test-u8-stpcpy$(EXEEXT) test-u8-stpncpy$(EXEEXT) \ +	test-u8-strcat$(EXEEXT) test-u8-strchr$(EXEEXT) \ +	test-u8-strcmp$(EXEEXT) test-u8-strcoll$(EXEEXT) \ +	test-u8-strcpy$(EXEEXT) test-u8-strdup$(EXEEXT) \ +	test-u8-strlen$(EXEEXT) test-u8-strmblen$(EXEEXT) \ +	test-u8-strmbtouc$(EXEEXT) test-u8-strncat$(EXEEXT) \ +	test-u8-strncmp$(EXEEXT) test-u8-strncpy$(EXEEXT) \ +	test-u8-strnlen$(EXEEXT) test-u8-strstr$(EXEEXT) \ +	test-u8-strtok$(EXEEXT) test-u8-to-u16$(EXEEXT) \ +	test-u8-to-u32$(EXEEXT) test-u8-uctomb$(EXEEXT) \ +	test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ +	uniwbrk/test-uc-wordbreaks.sh test-u8-wordbreaks$(EXEEXT) \ +	uniwbrk/test-ulc-wordbreaks.sh test-u16-strwidth$(EXEEXT) \ +	test-u16-width$(EXEEXT) test-u32-strwidth$(EXEEXT) \ +	test-u32-width$(EXEEXT) test-u8-strwidth$(EXEEXT) \ +	test-u8-width$(EXEEXT) test-uc_width$(EXEEXT) \ +	uniwidth/test-uc_width2.sh test-unsetenv$(EXEEXT) \ +	test-usleep$(EXEEXT) test-verify$(EXEEXT) test-verify.sh \ +	test-wchar$(EXEEXT) test-wcrtomb.sh test-wcrtomb-w32-2.sh \  	test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \  	test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ -	test-wcrtomb-w32-7.sh test-wctype-h$(EXEEXT) \ -	test-wcwidth$(EXEEXT) test-xalloc-die.sh +	test-wcrtomb-w32-7.sh test-wcrtomb-w32-8.sh \ +	test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ +	test-xalloc-die.sh  XFAIL_TESTS =  noinst_PROGRAMS = current-locale$(EXEEXT) test-localcharset$(EXEEXT) -check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \ -	test-arpa_inet$(EXEEXT) test-array-mergesort$(EXEEXT) \ -	test-assert$(EXEEXT) test-binary-io$(EXEEXT) \ -	test-bind$(EXEEXT) test-btowc$(EXEEXT) test-c-ctype$(EXEEXT) \ +check_PROGRAMS = test-accept$(EXEEXT) test-alignasof$(EXEEXT) \ +	test-alloca-opt$(EXEEXT) test-arpa_inet$(EXEEXT) \ +	test-array-mergesort$(EXEEXT) test-assert$(EXEEXT) \ +	test-binary-io$(EXEEXT) test-bind$(EXEEXT) \ +	test-btoc32$(EXEEXT) test-btowc$(EXEEXT) test-c-ctype$(EXEEXT) \  	test-c-strcasecmp$(EXEEXT) test-c-strncasecmp$(EXEEXT) \ +	test-c32isalnum$(EXEEXT) test-c32isalpha$(EXEEXT) \ +	test-c32isblank$(EXEEXT) test-c32iscntrl$(EXEEXT) \ +	test-c32isdigit$(EXEEXT) test-c32isgraph$(EXEEXT) \ +	test-c32islower$(EXEEXT) test-c32isprint$(EXEEXT) \ +	test-c32ispunct$(EXEEXT) test-c32isspace$(EXEEXT) \ +	test-c32isupper$(EXEEXT) test-c32isxdigit$(EXEEXT) \ +	test-c32rtomb$(EXEEXT) test-c32rtomb-w32$(EXEEXT) \ +	test-c32tolower$(EXEEXT) test-c32width$(EXEEXT) \  	test-calloc-gnu$(EXEEXT) test-cloexec$(EXEEXT) \  	test-close$(EXEEXT) test-connect$(EXEEXT) test-ctype$(EXEEXT) \  	test-dup2$(EXEEXT) test-environ$(EXEEXT) test-errno$(EXEEXT) \ -	test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) test-fdopen$(EXEEXT) \ -	test-fgetc$(EXEEXT) test-float$(EXEEXT) test-fputc$(EXEEXT) \ -	test-fread$(EXEEXT) test-free$(EXEEXT) \ +	test-error$(EXEEXT) test-fcntl-h$(EXEEXT) test-fcntl$(EXEEXT) \ +	test-fdopen$(EXEEXT) test-fgetc$(EXEEXT) test-float$(EXEEXT) \ +	test-fputc$(EXEEXT) test-fread$(EXEEXT) test-free$(EXEEXT) \  	test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \  	test-fseterr$(EXEEXT) test-fstat$(EXEEXT) \  	test-ftruncate$(EXEEXT) test-fwrite$(EXEEXT) \ @@ -459,13 +494,15 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-isblank$(EXEEXT) test-isnand-nolibm$(EXEEXT) \  	test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \  	test-iswblank$(EXEEXT) test-iswdigit$(EXEEXT) \ -	test-iswxdigit$(EXEEXT) test-langinfo$(EXEEXT) \ +	test-iswpunct$(EXEEXT) test-iswxdigit$(EXEEXT) \ +	test-langinfo$(EXEEXT) test-largefile$(EXEEXT) \  	test-limits-h$(EXEEXT) test-listen$(EXEEXT) \  	test-locale$(EXEEXT) test-localename$(EXEEXT) \  	test-rwlock1$(EXEEXT) test-lock$(EXEEXT) test-once1$(EXEEXT) \  	test-once2$(EXEEXT) test-lstat$(EXEEXT) \  	test-malloc-gnu$(EXEEXT) test-malloca$(EXEEXT) \ -	test-math$(EXEEXT) test-mbrtowc$(EXEEXT) \ +	test-math$(EXEEXT) test-mbrtoc32$(EXEEXT) \ +	test-mbrtoc32-w32$(EXEEXT) test-mbrtowc$(EXEEXT) \  	test-mbrtowc-w32$(EXEEXT) test-mbsinit$(EXEEXT) \  	test-memchr$(EXEEXT) test-nanosleep$(EXEEXT) \  	test-netinet_in$(EXEEXT) test-open$(EXEEXT) \ @@ -475,50 +512,53 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pselect$(EXEEXT) test-pthread$(EXEEXT) \  	test-pthread-thread$(EXEEXT) test-pthread_sigmask1$(EXEEXT) \  	test-pthread_sigmask2$(EXEEXT) test-raise$(EXEEXT) \ -	test-realloc-gnu$(EXEEXT) test-reallocarray$(EXEEXT) \ -	test-sched$(EXEEXT) test-select$(EXEEXT) \ -	test-select-fd$(EXEEXT) test-select-stdin$(EXEEXT) \ -	test-setenv$(EXEEXT) test-setlocale_null$(EXEEXT) \ +	test-random$(EXEEXT) test-random-mt$(EXEEXT) \ +	test-random_r$(EXEEXT) test-realloc-gnu$(EXEEXT) \ +	test-reallocarray$(EXEEXT) test-sched$(EXEEXT) \ +	test-select$(EXEEXT) test-select-fd$(EXEEXT) \ +	test-select-stdin$(EXEEXT) test-setenv$(EXEEXT) \ +	test-setlocale_null$(EXEEXT) \  	test-setlocale_null-mt-one$(EXEEXT) \ -	test-setlocale_null-mt-all$(EXEEXT) test-setlocale1$(EXEEXT) \ +	test-setlocale_null-mt-all$(EXEEXT) \ +	test-setlocale_null-unlocked$(EXEEXT) test-setlocale1$(EXEEXT) \  	test-setlocale2$(EXEEXT) test-setsockopt$(EXEEXT) \  	test-signal-h$(EXEEXT) test-signbit$(EXEEXT) \  	test-sigprocmask$(EXEEXT) test-sleep$(EXEEXT) \  	test-sockets$(EXEEXT) test-stat$(EXEEXT) \ -	test-stat-time$(EXEEXT) test-stdalign$(EXEEXT) \ -	test-stdbool$(EXEEXT) test-stdckdint$(EXEEXT) \ -	test-stddef$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ -	test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ -	test-strerror_r$(EXEEXT) test-striconveh$(EXEEXT) \ -	test-striconveha$(EXEEXT) test-string$(EXEEXT) \ -	test-strncat$(EXEEXT) test-strstr$(EXEEXT) \ -	test-symlink$(EXEEXT) test-sys_ioctl$(EXEEXT) \ -	test-sys_select$(EXEEXT) test-sys_socket$(EXEEXT) \ -	test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ -	test-sys_types$(EXEEXT) test-sys_uio$(EXEEXT) \ -	test-thread_self$(EXEEXT) test-thread_create$(EXEEXT) \ -	test-time$(EXEEXT) test-cased$(EXEEXT) test-ignorable$(EXEEXT) \ -	test-locale-language$(EXEEXT) test-uc_tolower$(EXEEXT) \ -	test-uc_totitle$(EXEEXT) test-uc_toupper$(EXEEXT) \ -	test-u16-casecmp$(EXEEXT) test-u16-casecoll$(EXEEXT) \ -	test-u16-casefold$(EXEEXT) test-u16-is-cased$(EXEEXT) \ -	test-u16-is-casefolded$(EXEEXT) test-u16-is-lowercase$(EXEEXT) \ -	test-u16-is-titlecase$(EXEEXT) test-u16-is-uppercase$(EXEEXT) \ -	test-u16-tolower$(EXEEXT) test-u16-totitle$(EXEEXT) \ -	test-u16-toupper$(EXEEXT) test-u32-casecmp$(EXEEXT) \ -	test-u32-casecoll$(EXEEXT) test-u32-casefold$(EXEEXT) \ -	test-u32-is-cased$(EXEEXT) test-u32-is-casefolded$(EXEEXT) \ -	test-u32-is-lowercase$(EXEEXT) test-u32-is-titlecase$(EXEEXT) \ -	test-u32-is-uppercase$(EXEEXT) test-u32-tolower$(EXEEXT) \ -	test-u32-totitle$(EXEEXT) test-u32-toupper$(EXEEXT) \ -	test-u8-casecmp$(EXEEXT) test-u8-casecoll$(EXEEXT) \ -	test-u8-casefold$(EXEEXT) test-u8-is-cased$(EXEEXT) \ -	test-u8-is-casefolded$(EXEEXT) test-u8-is-lowercase$(EXEEXT) \ -	test-u8-is-titlecase$(EXEEXT) test-u8-is-uppercase$(EXEEXT) \ -	test-u8-tolower$(EXEEXT) test-u8-totitle$(EXEEXT) \ -	test-u8-toupper$(EXEEXT) test-ulc-casecmp$(EXEEXT) \ -	test-ulc-casecoll$(EXEEXT) test-u16-conv-from-enc$(EXEEXT) \ -	test-u16-conv-to-enc$(EXEEXT) \ +	test-stat-time$(EXEEXT) test-stdbool$(EXEEXT) \ +	test-stdckdint$(EXEEXT) test-stddef$(EXEEXT) \ +	test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ +	test-strerror$(EXEEXT) test-strerror_r$(EXEEXT) \ +	test-striconveh$(EXEEXT) test-striconveha$(EXEEXT) \ +	test-string$(EXEEXT) test-strncat$(EXEEXT) \ +	test-strstr$(EXEEXT) test-symlink$(EXEEXT) \ +	test-sys_ioctl$(EXEEXT) test-sys_select$(EXEEXT) \ +	test-sys_socket$(EXEEXT) test-sys_stat$(EXEEXT) \ +	test-sys_time$(EXEEXT) test-sys_types$(EXEEXT) \ +	test-sys_uio$(EXEEXT) test-thread_self$(EXEEXT) \ +	test-thread_create$(EXEEXT) test-time-h$(EXEEXT) \ +	test-time$(EXEEXT) test-uchar$(EXEEXT) test-cased$(EXEEXT) \ +	test-ignorable$(EXEEXT) test-locale-language$(EXEEXT) \ +	test-uc_tolower$(EXEEXT) test-uc_totitle$(EXEEXT) \ +	test-uc_toupper$(EXEEXT) test-u16-casecmp$(EXEEXT) \ +	test-u16-casecoll$(EXEEXT) test-u16-casefold$(EXEEXT) \ +	test-u16-is-cased$(EXEEXT) test-u16-is-casefolded$(EXEEXT) \ +	test-u16-is-lowercase$(EXEEXT) test-u16-is-titlecase$(EXEEXT) \ +	test-u16-is-uppercase$(EXEEXT) test-u16-tolower$(EXEEXT) \ +	test-u16-totitle$(EXEEXT) test-u16-toupper$(EXEEXT) \ +	test-u32-casecmp$(EXEEXT) test-u32-casecoll$(EXEEXT) \ +	test-u32-casefold$(EXEEXT) test-u32-is-cased$(EXEEXT) \ +	test-u32-is-casefolded$(EXEEXT) test-u32-is-lowercase$(EXEEXT) \ +	test-u32-is-titlecase$(EXEEXT) test-u32-is-uppercase$(EXEEXT) \ +	test-u32-tolower$(EXEEXT) test-u32-totitle$(EXEEXT) \ +	test-u32-toupper$(EXEEXT) test-u8-casecmp$(EXEEXT) \ +	test-u8-casecoll$(EXEEXT) test-u8-casefold$(EXEEXT) \ +	test-u8-is-cased$(EXEEXT) test-u8-is-casefolded$(EXEEXT) \ +	test-u8-is-lowercase$(EXEEXT) test-u8-is-titlecase$(EXEEXT) \ +	test-u8-is-uppercase$(EXEEXT) test-u8-tolower$(EXEEXT) \ +	test-u8-totitle$(EXEEXT) test-u8-toupper$(EXEEXT) \ +	test-ulc-casecmp$(EXEEXT) test-ulc-casecoll$(EXEEXT) \ +	test-u16-conv-from-enc$(EXEEXT) test-u16-conv-to-enc$(EXEEXT) \  	test-u16-strconv-from-enc$(EXEEXT) \  	test-u16-strconv-to-enc$(EXEEXT) \  	test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ @@ -564,7 +604,8 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \  	test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \  	test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ -	test-joininggroup_byname$(EXEEXT) \ +	test-incb_byname$(EXEEXT) test-incb_name$(EXEEXT) \ +	test-incb_of$(EXEEXT) test-joininggroup_byname$(EXEEXT) \  	test-joininggroup_name$(EXEEXT) test-joininggroup_of$(EXEEXT) \  	test-joiningtype_byname$(EXEEXT) \  	test-joiningtype_longname$(EXEEXT) \ @@ -607,10 +648,14 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pr_grapheme_base$(EXEEXT) \  	test-pr_grapheme_extend$(EXEEXT) \  	test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ -	test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ -	test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ +	test-pr_hyphen$(EXEEXT) \ +	test-pr_id_compat_math_continue$(EXEEXT) \ +	test-pr_id_compat_math_start$(EXEEXT) \ +	test-pr_id_continue$(EXEEXT) test-pr_id_start$(EXEEXT) \ +	test-pr_ideographic$(EXEEXT) \  	test-pr_ids_binary_operator$(EXEEXT) \  	test-pr_ids_trinary_operator$(EXEEXT) \ +	test-pr_ids_unary_operator$(EXEEXT) \  	test-pr_ignorable_control$(EXEEXT) \  	test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \  	test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ @@ -628,6 +673,7 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-pr_paragraph_separator$(EXEEXT) \  	test-pr_pattern_syntax$(EXEEXT) \  	test-pr_pattern_white_space$(EXEEXT) \ +	test-pr_prepended_concatenation_mark$(EXEEXT) \  	test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \  	test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \  	test-pr_regional_indicator$(EXEEXT) \ @@ -661,8 +707,8 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u8-possible-linebreaks$(EXEEXT) \  	test-u8-width-linebreaks$(EXEEXT) \  	test-ulc-possible-linebreaks$(EXEEXT) \ -	test-ulc-width-linebreaks$(EXEEXT) $(am__EXEEXT_2) \ -	test-canonical-decomposition$(EXEEXT) \ +	test-ulc-width-linebreaks$(EXEEXT) test-u-version$(EXEEXT) \ +	$(am__EXEEXT_2) test-canonical-decomposition$(EXEEXT) \  	test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \  	test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \  	test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ @@ -693,24 +739,25 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u16-mblen$(EXEEXT) test-u16-mbsnlen$(EXEEXT) \  	test-u16-mbtouc$(EXEEXT) test-u16-mbtouc-unsafe$(EXEEXT) \  	test-u16-mbtoucr$(EXEEXT) test-u16-move$(EXEEXT) \ -	test-u16-next$(EXEEXT) test-u16-prev$(EXEEXT) \ -	test-u16-set$(EXEEXT) test-u16-stpcpy$(EXEEXT) \ -	test-u16-stpncpy$(EXEEXT) test-u16-strcat$(EXEEXT) \ -	test-u16-strchr$(EXEEXT) test-u16-strcmp$(EXEEXT) \ -	test-u16-strcoll$(EXEEXT) test-u16-strcpy$(EXEEXT) \ -	test-u16-strdup$(EXEEXT) test-u16-strlen$(EXEEXT) \ -	test-u16-strmblen$(EXEEXT) test-u16-strmbtouc$(EXEEXT) \ -	test-u16-strncat$(EXEEXT) test-u16-strncmp$(EXEEXT) \ -	test-u16-strncpy$(EXEEXT) test-u16-strnlen$(EXEEXT) \ -	test-u16-strstr$(EXEEXT) test-u16-strtok$(EXEEXT) \ -	test-u16-to-u32$(EXEEXT) test-u16-to-u8$(EXEEXT) \ -	test-u16-uctomb$(EXEEXT) test-u32-check$(EXEEXT) \ -	test-u32-chr$(EXEEXT) test-u32-cmp$(EXEEXT) \ -	test-u32-cmp2$(EXEEXT) test-u32-cpy-alloc$(EXEEXT) \ -	test-u32-cpy$(EXEEXT) test-u32-mblen$(EXEEXT) \ -	test-u32-mbsnlen$(EXEEXT) test-u32-mbtouc$(EXEEXT) \ -	test-u32-mbtouc-unsafe$(EXEEXT) test-u32-mbtoucr$(EXEEXT) \ -	test-u32-move$(EXEEXT) test-u32-next$(EXEEXT) \ +	test-u16-next$(EXEEXT) test-u16-pcpy$(EXEEXT) \ +	test-u16-prev$(EXEEXT) test-u16-set$(EXEEXT) \ +	test-u16-stpcpy$(EXEEXT) test-u16-stpncpy$(EXEEXT) \ +	test-u16-strcat$(EXEEXT) test-u16-strchr$(EXEEXT) \ +	test-u16-strcmp$(EXEEXT) test-u16-strcoll$(EXEEXT) \ +	test-u16-strcpy$(EXEEXT) test-u16-strdup$(EXEEXT) \ +	test-u16-strlen$(EXEEXT) test-u16-strmblen$(EXEEXT) \ +	test-u16-strmbtouc$(EXEEXT) test-u16-strncat$(EXEEXT) \ +	test-u16-strncmp$(EXEEXT) test-u16-strncpy$(EXEEXT) \ +	test-u16-strnlen$(EXEEXT) test-u16-strstr$(EXEEXT) \ +	test-u16-strtok$(EXEEXT) test-u16-to-u32$(EXEEXT) \ +	test-u16-to-u8$(EXEEXT) test-u16-uctomb$(EXEEXT) \ +	test-u32-check$(EXEEXT) test-u32-chr$(EXEEXT) \ +	test-u32-cmp$(EXEEXT) test-u32-cmp2$(EXEEXT) \ +	test-u32-cpy-alloc$(EXEEXT) test-u32-cpy$(EXEEXT) \ +	test-u32-mblen$(EXEEXT) test-u32-mbsnlen$(EXEEXT) \ +	test-u32-mbtouc$(EXEEXT) test-u32-mbtouc-unsafe$(EXEEXT) \ +	test-u32-mbtoucr$(EXEEXT) test-u32-move$(EXEEXT) \ +	test-u32-next$(EXEEXT) test-u32-pcpy$(EXEEXT) \  	test-u32-prev$(EXEEXT) test-u32-set$(EXEEXT) \  	test-u32-stpcpy$(EXEEXT) test-u32-stpncpy$(EXEEXT) \  	test-u32-strcat$(EXEEXT) test-u32-strchr$(EXEEXT) \ @@ -728,93 +775,100 @@ check_PROGRAMS = test-accept$(EXEEXT) test-alloca-opt$(EXEEXT) \  	test-u8-mblen$(EXEEXT) test-u8-mbsnlen$(EXEEXT) \  	test-u8-mbtouc$(EXEEXT) test-u8-mbtouc-unsafe$(EXEEXT) \  	test-u8-mbtoucr$(EXEEXT) test-u8-move$(EXEEXT) \ -	test-u8-next$(EXEEXT) test-u8-prev$(EXEEXT) \ -	test-u8-set$(EXEEXT) test-u8-stpcpy$(EXEEXT) \ -	test-u8-stpncpy$(EXEEXT) test-u8-strcat$(EXEEXT) \ -	test-u8-strchr$(EXEEXT) test-u8-strcmp$(EXEEXT) \ -	test-u8-strcoll$(EXEEXT) test-u8-strcpy$(EXEEXT) \ -	test-u8-strdup$(EXEEXT) test-u8-strlen$(EXEEXT) \ -	test-u8-strmblen$(EXEEXT) test-u8-strmbtouc$(EXEEXT) \ -	test-u8-strncat$(EXEEXT) test-u8-strncmp$(EXEEXT) \ -	test-u8-strncpy$(EXEEXT) test-u8-strnlen$(EXEEXT) \ -	test-u8-strstr$(EXEEXT) test-u8-strtok$(EXEEXT) \ -	test-u8-to-u16$(EXEEXT) test-u8-to-u32$(EXEEXT) \ -	test-u8-uctomb$(EXEEXT) test-u16-wordbreaks$(EXEEXT) \ -	test-u32-wordbreaks$(EXEEXT) test-uc-wordbreaks$(EXEEXT) \ -	test-u8-wordbreaks$(EXEEXT) test-ulc-wordbreaks$(EXEEXT) \ -	test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ -	test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ -	test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ -	test-uc_width$(EXEEXT) test-uc_width2$(EXEEXT) \ -	test-unsetenv$(EXEEXT) test-usleep$(EXEEXT) \ -	test-verify$(EXEEXT) test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) \ -	test-wcrtomb-w32$(EXEEXT) test-wctype-h$(EXEEXT) \ -	test-wcwidth$(EXEEXT) test-xalloc-die$(EXEEXT) +	test-u8-next$(EXEEXT) test-u8-pcpy$(EXEEXT) \ +	test-u8-prev$(EXEEXT) test-u8-set$(EXEEXT) \ +	test-u8-stpcpy$(EXEEXT) test-u8-stpncpy$(EXEEXT) \ +	test-u8-strcat$(EXEEXT) test-u8-strchr$(EXEEXT) \ +	test-u8-strcmp$(EXEEXT) test-u8-strcoll$(EXEEXT) \ +	test-u8-strcpy$(EXEEXT) test-u8-strdup$(EXEEXT) \ +	test-u8-strlen$(EXEEXT) test-u8-strmblen$(EXEEXT) \ +	test-u8-strmbtouc$(EXEEXT) test-u8-strncat$(EXEEXT) \ +	test-u8-strncmp$(EXEEXT) test-u8-strncpy$(EXEEXT) \ +	test-u8-strnlen$(EXEEXT) test-u8-strstr$(EXEEXT) \ +	test-u8-strtok$(EXEEXT) test-u8-to-u16$(EXEEXT) \ +	test-u8-to-u32$(EXEEXT) test-u8-uctomb$(EXEEXT) \ +	test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ +	test-uc-wordbreaks$(EXEEXT) test-u8-wordbreaks$(EXEEXT) \ +	test-ulc-wordbreaks$(EXEEXT) test-u16-strwidth$(EXEEXT) \ +	test-u16-width$(EXEEXT) test-u32-strwidth$(EXEEXT) \ +	test-u32-width$(EXEEXT) test-u8-strwidth$(EXEEXT) \ +	test-u8-width$(EXEEXT) test-uc_width$(EXEEXT) \ +	test-uc_width2$(EXEEXT) test-unsetenv$(EXEEXT) \ +	test-usleep$(EXEEXT) test-verify$(EXEEXT) test-wchar$(EXEEXT) \ +	test-wcrtomb$(EXEEXT) test-wcrtomb-w32$(EXEEXT) \ +	test-wctype-h$(EXEEXT) test-wcwidth$(EXEEXT) \ +	test-xalloc-die$(EXEEXT)  EXTRA_PROGRAMS = test-verify-try$(EXEEXT)  @GL_COND_OBJ_ACCEPT_TRUE@am__append_1 = accept.c  @GL_COND_OBJ_BIND_TRUE@am__append_2 = bind.c  @GL_COND_OBJ_BTOWC_TRUE@am__append_3 = btowc.c -@GL_COND_OBJ_CLOSE_TRUE@am__append_4 = close.c -@GL_COND_OBJ_CONNECT_TRUE@am__append_5 = connect.c -@GL_COND_OBJ_DUP2_TRUE@am__append_6 = dup2.c -@GL_COND_OBJ_ERROR_TRUE@am__append_7 = error.c -@GL_COND_OBJ_FCNTL_TRUE@am__append_8 = fcntl.c -@GL_COND_OBJ_FDOPEN_TRUE@am__append_9 = fdopen.c -@GL_COND_OBJ_FSTAT_TRUE@am__append_10 = fstat.c -@GL_COND_OBJ_FTRUNCATE_TRUE@am__append_11 = ftruncate.c -@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_12 = getcwd-lgpl.c -@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_13 = getdtablesize.c -@GL_COND_OBJ_GETPAGESIZE_TRUE@am__append_14 = getpagesize.c -@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_15 = gettimeofday.c -@GL_COND_OBJ_INET_PTON_TRUE@am__append_16 = inet_pton.c -@GL_COND_OBJ_IOCTL_TRUE@am__append_17 = ioctl.c -@GL_COND_OBJ_ISBLANK_TRUE@am__append_18 = isblank.c -@GL_COND_OBJ_LISTEN_TRUE@am__append_19 = listen.c -@GL_COND_OBJ_LSTAT_TRUE@am__append_20 = lstat.c -@GL_COND_OBJ_MBTOWC_TRUE@am__append_21 = mbtowc.c -@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_22 = msvc-inval.c -@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_23 = msvc-nothrow.c -@GL_COND_OBJ_NANOSLEEP_TRUE@am__append_24 = nanosleep.c -@GL_COND_OBJ_OPEN_TRUE@am__append_25 = open.c -@GL_COND_OBJ_PERROR_TRUE@am__append_26 = perror.c -@GL_COND_OBJ_PIPE_TRUE@am__append_27 = pipe.c -@GL_COND_OBJ_PSELECT_TRUE@am__append_28 = pselect.c -@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__append_29 = pthread-thread.c -@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__append_30 = pthread_sigmask.c -@GL_COND_OBJ_PUTENV_TRUE@am__append_31 = putenv.c -@GL_COND_OBJ_RAISE_TRUE@am__append_32 = raise.c -@GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_33 = reallocarray.c -@GL_COND_OBJ_SCHED_YIELD_TRUE@am__append_34 = sched_yield.c -@GL_COND_OBJ_SELECT_TRUE@am__append_35 = select.c -@GL_COND_OBJ_SETENV_TRUE@am__append_36 = setenv.c -@GL_COND_OBJ_SETLOCALE_TRUE@am__append_37 = setlocale.c -@GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_38 = setsockopt.c -@GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_39 = sigprocmask.c -@GL_COND_OBJ_SLEEP_TRUE@am__append_40 = sleep.c -@GL_COND_OBJ_SOCKET_TRUE@am__append_41 = socket.c -@GL_COND_OBJ_STAT_TRUE@am__append_42 = stat.c -@GL_COND_OBJ_STDIO_READ_TRUE@am__append_43 = stdio-read.c -@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_44 = stdio-write.c -@GL_COND_OBJ_STRERROR_TRUE@am__append_45 = strerror.c -@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_46 = strerror-override.c -@GL_COND_OBJ_SYMLINK_TRUE@am__append_47 = symlink.c -@WOE32DLL_FALSE@am__append_48 = test-categ_none -@WOE32DLL_FALSE@am__append_49 = test-categ_none +@GL_COND_OBJ_C32RTOMB_TRUE@am__append_4 = c32rtomb.c +@GL_COND_OBJ_CLOSE_TRUE@am__append_5 = close.c +@GL_COND_OBJ_CONNECT_TRUE@am__append_6 = connect.c +@GL_COND_OBJ_DUP2_TRUE@am__append_7 = dup2.c +@GL_COND_OBJ_ERROR_TRUE@am__append_8 = error.c +@GL_COND_OBJ_FCNTL_TRUE@am__append_9 = fcntl.c +@GL_COND_OBJ_FDOPEN_TRUE@am__append_10 = fdopen.c +@GL_COND_OBJ_FSTAT_TRUE@am__append_11 = fstat.c +@GL_COND_OBJ_FTRUNCATE_TRUE@am__append_12 = ftruncate.c +@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_13 = getcwd-lgpl.c +@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_14 = getdtablesize.c +@GL_COND_OBJ_GETPAGESIZE_TRUE@am__append_15 = getpagesize.c +@GL_COND_OBJ_GETPROGNAME_TRUE@am__append_16 = getprogname.c +@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_17 = gettimeofday.c +@GL_COND_OBJ_INET_PTON_TRUE@am__append_18 = inet_pton.c +@GL_COND_OBJ_IOCTL_TRUE@am__append_19 = ioctl.c +@GL_COND_OBJ_ISBLANK_TRUE@am__append_20 = isblank.c +@GL_COND_OBJ_LISTEN_TRUE@am__append_21 = listen.c +@GL_COND_OBJ_LSTAT_TRUE@am__append_22 = lstat.c +@GL_COND_OBJ_MBTOWC_TRUE@am__append_23 = mbtowc.c +@GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_24 = msvc-inval.c +@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_25 = msvc-nothrow.c +@GL_COND_OBJ_NANOSLEEP_TRUE@am__append_26 = nanosleep.c +@GL_COND_OBJ_OPEN_TRUE@am__append_27 = open.c +@GL_COND_OBJ_PERROR_TRUE@am__append_28 = perror.c +@GL_COND_OBJ_PIPE_TRUE@am__append_29 = pipe.c +@GL_COND_OBJ_PSELECT_TRUE@am__append_30 = pselect.c +@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__append_31 = pthread-thread.c +@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__append_32 = pthread_sigmask.c +@GL_COND_OBJ_PUTENV_TRUE@am__append_33 = putenv.c +@GL_COND_OBJ_RAISE_TRUE@am__append_34 = raise.c +@GL_COND_OBJ_RANDOM_TRUE@am__append_35 = random.c +@GL_COND_OBJ_RANDOM_R_TRUE@am__append_36 = random_r.c +@GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_37 = reallocarray.c +@GL_COND_OBJ_SCHED_YIELD_TRUE@am__append_38 = sched_yield.c +@GL_COND_OBJ_SELECT_TRUE@am__append_39 = select.c +@GL_COND_OBJ_SETENV_TRUE@am__append_40 = setenv.c +@GL_COND_OBJ_SETLOCALE_TRUE@am__append_41 = setlocale.c +@GL_COND_OBJ_SETSOCKOPT_TRUE@am__append_42 = setsockopt.c +@GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_43 = sigprocmask.c +@GL_COND_OBJ_SLEEP_TRUE@am__append_44 = sleep.c +@GL_COND_OBJ_SOCKET_TRUE@am__append_45 = socket.c +@GL_COND_OBJ_STAT_TRUE@am__append_46 = stat.c +@GL_COND_OBJ_STDIO_READ_TRUE@am__append_47 = stdio-read.c +@GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_48 = stdio-write.c +@GL_COND_OBJ_STRERROR_TRUE@am__append_49 = strerror.c +@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_50 = strerror-override.c +@GL_COND_OBJ_SYMLINK_TRUE@am__append_51 = symlink.c +@GL_COND_OBJ_TIME_TRUE@am__append_52 = time.c +@WOE32DLL_FALSE@am__append_53 = test-categ_none +@WOE32DLL_FALSE@am__append_54 = test-categ_none  # Unlike other libunistring modules, this test passes only when the  # same version of uniname/uniname.c is used (even if it is newer). -@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_50 = uniname/test-uninames.sh -@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_51 = test-uninames -@GL_COND_OBJ_UNSETENV_TRUE@am__append_52 = unsetenv.c -@GL_COND_OBJ_USLEEP_TRUE@am__append_53 = usleep.c -@GL_COND_OBJ_WCRTOMB_TRUE@am__append_54 = wcrtomb.c -@GL_COND_OBJ_WCTOB_TRUE@am__append_55 = wctob.c -@GL_COND_OBJ_WCTOMB_TRUE@am__append_56 = wctomb.c -@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__append_57 = windows-thread.c -@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__append_58 = windows-tls.c +@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_55 = uniname/test-uninames.sh +@LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@am__append_56 = test-uninames +@GL_COND_OBJ_UNSETENV_TRUE@am__append_57 = unsetenv.c +@GL_COND_OBJ_USLEEP_TRUE@am__append_58 = usleep.c +@GL_COND_OBJ_WCRTOMB_TRUE@am__append_59 = wcrtomb.c +@GL_COND_OBJ_WCTOB_TRUE@am__append_60 = wctob.c +@GL_COND_OBJ_WCTOMB_TRUE@am__append_61 = wctomb.c +@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__append_62 = windows-thread.c +@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__append_63 = windows-tls.c  subdir = tests  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4  am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ +	$(top_srcdir)/gnulib-m4/__inline.m4 \  	$(top_srcdir)/gnulib-m4/absolute-header.m4 \  	$(top_srcdir)/gnulib-m4/alloca.m4 \  	$(top_srcdir)/gnulib-m4/arpa_inet_h.m4 \ @@ -822,6 +876,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/btowc.m4 \  	$(top_srcdir)/gnulib-m4/builtin-expect.m4 \  	$(top_srcdir)/gnulib-m4/c-bool.m4 \ +	$(top_srcdir)/gnulib-m4/c32rtomb.m4 \  	$(top_srcdir)/gnulib-m4/calloc.m4 \  	$(top_srcdir)/gnulib-m4/close.m4 \  	$(top_srcdir)/gnulib-m4/codeset.m4 \ @@ -832,6 +887,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/environ.m4 \  	$(top_srcdir)/gnulib-m4/errno_h.m4 \  	$(top_srcdir)/gnulib-m4/error.m4 \ +	$(top_srcdir)/gnulib-m4/error_h.m4 \  	$(top_srcdir)/gnulib-m4/exponentd.m4 \  	$(top_srcdir)/gnulib-m4/exponentf.m4 \  	$(top_srcdir)/gnulib-m4/exponentl.m4 \ @@ -876,6 +932,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/isnanl.m4 \  	$(top_srcdir)/gnulib-m4/iswblank.m4 \  	$(top_srcdir)/gnulib-m4/iswdigit.m4 \ +	$(top_srcdir)/gnulib-m4/iswpunct.m4 \  	$(top_srcdir)/gnulib-m4/iswxdigit.m4 \  	$(top_srcdir)/gnulib-m4/langinfo_h.m4 \  	$(top_srcdir)/gnulib-m4/largefile.m4 \ @@ -901,6 +958,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/math_h.m4 \  	$(top_srcdir)/gnulib-m4/mbchar.m4 \  	$(top_srcdir)/gnulib-m4/mbiter.m4 \ +	$(top_srcdir)/gnulib-m4/mbrtoc32.m4 \  	$(top_srcdir)/gnulib-m4/mbrtowc.m4 \  	$(top_srcdir)/gnulib-m4/mbsinit.m4 \  	$(top_srcdir)/gnulib-m4/mbstate_t.m4 \ @@ -913,6 +971,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/msvc-nothrow.m4 \  	$(top_srcdir)/gnulib-m4/multiarch.m4 \  	$(top_srcdir)/gnulib-m4/musl.m4 \ +	$(top_srcdir)/gnulib-m4/nan-mips.m4 \  	$(top_srcdir)/gnulib-m4/nanosleep.m4 \  	$(top_srcdir)/gnulib-m4/netinet_in_h.m4 \  	$(top_srcdir)/gnulib-m4/nocrash.m4 \ @@ -933,6 +992,8 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/pthread_sigmask.m4 \  	$(top_srcdir)/gnulib-m4/putenv.m4 \  	$(top_srcdir)/gnulib-m4/raise.m4 \ +	$(top_srcdir)/gnulib-m4/random.m4 \ +	$(top_srcdir)/gnulib-m4/random_r.m4 \  	$(top_srcdir)/gnulib-m4/realloc.m4 \  	$(top_srcdir)/gnulib-m4/reallocarray.m4 \  	$(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ @@ -948,6 +1009,7 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/signbit.m4 \  	$(top_srcdir)/gnulib-m4/size_max.m4 \  	$(top_srcdir)/gnulib-m4/sleep.m4 \ +	$(top_srcdir)/gnulib-m4/snan.m4 \  	$(top_srcdir)/gnulib-m4/socketlib.m4 \  	$(top_srcdir)/gnulib-m4/sockets.m4 \  	$(top_srcdir)/gnulib-m4/socklen.m4 \ @@ -976,7 +1038,13 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/sys_uio_h.m4 \  	$(top_srcdir)/gnulib-m4/thread.m4 \  	$(top_srcdir)/gnulib-m4/threadlib.m4 \ +	$(top_srcdir)/gnulib-m4/time.m4 \  	$(top_srcdir)/gnulib-m4/time_h.m4 \ +	$(top_srcdir)/gnulib-m4/uchar_h.m4 \ +	$(top_srcdir)/gnulib-m4/unicase_h.m4 \ +	$(top_srcdir)/gnulib-m4/unictype_h.m4 \ +	$(top_srcdir)/gnulib-m4/unimetadata_h.m4 \ +	$(top_srcdir)/gnulib-m4/uninorm_h.m4 \  	$(top_srcdir)/gnulib-m4/unistd_h.m4 \  	$(top_srcdir)/gnulib-m4/usleep.m4 \  	$(top_srcdir)/gnulib-m4/vasnprintf.m4 \ @@ -992,7 +1060,6 @@ am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \  	$(top_srcdir)/gnulib-m4/wint_t.m4 \  	$(top_srcdir)/gnulib-m4/xalloc.m4 \  	$(top_srcdir)/gnulib-m4/xsize.m4 \ -	$(top_srcdir)/gnulib-m4/year2038.m4 \  	$(top_srcdir)/gnulib-m4/yield.m4 \  	$(top_srcdir)/gnulib-m4/zzgnulib.m4 \  	$(top_srcdir)/m4/exported.m4 \ @@ -1020,105 +1087,115 @@ am__v_AR_1 =  libtests_a_AR = $(AR) $(ARFLAGS)  am__DEPENDENCIES_1 =  am__libtests_a_SOURCES_DIST = accept.c basename-lgpl.c binary-io.h \ -	binary-io.c bind.c btowc.c cloexec.c close.c connect.c dup2.c \ -	error.c exitfail.c fcntl.c fd-hook.c fdopen.c fstat.c \ -	ftruncate.c getcwd-lgpl.c getdtablesize.c getpagesize.c \ -	getprogname.h getprogname.c gettext.h gettimeofday.c ialloc.c \ -	inet_pton.c ioctl.c isblank.c listen.c lstat.c mbtowc.c \ -	msvc-inval.c msvc-nothrow.c nanosleep.c open.c perror.c pipe.c \ -	pselect.c pthread-thread.c pthread_sigmask.c putenv.c raise.c \ -	reallocarray.c sched_yield.c select.c setenv.c setlocale.c \ -	setsockopt.c sigprocmask.c sleep.c socket.c sockets.h \ +	binary-io.c bind.c btoc32.c btowc.c c32rtomb.c c32tob.c \ +	cloexec.c close.c connect.c dup2.c error.c exitfail.c fcntl.c \ +	fd-hook.c fdopen.c fstat.c ftruncate.c getcwd-lgpl.c \ +	getdtablesize.c getpagesize.c getprogname.c gettext.h \ +	gettimeofday.c ialloc.c inet_pton.c ioctl.c isblank.c listen.c \ +	lstat.c mbtowc.c msvc-inval.c msvc-nothrow.c nan.h nanosleep.c \ +	open.c perror.c pipe.c pselect.c pthread-thread.c \ +	pthread_sigmask.c putenv.c raise.c random.c random_r.c \ +	reallocarray.c same-inode.h same-inode.c sched_yield.c \ +	select.c setenv.c setlocale.c setsockopt.c signed-nan.h \ +	signed-snan.h sigprocmask.c sleep.c snan.h socket.c sockets.h \  	sockets.c stat.c stat-time.c stdio-read.c stdio-write.c \  	strerror.c strerror-override.c symlink.c sys_socket.c \ -	glthread/thread.h glthread/thread.c unsetenv.c usleep.c \ +	glthread/thread.h glthread/thread.c time.c unsetenv.c usleep.c \  	wcrtomb.c wctob.c wctomb.c windows-thread.c windows-tls.c \  	xmalloc.c xalloc-die.c glthread/yield.h  @GL_COND_OBJ_ACCEPT_TRUE@am__objects_1 = accept.$(OBJEXT)  @GL_COND_OBJ_BIND_TRUE@am__objects_2 = bind.$(OBJEXT)  @GL_COND_OBJ_BTOWC_TRUE@am__objects_3 = btowc.$(OBJEXT) -@GL_COND_OBJ_CLOSE_TRUE@am__objects_4 = close.$(OBJEXT) -@GL_COND_OBJ_CONNECT_TRUE@am__objects_5 = connect.$(OBJEXT) -@GL_COND_OBJ_DUP2_TRUE@am__objects_6 = dup2.$(OBJEXT) -@GL_COND_OBJ_ERROR_TRUE@am__objects_7 = error.$(OBJEXT) -@GL_COND_OBJ_FCNTL_TRUE@am__objects_8 = fcntl.$(OBJEXT) -@GL_COND_OBJ_FDOPEN_TRUE@am__objects_9 = fdopen.$(OBJEXT) -@GL_COND_OBJ_FSTAT_TRUE@am__objects_10 = fstat.$(OBJEXT) -@GL_COND_OBJ_FTRUNCATE_TRUE@am__objects_11 = ftruncate.$(OBJEXT) -@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_12 = getcwd-lgpl.$(OBJEXT) -@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_13 =  \ +@GL_COND_OBJ_C32RTOMB_TRUE@am__objects_4 = c32rtomb.$(OBJEXT) +@GL_COND_OBJ_CLOSE_TRUE@am__objects_5 = close.$(OBJEXT) +@GL_COND_OBJ_CONNECT_TRUE@am__objects_6 = connect.$(OBJEXT) +@GL_COND_OBJ_DUP2_TRUE@am__objects_7 = dup2.$(OBJEXT) +@GL_COND_OBJ_ERROR_TRUE@am__objects_8 = error.$(OBJEXT) +@GL_COND_OBJ_FCNTL_TRUE@am__objects_9 = fcntl.$(OBJEXT) +@GL_COND_OBJ_FDOPEN_TRUE@am__objects_10 = fdopen.$(OBJEXT) +@GL_COND_OBJ_FSTAT_TRUE@am__objects_11 = fstat.$(OBJEXT) +@GL_COND_OBJ_FTRUNCATE_TRUE@am__objects_12 = ftruncate.$(OBJEXT) +@GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_13 = getcwd-lgpl.$(OBJEXT) +@GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_14 =  \  @GL_COND_OBJ_GETDTABLESIZE_TRUE@	getdtablesize.$(OBJEXT) -@GL_COND_OBJ_GETPAGESIZE_TRUE@am__objects_14 = getpagesize.$(OBJEXT) -@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_15 =  \ +@GL_COND_OBJ_GETPAGESIZE_TRUE@am__objects_15 = getpagesize.$(OBJEXT) +@GL_COND_OBJ_GETPROGNAME_TRUE@am__objects_16 = getprogname.$(OBJEXT) +@GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_17 =  \  @GL_COND_OBJ_GETTIMEOFDAY_TRUE@	gettimeofday.$(OBJEXT) -@GL_COND_OBJ_INET_PTON_TRUE@am__objects_16 = inet_pton.$(OBJEXT) -@GL_COND_OBJ_IOCTL_TRUE@am__objects_17 = ioctl.$(OBJEXT) -@GL_COND_OBJ_ISBLANK_TRUE@am__objects_18 = isblank.$(OBJEXT) -@GL_COND_OBJ_LISTEN_TRUE@am__objects_19 = listen.$(OBJEXT) -@GL_COND_OBJ_LSTAT_TRUE@am__objects_20 = lstat.$(OBJEXT) -@GL_COND_OBJ_MBTOWC_TRUE@am__objects_21 = mbtowc.$(OBJEXT) -@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_22 = msvc-inval.$(OBJEXT) -@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_23 =  \ +@GL_COND_OBJ_INET_PTON_TRUE@am__objects_18 = inet_pton.$(OBJEXT) +@GL_COND_OBJ_IOCTL_TRUE@am__objects_19 = ioctl.$(OBJEXT) +@GL_COND_OBJ_ISBLANK_TRUE@am__objects_20 = isblank.$(OBJEXT) +@GL_COND_OBJ_LISTEN_TRUE@am__objects_21 = listen.$(OBJEXT) +@GL_COND_OBJ_LSTAT_TRUE@am__objects_22 = lstat.$(OBJEXT) +@GL_COND_OBJ_MBTOWC_TRUE@am__objects_23 = mbtowc.$(OBJEXT) +@GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_24 = msvc-inval.$(OBJEXT) +@GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_25 =  \  @GL_COND_OBJ_MSVC_NOTHROW_TRUE@	msvc-nothrow.$(OBJEXT) -@GL_COND_OBJ_NANOSLEEP_TRUE@am__objects_24 = nanosleep.$(OBJEXT) -@GL_COND_OBJ_OPEN_TRUE@am__objects_25 = open.$(OBJEXT) -@GL_COND_OBJ_PERROR_TRUE@am__objects_26 = perror.$(OBJEXT) -@GL_COND_OBJ_PIPE_TRUE@am__objects_27 = pipe.$(OBJEXT) -@GL_COND_OBJ_PSELECT_TRUE@am__objects_28 = pselect.$(OBJEXT) -@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__objects_29 =  \ +@GL_COND_OBJ_NANOSLEEP_TRUE@am__objects_26 = nanosleep.$(OBJEXT) +@GL_COND_OBJ_OPEN_TRUE@am__objects_27 = open.$(OBJEXT) +@GL_COND_OBJ_PERROR_TRUE@am__objects_28 = perror.$(OBJEXT) +@GL_COND_OBJ_PIPE_TRUE@am__objects_29 = pipe.$(OBJEXT) +@GL_COND_OBJ_PSELECT_TRUE@am__objects_30 = pselect.$(OBJEXT) +@GL_COND_OBJ_PTHREAD_THREAD_TRUE@am__objects_31 =  \  @GL_COND_OBJ_PTHREAD_THREAD_TRUE@	pthread-thread.$(OBJEXT) -@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__objects_30 =  \ +@GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@am__objects_32 =  \  @GL_COND_OBJ_PTHREAD_SIGMASK_TRUE@	pthread_sigmask.$(OBJEXT) -@GL_COND_OBJ_PUTENV_TRUE@am__objects_31 = putenv.$(OBJEXT) -@GL_COND_OBJ_RAISE_TRUE@am__objects_32 = raise.$(OBJEXT) -@GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_33 =  \ +@GL_COND_OBJ_PUTENV_TRUE@am__objects_33 = putenv.$(OBJEXT) +@GL_COND_OBJ_RAISE_TRUE@am__objects_34 = raise.$(OBJEXT) +@GL_COND_OBJ_RANDOM_TRUE@am__objects_35 = random.$(OBJEXT) +@GL_COND_OBJ_RANDOM_R_TRUE@am__objects_36 = random_r.$(OBJEXT) +@GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_37 =  \  @GL_COND_OBJ_REALLOCARRAY_TRUE@	reallocarray.$(OBJEXT) -@GL_COND_OBJ_SCHED_YIELD_TRUE@am__objects_34 = sched_yield.$(OBJEXT) -@GL_COND_OBJ_SELECT_TRUE@am__objects_35 = select.$(OBJEXT) -@GL_COND_OBJ_SETENV_TRUE@am__objects_36 = setenv.$(OBJEXT) -@GL_COND_OBJ_SETLOCALE_TRUE@am__objects_37 = setlocale.$(OBJEXT) -@GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_38 = setsockopt.$(OBJEXT) -@GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_39 = sigprocmask.$(OBJEXT) -@GL_COND_OBJ_SLEEP_TRUE@am__objects_40 = sleep.$(OBJEXT) -@GL_COND_OBJ_SOCKET_TRUE@am__objects_41 = socket.$(OBJEXT) -@GL_COND_OBJ_STAT_TRUE@am__objects_42 = stat.$(OBJEXT) -@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_43 = stdio-read.$(OBJEXT) -@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_44 = stdio-write.$(OBJEXT) -@GL_COND_OBJ_STRERROR_TRUE@am__objects_45 = strerror.$(OBJEXT) -@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_46 = strerror-override.$(OBJEXT) -@GL_COND_OBJ_SYMLINK_TRUE@am__objects_47 = symlink.$(OBJEXT) +@GL_COND_OBJ_SCHED_YIELD_TRUE@am__objects_38 = sched_yield.$(OBJEXT) +@GL_COND_OBJ_SELECT_TRUE@am__objects_39 = select.$(OBJEXT) +@GL_COND_OBJ_SETENV_TRUE@am__objects_40 = setenv.$(OBJEXT) +@GL_COND_OBJ_SETLOCALE_TRUE@am__objects_41 = setlocale.$(OBJEXT) +@GL_COND_OBJ_SETSOCKOPT_TRUE@am__objects_42 = setsockopt.$(OBJEXT) +@GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_43 = sigprocmask.$(OBJEXT) +@GL_COND_OBJ_SLEEP_TRUE@am__objects_44 = sleep.$(OBJEXT) +@GL_COND_OBJ_SOCKET_TRUE@am__objects_45 = socket.$(OBJEXT) +@GL_COND_OBJ_STAT_TRUE@am__objects_46 = stat.$(OBJEXT) +@GL_COND_OBJ_STDIO_READ_TRUE@am__objects_47 = stdio-read.$(OBJEXT) +@GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_48 = stdio-write.$(OBJEXT) +@GL_COND_OBJ_STRERROR_TRUE@am__objects_49 = strerror.$(OBJEXT) +@GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_50 = strerror-override.$(OBJEXT) +@GL_COND_OBJ_SYMLINK_TRUE@am__objects_51 = symlink.$(OBJEXT)  am__dirstamp = $(am__leading_dot)dirstamp -@GL_COND_OBJ_UNSETENV_TRUE@am__objects_48 = unsetenv.$(OBJEXT) -@GL_COND_OBJ_USLEEP_TRUE@am__objects_49 = usleep.$(OBJEXT) -@GL_COND_OBJ_WCRTOMB_TRUE@am__objects_50 = wcrtomb.$(OBJEXT) -@GL_COND_OBJ_WCTOB_TRUE@am__objects_51 = wctob.$(OBJEXT) -@GL_COND_OBJ_WCTOMB_TRUE@am__objects_52 = wctomb.$(OBJEXT) -@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__objects_53 =  \ +@GL_COND_OBJ_TIME_TRUE@am__objects_52 = time.$(OBJEXT) +@GL_COND_OBJ_UNSETENV_TRUE@am__objects_53 = unsetenv.$(OBJEXT) +@GL_COND_OBJ_USLEEP_TRUE@am__objects_54 = usleep.$(OBJEXT) +@GL_COND_OBJ_WCRTOMB_TRUE@am__objects_55 = wcrtomb.$(OBJEXT) +@GL_COND_OBJ_WCTOB_TRUE@am__objects_56 = wctob.$(OBJEXT) +@GL_COND_OBJ_WCTOMB_TRUE@am__objects_57 = wctomb.$(OBJEXT) +@GL_COND_OBJ_WINDOWS_THREAD_TRUE@am__objects_58 =  \  @GL_COND_OBJ_WINDOWS_THREAD_TRUE@	windows-thread.$(OBJEXT) -@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__objects_54 = windows-tls.$(OBJEXT) +@GL_COND_OBJ_WINDOWS_TLS_TRUE@am__objects_59 = windows-tls.$(OBJEXT)  am_libtests_a_OBJECTS = $(am__objects_1) basename-lgpl.$(OBJEXT) \ -	binary-io.$(OBJEXT) $(am__objects_2) $(am__objects_3) \ -	cloexec.$(OBJEXT) $(am__objects_4) $(am__objects_5) \ -	$(am__objects_6) $(am__objects_7) exitfail.$(OBJEXT) \ -	$(am__objects_8) fd-hook.$(OBJEXT) $(am__objects_9) \ -	$(am__objects_10) $(am__objects_11) $(am__objects_12) \ -	$(am__objects_13) $(am__objects_14) getprogname.$(OBJEXT) \ -	$(am__objects_15) ialloc.$(OBJEXT) $(am__objects_16) \ -	$(am__objects_17) $(am__objects_18) $(am__objects_19) \ -	$(am__objects_20) $(am__objects_21) $(am__objects_22) \ -	$(am__objects_23) $(am__objects_24) $(am__objects_25) \ -	$(am__objects_26) $(am__objects_27) $(am__objects_28) \ -	$(am__objects_29) $(am__objects_30) $(am__objects_31) \ -	$(am__objects_32) $(am__objects_33) $(am__objects_34) \ -	$(am__objects_35) $(am__objects_36) $(am__objects_37) \ -	$(am__objects_38) $(am__objects_39) $(am__objects_40) \ -	$(am__objects_41) sockets.$(OBJEXT) $(am__objects_42) \ -	stat-time.$(OBJEXT) $(am__objects_43) $(am__objects_44) \ -	$(am__objects_45) $(am__objects_46) $(am__objects_47) \ +	binary-io.$(OBJEXT) $(am__objects_2) btoc32.$(OBJEXT) \ +	$(am__objects_3) $(am__objects_4) c32tob.$(OBJEXT) \ +	cloexec.$(OBJEXT) $(am__objects_5) $(am__objects_6) \ +	$(am__objects_7) $(am__objects_8) exitfail.$(OBJEXT) \ +	$(am__objects_9) fd-hook.$(OBJEXT) $(am__objects_10) \ +	$(am__objects_11) $(am__objects_12) $(am__objects_13) \ +	$(am__objects_14) $(am__objects_15) $(am__objects_16) \ +	$(am__objects_17) ialloc.$(OBJEXT) $(am__objects_18) \ +	$(am__objects_19) $(am__objects_20) $(am__objects_21) \ +	$(am__objects_22) $(am__objects_23) $(am__objects_24) \ +	$(am__objects_25) $(am__objects_26) $(am__objects_27) \ +	$(am__objects_28) $(am__objects_29) $(am__objects_30) \ +	$(am__objects_31) $(am__objects_32) $(am__objects_33) \ +	$(am__objects_34) $(am__objects_35) $(am__objects_36) \ +	$(am__objects_37) same-inode.$(OBJEXT) $(am__objects_38) \ +	$(am__objects_39) $(am__objects_40) $(am__objects_41) \ +	$(am__objects_42) $(am__objects_43) $(am__objects_44) \ +	$(am__objects_45) sockets.$(OBJEXT) $(am__objects_46) \ +	stat-time.$(OBJEXT) $(am__objects_47) $(am__objects_48) \ +	$(am__objects_49) $(am__objects_50) $(am__objects_51) \  	sys_socket.$(OBJEXT) glthread/thread.$(OBJEXT) \ -	$(am__objects_48) $(am__objects_49) $(am__objects_50) \ -	$(am__objects_51) $(am__objects_52) $(am__objects_53) \ -	$(am__objects_54) xmalloc.$(OBJEXT) xalloc-die.$(OBJEXT) +	$(am__objects_52) $(am__objects_53) $(am__objects_54) \ +	$(am__objects_55) $(am__objects_56) $(am__objects_57) \ +	$(am__objects_58) $(am__objects_59) xmalloc.$(OBJEXT) \ +	xalloc-die.$(OBJEXT)  libtests_a_OBJECTS = $(am_libtests_a_OBJECTS)  am_current_locale_OBJECTS = locale.$(OBJEXT)  current_locale_OBJECTS = $(am_current_locale_OBJECTS) @@ -1135,6 +1212,12 @@ test_accept_OBJECTS = test-accept.$(OBJEXT)  am__DEPENDENCIES_2 = libtests.a ../lib/libunistring.la libtests.a \  	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1)  test_accept_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_alignasof_SOURCES = test-alignasof.c +test_alignasof_OBJECTS = test-alignasof.$(OBJEXT) +test_alignasof_LDADD = $(LDADD) +test_alignasof_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1)  test_alloca_opt_SOURCES = test-alloca-opt.c  test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT)  test_alloca_opt_LDADD = $(LDADD) @@ -1192,6 +1275,9 @@ test_block_of_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_block_test_OBJECTS = unictype/test-block_test.$(OBJEXT)  test_block_test_OBJECTS = $(am_test_block_test_OBJECTS)  test_block_test_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_btoc32_SOURCES = test-btoc32.c +test_btoc32_OBJECTS = test-btoc32.$(OBJEXT) +test_btoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)  test_btowc_SOURCES = test-btowc.c  test_btowc_OBJECTS = test-btowc.$(OBJEXT)  test_btowc_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) @@ -1207,6 +1293,72 @@ test_c_strncasecmp_SOURCES = test-c-strncasecmp.c  test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT)  test_c_strncasecmp_DEPENDENCIES = $(am__DEPENDENCIES_2) \  	$(am__DEPENDENCIES_1) +test_c32isalnum_SOURCES = test-c32isalnum.c +test_c32isalnum_OBJECTS = test-c32isalnum.$(OBJEXT) +test_c32isalnum_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isalpha_SOURCES = test-c32isalpha.c +test_c32isalpha_OBJECTS = test-c32isalpha.$(OBJEXT) +test_c32isalpha_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isblank_SOURCES = test-c32isblank.c +test_c32isblank_OBJECTS = test-c32isblank.$(OBJEXT) +test_c32isblank_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32iscntrl_SOURCES = test-c32iscntrl.c +test_c32iscntrl_OBJECTS = test-c32iscntrl.$(OBJEXT) +test_c32iscntrl_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isdigit_SOURCES = test-c32isdigit.c +test_c32isdigit_OBJECTS = test-c32isdigit.$(OBJEXT) +test_c32isdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isgraph_SOURCES = test-c32isgraph.c +test_c32isgraph_OBJECTS = test-c32isgraph.$(OBJEXT) +test_c32isgraph_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32islower_SOURCES = test-c32islower.c +test_c32islower_OBJECTS = test-c32islower.$(OBJEXT) +test_c32islower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isprint_SOURCES = test-c32isprint.c +test_c32isprint_OBJECTS = test-c32isprint.$(OBJEXT) +test_c32isprint_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32ispunct_SOURCES = test-c32ispunct.c +test_c32ispunct_OBJECTS = test-c32ispunct.$(OBJEXT) +test_c32ispunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isspace_SOURCES = test-c32isspace.c +test_c32isspace_OBJECTS = test-c32isspace.$(OBJEXT) +test_c32isspace_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isupper_SOURCES = test-c32isupper.c +test_c32isupper_OBJECTS = test-c32isupper.$(OBJEXT) +test_c32isupper_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32isxdigit_SOURCES = test-c32isxdigit.c +test_c32isxdigit_OBJECTS = test-c32isxdigit.$(OBJEXT) +test_c32isxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32rtomb_SOURCES = test-c32rtomb.c +test_c32rtomb_OBJECTS = test-c32rtomb.$(OBJEXT) +test_c32rtomb_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) +test_c32rtomb_w32_SOURCES = test-c32rtomb-w32.c +test_c32rtomb_w32_OBJECTS = test-c32rtomb-w32.$(OBJEXT) +test_c32rtomb_w32_LDADD = $(LDADD) +test_c32rtomb_w32_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1) +test_c32tolower_SOURCES = test-c32tolower.c +test_c32tolower_OBJECTS = test-c32tolower.$(OBJEXT) +test_c32tolower_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_c32width_SOURCES = test-c32width.c +test_c32width_OBJECTS = test-c32width.$(OBJEXT) +test_c32width_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1)  test_calloc_gnu_SOURCES = test-calloc-gnu.c  test_calloc_gnu_OBJECTS = test-calloc-gnu.$(OBJEXT)  test_calloc_gnu_LDADD = $(LDADD) @@ -1479,6 +1631,9 @@ test_errno_OBJECTS = test-errno.$(OBJEXT)  test_errno_LDADD = $(LDADD)  test_errno_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \  	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_error_SOURCES = test-error.c +test_error_OBJECTS = test-error.$(OBJEXT) +test_error_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)  test_fcntl_SOURCES = test-fcntl.c  test_fcntl_OBJECTS = test-fcntl.$(OBJEXT)  test_fcntl_LDADD = $(LDADD) @@ -1598,6 +1753,15 @@ test_ignore_value_LDADD = $(LDADD)  test_ignore_value_DEPENDENCIES = libtests.a ../lib/libunistring.la \  	libtests.a ../lib/libunistring.la libtests.a \  	$(am__DEPENDENCIES_1) +am_test_incb_byname_OBJECTS = unictype/test-incb_byname.$(OBJEXT) +test_incb_byname_OBJECTS = $(am_test_incb_byname_OBJECTS) +test_incb_byname_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_incb_name_OBJECTS = unictype/test-incb_name.$(OBJEXT) +test_incb_name_OBJECTS = $(am_test_incb_name_OBJECTS) +test_incb_name_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_incb_of_OBJECTS = unictype/test-incb_of.$(OBJEXT) +test_incb_of_OBJECTS = $(am_test_incb_of_OBJECTS) +test_incb_of_DEPENDENCIES = $(am__DEPENDENCIES_2)  test_inet_pton_SOURCES = test-inet_pton.c  test_inet_pton_OBJECTS = test-inet_pton.$(OBJEXT)  test_inet_pton_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -1652,6 +1816,10 @@ test_iswdigit_SOURCES = test-iswdigit.c  test_iswdigit_OBJECTS = test-iswdigit.$(OBJEXT)  test_iswdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \  	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_iswpunct_SOURCES = test-iswpunct.c +test_iswpunct_OBJECTS = test-iswpunct.$(OBJEXT) +test_iswpunct_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)  test_iswxdigit_SOURCES = test-iswxdigit.c  test_iswxdigit_OBJECTS = test-iswxdigit.$(OBJEXT)  test_iswxdigit_DEPENDENCIES = $(am__DEPENDENCIES_2) \ @@ -1693,6 +1861,12 @@ test_langinfo_LDADD = $(LDADD)  test_langinfo_DEPENDENCIES = libtests.a ../lib/libunistring.la \  	libtests.a ../lib/libunistring.la libtests.a \  	$(am__DEPENDENCIES_1) +test_largefile_SOURCES = test-largefile.c +test_largefile_OBJECTS = test-largefile.$(OBJEXT) +test_largefile_LDADD = $(LDADD) +test_largefile_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1)  test_limits_h_SOURCES = test-limits-h.c  test_limits_h_OBJECTS = test-limits-h.$(OBJEXT)  test_limits_h_LDADD = $(LDADD) @@ -1746,6 +1920,16 @@ test_math_OBJECTS = test-math.$(OBJEXT)  test_math_LDADD = $(LDADD)  test_math_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \  	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_mbrtoc32_SOURCES = test-mbrtoc32.c +test_mbrtoc32_OBJECTS = test-mbrtoc32.$(OBJEXT) +test_mbrtoc32_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_mbrtoc32_w32_SOURCES = test-mbrtoc32-w32.c +test_mbrtoc32_w32_OBJECTS = test-mbrtoc32-w32.$(OBJEXT) +test_mbrtoc32_w32_LDADD = $(LDADD) +test_mbrtoc32_w32_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1)  test_mbrtowc_SOURCES = test-mbrtowc.c  test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT)  test_mbrtowc_DEPENDENCIES = $(am__DEPENDENCIES_2) \ @@ -2047,6 +2231,16 @@ test_pr_hex_digit_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_pr_hyphen_OBJECTS = unictype/test-pr_hyphen.$(OBJEXT)  test_pr_hyphen_OBJECTS = $(am_test_pr_hyphen_OBJECTS)  test_pr_hyphen_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_id_compat_math_continue_OBJECTS =  \ +	unictype/test-pr_id_compat_math_continue.$(OBJEXT) +test_pr_id_compat_math_continue_OBJECTS =  \ +	$(am_test_pr_id_compat_math_continue_OBJECTS) +test_pr_id_compat_math_continue_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_id_compat_math_start_OBJECTS =  \ +	unictype/test-pr_id_compat_math_start.$(OBJEXT) +test_pr_id_compat_math_start_OBJECTS =  \ +	$(am_test_pr_id_compat_math_start_OBJECTS) +test_pr_id_compat_math_start_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_pr_id_continue_OBJECTS =  \  	unictype/test-pr_id_continue.$(OBJEXT)  test_pr_id_continue_OBJECTS = $(am_test_pr_id_continue_OBJECTS) @@ -2068,6 +2262,11 @@ am_test_pr_ids_trinary_operator_OBJECTS =  \  test_pr_ids_trinary_operator_OBJECTS =  \  	$(am_test_pr_ids_trinary_operator_OBJECTS)  test_pr_ids_trinary_operator_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_ids_unary_operator_OBJECTS =  \ +	unictype/test-pr_ids_unary_operator.$(OBJEXT) +test_pr_ids_unary_operator_OBJECTS =  \ +	$(am_test_pr_ids_unary_operator_OBJECTS) +test_pr_ids_unary_operator_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_pr_ignorable_control_OBJECTS =  \  	unictype/test-pr_ignorable_control.$(OBJEXT)  test_pr_ignorable_control_OBJECTS =  \ @@ -2168,6 +2367,12 @@ am_test_pr_pattern_white_space_OBJECTS =  \  test_pr_pattern_white_space_OBJECTS =  \  	$(am_test_pr_pattern_white_space_OBJECTS)  test_pr_pattern_white_space_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_pr_prepended_concatenation_mark_OBJECTS =  \ +	unictype/test-pr_prepended_concatenation_mark.$(OBJEXT) +test_pr_prepended_concatenation_mark_OBJECTS =  \ +	$(am_test_pr_prepended_concatenation_mark_OBJECTS) +test_pr_prepended_concatenation_mark_DEPENDENCIES =  \ +	$(am__DEPENDENCIES_2)  am_test_pr_private_use_OBJECTS =  \  	unictype/test-pr_private_use.$(OBJEXT)  test_pr_private_use_OBJECTS = $(am_test_pr_private_use_OBJECTS) @@ -2279,6 +2484,23 @@ test_raise_OBJECTS = test-raise.$(OBJEXT)  test_raise_LDADD = $(LDADD)  test_raise_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \  	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_random_SOURCES = test-random.c +test_random_OBJECTS = test-random.$(OBJEXT) +test_random_LDADD = $(LDADD) +test_random_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1) +test_random_mt_SOURCES = test-random-mt.c +test_random_mt_OBJECTS = test-random-mt.$(OBJEXT) +test_random_mt_DEPENDENCIES = $(am__DEPENDENCIES_2) \ +	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +	$(am__DEPENDENCIES_1) +test_random_r_SOURCES = test-random_r.c +test_random_r_OBJECTS = test-random_r.$(OBJEXT) +test_random_r_LDADD = $(LDADD) +test_random_r_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1)  test_realloc_gnu_SOURCES = test-realloc-gnu.c  test_realloc_gnu_OBJECTS = test-realloc-gnu.$(OBJEXT)  test_realloc_gnu_LDADD = $(LDADD) @@ -2336,6 +2558,13 @@ test_setlocale_null_mt_one_OBJECTS =  \  	test-setlocale_null-mt-one.$(OBJEXT)  test_setlocale_null_mt_one_DEPENDENCIES = $(am__DEPENDENCIES_2) \  	$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +test_setlocale_null_unlocked_SOURCES = test-setlocale_null-unlocked.c +test_setlocale_null_unlocked_OBJECTS =  \ +	test-setlocale_null-unlocked.$(OBJEXT) +test_setlocale_null_unlocked_LDADD = $(LDADD) +test_setlocale_null_unlocked_DEPENDENCIES = libtests.a \ +	../lib/libunistring.la libtests.a ../lib/libunistring.la \ +	libtests.a $(am__DEPENDENCIES_1)  test_setsockopt_SOURCES = test-setsockopt.c  test_setsockopt_OBJECTS = test-setsockopt.$(OBJEXT)  test_setsockopt_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -2372,12 +2601,6 @@ test_stat_time_SOURCES = test-stat-time.c  test_stat_time_OBJECTS = test-stat-time.$(OBJEXT)  test_stat_time_DEPENDENCIES = $(am__DEPENDENCIES_2) \  	$(am__DEPENDENCIES_1) -test_stdalign_SOURCES = test-stdalign.c -test_stdalign_OBJECTS = test-stdalign.$(OBJEXT) -test_stdalign_LDADD = $(LDADD) -test_stdalign_DEPENDENCIES = libtests.a ../lib/libunistring.la \ -	libtests.a ../lib/libunistring.la libtests.a \ -	$(am__DEPENDENCIES_1)  test_stdbool_SOURCES = test-stdbool.c  test_stdbool_OBJECTS = test-stdbool.$(OBJEXT)  test_stdbool_LDADD = $(LDADD) @@ -2524,6 +2747,15 @@ test_time_OBJECTS = test-time.$(OBJEXT)  test_time_LDADD = $(LDADD)  test_time_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \  	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_time_h_SOURCES = test-time-h.c +test_time_h_OBJECTS = test-time-h.$(OBJEXT) +test_time_h_LDADD = $(LDADD) +test_time_h_DEPENDENCIES = libtests.a ../lib/libunistring.la \ +	libtests.a ../lib/libunistring.la libtests.a \ +	$(am__DEPENDENCIES_1) +am_test_u_version_OBJECTS = unimetadata/test-u-version.$(OBJEXT) +test_u_version_OBJECTS = $(am_test_u_version_OBJECTS) +test_u_version_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u16_asnprintf1_OBJECTS =  \  	unistdio/test-u16-asnprintf1.$(OBJEXT)  test_u16_asnprintf1_OBJECTS = $(am_test_u16_asnprintf1_OBJECTS) @@ -2624,6 +2856,9 @@ test_u16_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u16_normcoll_OBJECTS = uninorm/test-u16-normcoll.$(OBJEXT)  test_u16_normcoll_OBJECTS = $(am_test_u16_normcoll_OBJECTS)  test_u16_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_pcpy_OBJECTS = unistr/test-u16-pcpy.$(OBJEXT) +test_u16_pcpy_OBJECTS = $(am_test_u16_pcpy_OBJECTS) +test_u16_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u16_possible_linebreaks_OBJECTS =  \  	unilbrk/test-u16-possible-linebreaks.$(OBJEXT)  test_u16_possible_linebreaks_OBJECTS =  \ @@ -2871,6 +3106,9 @@ test_u32_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u32_normcoll_OBJECTS = uninorm/test-u32-normcoll.$(OBJEXT)  test_u32_normcoll_OBJECTS = $(am_test_u32_normcoll_OBJECTS)  test_u32_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_pcpy_OBJECTS = unistr/test-u32-pcpy.$(OBJEXT) +test_u32_pcpy_OBJECTS = $(am_test_u32_pcpy_OBJECTS) +test_u32_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u32_possible_linebreaks_OBJECTS =  \  	unilbrk/test-u32-possible-linebreaks.$(OBJEXT)  test_u32_possible_linebreaks_OBJECTS =  \ @@ -3100,6 +3338,9 @@ test_u8_normcmp_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u8_normcoll_OBJECTS = uninorm/test-u8-normcoll.$(OBJEXT)  test_u8_normcoll_OBJECTS = $(am_test_u8_normcoll_OBJECTS)  test_u8_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_pcpy_OBJECTS = unistr/test-u8-pcpy.$(OBJEXT) +test_u8_pcpy_OBJECTS = $(am_test_u8_pcpy_OBJECTS) +test_u8_pcpy_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_u8_possible_linebreaks_OBJECTS =  \  	unilbrk/test-u8-possible-linebreaks.$(OBJEXT)  test_u8_possible_linebreaks_OBJECTS =  \ @@ -3258,6 +3499,11 @@ test_uc_width_DEPENDENCIES = $(am__DEPENDENCIES_2)  am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT)  test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS)  test_uc_width2_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_uchar_SOURCES = test-uchar.c +test_uchar_OBJECTS = test-uchar.$(OBJEXT) +test_uchar_LDADD = $(LDADD) +test_uchar_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ +	../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1)  am_test_ulc_asnprintf1_OBJECTS =  \  	unistdio/test-ulc-asnprintf1.$(OBJEXT)  test_ulc_asnprintf1_OBJECTS = $(am_test_ulc_asnprintf1_OBJECTS) @@ -3404,56 +3650,67 @@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp  am__maybe_remake_depfiles = depfiles  am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	./$(DEPDIR)/basename-lgpl.Po ./$(DEPDIR)/binary-io.Po \ -	./$(DEPDIR)/bind.Po ./$(DEPDIR)/btowc.Po ./$(DEPDIR)/calloc.Po \ -	./$(DEPDIR)/cloexec.Po ./$(DEPDIR)/close.Po \ -	./$(DEPDIR)/connect.Po ./$(DEPDIR)/dup2.Po \ -	./$(DEPDIR)/error.Po ./$(DEPDIR)/exitfail.Po \ -	./$(DEPDIR)/fcntl.Po ./$(DEPDIR)/fd-hook.Po \ -	./$(DEPDIR)/fdopen.Po ./$(DEPDIR)/fstat.Po \ -	./$(DEPDIR)/ftruncate.Po ./$(DEPDIR)/getcwd-lgpl.Po \ -	./$(DEPDIR)/getdtablesize.Po ./$(DEPDIR)/getpagesize.Po \ -	./$(DEPDIR)/getprogname.Po ./$(DEPDIR)/gettimeofday.Po \ -	./$(DEPDIR)/ialloc.Po ./$(DEPDIR)/iconvsupport.Po \ -	./$(DEPDIR)/inet_pton.Po ./$(DEPDIR)/ioctl.Po \ -	./$(DEPDIR)/isblank.Po ./$(DEPDIR)/listen.Po \ -	./$(DEPDIR)/locale.Po ./$(DEPDIR)/lstat.Po \ -	./$(DEPDIR)/malloc.Po ./$(DEPDIR)/mbtowc.Po \ -	./$(DEPDIR)/msvc-inval.Po ./$(DEPDIR)/msvc-nothrow.Po \ -	./$(DEPDIR)/nanosleep.Po ./$(DEPDIR)/open.Po \ -	./$(DEPDIR)/perror.Po ./$(DEPDIR)/pipe.Po \ +	./$(DEPDIR)/bind.Po ./$(DEPDIR)/btoc32.Po ./$(DEPDIR)/btowc.Po \ +	./$(DEPDIR)/c32rtomb.Po ./$(DEPDIR)/c32tob.Po \ +	./$(DEPDIR)/calloc.Po ./$(DEPDIR)/cloexec.Po \ +	./$(DEPDIR)/close.Po ./$(DEPDIR)/connect.Po \ +	./$(DEPDIR)/dup2.Po ./$(DEPDIR)/error.Po \ +	./$(DEPDIR)/exitfail.Po ./$(DEPDIR)/fcntl.Po \ +	./$(DEPDIR)/fd-hook.Po ./$(DEPDIR)/fdopen.Po \ +	./$(DEPDIR)/fstat.Po ./$(DEPDIR)/ftruncate.Po \ +	./$(DEPDIR)/getcwd-lgpl.Po ./$(DEPDIR)/getdtablesize.Po \ +	./$(DEPDIR)/getpagesize.Po ./$(DEPDIR)/getprogname.Po \ +	./$(DEPDIR)/gettimeofday.Po ./$(DEPDIR)/ialloc.Po \ +	./$(DEPDIR)/iconvsupport.Po ./$(DEPDIR)/inet_pton.Po \ +	./$(DEPDIR)/ioctl.Po ./$(DEPDIR)/isblank.Po \ +	./$(DEPDIR)/listen.Po ./$(DEPDIR)/locale.Po \ +	./$(DEPDIR)/lstat.Po ./$(DEPDIR)/malloc.Po \ +	./$(DEPDIR)/mbtowc.Po ./$(DEPDIR)/msvc-inval.Po \ +	./$(DEPDIR)/msvc-nothrow.Po ./$(DEPDIR)/nanosleep.Po \ +	./$(DEPDIR)/open.Po ./$(DEPDIR)/perror.Po ./$(DEPDIR)/pipe.Po \  	./$(DEPDIR)/pselect.Po ./$(DEPDIR)/pthread-thread.Po \  	./$(DEPDIR)/pthread_sigmask.Po ./$(DEPDIR)/putenv.Po \ -	./$(DEPDIR)/raise.Po ./$(DEPDIR)/randomd.Po \ +	./$(DEPDIR)/raise.Po ./$(DEPDIR)/random.Po \ +	./$(DEPDIR)/random_r.Po ./$(DEPDIR)/randomd.Po \  	./$(DEPDIR)/randoml.Po ./$(DEPDIR)/realloc.Po \ -	./$(DEPDIR)/reallocarray.Po ./$(DEPDIR)/sched_yield.Po \ -	./$(DEPDIR)/select.Po ./$(DEPDIR)/setenv.Po \ -	./$(DEPDIR)/setlocale.Po ./$(DEPDIR)/setsockopt.Po \ -	./$(DEPDIR)/sigprocmask.Po ./$(DEPDIR)/sleep.Po \ -	./$(DEPDIR)/socket.Po ./$(DEPDIR)/sockets.Po \ -	./$(DEPDIR)/stat-time.Po ./$(DEPDIR)/stat-w32.Po \ -	./$(DEPDIR)/stat.Po ./$(DEPDIR)/stdio-read.Po \ -	./$(DEPDIR)/stdio-write.Po ./$(DEPDIR)/strerror-override.Po \ -	./$(DEPDIR)/strerror.Po ./$(DEPDIR)/strerror_r.Po \ -	./$(DEPDIR)/symlink.Po ./$(DEPDIR)/sys_socket.Po \ -	./$(DEPDIR)/test-accept.Po ./$(DEPDIR)/test-alloca-opt.Po \ +	./$(DEPDIR)/reallocarray.Po ./$(DEPDIR)/same-inode.Po \ +	./$(DEPDIR)/sched_yield.Po ./$(DEPDIR)/select.Po \ +	./$(DEPDIR)/setenv.Po ./$(DEPDIR)/setlocale.Po \ +	./$(DEPDIR)/setsockopt.Po ./$(DEPDIR)/sigprocmask.Po \ +	./$(DEPDIR)/sleep.Po ./$(DEPDIR)/socket.Po \ +	./$(DEPDIR)/sockets.Po ./$(DEPDIR)/stat-time.Po \ +	./$(DEPDIR)/stat-w32.Po ./$(DEPDIR)/stat.Po \ +	./$(DEPDIR)/stdio-read.Po ./$(DEPDIR)/stdio-write.Po \ +	./$(DEPDIR)/strerror-override.Po ./$(DEPDIR)/strerror.Po \ +	./$(DEPDIR)/strerror_r.Po ./$(DEPDIR)/symlink.Po \ +	./$(DEPDIR)/sys_socket.Po ./$(DEPDIR)/test-accept.Po \ +	./$(DEPDIR)/test-alignasof.Po ./$(DEPDIR)/test-alloca-opt.Po \  	./$(DEPDIR)/test-arpa_inet.Po \  	./$(DEPDIR)/test-array-mergesort.Po ./$(DEPDIR)/test-assert.Po \  	./$(DEPDIR)/test-binary-io.Po ./$(DEPDIR)/test-bind.Po \ -	./$(DEPDIR)/test-btowc.Po ./$(DEPDIR)/test-c-ctype.Po \ -	./$(DEPDIR)/test-c-strcasecmp.Po \ +	./$(DEPDIR)/test-btoc32.Po ./$(DEPDIR)/test-btowc.Po \ +	./$(DEPDIR)/test-c-ctype.Po ./$(DEPDIR)/test-c-strcasecmp.Po \  	./$(DEPDIR)/test-c-strncasecmp.Po \ +	./$(DEPDIR)/test-c32isalnum.Po ./$(DEPDIR)/test-c32isalpha.Po \ +	./$(DEPDIR)/test-c32isblank.Po ./$(DEPDIR)/test-c32iscntrl.Po \ +	./$(DEPDIR)/test-c32isdigit.Po ./$(DEPDIR)/test-c32isgraph.Po \ +	./$(DEPDIR)/test-c32islower.Po ./$(DEPDIR)/test-c32isprint.Po \ +	./$(DEPDIR)/test-c32ispunct.Po ./$(DEPDIR)/test-c32isspace.Po \ +	./$(DEPDIR)/test-c32isupper.Po ./$(DEPDIR)/test-c32isxdigit.Po \ +	./$(DEPDIR)/test-c32rtomb-w32.Po ./$(DEPDIR)/test-c32rtomb.Po \ +	./$(DEPDIR)/test-c32tolower.Po ./$(DEPDIR)/test-c32width.Po \  	./$(DEPDIR)/test-calloc-gnu.Po ./$(DEPDIR)/test-cloexec.Po \  	./$(DEPDIR)/test-close.Po ./$(DEPDIR)/test-connect.Po \  	./$(DEPDIR)/test-ctype.Po ./$(DEPDIR)/test-dup2.Po \  	./$(DEPDIR)/test-environ.Po ./$(DEPDIR)/test-errno.Po \ -	./$(DEPDIR)/test-fcntl-h.Po ./$(DEPDIR)/test-fcntl.Po \ -	./$(DEPDIR)/test-fdopen.Po ./$(DEPDIR)/test-fgetc.Po \ -	./$(DEPDIR)/test-float.Po ./$(DEPDIR)/test-fputc.Po \ -	./$(DEPDIR)/test-fread.Po ./$(DEPDIR)/test-free.Po \ -	./$(DEPDIR)/test-frexp.Po ./$(DEPDIR)/test-frexpl.Po \ -	./$(DEPDIR)/test-fseterr.Po ./$(DEPDIR)/test-fstat.Po \ -	./$(DEPDIR)/test-ftruncate.Po ./$(DEPDIR)/test-fwrite.Po \ -	./$(DEPDIR)/test-getcwd-lgpl.Po \ +	./$(DEPDIR)/test-error.Po ./$(DEPDIR)/test-fcntl-h.Po \ +	./$(DEPDIR)/test-fcntl.Po ./$(DEPDIR)/test-fdopen.Po \ +	./$(DEPDIR)/test-fgetc.Po ./$(DEPDIR)/test-float.Po \ +	./$(DEPDIR)/test-fputc.Po ./$(DEPDIR)/test-fread.Po \ +	./$(DEPDIR)/test-free.Po ./$(DEPDIR)/test-frexp.Po \ +	./$(DEPDIR)/test-frexpl.Po ./$(DEPDIR)/test-fseterr.Po \ +	./$(DEPDIR)/test-fstat.Po ./$(DEPDIR)/test-ftruncate.Po \ +	./$(DEPDIR)/test-fwrite.Po ./$(DEPDIR)/test-getcwd-lgpl.Po \  	./$(DEPDIR)/test-getdtablesize.Po \  	./$(DEPDIR)/test-getprogname.Po \  	./$(DEPDIR)/test-gettimeofday.Po \ @@ -3464,13 +3721,15 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	./$(DEPDIR)/test-isblank.Po ./$(DEPDIR)/test-isnand-nolibm.Po \  	./$(DEPDIR)/test-isnanf-nolibm.Po \  	./$(DEPDIR)/test-isnanl-nolibm.Po ./$(DEPDIR)/test-iswblank.Po \ -	./$(DEPDIR)/test-iswdigit.Po ./$(DEPDIR)/test-iswxdigit.Po \ -	./$(DEPDIR)/test-langinfo.Po ./$(DEPDIR)/test-limits-h.Po \ +	./$(DEPDIR)/test-iswdigit.Po ./$(DEPDIR)/test-iswpunct.Po \ +	./$(DEPDIR)/test-iswxdigit.Po ./$(DEPDIR)/test-langinfo.Po \ +	./$(DEPDIR)/test-largefile.Po ./$(DEPDIR)/test-limits-h.Po \  	./$(DEPDIR)/test-listen.Po ./$(DEPDIR)/test-localcharset.Po \  	./$(DEPDIR)/test-locale.Po ./$(DEPDIR)/test-localename.Po \  	./$(DEPDIR)/test-lock.Po ./$(DEPDIR)/test-lstat.Po \  	./$(DEPDIR)/test-malloc-gnu.Po ./$(DEPDIR)/test-malloca.Po \ -	./$(DEPDIR)/test-math.Po ./$(DEPDIR)/test-mbrtowc-w32.Po \ +	./$(DEPDIR)/test-math.Po ./$(DEPDIR)/test-mbrtoc32-w32.Po \ +	./$(DEPDIR)/test-mbrtoc32.Po ./$(DEPDIR)/test-mbrtowc-w32.Po \  	./$(DEPDIR)/test-mbrtowc.Po ./$(DEPDIR)/test-mbsinit.Po \  	./$(DEPDIR)/test-memchr.Po ./$(DEPDIR)/test-nanosleep.Po \  	./$(DEPDIR)/test-netinet_in.Po ./$(DEPDIR)/test-once.Po \ @@ -3481,7 +3740,8 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	./$(DEPDIR)/test-pthread-thread.Po ./$(DEPDIR)/test-pthread.Po \  	./$(DEPDIR)/test-pthread_sigmask1.Po \  	./$(DEPDIR)/test-pthread_sigmask2.Po ./$(DEPDIR)/test-raise.Po \ -	./$(DEPDIR)/test-realloc-gnu.Po \ +	./$(DEPDIR)/test-random-mt.Po ./$(DEPDIR)/test-random.Po \ +	./$(DEPDIR)/test-random_r.Po ./$(DEPDIR)/test-realloc-gnu.Po \  	./$(DEPDIR)/test-reallocarray.Po ./$(DEPDIR)/test-rwlock1.Po \  	./$(DEPDIR)/test-sched.Po ./$(DEPDIR)/test-select-fd.Po \  	./$(DEPDIR)/test-select-stdin.Po ./$(DEPDIR)/test-select.Po \ @@ -3489,35 +3749,37 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	./$(DEPDIR)/test-setlocale2.Po \  	./$(DEPDIR)/test-setlocale_null-mt-all.Po \  	./$(DEPDIR)/test-setlocale_null-mt-one.Po \ +	./$(DEPDIR)/test-setlocale_null-unlocked.Po \  	./$(DEPDIR)/test-setlocale_null.Po \  	./$(DEPDIR)/test-setsockopt.Po ./$(DEPDIR)/test-signal-h.Po \  	./$(DEPDIR)/test-signbit.Po ./$(DEPDIR)/test-sigprocmask.Po \  	./$(DEPDIR)/test-sleep.Po ./$(DEPDIR)/test-sockets.Po \  	./$(DEPDIR)/test-stat-time.Po ./$(DEPDIR)/test-stat.Po \ -	./$(DEPDIR)/test-stdalign.Po ./$(DEPDIR)/test-stdbool.Po \ -	./$(DEPDIR)/test-stdckdint.Po ./$(DEPDIR)/test-stddef.Po \ -	./$(DEPDIR)/test-stdint.Po ./$(DEPDIR)/test-stdio.Po \ -	./$(DEPDIR)/test-stdlib.Po ./$(DEPDIR)/test-strerror.Po \ -	./$(DEPDIR)/test-strerror_r.Po ./$(DEPDIR)/test-striconveh.Po \ -	./$(DEPDIR)/test-striconveha.Po ./$(DEPDIR)/test-string.Po \ -	./$(DEPDIR)/test-strncat.Po ./$(DEPDIR)/test-strstr.Po \ -	./$(DEPDIR)/test-symlink.Po ./$(DEPDIR)/test-sys_ioctl.Po \ -	./$(DEPDIR)/test-sys_select.Po ./$(DEPDIR)/test-sys_socket.Po \ -	./$(DEPDIR)/test-sys_stat.Po ./$(DEPDIR)/test-sys_time.Po \ -	./$(DEPDIR)/test-sys_types.Po ./$(DEPDIR)/test-sys_uio.Po \ -	./$(DEPDIR)/test-thread_create.Po \ -	./$(DEPDIR)/test-thread_self.Po ./$(DEPDIR)/test-time.Po \ +	./$(DEPDIR)/test-stdbool.Po ./$(DEPDIR)/test-stdckdint.Po \ +	./$(DEPDIR)/test-stddef.Po ./$(DEPDIR)/test-stdint.Po \ +	./$(DEPDIR)/test-stdio.Po ./$(DEPDIR)/test-stdlib.Po \ +	./$(DEPDIR)/test-strerror.Po ./$(DEPDIR)/test-strerror_r.Po \ +	./$(DEPDIR)/test-striconveh.Po ./$(DEPDIR)/test-striconveha.Po \ +	./$(DEPDIR)/test-string.Po ./$(DEPDIR)/test-strncat.Po \ +	./$(DEPDIR)/test-strstr.Po ./$(DEPDIR)/test-symlink.Po \ +	./$(DEPDIR)/test-sys_ioctl.Po ./$(DEPDIR)/test-sys_select.Po \ +	./$(DEPDIR)/test-sys_socket.Po ./$(DEPDIR)/test-sys_stat.Po \ +	./$(DEPDIR)/test-sys_time.Po ./$(DEPDIR)/test-sys_types.Po \ +	./$(DEPDIR)/test-sys_uio.Po ./$(DEPDIR)/test-thread_create.Po \ +	./$(DEPDIR)/test-thread_self.Po ./$(DEPDIR)/test-time-h.Po \ +	./$(DEPDIR)/test-time.Po ./$(DEPDIR)/test-uchar.Po \  	./$(DEPDIR)/test-unistd.Po ./$(DEPDIR)/test-unsetenv.Po \  	./$(DEPDIR)/test-usleep.Po ./$(DEPDIR)/test-verify-try.Po \  	./$(DEPDIR)/test-verify.Po ./$(DEPDIR)/test-wchar.Po \  	./$(DEPDIR)/test-wcrtomb-w32.Po ./$(DEPDIR)/test-wcrtomb.Po \  	./$(DEPDIR)/test-wctype-h.Po ./$(DEPDIR)/test-wcwidth.Po \ -	./$(DEPDIR)/test-xalloc-die.Po ./$(DEPDIR)/unsetenv.Po \ -	./$(DEPDIR)/usleep.Po ./$(DEPDIR)/wcrtomb.Po \ -	./$(DEPDIR)/wctob.Po ./$(DEPDIR)/wctomb.Po \ -	./$(DEPDIR)/windows-thread.Po ./$(DEPDIR)/windows-tls.Po \ -	./$(DEPDIR)/xalloc-die.Po ./$(DEPDIR)/xmalloc.Po \ -	glthread/$(DEPDIR)/thread.Po unicase/$(DEPDIR)/test-cased.Po \ +	./$(DEPDIR)/test-xalloc-die.Po ./$(DEPDIR)/time.Po \ +	./$(DEPDIR)/unsetenv.Po ./$(DEPDIR)/usleep.Po \ +	./$(DEPDIR)/wcrtomb.Po ./$(DEPDIR)/wctob.Po \ +	./$(DEPDIR)/wctomb.Po ./$(DEPDIR)/windows-thread.Po \ +	./$(DEPDIR)/windows-tls.Po ./$(DEPDIR)/xalloc-die.Po \ +	./$(DEPDIR)/xmalloc.Po glthread/$(DEPDIR)/thread.Po \ +	unicase/$(DEPDIR)/test-cased.Po \  	unicase/$(DEPDIR)/test-ignorable.Po \  	unicase/$(DEPDIR)/test-locale-language.Po \  	unicase/$(DEPDIR)/test-u16-casecmp.Po \ @@ -3643,6 +3905,9 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unictype/$(DEPDIR)/test-ctype_xdigit.Po \  	unictype/$(DEPDIR)/test-decdigit.Po \  	unictype/$(DEPDIR)/test-digit.Po \ +	unictype/$(DEPDIR)/test-incb_byname.Po \ +	unictype/$(DEPDIR)/test-incb_name.Po \ +	unictype/$(DEPDIR)/test-incb_of.Po \  	unictype/$(DEPDIR)/test-joininggroup_byname.Po \  	unictype/$(DEPDIR)/test-joininggroup_name.Po \  	unictype/$(DEPDIR)/test-joininggroup_of.Po \ @@ -3700,11 +3965,14 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unictype/$(DEPDIR)/test-pr_grapheme_link.Po \  	unictype/$(DEPDIR)/test-pr_hex_digit.Po \  	unictype/$(DEPDIR)/test-pr_hyphen.Po \ +	unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po \ +	unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po \  	unictype/$(DEPDIR)/test-pr_id_continue.Po \  	unictype/$(DEPDIR)/test-pr_id_start.Po \  	unictype/$(DEPDIR)/test-pr_ideographic.Po \  	unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po \  	unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po \ +	unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po \  	unictype/$(DEPDIR)/test-pr_ignorable_control.Po \  	unictype/$(DEPDIR)/test-pr_iso_control.Po \  	unictype/$(DEPDIR)/test-pr_join_control.Po \ @@ -3728,6 +3996,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unictype/$(DEPDIR)/test-pr_paragraph_separator.Po \  	unictype/$(DEPDIR)/test-pr_pattern_syntax.Po \  	unictype/$(DEPDIR)/test-pr_pattern_white_space.Po \ +	unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po \  	unictype/$(DEPDIR)/test-pr_private_use.Po \  	unictype/$(DEPDIR)/test-pr_punctuation.Po \  	unictype/$(DEPDIR)/test-pr_quotation_mark.Po \ @@ -3773,6 +4042,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po \  	unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po \  	unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po \ +	unimetadata/$(DEPDIR)/test-u-version.Po \  	uniname/$(DEPDIR)/test-uninames.Po \  	uninorm/$(DEPDIR)/test-canonical-decomposition.Po \  	uninorm/$(DEPDIR)/test-compat-decomposition.Po \ @@ -3846,6 +4116,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unistr/$(DEPDIR)/test-u16-mbtoucr.Po \  	unistr/$(DEPDIR)/test-u16-move.Po \  	unistr/$(DEPDIR)/test-u16-next.Po \ +	unistr/$(DEPDIR)/test-u16-pcpy.Po \  	unistr/$(DEPDIR)/test-u16-prev.Po \  	unistr/$(DEPDIR)/test-u16-set.Po \  	unistr/$(DEPDIR)/test-u16-stpcpy.Po \ @@ -3881,6 +4152,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unistr/$(DEPDIR)/test-u32-mbtoucr.Po \  	unistr/$(DEPDIR)/test-u32-move.Po \  	unistr/$(DEPDIR)/test-u32-next.Po \ +	unistr/$(DEPDIR)/test-u32-pcpy.Po \  	unistr/$(DEPDIR)/test-u32-prev.Po \  	unistr/$(DEPDIR)/test-u32-set.Po \  	unistr/$(DEPDIR)/test-u32-stpcpy.Po \ @@ -3916,6 +4188,7 @@ am__depfiles_remade = ./$(DEPDIR)/accept.Po ./$(DEPDIR)/alloca.Po \  	unistr/$(DEPDIR)/test-u8-mbtoucr.Po \  	unistr/$(DEPDIR)/test-u8-move.Po \  	unistr/$(DEPDIR)/test-u8-next.Po \ +	unistr/$(DEPDIR)/test-u8-pcpy.Po \  	unistr/$(DEPDIR)/test-u8-prev.Po \  	unistr/$(DEPDIR)/test-u8-set.Po \  	unistr/$(DEPDIR)/test-u8-stpcpy.Po \ @@ -3971,14 +4244,20 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)  am__v_CCLD_0 = @echo "  CCLD    " $@;  am__v_CCLD_1 =   SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ -	$(current_locale_SOURCES) test-accept.c test-alloca-opt.c \ -	test-arpa_inet.c test-array-mergesort.c test-assert.c \ -	$(test_bidi_byname_SOURCES) $(test_bidi_longname_SOURCES) \ -	$(test_bidi_name_SOURCES) $(test_bidi_of_SOURCES) \ -	$(test_bidi_test_SOURCES) test-binary-io.c test-bind.c \ -	$(test_block_list_SOURCES) $(test_block_of_SOURCES) \ -	$(test_block_test_SOURCES) test-btowc.c test-c-ctype.c \ -	test-c-strcasecmp.c test-c-strncasecmp.c test-calloc-gnu.c \ +	$(current_locale_SOURCES) test-accept.c test-alignasof.c \ +	test-alloca-opt.c test-arpa_inet.c test-array-mergesort.c \ +	test-assert.c $(test_bidi_byname_SOURCES) \ +	$(test_bidi_longname_SOURCES) $(test_bidi_name_SOURCES) \ +	$(test_bidi_of_SOURCES) $(test_bidi_test_SOURCES) \ +	test-binary-io.c test-bind.c $(test_block_list_SOURCES) \ +	$(test_block_of_SOURCES) $(test_block_test_SOURCES) \ +	test-btoc32.c test-btowc.c test-c-ctype.c test-c-strcasecmp.c \ +	test-c-strncasecmp.c test-c32isalnum.c test-c32isalpha.c \ +	test-c32isblank.c test-c32iscntrl.c test-c32isdigit.c \ +	test-c32isgraph.c test-c32islower.c test-c32isprint.c \ +	test-c32ispunct.c test-c32isspace.c test-c32isupper.c \ +	test-c32isxdigit.c test-c32rtomb.c test-c32rtomb-w32.c \ +	test-c32tolower.c test-c32width.c test-calloc-gnu.c \  	$(test_canonical_decomposition_SOURCES) $(test_cased_SOURCES) \  	$(test_categ_C_SOURCES) $(test_categ_Cc_SOURCES) \  	$(test_categ_Cf_SOURCES) $(test_categ_Cn_SOURCES) \ @@ -4018,28 +4297,32 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \  	$(test_decdigit_SOURCES) $(test_decomposing_form_SOURCES) \  	$(test_decomposition_SOURCES) $(test_digit_SOURCES) \ -	test-dup2.c test-environ.c test-errno.c test-fcntl.c \ -	test-fcntl-h.c test-fdopen.c test-fgetc.c test-float.c \ -	test-fputc.c test-fread.c test-free.c \ +	test-dup2.c test-environ.c test-errno.c test-error.c \ +	test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ +	test-float.c test-fputc.c test-fread.c test-free.c \  	$(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \  	test-fseterr.c test-fstat.c test-ftruncate.c test-fwrite.c \  	test-getcwd-lgpl.c test-getdtablesize.c test-getprogname.c \  	test-gettimeofday.c test-hard-locale.c test-iconv.c \  	test-iconv-h.c $(test_ignorable_SOURCES) test-ignore-value.c \ -	test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ -	test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ -	test-isnanl-nolibm.c test-iswblank.c test-iswdigit.c \ +	$(test_incb_byname_SOURCES) $(test_incb_name_SOURCES) \ +	$(test_incb_of_SOURCES) test-inet_pton.c test-intprops.c \ +	test-inttypes.c test-ioctl.c test-isblank.c \ +	test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ +	test-iswblank.c test-iswdigit.c test-iswpunct.c \  	test-iswxdigit.c $(test_joininggroup_byname_SOURCES) \  	$(test_joininggroup_name_SOURCES) \  	$(test_joininggroup_of_SOURCES) \  	$(test_joiningtype_byname_SOURCES) \  	$(test_joiningtype_longname_SOURCES) \  	$(test_joiningtype_name_SOURCES) \ -	$(test_joiningtype_of_SOURCES) test-langinfo.c test-limits-h.c \ -	test-listen.c test-localcharset.c test-locale.c \ +	$(test_joiningtype_of_SOURCES) test-langinfo.c \ +	test-largefile.c test-limits-h.c test-listen.c \ +	test-localcharset.c test-locale.c \  	$(test_locale_language_SOURCES) test-localename.c test-lock.c \  	test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ -	test-mbrtowc.c test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ +	test-mbrtoc32.c test-mbrtoc32-w32.c test-mbrtowc.c \ +	test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \  	$(test_mirror_SOURCES) test-nanosleep.c test-netinet_in.c \  	$(test_nfc_SOURCES) $(test_nfd_SOURCES) $(test_nfkc_SOURCES) \  	$(test_nfkd_SOURCES) $(test_numeric_SOURCES) \ @@ -4084,10 +4367,14 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_pr_grapheme_base_SOURCES) \  	$(test_pr_grapheme_extend_SOURCES) \  	$(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ -	$(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ -	$(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ +	$(test_pr_hyphen_SOURCES) \ +	$(test_pr_id_compat_math_continue_SOURCES) \ +	$(test_pr_id_compat_math_start_SOURCES) \ +	$(test_pr_id_continue_SOURCES) $(test_pr_id_start_SOURCES) \ +	$(test_pr_ideographic_SOURCES) \  	$(test_pr_ids_binary_operator_SOURCES) \  	$(test_pr_ids_trinary_operator_SOURCES) \ +	$(test_pr_ids_unary_operator_SOURCES) \  	$(test_pr_ignorable_control_SOURCES) \  	$(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \  	$(test_pr_left_of_pair_SOURCES) \ @@ -4108,6 +4395,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_pr_paragraph_separator_SOURCES) \  	$(test_pr_pattern_syntax_SOURCES) \  	$(test_pr_pattern_white_space_SOURCES) \ +	$(test_pr_prepended_concatenation_mark_SOURCES) \  	$(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \  	$(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \  	$(test_pr_regional_indicator_SOURCES) \ @@ -4123,15 +4411,16 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \  	test-printf-frexp.c test-printf-frexpl.c test-pselect.c \  	test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ -	test-pthread_sigmask2.c test-raise.c test-realloc-gnu.c \ +	test-pthread_sigmask2.c test-raise.c test-random.c \ +	test-random-mt.c test-random_r.c test-realloc-gnu.c \  	test-reallocarray.c test-rwlock1.c test-sched.c \  	$(test_scripts_SOURCES) test-select.c test-select-fd.c \  	test-select-stdin.c test-setenv.c test-setlocale1.c \  	test-setlocale2.c test-setlocale_null.c \  	test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ -	test-setsockopt.c test-signal-h.c test-signbit.c \ -	test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ -	test-stat-time.c test-stdalign.c test-stdbool.c \ +	test-setlocale_null-unlocked.c test-setsockopt.c \ +	test-signal-h.c test-signbit.c test-sigprocmask.c test-sleep.c \ +	test-sockets.c test-stat.c test-stat-time.c test-stdbool.c \  	test-stdckdint.c test-stddef.c test-stdint.c test-stdio.c \  	test-stdlib.c test-strerror.c test-strerror_r.c \  	test-striconveh.c $(test_striconveha_SOURCES) test-string.c \ @@ -4141,11 +4430,12 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	test-sys_ioctl.c test-sys_select.c test-sys_socket.c \  	test-sys_stat.c test-sys_time.c test-sys_types.c \  	test-sys_uio.c test-thread_create.c test-thread_self.c \ -	test-time.c $(test_u16_asnprintf1_SOURCES) \ -	$(test_u16_casecmp_SOURCES) $(test_u16_casecoll_SOURCES) \ -	$(test_u16_casefold_SOURCES) $(test_u16_check_SOURCES) \ -	$(test_u16_chr_SOURCES) $(test_u16_cmp_SOURCES) \ -	$(test_u16_cmp2_SOURCES) $(test_u16_conv_from_enc_SOURCES) \ +	test-time.c test-time-h.c $(test_u_version_SOURCES) \ +	$(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ +	$(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ +	$(test_u16_check_SOURCES) $(test_u16_chr_SOURCES) \ +	$(test_u16_cmp_SOURCES) $(test_u16_cmp2_SOURCES) \ +	$(test_u16_conv_from_enc_SOURCES) \  	$(test_u16_conv_to_enc_SOURCES) $(test_u16_cpy_SOURCES) \  	$(test_u16_cpy_alloc_SOURCES) \  	$(test_u16_grapheme_breaks_SOURCES) \ @@ -4159,6 +4449,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_u16_mbtouc_unsafe_SOURCES) $(test_u16_mbtoucr_SOURCES) \  	$(test_u16_move_SOURCES) $(test_u16_next_SOURCES) \  	$(test_u16_normcmp_SOURCES) $(test_u16_normcoll_SOURCES) \ +	$(test_u16_pcpy_SOURCES) \  	$(test_u16_possible_linebreaks_SOURCES) \  	$(test_u16_prev_SOURCES) $(test_u16_set_SOURCES) \  	$(test_u16_stpcpy_SOURCES) $(test_u16_stpncpy_SOURCES) \ @@ -4199,6 +4490,7 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_u32_nfc_big_SOURCES) $(test_u32_nfd_big_SOURCES) \  	$(test_u32_nfkc_big_SOURCES) $(test_u32_nfkd_big_SOURCES) \  	$(test_u32_normcmp_SOURCES) $(test_u32_normcoll_SOURCES) \ +	$(test_u32_pcpy_SOURCES) \  	$(test_u32_possible_linebreaks_SOURCES) \  	$(test_u32_prev_SOURCES) $(test_u32_set_SOURCES) \  	$(test_u32_stpcpy_SOURCES) $(test_u32_stpncpy_SOURCES) \ @@ -4237,11 +4529,12 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_u8_mbtouc_unsafe_SOURCES) $(test_u8_mbtoucr_SOURCES) \  	$(test_u8_move_SOURCES) $(test_u8_next_SOURCES) \  	$(test_u8_normcmp_SOURCES) $(test_u8_normcoll_SOURCES) \ -	$(test_u8_possible_linebreaks_SOURCES) $(test_u8_prev_SOURCES) \ -	$(test_u8_set_SOURCES) $(test_u8_stpcpy_SOURCES) \ -	$(test_u8_stpncpy_SOURCES) $(test_u8_strcat_SOURCES) \ -	$(test_u8_strchr_SOURCES) $(test_u8_strcmp_SOURCES) \ -	$(test_u8_strcoll_SOURCES) $(test_u8_strconv_from_enc_SOURCES) \ +	$(test_u8_pcpy_SOURCES) $(test_u8_possible_linebreaks_SOURCES) \ +	$(test_u8_prev_SOURCES) $(test_u8_set_SOURCES) \ +	$(test_u8_stpcpy_SOURCES) $(test_u8_stpncpy_SOURCES) \ +	$(test_u8_strcat_SOURCES) $(test_u8_strchr_SOURCES) \ +	$(test_u8_strcmp_SOURCES) $(test_u8_strcoll_SOURCES) \ +	$(test_u8_strconv_from_enc_SOURCES) \  	$(test_u8_strconv_to_enc_SOURCES) $(test_u8_strcpy_SOURCES) \  	$(test_u8_strdup_SOURCES) $(test_u8_strlen_SOURCES) \  	$(test_u8_strmblen_SOURCES) $(test_u8_strmbtouc_SOURCES) \ @@ -4262,8 +4555,8 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	$(test_uc_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \  	$(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \  	$(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ -	$(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ -	$(test_ulc_casecoll_SOURCES) \ +	test-uchar.c $(test_ulc_asnprintf1_SOURCES) \ +	$(test_ulc_casecmp_SOURCES) $(test_ulc_casecoll_SOURCES) \  	$(test_ulc_grapheme_breaks_SOURCES) \  	$(test_ulc_possible_linebreaks_SOURCES) \  	$(test_ulc_vasnprintf1_SOURCES) \ @@ -4278,14 +4571,20 @@ SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \  	test-wcwidth.c test-xalloc-die.c  DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(EXTRA_libtests_a_SOURCES) $(current_locale_SOURCES) \ -	test-accept.c test-alloca-opt.c test-arpa_inet.c \ -	test-array-mergesort.c test-assert.c \ +	test-accept.c test-alignasof.c test-alloca-opt.c \ +	test-arpa_inet.c test-array-mergesort.c test-assert.c \  	$(test_bidi_byname_SOURCES) $(test_bidi_longname_SOURCES) \  	$(test_bidi_name_SOURCES) $(test_bidi_of_SOURCES) \  	$(test_bidi_test_SOURCES) test-binary-io.c test-bind.c \  	$(test_block_list_SOURCES) $(test_block_of_SOURCES) \ -	$(test_block_test_SOURCES) test-btowc.c test-c-ctype.c \ -	test-c-strcasecmp.c test-c-strncasecmp.c test-calloc-gnu.c \ +	$(test_block_test_SOURCES) test-btoc32.c test-btowc.c \ +	test-c-ctype.c test-c-strcasecmp.c test-c-strncasecmp.c \ +	test-c32isalnum.c test-c32isalpha.c test-c32isblank.c \ +	test-c32iscntrl.c test-c32isdigit.c test-c32isgraph.c \ +	test-c32islower.c test-c32isprint.c test-c32ispunct.c \ +	test-c32isspace.c test-c32isupper.c test-c32isxdigit.c \ +	test-c32rtomb.c test-c32rtomb-w32.c test-c32tolower.c \ +	test-c32width.c test-calloc-gnu.c \  	$(test_canonical_decomposition_SOURCES) $(test_cased_SOURCES) \  	$(test_categ_C_SOURCES) $(test_categ_Cc_SOURCES) \  	$(test_categ_Cf_SOURCES) $(test_categ_Cn_SOURCES) \ @@ -4325,28 +4624,32 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_ctype_upper_SOURCES) $(test_ctype_xdigit_SOURCES) \  	$(test_decdigit_SOURCES) $(test_decomposing_form_SOURCES) \  	$(test_decomposition_SOURCES) $(test_digit_SOURCES) \ -	test-dup2.c test-environ.c test-errno.c test-fcntl.c \ -	test-fcntl-h.c test-fdopen.c test-fgetc.c test-float.c \ -	test-fputc.c test-fread.c test-free.c \ +	test-dup2.c test-environ.c test-errno.c test-error.c \ +	test-fcntl.c test-fcntl-h.c test-fdopen.c test-fgetc.c \ +	test-float.c test-fputc.c test-fread.c test-free.c \  	$(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \  	test-fseterr.c test-fstat.c test-ftruncate.c test-fwrite.c \  	test-getcwd-lgpl.c test-getdtablesize.c test-getprogname.c \  	test-gettimeofday.c test-hard-locale.c test-iconv.c \  	test-iconv-h.c $(test_ignorable_SOURCES) test-ignore-value.c \ -	test-inet_pton.c test-intprops.c test-inttypes.c test-ioctl.c \ -	test-isblank.c test-isnand-nolibm.c test-isnanf-nolibm.c \ -	test-isnanl-nolibm.c test-iswblank.c test-iswdigit.c \ +	$(test_incb_byname_SOURCES) $(test_incb_name_SOURCES) \ +	$(test_incb_of_SOURCES) test-inet_pton.c test-intprops.c \ +	test-inttypes.c test-ioctl.c test-isblank.c \ +	test-isnand-nolibm.c test-isnanf-nolibm.c test-isnanl-nolibm.c \ +	test-iswblank.c test-iswdigit.c test-iswpunct.c \  	test-iswxdigit.c $(test_joininggroup_byname_SOURCES) \  	$(test_joininggroup_name_SOURCES) \  	$(test_joininggroup_of_SOURCES) \  	$(test_joiningtype_byname_SOURCES) \  	$(test_joiningtype_longname_SOURCES) \  	$(test_joiningtype_name_SOURCES) \ -	$(test_joiningtype_of_SOURCES) test-langinfo.c test-limits-h.c \ -	test-listen.c test-localcharset.c test-locale.c \ +	$(test_joiningtype_of_SOURCES) test-langinfo.c \ +	test-largefile.c test-limits-h.c test-listen.c \ +	test-localcharset.c test-locale.c \  	$(test_locale_language_SOURCES) test-localename.c test-lock.c \  	test-lstat.c test-malloc-gnu.c test-malloca.c test-math.c \ -	test-mbrtowc.c test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \ +	test-mbrtoc32.c test-mbrtoc32-w32.c test-mbrtowc.c \ +	test-mbrtowc-w32.c test-mbsinit.c test-memchr.c \  	$(test_mirror_SOURCES) test-nanosleep.c test-netinet_in.c \  	$(test_nfc_SOURCES) $(test_nfd_SOURCES) $(test_nfkc_SOURCES) \  	$(test_nfkd_SOURCES) $(test_numeric_SOURCES) \ @@ -4391,10 +4694,14 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_pr_grapheme_base_SOURCES) \  	$(test_pr_grapheme_extend_SOURCES) \  	$(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ -	$(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ -	$(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ +	$(test_pr_hyphen_SOURCES) \ +	$(test_pr_id_compat_math_continue_SOURCES) \ +	$(test_pr_id_compat_math_start_SOURCES) \ +	$(test_pr_id_continue_SOURCES) $(test_pr_id_start_SOURCES) \ +	$(test_pr_ideographic_SOURCES) \  	$(test_pr_ids_binary_operator_SOURCES) \  	$(test_pr_ids_trinary_operator_SOURCES) \ +	$(test_pr_ids_unary_operator_SOURCES) \  	$(test_pr_ignorable_control_SOURCES) \  	$(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \  	$(test_pr_left_of_pair_SOURCES) \ @@ -4415,6 +4722,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_pr_paragraph_separator_SOURCES) \  	$(test_pr_pattern_syntax_SOURCES) \  	$(test_pr_pattern_white_space_SOURCES) \ +	$(test_pr_prepended_concatenation_mark_SOURCES) \  	$(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \  	$(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \  	$(test_pr_regional_indicator_SOURCES) \ @@ -4430,15 +4738,16 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \  	test-printf-frexp.c test-printf-frexpl.c test-pselect.c \  	test-pthread.c test-pthread-thread.c test-pthread_sigmask1.c \ -	test-pthread_sigmask2.c test-raise.c test-realloc-gnu.c \ +	test-pthread_sigmask2.c test-raise.c test-random.c \ +	test-random-mt.c test-random_r.c test-realloc-gnu.c \  	test-reallocarray.c test-rwlock1.c test-sched.c \  	$(test_scripts_SOURCES) test-select.c test-select-fd.c \  	test-select-stdin.c test-setenv.c test-setlocale1.c \  	test-setlocale2.c test-setlocale_null.c \  	test-setlocale_null-mt-all.c test-setlocale_null-mt-one.c \ -	test-setsockopt.c test-signal-h.c test-signbit.c \ -	test-sigprocmask.c test-sleep.c test-sockets.c test-stat.c \ -	test-stat-time.c test-stdalign.c test-stdbool.c \ +	test-setlocale_null-unlocked.c test-setsockopt.c \ +	test-signal-h.c test-signbit.c test-sigprocmask.c test-sleep.c \ +	test-sockets.c test-stat.c test-stat-time.c test-stdbool.c \  	test-stdckdint.c test-stddef.c test-stdint.c test-stdio.c \  	test-stdlib.c test-strerror.c test-strerror_r.c \  	test-striconveh.c $(test_striconveha_SOURCES) test-string.c \ @@ -4448,11 +4757,12 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	test-sys_ioctl.c test-sys_select.c test-sys_socket.c \  	test-sys_stat.c test-sys_time.c test-sys_types.c \  	test-sys_uio.c test-thread_create.c test-thread_self.c \ -	test-time.c $(test_u16_asnprintf1_SOURCES) \ -	$(test_u16_casecmp_SOURCES) $(test_u16_casecoll_SOURCES) \ -	$(test_u16_casefold_SOURCES) $(test_u16_check_SOURCES) \ -	$(test_u16_chr_SOURCES) $(test_u16_cmp_SOURCES) \ -	$(test_u16_cmp2_SOURCES) $(test_u16_conv_from_enc_SOURCES) \ +	test-time.c test-time-h.c $(test_u_version_SOURCES) \ +	$(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ +	$(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ +	$(test_u16_check_SOURCES) $(test_u16_chr_SOURCES) \ +	$(test_u16_cmp_SOURCES) $(test_u16_cmp2_SOURCES) \ +	$(test_u16_conv_from_enc_SOURCES) \  	$(test_u16_conv_to_enc_SOURCES) $(test_u16_cpy_SOURCES) \  	$(test_u16_cpy_alloc_SOURCES) \  	$(test_u16_grapheme_breaks_SOURCES) \ @@ -4466,6 +4776,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_u16_mbtouc_unsafe_SOURCES) $(test_u16_mbtoucr_SOURCES) \  	$(test_u16_move_SOURCES) $(test_u16_next_SOURCES) \  	$(test_u16_normcmp_SOURCES) $(test_u16_normcoll_SOURCES) \ +	$(test_u16_pcpy_SOURCES) \  	$(test_u16_possible_linebreaks_SOURCES) \  	$(test_u16_prev_SOURCES) $(test_u16_set_SOURCES) \  	$(test_u16_stpcpy_SOURCES) $(test_u16_stpncpy_SOURCES) \ @@ -4506,6 +4817,7 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_u32_nfc_big_SOURCES) $(test_u32_nfd_big_SOURCES) \  	$(test_u32_nfkc_big_SOURCES) $(test_u32_nfkd_big_SOURCES) \  	$(test_u32_normcmp_SOURCES) $(test_u32_normcoll_SOURCES) \ +	$(test_u32_pcpy_SOURCES) \  	$(test_u32_possible_linebreaks_SOURCES) \  	$(test_u32_prev_SOURCES) $(test_u32_set_SOURCES) \  	$(test_u32_stpcpy_SOURCES) $(test_u32_stpncpy_SOURCES) \ @@ -4544,11 +4856,12 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_u8_mbtouc_unsafe_SOURCES) $(test_u8_mbtoucr_SOURCES) \  	$(test_u8_move_SOURCES) $(test_u8_next_SOURCES) \  	$(test_u8_normcmp_SOURCES) $(test_u8_normcoll_SOURCES) \ -	$(test_u8_possible_linebreaks_SOURCES) $(test_u8_prev_SOURCES) \ -	$(test_u8_set_SOURCES) $(test_u8_stpcpy_SOURCES) \ -	$(test_u8_stpncpy_SOURCES) $(test_u8_strcat_SOURCES) \ -	$(test_u8_strchr_SOURCES) $(test_u8_strcmp_SOURCES) \ -	$(test_u8_strcoll_SOURCES) $(test_u8_strconv_from_enc_SOURCES) \ +	$(test_u8_pcpy_SOURCES) $(test_u8_possible_linebreaks_SOURCES) \ +	$(test_u8_prev_SOURCES) $(test_u8_set_SOURCES) \ +	$(test_u8_stpcpy_SOURCES) $(test_u8_stpncpy_SOURCES) \ +	$(test_u8_strcat_SOURCES) $(test_u8_strchr_SOURCES) \ +	$(test_u8_strcmp_SOURCES) $(test_u8_strcoll_SOURCES) \ +	$(test_u8_strconv_from_enc_SOURCES) \  	$(test_u8_strconv_to_enc_SOURCES) $(test_u8_strcpy_SOURCES) \  	$(test_u8_strdup_SOURCES) $(test_u8_strlen_SOURCES) \  	$(test_u8_strmblen_SOURCES) $(test_u8_strmbtouc_SOURCES) \ @@ -4569,8 +4882,8 @@ DIST_SOURCES = $(am__libtests_a_SOURCES_DIST) \  	$(test_uc_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \  	$(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \  	$(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ -	$(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ -	$(test_ulc_casecoll_SOURCES) \ +	test-uchar.c $(test_ulc_asnprintf1_SOURCES) \ +	$(test_ulc_casecmp_SOURCES) $(test_ulc_casecoll_SOURCES) \  	$(test_ulc_grapheme_breaks_SOURCES) \  	$(test_ulc_possible_linebreaks_SOURCES) \  	$(test_ulc_vasnprintf1_SOURCES) \ @@ -4884,6 +5197,8 @@ CPP = @CPP@  CPPFLAGS = @CPPFLAGS@  CSCOPE = @CSCOPE@  CTAGS = @CTAGS@ +CXX_HAS_CHAR8_TYPE = @CXX_HAS_CHAR8_TYPE@ +CXX_HAS_UCHAR_TYPES = @CXX_HAS_UCHAR_TYPES@  CYGPATH_W = @CYGPATH_W@  DEFS = @DEFS@ -DEXEEXT=\"@EXEEXT@\"  DEPDIR = @DEPDIR@ @@ -4925,7 +5240,33 @@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@  GL_GNULIB_ATANL = @GL_GNULIB_ATANL@  GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@  GL_GNULIB_BIND = @GL_GNULIB_BIND@ +GL_GNULIB_BTOC32 = @GL_GNULIB_BTOC32@  GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ +GL_GNULIB_C32ISALNUM = @GL_GNULIB_C32ISALNUM@ +GL_GNULIB_C32ISALPHA = @GL_GNULIB_C32ISALPHA@ +GL_GNULIB_C32ISBLANK = @GL_GNULIB_C32ISBLANK@ +GL_GNULIB_C32ISCNTRL = @GL_GNULIB_C32ISCNTRL@ +GL_GNULIB_C32ISDIGIT = @GL_GNULIB_C32ISDIGIT@ +GL_GNULIB_C32ISGRAPH = @GL_GNULIB_C32ISGRAPH@ +GL_GNULIB_C32ISLOWER = @GL_GNULIB_C32ISLOWER@ +GL_GNULIB_C32ISPRINT = @GL_GNULIB_C32ISPRINT@ +GL_GNULIB_C32ISPUNCT = @GL_GNULIB_C32ISPUNCT@ +GL_GNULIB_C32ISSPACE = @GL_GNULIB_C32ISSPACE@ +GL_GNULIB_C32ISUPPER = @GL_GNULIB_C32ISUPPER@ +GL_GNULIB_C32ISXDIGIT = @GL_GNULIB_C32ISXDIGIT@ +GL_GNULIB_C32RTOMB = @GL_GNULIB_C32RTOMB@ +GL_GNULIB_C32SNRTOMBS = @GL_GNULIB_C32SNRTOMBS@ +GL_GNULIB_C32SRTOMBS = @GL_GNULIB_C32SRTOMBS@ +GL_GNULIB_C32STOMBS = @GL_GNULIB_C32STOMBS@ +GL_GNULIB_C32SWIDTH = @GL_GNULIB_C32SWIDTH@ +GL_GNULIB_C32TOB = @GL_GNULIB_C32TOB@ +GL_GNULIB_C32TOLOWER = @GL_GNULIB_C32TOLOWER@ +GL_GNULIB_C32TOUPPER = @GL_GNULIB_C32TOUPPER@ +GL_GNULIB_C32WIDTH = @GL_GNULIB_C32WIDTH@ +GL_GNULIB_C32_APPLY_MAPPING = @GL_GNULIB_C32_APPLY_MAPPING@ +GL_GNULIB_C32_APPLY_TYPE_TEST = @GL_GNULIB_C32_APPLY_TYPE_TEST@ +GL_GNULIB_C32_GET_MAPPING = @GL_GNULIB_C32_GET_MAPPING@ +GL_GNULIB_C32_GET_TYPE_TEST = @GL_GNULIB_C32_GET_TYPE_TEST@  GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@  GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@  GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ @@ -5038,6 +5379,7 @@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@  GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@  GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@  GL_GNULIB_GETPEERNAME = @GL_GNULIB_GETPEERNAME@ +GL_GNULIB_GETPROGNAME = @GL_GNULIB_GETPROGNAME@  GL_GNULIB_GETSOCKNAME = @GL_GNULIB_GETSOCKNAME@  GL_GNULIB_GETSOCKOPT = @GL_GNULIB_GETSOCKOPT@  GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ @@ -5069,16 +5411,18 @@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@  GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@  GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@  GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ +GL_GNULIB_ISWPUNCT = @GL_GNULIB_ISWPUNCT@  GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@  GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@  GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ +GL_GNULIB_LDEXP = @GL_GNULIB_LDEXP@  GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@  GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@  GL_GNULIB_LINK = @GL_GNULIB_LINK@  GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@  GL_GNULIB_LISTEN = @GL_GNULIB_LISTEN@  GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ -GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ +GL_GNULIB_LOCALENAME_UNSAFE = @GL_GNULIB_LOCALENAME_UNSAFE@  GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@  GL_GNULIB_LOG = @GL_GNULIB_LOG@  GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ @@ -5100,6 +5444,8 @@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@  GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@  GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@  GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ +GL_GNULIB_MBRTOC16 = @GL_GNULIB_MBRTOC16@ +GL_GNULIB_MBRTOC32 = @GL_GNULIB_MBRTOC32@  GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@  GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@  GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ @@ -5109,15 +5455,20 @@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@  GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@  GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@  GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ +GL_GNULIB_MBSNRTOC32S = @GL_GNULIB_MBSNRTOC32S@  GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@  GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@  GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@  GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ +GL_GNULIB_MBSRTOC32S = @GL_GNULIB_MBSRTOC32S@  GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@  GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@  GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@  GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ +GL_GNULIB_MBSTOC32S = @GL_GNULIB_MBSTOC32S@  GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ +GL_GNULIB_MBSTOWCS = @GL_GNULIB_MBSTOWCS@ +GL_GNULIB_MBSZERO = @GL_GNULIB_MBSZERO@  GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@  GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@  GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ @@ -5170,6 +5521,7 @@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@  GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@  GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@  GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ +GL_GNULIB_MEMSET_EXPLICIT = @GL_GNULIB_MEMSET_EXPLICIT@  GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@  GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@  GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ @@ -5223,6 +5575,7 @@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@  GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@  GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@  GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ +GL_GNULIB_RAND = @GL_GNULIB_RAND@  GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@  GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@  GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ @@ -5297,6 +5650,7 @@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@  GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@  GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@  GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ +GL_GNULIB_STRTOF = @GL_GNULIB_STRTOF@  GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@  GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@  GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ @@ -5312,12 +5666,16 @@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@  GL_GNULIB_TANF = @GL_GNULIB_TANF@  GL_GNULIB_TANHF = @GL_GNULIB_TANHF@  GL_GNULIB_TANL = @GL_GNULIB_TANL@ +GL_GNULIB_TIME = @GL_GNULIB_TIME@  GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@  GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@  GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@  GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@  GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@  GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ +GL_GNULIB_TOTALORDER = @GL_GNULIB_TOTALORDER@ +GL_GNULIB_TOTALORDERF = @GL_GNULIB_TOTALORDERF@ +GL_GNULIB_TOTALORDERL = @GL_GNULIB_TOTALORDERL@  GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@  GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@  GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ @@ -5325,6 +5683,148 @@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@  GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@  GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@  GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ +GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE@ +GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE = @GL_GNULIB_UNICASE_EMPTY_SUFFIX_CONTEXT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_CS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_C_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LM_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_LU_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_L_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ME_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_MN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_M_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_NO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_N_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PD_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PI_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_PS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_P_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SM_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_SO_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_S_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZP_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_ZS_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_CATEGORY_Z_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ALPHABETIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ASCII_HEX_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BLOCK_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_BOUNDARY_NEUTRAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_COMMON_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUROPEAN_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_EUR_NUM_TERMINATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_LEFT_TO_RIGHT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_NON_SPACING_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_OTHER_NEUTRAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_PDF_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_SEGMENT_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_BIDI_WHITESPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CASE_IGNORABLE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEFOLDED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_CASEMAPPED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_LOWERCASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_TITLECASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CHANGES_WHEN_UPPERCASED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMBINING_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_COMPOSITE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_CURRENCY_SYMBOL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DASH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DECIMAL_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DEPRECATED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_DIACRITIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_COMPONENT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_BASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_MODIFIER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EMOJI_PRESENTATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDED_PICTOGRAPHIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_EXTENDER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_FORMAT_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_BASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_EXTEND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_GRAPHEME_LINK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HEX_DIGIT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_HYPHEN_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDEOGRAPHIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_BINARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_TRINARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IDS_UNARY_OPERATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_COMPAT_MATH_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ISO_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_JOIN_CONTROL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LEFT_OF_PAIR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LINE_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOGICAL_ORDER_EXCEPTION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_LOWERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_MATH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NON_BREAK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NOT_A_CHARACTER_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_NUMERIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ALPHABETIC_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_GRAPHEME_EXTEND_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_ID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_LOWERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_MATH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_OTHER_UPPERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PAIRED_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PARAGRAPH_SEPARATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_SYNTAX_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PATTERN_WHITE_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PREPENDED_CONCATENATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PREPENDED_CONCATENATION_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PRIVATE_USE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_QUOTATION_MARK_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_RADICAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SENTENCE_TERMINAL_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SOFT_DOTTED_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TERMINAL_PUNCTUATION_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_TITLECASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNASSIGNED_CODE_VALUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UNIFIED_IDEOGRAPH_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_UPPERCASE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_VARIATION_SELECTOR_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_WHITE_SPACE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_CONTINUE_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_XID_START_DLL_VARIABLE@ +GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE = @GL_GNULIB_UNICTYPE_PROPERTY_ZERO_WIDTH_DLL_VARIABLE@ +GL_GNULIB_UNIMETADATA_UNICODE_VERSION_DLL_VARIABLE = @GL_GNULIB_UNIMETADATA_UNICODE_VERSION_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFC_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFD_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKC_DLL_VARIABLE@ +GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE = @GL_GNULIB_UNINORM_NFKD_DLL_VARIABLE@  GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@  GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@  GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ @@ -5376,6 +5876,7 @@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@  GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@  GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@  GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ +GL_GNULIB_WGETCWD = @GL_GNULIB_WGETCWD@  GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@  GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@  GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ @@ -5384,9 +5885,12 @@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@  GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@  GL_GNULIB_WRITE = @GL_GNULIB_WRITE@  GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ +GNULIBHEADERS_OVERRIDE_CHAR16_T = @GNULIBHEADERS_OVERRIDE_CHAR16_T@ +GNULIBHEADERS_OVERRIDE_CHAR32_T = @GNULIBHEADERS_OVERRIDE_CHAR32_T@ +GNULIBHEADERS_OVERRIDE_CHAR8_T = @GNULIBHEADERS_OVERRIDE_CHAR8_T@  GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ -GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@  GREP = @GREP@ +HARD_LOCALE_LIB = @HARD_LOCALE_LIB@  HAVE_ACCEPT4 = @HAVE_ACCEPT4@  HAVE_ACOSF = @HAVE_ACOSF@  HAVE_ACOSL = @HAVE_ACOSL@ @@ -5400,6 +5904,7 @@ HAVE_ATANF = @HAVE_ATANF@  HAVE_ATANL = @HAVE_ATANL@  HAVE_ATOLL = @HAVE_ATOLL@  HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_C32RTOMB = @HAVE_C32RTOMB@  HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@  HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@  HAVE_CBRT = @HAVE_CBRT@ @@ -5449,6 +5954,7 @@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@  HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@  HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@  HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ +HAVE_DECL_GETW = @HAVE_DECL_GETW@  HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@  HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@  HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@ @@ -5465,6 +5971,8 @@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@  HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@  HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@  HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_PROGRAM_INVOCATION_NAME = @HAVE_DECL_PROGRAM_INVOCATION_NAME@ +HAVE_DECL_PUTW = @HAVE_DECL_PUTW@  HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@  HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@  HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ @@ -5499,6 +6007,9 @@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@  HAVE_DPRINTF = @HAVE_DPRINTF@  HAVE_DUP3 = @HAVE_DUP3@  HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ +HAVE_ERROR = @HAVE_ERROR@ +HAVE_ERROR_AT_LINE = @HAVE_ERROR_AT_LINE@ +HAVE_ERROR_H = @HAVE_ERROR_H@  HAVE_EUIDACCESS = @HAVE_EUIDACCESS@  HAVE_EXECVPE = @HAVE_EXECVPE@  HAVE_EXPF = @HAVE_EXPF@ @@ -5537,6 +6048,7 @@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@  HAVE_GETLOGIN = @HAVE_GETLOGIN@  HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@  HAVE_GETPASS = @HAVE_GETPASS@ +HAVE_GETPROGNAME = @HAVE_GETPROGNAME@  HAVE_GETSUBOPT = @HAVE_GETSUBOPT@  HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@  HAVE_GETUMASK = @HAVE_GETUMASK@ @@ -5548,6 +6060,8 @@ HAVE_HYPOTL = @HAVE_HYPOTL@  HAVE_ILOGB = @HAVE_ILOGB@  HAVE_ILOGBF = @HAVE_ILOGBF@  HAVE_ILOGBL = @HAVE_ILOGBL@ +HAVE_IMAXABS = @HAVE_IMAXABS@ +HAVE_IMAXDIV = @HAVE_IMAXDIV@  HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@  HAVE_INITSTATE = @HAVE_INITSTATE@  HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ @@ -5580,6 +6094,8 @@ HAVE_LOGL = @HAVE_LOGL@  HAVE_LSTAT = @HAVE_LSTAT@  HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@  HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOC16 = @HAVE_MBRTOC16@ +HAVE_MBRTOC32 = @HAVE_MBRTOC32@  HAVE_MBRTOWC = @HAVE_MBRTOWC@  HAVE_MBSINIT = @HAVE_MBSINIT@  HAVE_MBSLEN = @HAVE_MBSLEN@ @@ -5587,6 +6103,7 @@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@  HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@  HAVE_MBTOWC = @HAVE_MBTOWC@  HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MEMSET_EXPLICIT = @HAVE_MEMSET_EXPLICIT@  HAVE_MKDIRAT = @HAVE_MKDIRAT@  HAVE_MKDTEMP = @HAVE_MKDTEMP@  HAVE_MKFIFO = @HAVE_MKFIFO@ @@ -5727,6 +6244,7 @@ HAVE_STRPBRK = @HAVE_STRPBRK@  HAVE_STRPTIME = @HAVE_STRPTIME@  HAVE_STRSEP = @HAVE_STRSEP@  HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOF = @HAVE_STRTOF@  HAVE_STRTOL = @HAVE_STRTOL@  HAVE_STRTOLD = @HAVE_STRTOLD@  HAVE_STRTOLL = @HAVE_STRTOLL@ @@ -5759,8 +6277,13 @@ HAVE_TIMEGM = @HAVE_TIMEGM@  HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@  HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@  HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ +HAVE_TOTALORDER = @HAVE_TOTALORDER@ +HAVE_TOTALORDERF = @HAVE_TOTALORDERF@ +HAVE_TOTALORDERL = @HAVE_TOTALORDERL@  HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UCHAR_H = @HAVE_UCHAR_H@  HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNISTRING_WOE32DLL_H = @HAVE_UNISTRING_WOE32DLL_H@  HAVE_UNLINKAT = @HAVE_UNLINKAT@  HAVE_UNLOCKPT = @HAVE_UNLOCKPT@  HAVE_USLEEP = @HAVE_USLEEP@ @@ -5808,6 +6331,7 @@ HAVE_WMEMCPY = @HAVE_WMEMCPY@  HAVE_WMEMMOVE = @HAVE_WMEMMOVE@  HAVE_WMEMPCPY = @HAVE_WMEMPCPY@  HAVE_WMEMSET = @HAVE_WMEMSET@ +HAVE_WORKING_MBRTOC32 = @HAVE_WORKING_MBRTOC32@  HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@  HAVE_XLOCALE_H = @HAVE_XLOCALE_H@  HAVE__EXIT = @HAVE__EXIT@ @@ -5825,6 +6349,10 @@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@  INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@  INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@  INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LC_COLLATE_IMPLEMENTED = @LC_COLLATE_IMPLEMENTED@ +LC_MONETARY_IMPLEMENTED = @LC_MONETARY_IMPLEMENTED@ +LC_NUMERIC_IMPLEMENTED = @LC_NUMERIC_IMPLEMENTED@ +LC_TIME_IMPLEMENTED = @LC_TIME_IMPLEMENTED@  LD = @LD@  LDFLAGS = @LDFLAGS@  LIBICONV = @LIBICONV@ @@ -5844,6 +6372,7 @@ LIBUNISTRING_UNICONV_H = @LIBUNISTRING_UNICONV_H@  LIBUNISTRING_UNICTYPE_H = @LIBUNISTRING_UNICTYPE_H@  LIBUNISTRING_UNIGBRK_H = @LIBUNISTRING_UNIGBRK_H@  LIBUNISTRING_UNILBRK_H = @LIBUNISTRING_UNILBRK_H@ +LIBUNISTRING_UNIMETADATA_H = @LIBUNISTRING_UNIMETADATA_H@  LIBUNISTRING_UNINAME_H = @LIBUNISTRING_UNINAME_H@  LIBUNISTRING_UNINORM_H = @LIBUNISTRING_UNINORM_H@  LIBUNISTRING_UNISTDIO_H = @LIBUNISTRING_UNISTDIO_H@ @@ -5880,8 +6409,10 @@ LTLIBTHREAD = @LTLIBTHREAD@  LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@  MAKEINFO = @MAKEINFO@  MANIFEST_TOOL = @MANIFEST_TOOL@ +MBRTOWC_LIB = @MBRTOWC_LIB@  MKDIR_P = @MKDIR_P@  NAMESPACING = @NAMESPACING@ +NANOSLEEP_LIB = @NANOSLEEP_LIB@  NETINET_IN_H = @NETINET_IN_H@  NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@  NEXT_ASSERT_H = @NEXT_ASSERT_H@ @@ -5889,6 +6420,7 @@ NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@  NEXT_AS_FIRST_DIRECTIVE_ASSERT_H = @NEXT_AS_FIRST_DIRECTIVE_ASSERT_H@  NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@  NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_ERROR_H = @NEXT_AS_FIRST_DIRECTIVE_ERROR_H@  NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@  NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@  NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ @@ -5914,11 +6446,13 @@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@  NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@  NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@  NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ +NEXT_AS_FIRST_DIRECTIVE_UCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_UCHAR_H@  NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@  NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@  NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@  NEXT_CTYPE_H = @NEXT_CTYPE_H@  NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_ERROR_H = @NEXT_ERROR_H@  NEXT_FCNTL_H = @NEXT_FCNTL_H@  NEXT_FLOAT_H = @NEXT_FLOAT_H@  NEXT_ICONV_H = @NEXT_ICONV_H@ @@ -5944,6 +6478,7 @@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@  NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@  NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@  NEXT_TIME_H = @NEXT_TIME_H@ +NEXT_UCHAR_H = @NEXT_UCHAR_H@  NEXT_UNISTD_H = @NEXT_UNISTD_H@  NEXT_WCHAR_H = @NEXT_WCHAR_H@  NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ @@ -5966,6 +6501,7 @@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@  PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@  PRIPTR_PREFIX = @PRIPTR_PREFIX@  PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ +PTHREAD_SIGMASK_LIB = @PTHREAD_SIGMASK_LIB@  PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@  RANLIB = @RANLIB@  RC = @RC@ @@ -5977,6 +6513,7 @@ REPLACE_ASINF = @REPLACE_ASINF@  REPLACE_ATAN2F = @REPLACE_ATAN2F@  REPLACE_ATANF = @REPLACE_ATANF@  REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_C32RTOMB = @REPLACE_C32RTOMB@  REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@  REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@  REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ @@ -5996,7 +6533,10 @@ REPLACE_CTIME = @REPLACE_CTIME@  REPLACE_DPRINTF = @REPLACE_DPRINTF@  REPLACE_DUP = @REPLACE_DUP@  REPLACE_DUP2 = @REPLACE_DUP2@ +REPLACE_DUP3 = @REPLACE_DUP3@  REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ +REPLACE_ERROR = @REPLACE_ERROR@ +REPLACE_ERROR_AT_LINE = @REPLACE_ERROR_AT_LINE@  REPLACE_EXECL = @REPLACE_EXECL@  REPLACE_EXECLE = @REPLACE_EXECLE@  REPLACE_EXECLP = @REPLACE_EXECLP@ @@ -6013,10 +6553,12 @@ REPLACE_EXPM1F = @REPLACE_EXPM1F@  REPLACE_EXPM1L = @REPLACE_EXPM1L@  REPLACE_FABSL = @REPLACE_FABSL@  REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@  REPLACE_FCHMODAT = @REPLACE_FCHMODAT@  REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@  REPLACE_FCLOSE = @REPLACE_FCLOSE@  REPLACE_FCNTL = @REPLACE_FCNTL@ +REPLACE_FDATASYNC = @REPLACE_FDATASYNC@  REPLACE_FDOPEN = @REPLACE_FDOPEN@  REPLACE_FFLUSH = @REPLACE_FFLUSH@  REPLACE_FFSLL = @REPLACE_FFSLL@ @@ -6051,12 +6593,16 @@ REPLACE_GETCWD = @REPLACE_GETCWD@  REPLACE_GETDELIM = @REPLACE_GETDELIM@  REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@  REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ +REPLACE_GETENTROPY = @REPLACE_GETENTROPY@  REPLACE_GETGROUPS = @REPLACE_GETGROUPS@  REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETLOADAVG = @REPLACE_GETLOADAVG@  REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@  REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@  REPLACE_GETPASS = @REPLACE_GETPASS@  REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ +REPLACE_GETPROGNAME = @REPLACE_GETPROGNAME@ +REPLACE_GETSUBOPT = @REPLACE_GETSUBOPT@  REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@  REPLACE_GMTIME = @REPLACE_GMTIME@  REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ @@ -6069,6 +6615,8 @@ REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@  REPLACE_ILOGB = @REPLACE_ILOGB@  REPLACE_ILOGBF = @REPLACE_ILOGBF@  REPLACE_ILOGBL = @REPLACE_ILOGBL@ +REPLACE_IMAXABS = @REPLACE_IMAXABS@ +REPLACE_IMAXDIV = @REPLACE_IMAXDIV@  REPLACE_INET_NTOP = @REPLACE_INET_NTOP@  REPLACE_INET_PTON = @REPLACE_INET_PTON@  REPLACE_INITSTATE = @REPLACE_INITSTATE@ @@ -6080,9 +6628,11 @@ REPLACE_ISNAN = @REPLACE_ISNAN@  REPLACE_ISWBLANK = @REPLACE_ISWBLANK@  REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@  REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ +REPLACE_ISWPUNCT = @REPLACE_ISWPUNCT@  REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@  REPLACE_ITOLD = @REPLACE_ITOLD@  REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXP = @REPLACE_LDEXP@  REPLACE_LDEXPL = @REPLACE_LDEXPL@  REPLACE_LINK = @REPLACE_LINK@  REPLACE_LINKAT = @REPLACE_LINKAT@ @@ -6109,19 +6659,27 @@ REPLACE_LSTAT = @REPLACE_LSTAT@  REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@  REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@  REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOC16 = @REPLACE_MBRTOC16@ +REPLACE_MBRTOC32 = @REPLACE_MBRTOC32@  REPLACE_MBRTOWC = @REPLACE_MBRTOWC@  REPLACE_MBSINIT = @REPLACE_MBSINIT@  REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@  REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@  REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MBSTOWCS = @REPLACE_MBSTOWCS@  REPLACE_MBTOWC = @REPLACE_MBTOWC@ +REPLACE_MB_CUR_MAX = @REPLACE_MB_CUR_MAX@  REPLACE_MEMCHR = @REPLACE_MEMCHR@  REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MEMPCPY = @REPLACE_MEMPCPY@ +REPLACE_MEMSET_EXPLICIT = @REPLACE_MEMSET_EXPLICIT@  REPLACE_MKDIR = @REPLACE_MKDIR@  REPLACE_MKFIFO = @REPLACE_MKFIFO@  REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@  REPLACE_MKNOD = @REPLACE_MKNOD@  REPLACE_MKNODAT = @REPLACE_MKNODAT@ +REPLACE_MKOSTEMP = @REPLACE_MKOSTEMP@ +REPLACE_MKOSTEMPS = @REPLACE_MKOSTEMPS@  REPLACE_MKSTEMP = @REPLACE_MKSTEMP@  REPLACE_MKTIME = @REPLACE_MKTIME@  REPLACE_MODF = @REPLACE_MODF@ @@ -6136,8 +6694,10 @@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@  REPLACE_OPEN = @REPLACE_OPEN@  REPLACE_OPENAT = @REPLACE_OPENAT@  REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_PIPE2 = @REPLACE_PIPE2@  REPLACE_POPEN = @REPLACE_POPEN@  REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ +REPLACE_POSIX_OPENPT = @REPLACE_POSIX_OPENPT@  REPLACE_PREAD = @REPLACE_PREAD@  REPLACE_PRINTF = @REPLACE_PRINTF@  REPLACE_PSELECT = @REPLACE_PSELECT@ @@ -6199,6 +6759,7 @@ REPLACE_PUTENV = @REPLACE_PUTENV@  REPLACE_PWRITE = @REPLACE_PWRITE@  REPLACE_QSORT_R = @REPLACE_QSORT_R@  REPLACE_RAISE = @REPLACE_RAISE@ +REPLACE_RAND = @REPLACE_RAND@  REPLACE_RANDOM = @REPLACE_RANDOM@  REPLACE_RANDOM_R = @REPLACE_RANDOM_R@  REPLACE_READ = @REPLACE_READ@ @@ -6222,6 +6783,7 @@ REPLACE_ROUNDL = @REPLACE_ROUNDL@  REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@  REPLACE_SELECT = @REPLACE_SELECT@  REPLACE_SETENV = @REPLACE_SETENV@ +REPLACE_SETHOSTNAME = @REPLACE_SETHOSTNAME@  REPLACE_SETLOCALE = @REPLACE_SETLOCALE@  REPLACE_SETSTATE = @REPLACE_SETSTATE@  REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ @@ -6236,6 +6798,7 @@ REPLACE_SQRTL = @REPLACE_SQRTL@  REPLACE_STAT = @REPLACE_STAT@  REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@  REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STPCPY = @REPLACE_STPCPY@  REPLACE_STPNCPY = @REPLACE_STPNCPY@  REPLACE_STRCASESTR = @REPLACE_STRCASESTR@  REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ @@ -6250,6 +6813,7 @@ REPLACE_STRNLEN = @REPLACE_STRNLEN@  REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@  REPLACE_STRSTR = @REPLACE_STRSTR@  REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_STRTOF = @REPLACE_STRTOF@  REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@  REPLACE_STRTOK_R = @REPLACE_STRTOK_R@  REPLACE_STRTOL = @REPLACE_STRTOL@ @@ -6260,12 +6824,19 @@ REPLACE_STRTOULL = @REPLACE_STRTOULL@  REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@  REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@  REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ +REPLACE_STRVERSCMP = @REPLACE_STRVERSCMP@  REPLACE_SYMLINK = @REPLACE_SYMLINK@  REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@  REPLACE_TANF = @REPLACE_TANF@  REPLACE_TANHF = @REPLACE_TANHF@ +REPLACE_TIME = @REPLACE_TIME@  REPLACE_TIMEGM = @REPLACE_TIMEGM@ +REPLACE_TIMESPEC_GET = @REPLACE_TIMESPEC_GET@ +REPLACE_TIMESPEC_GETRES = @REPLACE_TIMESPEC_GETRES@  REPLACE_TMPFILE = @REPLACE_TMPFILE@ +REPLACE_TOTALORDER = @REPLACE_TOTALORDER@ +REPLACE_TOTALORDERF = @REPLACE_TOTALORDERF@ +REPLACE_TOTALORDERL = @REPLACE_TOTALORDERL@  REPLACE_TOWLOWER = @REPLACE_TOWLOWER@  REPLACE_TRUNC = @REPLACE_TRUNC@  REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ @@ -6285,21 +6856,33 @@ REPLACE_VPRINTF = @REPLACE_VPRINTF@  REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@  REPLACE_VSPRINTF = @REPLACE_VSPRINTF@  REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSCMP = @REPLACE_WCSCMP@  REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ +REPLACE_WCSNCMP = @REPLACE_WCSNCMP@  REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@  REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCSSTR = @REPLACE_WCSSTR@  REPLACE_WCSTOK = @REPLACE_WCSTOK@  REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@  REPLACE_WCTOB = @REPLACE_WCTOB@  REPLACE_WCTOMB = @REPLACE_WCTOMB@ +REPLACE_WCTRANS = @REPLACE_WCTRANS@ +REPLACE_WCTYPE = @REPLACE_WCTYPE@  REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WMEMCMP = @REPLACE_WMEMCMP@ +REPLACE_WMEMPCPY = @REPLACE_WMEMPCPY@  REPLACE_WRITE = @REPLACE_WRITE@ +REPLACE__EXIT = @REPLACE__EXIT@ +SCHED_YIELD_LIB = @SCHED_YIELD_LIB@  SED = @SED@ +SELECT_LIB = @SELECT_LIB@ +SETLOCALE_LIB = @SETLOCALE_LIB@ +SETLOCALE_NULL_LIB = @SETLOCALE_NULL_LIB@  SET_MAKE = @SET_MAKE@  SHELL = @SHELL@  SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@  SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ -STDALIGN_H = @STDALIGN_H@ +SMALL_WCHAR_T = @SMALL_WCHAR_T@  STDCKDINT_H = @STDCKDINT_H@  STDDEF_H = @STDDEF_H@  STDINT_H = @STDINT_H@ @@ -6396,6 +6979,7 @@ SUBDIRS = .  # This must be the last thing that gets added to TESTS_ENVIRONMENT.  TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \  	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \  	LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \  	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \  	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ @@ -6403,6 +6987,36 @@ TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \  	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \  	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \  	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ +	LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ +	LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \  	LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_FR='@LOCALE_FR@' \  	LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \  	LOCALE_ZH_CN='@LOCALE_ZH_CN@' LOCALE_FR='@LOCALE_FR@' \ @@ -6422,72 +7036,103 @@ TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \  noinst_HEADERS =   noinst_LIBRARIES =   check_LIBRARIES = libtests.a -EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \ -	test-alloca-opt.c arpa_inet.in.h test-arpa_inet.c \ -	test-array-mergesort.c macros.h test-assert.c basename-lgpl.h \ -	test-binary-io.sh test-binary-io.c macros.h w32sock.h \ -	test-bind.c signature.h macros.h test-btowc1.sh test-btowc2.sh \ -	test-btowc.c signature.h macros.h test-c-ctype.c macros.h \ -	test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c \ -	macros.h calloc.c test-calloc-gnu.c macros.h calloc.c \ -	cloexec.h test-cloexec.c macros.h test-close.c signature.h \ -	macros.h w32sock.h test-connect.c signature.h macros.h \ -	ctype.in.h test-ctype.c test-dup2.c signature.h macros.h \ -	test-environ.c test-errno.c error.h exitfail.h fcntl.in.h \ -	test-fcntl-h.c test-fcntl.c signature.h macros.h fd-hook.h \ -	test-fdopen.c signature.h macros.h test-fgetc.c signature.h \ -	macros.h filename.h test-float.c macros.h test-fputc.c \ -	signature.h macros.h test-fread.c signature.h macros.h \ -	test-free.c macros.h test-frexp.c test-frexp.h minus-zero.h \ -	infinity.h nan.h signature.h macros.h randomd.c test-frexpl.c \ -	test-frexp.h minus-zero.h infinity.h nan.h signature.h \ -	macros.h randoml.c test-fseterr.c stat-w32.c stat-w32.h \ -	test-fstat.c signature.h macros.h test-ftruncate.c \ -	test-ftruncate.sh signature.h macros.h test-fwrite.c \ -	signature.h macros.h test-getcwd-lgpl.c signature.h macros.h \ -	test-getdtablesize.c signature.h macros.h test-getprogname.c \ -	signature.h test-gettimeofday.c test-hard-locale.c locale.c \ -	ialloc.h test-iconv-h.c test-iconv.c signature.h macros.h \ +EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h \ +	test-alignasof.c macros.h alloca.c test-alloca-opt.c \ +	arpa_inet.in.h test-arpa_inet.c test-array-mergesort.c \ +	macros.h test-assert.c basename-lgpl.h test-binary-io.sh \ +	test-binary-io.c macros.h w32sock.h test-bind.c signature.h \ +	macros.h test-btoc32-1.sh test-btoc32-2.sh test-btoc32-3.sh \ +	test-btoc32.c signature.h macros.h test-btowc-1.sh \ +	test-btowc-2.sh test-btowc-3.sh test-btowc.c signature.h \ +	macros.h test-c-ctype.c macros.h test-c-strcase.sh \ +	test-c-strcasecmp.c test-c-strncasecmp.c macros.h \ +	test-c32isalnum.sh test-c32isalnum.c signature.h macros.h \ +	test-c32isalpha.sh test-c32isalpha.c signature.h macros.h \ +	test-c32isblank.sh test-c32isblank.c signature.h macros.h \ +	test-c32iscntrl.sh test-c32iscntrl.c signature.h macros.h \ +	test-c32isdigit.sh test-c32isdigit.c signature.h macros.h \ +	test-c32isgraph.sh test-c32isgraph.c signature.h macros.h \ +	test-c32islower.sh test-c32islower.c signature.h macros.h \ +	test-c32isprint.sh test-c32isprint.c signature.h macros.h \ +	test-c32ispunct.sh test-c32ispunct.c signature.h macros.h \ +	test-c32isspace.sh test-c32isspace.c signature.h macros.h \ +	test-c32isupper.sh test-c32isupper.c signature.h macros.h \ +	test-c32isxdigit.sh test-c32isxdigit.c signature.h macros.h \ +	test-c32rtomb.sh test-c32rtomb.c test-c32rtomb-w32-2.sh \ +	test-c32rtomb-w32-3.sh test-c32rtomb-w32-4.sh \ +	test-c32rtomb-w32-5.sh test-c32rtomb-w32-6.sh \ +	test-c32rtomb-w32-7.sh test-c32rtomb-w32-8.sh \ +	test-c32rtomb-w32.c signature.h macros.h test-c32tolower.sh \ +	test-c32tolower.c signature.h macros.h test-c32width.c \ +	signature.h macros.h calloc.c test-calloc-gnu.c macros.h \ +	calloc.c cloexec.h test-cloexec.c macros.h test-close.c \ +	signature.h macros.h w32sock.h test-connect.c signature.h \ +	macros.h ctype.in.h test-ctype.c test-dup2.c signature.h \ +	macros.h test-environ.c test-errno.c error.in.h test-error.sh \ +	test-error.c macros.h exitfail.h fcntl.in.h test-fcntl-h.c \ +	test-fcntl.c signature.h macros.h fd-hook.h test-fdopen.c \ +	signature.h macros.h test-fgetc.c signature.h macros.h \ +	filename.h test-float.c macros.h test-fputc.c signature.h \ +	macros.h test-fread.c signature.h macros.h test-free.c \ +	macros.h test-frexp.c test-frexp.h minus-zero.h infinity.h \ +	signature.h macros.h randomd.c test-frexpl.c test-frexp.h \ +	minus-zero.h infinity.h signature.h macros.h randoml.c \ +	test-fseterr.c stat-w32.c stat-w32.h test-fstat.c signature.h \ +	macros.h test-ftruncate.c test-ftruncate.sh signature.h \ +	macros.h test-fwrite.c signature.h macros.h test-getcwd-lgpl.c \ +	signature.h macros.h test-getdtablesize.c signature.h macros.h \ +	getprogname.h test-getprogname.c test-gettimeofday.c \ +	signature.h macros.h test-hard-locale.c locale.c ialloc.h \ +	test-iconv-h.c test-iconv.c signature.h macros.h \  	ignore-value.h test-ignore-value.c test-inet_pton.c \  	signature.h macros.h intprops-internal.h intprops.h \  	test-intprops.c macros.h test-inttypes.c w32sock.h \  	test-ioctl.c signature.h macros.h test-isblank.c signature.h \  	macros.h test-isnand-nolibm.c test-isnand.h minus-zero.h \ -	infinity.h nan.h macros.h test-isnanf-nolibm.c test-isnanf.h \ -	minus-zero.h infinity.h nan.h macros.h test-isnanl-nolibm.c \ -	test-isnanl.h minus-zero.h infinity.h nan.h macros.h \ -	test-iswblank.c macros.h test-iswdigit.sh test-iswdigit.c \ -	signature.h macros.h test-iswxdigit.sh test-iswxdigit.c \ -	signature.h macros.h test-langinfo.c test-limits-h.c w32sock.h \ -	test-listen.c signature.h macros.h test-localcharset.c \ -	test-locale.c test-localename.c macros.h test-rwlock1.c \ -	test-lock.c test-once.c atomic-int-gnulib.h test-lstat.h \ -	test-lstat.c signature.h macros.h malloc.c test-malloc-gnu.c \ -	macros.h test-malloca.c test-math.c macros.h test-mbrtowc1.sh \ -	test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ -	test-mbrtowc5.sh test-mbrtowc.c test-mbrtowc-w32-1.sh \ +	infinity.h macros.h test-isnanf-nolibm.c test-isnanf.h \ +	minus-zero.h infinity.h macros.h test-isnanl-nolibm.c \ +	test-isnanl.h minus-zero.h infinity.h macros.h test-iswblank.c \ +	macros.h test-iswdigit.sh test-iswdigit.c signature.h macros.h \ +	test-iswpunct.sh test-iswpunct.c signature.h macros.h \ +	test-iswxdigit.sh test-iswxdigit.c signature.h macros.h \ +	test-langinfo.c test-largefile.c cdefs.h libc-config.h \ +	test-limits-h.c w32sock.h test-listen.c signature.h macros.h \ +	test-localcharset.c test-locale.c test-localename.c macros.h \ +	test-rwlock1.c test-lock.c test-once.c atomic-int-gnulib.h \ +	macros.h test-lstat.h test-lstat.c signature.h macros.h \ +	malloc.c test-malloc-gnu.c macros.h test-malloca.c test-math.c \ +	macros.h test-mbrtoc32-1.sh test-mbrtoc32-2.sh \ +	test-mbrtoc32-3.sh test-mbrtoc32-4.sh test-mbrtoc32-5.sh \ +	test-mbrtoc32.c test-mbrtoc32-w32-2.sh test-mbrtoc32-w32-3.sh \ +	test-mbrtoc32-w32-4.sh test-mbrtoc32-w32-5.sh \ +	test-mbrtoc32-w32-6.sh test-mbrtoc32-w32-7.sh \ +	test-mbrtoc32-w32-8.sh test-mbrtoc32-w32.c signature.h \ +	macros.h test-mbrtowc-1.sh test-mbrtowc-2.sh test-mbrtowc-3.sh \ +	test-mbrtowc-4.sh test-mbrtowc-5.sh test-mbrtowc.c \  	test-mbrtowc-w32-2.sh test-mbrtowc-w32-3.sh \  	test-mbrtowc-w32-4.sh test-mbrtowc-w32-5.sh \ -	test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh test-mbrtowc-w32.c \ -	signature.h macros.h test-mbsinit.sh test-mbsinit.c \ -	signature.h macros.h mbtowc-impl.h test-memchr.c \ -	zerosize-ptr.h signature.h macros.h msvc-inval.h \ -	msvc-nothrow.h test-nanosleep.c signature.h macros.h \ -	netinet_in.in.h test-netinet_in.c test-open.h test-open.c \ -	signature.h macros.h pathmax.h test-pathmax.c macros.h \ -	signature.h test-perror.c test-perror2.c test-perror.sh \ -	test-pipe.c signature.h macros.h test-printf-frexp.c macros.h \ -	test-printf-frexpl.c macros.h test-pselect.c test-select.h \ -	macros.h signature.h pthread.in.h test-pthread.c \ -	test-pthread-thread.c macros.h test-pthread_sigmask1.c \ -	test-pthread_sigmask2.c signature.h macros.h test-raise.c \ +	test-mbrtowc-w32-6.sh test-mbrtowc-w32-7.sh \ +	test-mbrtowc-w32-8.sh test-mbrtowc-w32.c signature.h macros.h \ +	test-mbsinit.sh test-mbsinit.c signature.h macros.h \ +	mbtowc-impl.h test-memchr.c zerosize-ptr.h signature.h \ +	macros.h msvc-inval.h msvc-nothrow.h test-nanosleep.c \ +	signature.h macros.h netinet_in.in.h test-netinet_in.c \ +	test-open.h test-open.c signature.h macros.h pathmax.h \ +	test-pathmax.c macros.h signature.h test-perror.c \ +	test-perror2.c test-perror.sh test-pipe.c signature.h macros.h \ +	test-printf-frexp.c macros.h test-printf-frexpl.c macros.h \ +	test-pselect.c test-select.h macros.h signature.h pthread.in.h \ +	test-pthread.c test-pthread-thread.c macros.h \ +	test-pthread_sigmask1.c test-pthread_sigmask2.c signature.h \ +	macros.h test-raise.c signature.h macros.h test-random.c \ +	test-random-mt.c signature.h macros.h test-random_r.c \  	signature.h macros.h realloc.c test-realloc-gnu.c macros.h \ -	realloc.c test-reallocarray.c signature.h macros.h \ -	same-inode.h sched.in.h test-sched.c macros.h signature.h \ -	test-select.c test-select.h test-select-fd.c test-select-in.sh \ -	test-select-out.sh test-select-stdin.c test-setenv.c \ -	signature.h macros.h test-setlocale_null.c \ -	test-setlocale_null-mt-one.c test-setlocale_null-mt-all.c \ +	realloc.c test-reallocarray.c signature.h macros.h sched.in.h \ +	test-sched.c macros.h signature.h test-select.c test-select.h \ +	test-select-fd.c test-select-in.sh test-select-out.sh \ +	test-select-stdin.c test-setenv.c signature.h macros.h \ +	test-setlocale_null.c test-setlocale_null-mt-one.c \ +	test-setlocale_null-mt-all.c test-setlocale_null-unlocked.c \  	test-setlocale1.sh test-setlocale1.c test-setlocale2.sh \  	test-setlocale2.c signature.h macros.h w32sock.h \  	test-setsockopt.c signature.h macros.h signal.in.h \ @@ -6496,23 +7141,23 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	signature.h macros.h _Noreturn.h arg-nonnull.h c++defs.h \  	warn-on-use.h w32sock.h w32sock.h test-sockets.c stat-w32.c \  	stat-w32.h test-stat.h test-stat.c signature.h macros.h \ -	stat-time.h test-stat-time.c macros.h nap.h stdalign.in.h \ -	test-stdalign.c macros.h test-stdbool.c macros.h \ -	test-intprops.c test-stdckdint.c test-stddef.c test-stdint.c \ -	stdio.in.h test-stdio.c test-stdlib.c test-sys_wait.h \ -	strerror-override.h test-strerror.c signature.h macros.h \ -	strerror_r.c test-strerror_r.c signature.h macros.h \ -	test-striconveh.c macros.h test-striconveha.c iconvsupport.c \ -	macros.h test-string.c test-strncat.c unistr/test-strncat.h \ -	zerosize-ptr.h signature.h macros.h test-strstr.c \ -	zerosize-ptr.h signature.h macros.h test-symlink.h \ -	test-symlink.c signature.h macros.h sys_ioctl.in.h \ -	test-sys_ioctl.c sys_select.in.h test-sys_select.c signature.h \ -	sys_socket.in.h test-sys_socket.c sys_stat.in.h \ -	test-sys_stat.c sys_time.in.h test-sys_time.c test-sys_types.c \ -	sys_uio.in.h test-sys_uio.c init.sh test-init.sh \ -	test-thread_self.c test-thread_create.c macros.h time.in.h \ -	test-time.c unicase/test-cased.c \ +	stat-time.h test-stat-time.c macros.h nap.h test-stdbool.c \ +	macros.h test-intprops.c test-stdckdint.c test-stddef.c \ +	test-stdint.c stdio.in.h test-stdio.c macros.h test-stdlib.c \ +	test-sys_wait.h strerror-override.h test-strerror.c \ +	signature.h macros.h strerror_r.c test-strerror_r.c \ +	signature.h macros.h test-striconveh.c macros.h \ +	test-striconveha.c iconvsupport.c macros.h test-string.c \ +	test-strncat.c unistr/test-strncat.h zerosize-ptr.h \ +	signature.h macros.h test-strstr.c zerosize-ptr.h signature.h \ +	macros.h test-symlink.h test-symlink.c signature.h macros.h \ +	sys_ioctl.in.h test-sys_ioctl.c sys_select.in.h \ +	test-sys_select.c signature.h sys_socket.in.h \ +	test-sys_socket.c sys_stat.in.h test-sys_stat.c sys_time.in.h \ +	test-sys_time.c test-sys_types.c sys_uio.in.h test-sys_uio.c \ +	init.sh test-init.sh test-thread_self.c test-thread_create.c \ +	macros.h time.in.h test-time-h.c test-time.c signature.h \ +	macros.h test-uchar.c unicase/test-cased.c \  	unicase/test-predicate-part1.h unicase/test-predicate-part2.h \  	macros.h unicase/test-ignorable.c \  	unicase/test-predicate-part1.h unicase/test-predicate-part2.h \ @@ -6696,7 +7341,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unictype/test-predicate-part2.h macros.h \  	unictype/test-decdigit.c unictype/test-decdigit.h macros.h \  	unictype/test-digit.c unictype/test-digit.h macros.h \ -	unictype/test-joininggroup_byname.c macros.h \ +	unictype/test-incb_byname.c macros.h unictype/test-incb_name.c \ +	macros.h unictype/test-incb_of.c unictype/test-incb_of.h \ +	macros.h unictype/test-joininggroup_byname.c macros.h \  	unictype/test-joininggroup_name.c macros.h \  	unictype/test-joininggroup_of.c \  	unictype/test-joininggroup_of.h macros.h \ @@ -6836,6 +7483,12 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_hyphen.c unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \ +	unictype/test-pr_id_compat_math_continue.c \ +	unictype/test-predicate-part1.h \ +	unictype/test-predicate-part2.h macros.h \ +	unictype/test-pr_id_compat_math_start.c \ +	unictype/test-predicate-part1.h \ +	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_id_continue.c unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_id_start.c unictype/test-predicate-part1.h \ @@ -6848,6 +7501,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unictype/test-pr_ids_trinary_operator.c \  	unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \ +	unictype/test-pr_ids_unary_operator.c \ +	unictype/test-predicate-part1.h \ +	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_ignorable_control.c \  	unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \ @@ -6911,6 +7567,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unictype/test-pr_pattern_white_space.c \  	unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \ +	unictype/test-pr_prepended_concatenation_mark.c \ +	unictype/test-predicate-part1.h \ +	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_private_use.c unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \  	unictype/test-pr_punctuation.c unictype/test-predicate-part1.h \ @@ -6964,19 +7623,19 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unictype/test-sy_java_whitespace.c \  	unictype/test-predicate-part1.h \  	unictype/test-predicate-part2.h macros.h \ -	unigbrk/test-u16-grapheme-breaks.c \ -	unigbrk/test-u16-grapheme-next.c \ -	unigbrk/test-u16-grapheme-prev.c \ -	unigbrk/test-u32-grapheme-breaks.c \ -	unigbrk/test-u32-grapheme-next.c \ -	unigbrk/test-u32-grapheme-prev.c \ -	unigbrk/test-u8-grapheme-breaks.c \ -	unigbrk/test-u8-grapheme-next.c \ -	unigbrk/test-u8-grapheme-prev.c unigbrk/test-uc-gbrk-prop.c \ -	unigbrk/test-uc-gbrk-prop.h macros.h \ -	unigbrk/test-uc-grapheme-breaks.c \ +	unigbrk/test-u16-grapheme-breaks.c macros.h \ +	unigbrk/test-u16-grapheme-next.c macros.h \ +	unigbrk/test-u16-grapheme-prev.c macros.h \ +	unigbrk/test-u32-grapheme-breaks.c macros.h \ +	unigbrk/test-u32-grapheme-next.c macros.h \ +	unigbrk/test-u32-grapheme-prev.c macros.h \ +	unigbrk/test-u8-grapheme-breaks.c macros.h \ +	unigbrk/test-u8-grapheme-next.c macros.h \ +	unigbrk/test-u8-grapheme-prev.c macros.h \ +	unigbrk/test-uc-gbrk-prop.c unigbrk/test-uc-gbrk-prop.h \ +	macros.h unigbrk/test-uc-grapheme-breaks.c \  	unigbrk/test-uc-grapheme-breaks.sh \ -	unigbrk/GraphemeBreakTest.txt \ +	unigbrk/GraphemeBreakTest.txt macros.h \  	unigbrk/test-uc-is-grapheme-break.c \  	unigbrk/test-uc-is-grapheme-break.sh \  	unigbrk/GraphemeBreakTest.txt \ @@ -6990,10 +7649,11 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unilbrk/test-u8-width-linebreaks.c macros.h \  	unilbrk/test-ulc-possible-linebreaks.c macros.h \  	unilbrk/test-ulc-width-linebreaks.c macros.h \ -	uniname/test-uninames.sh uniname/test-uninames.c \ -	uniname/UnicodeData.txt uniname/HangulSyllableNames.txt \ -	uniname/NameAliases.txt uninorm/test-canonical-decomposition.c \ -	macros.h uninorm/test-compat-decomposition.c macros.h \ +	unimetadata/test-u-version.c macros.h uniname/test-uninames.sh \ +	uniname/test-uninames.c uniname/UnicodeData.txt \ +	uniname/HangulSyllableNames.txt uniname/NameAliases.txt \ +	uninorm/test-canonical-decomposition.c macros.h \ +	uninorm/test-compat-decomposition.c macros.h \  	uninorm/test-composition.c macros.h \  	uninorm/test-decomposing-form.c macros.h \  	uninorm/test-decomposition.c macros.h \ @@ -7082,8 +7742,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	unistr/test-u16-mbtouc-unsafe.c unistr/test-u16-mbtouc.h \  	macros.h unistr/test-u16-mbtoucr.c macros.h \  	unistr/test-u16-move.c unistr/test-move.h macros.h \ -	unistr/test-u16-next.c macros.h unistr/test-u16-prev.c \ -	macros.h unistr/test-u16-set.c unistr/test-set.h macros.h \ +	unistr/test-u16-next.c macros.h unistr/test-u16-pcpy.c \ +	unistr/test-pcpy.h macros.h unistr/test-u16-prev.c macros.h \ +	unistr/test-u16-set.c unistr/test-set.h macros.h \  	unistr/test-u16-stpcpy.c unistr/test-stpcpy.h macros.h \  	unistr/test-u16-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \  	macros.h unistr/test-u16-strcat.c unistr/test-strcat.h \ @@ -7116,8 +7777,9 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	macros.h unistr/test-u32-mbtouc-unsafe.c \  	unistr/test-u32-mbtouc.h macros.h unistr/test-u32-mbtoucr.c \  	macros.h unistr/test-u32-move.c unistr/test-move.h macros.h \ -	unistr/test-u32-next.c macros.h unistr/test-u32-prev.c \ -	macros.h unistr/test-u32-set.c unistr/test-set.h macros.h \ +	unistr/test-u32-next.c macros.h unistr/test-u32-pcpy.c \ +	unistr/test-pcpy.h macros.h unistr/test-u32-prev.c macros.h \ +	unistr/test-u32-set.c unistr/test-set.h macros.h \  	unistr/test-u32-stpcpy.c unistr/test-stpcpy.h macros.h \  	unistr/test-u32-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \  	macros.h unistr/test-u32-strcat.c unistr/test-strcat.h \ @@ -7149,7 +7811,8 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	macros.h unistr/test-u8-mbtouc-unsafe.c \  	unistr/test-u8-mbtouc.h macros.h unistr/test-u8-mbtoucr.c \  	macros.h unistr/test-u8-move.c unistr/test-move.h macros.h \ -	unistr/test-u8-next.c macros.h unistr/test-u8-prev.c macros.h \ +	unistr/test-u8-next.c macros.h unistr/test-u8-pcpy.c \ +	unistr/test-pcpy.h macros.h unistr/test-u8-prev.c macros.h \  	unistr/test-u8-set.c unistr/test-set.h macros.h \  	unistr/test-u8-stpcpy.c unistr/test-stpcpy.h macros.h \  	unistr/test-u8-stpncpy.c unistr/test-stpncpy.h zerosize-ptr.h \ @@ -7186,29 +7849,29 @@ EXTRA_DIST = w32sock.h test-accept.c signature.h macros.h alloca.c \  	signature.h macros.h test-usleep.c signature.h macros.h \  	verify.h test-verify.c test-verify-try.c test-verify.sh \  	test-wchar.c test-wcrtomb.sh test-wcrtomb.c \ -	test-wcrtomb-w32-1.sh test-wcrtomb-w32-2.sh \ -	test-wcrtomb-w32-3.sh test-wcrtomb-w32-4.sh \ -	test-wcrtomb-w32-5.sh test-wcrtomb-w32-6.sh \ -	test-wcrtomb-w32-7.sh test-wcrtomb-w32.c signature.h macros.h \ +	test-wcrtomb-w32-2.sh test-wcrtomb-w32-3.sh \ +	test-wcrtomb-w32-4.sh test-wcrtomb-w32-5.sh \ +	test-wcrtomb-w32-6.sh test-wcrtomb-w32-7.sh \ +	test-wcrtomb-w32-8.sh test-wcrtomb-w32.c signature.h macros.h \  	wctomb-impl.h test-wctype-h.c macros.h test-wcwidth.c \  	signature.h macros.h windows-thread.h windows-tls.h xalloc.h \  	xalloc.h test-xalloc-die.c test-xalloc-die.sh -BUILT_SOURCES = arpa/inet.h ctype.h fcntl.h $(NETINET_IN_H) pthread.h \ -	sched.h signal.h $(STDALIGN_H) stdio.h sys/ioctl.h \ -	sys/select.h sys/socket.h sys/stat.h sys/time.h sys/uio.h \ -	time.h +BUILT_SOURCES = arpa/inet.h ctype.h error.h fcntl.h $(NETINET_IN_H) \ +	pthread.h sched.h signal.h stdio.h sys/ioctl.h sys/select.h \ +	sys/socket.h sys/stat.h sys/time.h sys/uio.h time.h  SUFFIXES =   # This test expects compilation of test-verify-try.c to fail, and  # each time it fails, the makefile rule does not perform the usual  #  "mv -f $name.Tpo $name.po, so tell make clean to remove that file.  MOSTLYCLEANFILES = core *.stackdump arpa/inet.h arpa/inet.h-t ctype.h \ -	ctype.h-t fcntl.h fcntl.h-t netinet/in.h netinet/in.h-t \ -	pthread.h pthread.h-t sched.h sched.h-t signal.h signal.h-t \ -	stdalign.h stdalign.h-t stdio.h stdio.h-t sys/ioctl.h \ -	sys/ioctl.h-t sys/select.h sys/select.h-t sys/socket.h \ -	sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h sys/time.h-t \ -	sys/uio.h sys/uio.h-t time.h time.h-t \ +	ctype.h-t error.h error.h-t fcntl.h fcntl.h-t netinet/in.h \ +	netinet/in.h-t pthread.h pthread.h-t1 pthread.h-t2 \ +	pthread.h-t3 pthread.h-t4 sched.h sched.h-t signal.h \ +	signal.h-t stdio.h stdio.h-t1 stdio.h-t2 stdio.h-t3 \ +	sys/ioctl.h sys/ioctl.h-t sys/select.h sys/select.h-t \ +	sys/socket.h sys/socket.h-t sys/stat.h sys/stat.h-t sys/time.h \ +	sys/time.h-t sys/uio.h sys/uio.h-t time.h time.h-t \  	.deps/test-verify-try.Tpo  MOSTLYCLEANDIRS = arpa netinet sys sys sys sys sys  CLEANFILES =  @@ -7223,27 +7886,29 @@ AM_CPPFLAGS = \  LDADD = libtests.a ../lib/libunistring.la libtests.a ../lib/libunistring.la libtests.a $(LIBTESTS_LIBDEPS)  libtests_a_SOURCES = $(am__append_1) basename-lgpl.c binary-io.h \ -	binary-io.c $(am__append_2) $(am__append_3) cloexec.c \ -	$(am__append_4) $(am__append_5) $(am__append_6) \ -	$(am__append_7) exitfail.c $(am__append_8) fd-hook.c \ -	$(am__append_9) $(am__append_10) $(am__append_11) \ +	binary-io.c $(am__append_2) btoc32.c $(am__append_3) \ +	$(am__append_4) c32tob.c cloexec.c $(am__append_5) \ +	$(am__append_6) $(am__append_7) $(am__append_8) exitfail.c \ +	$(am__append_9) fd-hook.c $(am__append_10) $(am__append_11) \  	$(am__append_12) $(am__append_13) $(am__append_14) \ -	getprogname.h getprogname.c gettext.h $(am__append_15) \ -	ialloc.c $(am__append_16) $(am__append_17) $(am__append_18) \ -	$(am__append_19) $(am__append_20) $(am__append_21) \ -	$(am__append_22) $(am__append_23) $(am__append_24) \ -	$(am__append_25) $(am__append_26) $(am__append_27) \ -	$(am__append_28) $(am__append_29) $(am__append_30) \ -	$(am__append_31) $(am__append_32) $(am__append_33) \ -	$(am__append_34) $(am__append_35) $(am__append_36) \ -	$(am__append_37) $(am__append_38) $(am__append_39) \ -	$(am__append_40) $(am__append_41) sockets.h sockets.c \ -	$(am__append_42) stat-time.c $(am__append_43) $(am__append_44) \ -	$(am__append_45) $(am__append_46) $(am__append_47) \ -	sys_socket.c glthread/thread.h glthread/thread.c \ -	$(am__append_52) $(am__append_53) $(am__append_54) \ -	$(am__append_55) $(am__append_56) $(am__append_57) \ -	$(am__append_58) xmalloc.c xalloc-die.c glthread/yield.h +	$(am__append_15) $(am__append_16) gettext.h $(am__append_17) \ +	ialloc.c $(am__append_18) $(am__append_19) $(am__append_20) \ +	$(am__append_21) $(am__append_22) $(am__append_23) \ +	$(am__append_24) $(am__append_25) nan.h $(am__append_26) \ +	$(am__append_27) $(am__append_28) $(am__append_29) \ +	$(am__append_30) $(am__append_31) $(am__append_32) \ +	$(am__append_33) $(am__append_34) $(am__append_35) \ +	$(am__append_36) $(am__append_37) same-inode.h same-inode.c \ +	$(am__append_38) $(am__append_39) $(am__append_40) \ +	$(am__append_41) $(am__append_42) signed-nan.h signed-snan.h \ +	$(am__append_43) $(am__append_44) snan.h $(am__append_45) \ +	sockets.h sockets.c $(am__append_46) stat-time.c \ +	$(am__append_47) $(am__append_48) $(am__append_49) \ +	$(am__append_50) $(am__append_51) sys_socket.c \ +	glthread/thread.h glthread/thread.c $(am__append_52) \ +	$(am__append_57) $(am__append_58) $(am__append_59) \ +	$(am__append_60) $(am__append_61) $(am__append_62) \ +	$(am__append_63) xmalloc.c xalloc-die.c glthread/yield.h  libtests_a_LIBADD = $(gltests_LIBOBJS) @ALLOCA@  libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) @ALLOCA@  EXTRA_libtests_a_SOURCES = alloca.c calloc.c calloc.c stat-w32.c \ @@ -7251,11 +7916,28 @@ EXTRA_libtests_a_SOURCES = alloca.c calloc.c calloc.c stat-w32.c \  AM_LIBTOOLFLAGS = --preserve-dup-deps  test_accept_LDADD = $(LDADD) @LIBSOCKET@  test_bind_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) -test_btowc_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_ctype_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strcasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_c_strncasecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) +test_btoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +test_btowc_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_ctype_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strcasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c_strncasecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_c32isalnum_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isalpha_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isblank_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32iscntrl_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isgraph_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32islower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isprint_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32ispunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isspace_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isupper_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32isxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32rtomb_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(LIBC32CONV) +test_c32tolower_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBUNISTRING) $(LIBC32CONV) +test_c32width_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) $(LIBC32CONV)  test_connect_LDADD = $(LDADD) @LIBSOCKET@ $(INET_PTON_LIB) +test_error_LDADD = $(LDADD) $(LIBINTL)  test_frexp_nolibm_SOURCES = test-frexp.c randomd.c  test_frexpl_nolibm_SOURCES = test-frexpl.c randoml.c @@ -7279,36 +7961,39 @@ GPERF = gperf  V_GPERF = $(V_GPERF_@AM_V@)  V_GPERF_ = $(V_GPERF_@AM_DEFAULT_V@)  V_GPERF_0 = @echo "  GPERF   " $@; -test_hard_locale_LDADD = $(LDADD) $(LIB_SETLOCALE) @LIB_HARD_LOCALE@ +test_hard_locale_LDADD = $(LDADD) $(SETLOCALE_LIB) @HARD_LOCALE_LIB@  current_locale_SOURCES = locale.c  test_iconv_LDADD = $(LDADD) @LIBICONV@  test_inet_pton_LDADD = $(LDADD) @INET_PTON_LIB@ -test_iswdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_iswxdigit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) +test_iswdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_iswpunct_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_iswxdigit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB)  test_listen_LDADD = $(LDADD) @LIBSOCKET@ -test_localcharset_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_localename_LDADD = $(LDADD) $(LIB_SETLOCALE) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_localcharset_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_localename_LDADD = $(LDADD) $(SETLOCALE_LIB) @INTL_MACOSX_LIBS@ $(LIBTHREAD)  test_rwlock1_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@  test_lock_LDADD = $(LDADD) @LIBMULTITHREAD@ @YIELD_LIB@ @LIB_SEMAPHORE@  test_once1_SOURCES = test-once.c  test_once1_LDADD = $(LDADD) @LIBTHREAD@  test_once2_SOURCES = test-once.c  test_once2_LDADD = $(LDADD) @LIBMULTITHREAD@ -test_mbrtowc_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_mbsinit_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIB_MBRTOWC) -test_nanosleep_LDADD = $(LDADD) $(LIB_NANOSLEEP) -test_pselect_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ @LIB_PTHREAD_SIGMASK@ $(INET_PTON_LIB) +test_mbrtoc32_LDADD = $(LDADD) $(LIBUNISTRING) $(SETLOCALE_LIB) $(MBRTOWC_LIB) $(LIBC32CONV) +test_mbrtowc_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_mbsinit_LDADD = $(LDADD) $(SETLOCALE_LIB) $(MBRTOWC_LIB) +test_nanosleep_LDADD = $(LDADD) $(NANOSLEEP_LIB) +test_pselect_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ @PTHREAD_SIGMASK_LIB@ $(INET_PTON_LIB)  test_pthread_thread_LDADD = $(LDADD) @LIBPMULTITHREAD@ -test_pthread_sigmask1_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ -test_pthread_sigmask2_LDADD = $(LDADD) @LIB_PTHREAD_SIGMASK@ @LIBMULTITHREAD@ -test_select_LDADD = $(LDADD) @LIB_SELECT@ @LIBSOCKET@ $(INET_PTON_LIB) -test_select_fd_LDADD = $(LDADD) @LIB_SELECT@ -test_select_stdin_LDADD = $(LDADD) @LIB_SELECT@ -test_setlocale_null_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ -test_setlocale_null_mt_one_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale_null_mt_all_LDADD = $(LDADD) @LIB_SETLOCALE_NULL@ $(LIBMULTITHREAD) $(LIB_NANOSLEEP) -test_setlocale1_LDADD = $(LDADD) @LIB_SETLOCALE@ -test_setlocale2_LDADD = $(LDADD) @LIB_SETLOCALE@ +test_pthread_sigmask1_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ +test_pthread_sigmask2_LDADD = $(LDADD) @PTHREAD_SIGMASK_LIB@ @LIBMULTITHREAD@ +test_random_mt_LDADD = $(LDADD) $(LIBINTL) $(LIBMULTITHREAD) $(YIELD_LIB) +test_select_LDADD = $(LDADD) @SELECT_LIB@ @LIBSOCKET@ $(INET_PTON_LIB) +test_select_fd_LDADD = $(LDADD) @SELECT_LIB@ +test_select_stdin_LDADD = $(LDADD) @SELECT_LIB@ +test_setlocale_null_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ +test_setlocale_null_mt_one_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale_null_mt_all_LDADD = $(LDADD) @SETLOCALE_NULL_LIB@ $(LIBMULTITHREAD) $(NANOSLEEP_LIB) +test_setlocale1_LDADD = $(LDADD) @SETLOCALE_LIB@ +test_setlocale2_LDADD = $(LDADD) @SETLOCALE_LIB@  test_setsockopt_LDADD = $(LDADD) @LIBSOCKET@  # Because this Makefile snippet defines a variable used by other @@ -7332,7 +8017,7 @@ CXXDEFS_H = $(srcdir)/c++defs.h  WARN_ON_USE_H = $(srcdir)/warn-on-use.h  test_sockets_LDADD = $(LDADD) @LIBSOCKET@  test_stat_LDADD = $(LDADD) $(LIBINTL) -test_stat_time_LDADD = $(LDADD) $(LIB_NANOSLEEP) +test_stat_time_LDADD = $(LDADD) $(NANOSLEEP_LIB)  test_striconveh_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_striconveha_SOURCES = test-striconveha.c iconvsupport.c  test_striconveha_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ @@ -7343,7 +8028,7 @@ test_cased_LDADD = $(LDADD) $(LIBUNISTRING)  test_ignorable_SOURCES = unicase/test-ignorable.c  test_ignorable_LDADD = $(LDADD) $(LIBUNISTRING)  test_locale_language_SOURCES = unicase/test-locale-language.c -test_locale_language_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD) +test_locale_language_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @INTL_MACOSX_LIBS@ $(LIBTHREAD)  test_uc_tolower_SOURCES = unicase/test-uc_tolower.c  test_uc_tolower_LDADD = $(LDADD) $(LIBUNISTRING)  test_uc_totitle_SOURCES = unicase/test-uc_totitle.c @@ -7417,9 +8102,9 @@ test_u8_totitle_LDADD = $(LDADD) $(LIBUNISTRING)  test_u8_toupper_SOURCES = unicase/test-u8-toupper.c  test_u8_toupper_LDADD = $(LDADD) $(LIBUNISTRING)  test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c -test_ulc_casecmp_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecmp_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c -test_ulc_casecoll_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_casecoll_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_conv_from_enc_SOURCES = uniconv/test-u16-conv-from-enc.c iconvsupport.c  test_u16_conv_from_enc_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u16_conv_to_enc_SOURCES = uniconv/test-u16-conv-to-enc.c @@ -7590,6 +8275,12 @@ test_decdigit_SOURCES = unictype/test-decdigit.c  test_decdigit_LDADD = $(LDADD) $(LIBUNISTRING)  test_digit_SOURCES = unictype/test-digit.c  test_digit_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_byname_SOURCES = unictype/test-incb_byname.c +test_incb_byname_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_name_SOURCES = unictype/test-incb_name.c +test_incb_name_LDADD = $(LDADD) $(LIBUNISTRING) +test_incb_of_SOURCES = unictype/test-incb_of.c +test_incb_of_LDADD = $(LDADD) $(LIBUNISTRING)  test_joininggroup_byname_SOURCES = unictype/test-joininggroup_byname.c  test_joininggroup_byname_LDADD = $(LDADD) $(LIBUNISTRING)  test_joininggroup_name_SOURCES = unictype/test-joininggroup_name.c @@ -7704,6 +8395,10 @@ test_pr_hex_digit_SOURCES = unictype/test-pr_hex_digit.c  test_pr_hex_digit_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_hyphen_SOURCES = unictype/test-pr_hyphen.c  test_pr_hyphen_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_id_compat_math_continue_SOURCES = unictype/test-pr_id_compat_math_continue.c +test_pr_id_compat_math_continue_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_id_compat_math_start_SOURCES = unictype/test-pr_id_compat_math_start.c +test_pr_id_compat_math_start_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_id_continue_SOURCES = unictype/test-pr_id_continue.c  test_pr_id_continue_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_id_start_SOURCES = unictype/test-pr_id_start.c @@ -7714,6 +8409,8 @@ test_pr_ids_binary_operator_SOURCES = unictype/test-pr_ids_binary_operator.c  test_pr_ids_binary_operator_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_ids_trinary_operator_SOURCES = unictype/test-pr_ids_trinary_operator.c  test_pr_ids_trinary_operator_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_ids_unary_operator_SOURCES = unictype/test-pr_ids_unary_operator.c +test_pr_ids_unary_operator_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_ignorable_control_SOURCES = unictype/test-pr_ignorable_control.c  test_pr_ignorable_control_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_iso_control_SOURCES = unictype/test-pr_iso_control.c @@ -7760,6 +8457,8 @@ test_pr_pattern_syntax_SOURCES = unictype/test-pr_pattern_syntax.c  test_pr_pattern_syntax_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_pattern_white_space_SOURCES = unictype/test-pr_pattern_white_space.c  test_pr_pattern_white_space_LDADD = $(LDADD) $(LIBUNISTRING) +test_pr_prepended_concatenation_mark_SOURCES = unictype/test-pr_prepended_concatenation_mark.c +test_pr_prepended_concatenation_mark_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_private_use_SOURCES = unictype/test-pr_private_use.c  test_pr_private_use_LDADD = $(LDADD) $(LIBUNISTRING)  test_pr_punctuation_SOURCES = unictype/test-pr_punctuation.c @@ -7833,7 +8532,7 @@ test_uc_grapheme_breaks_LDADD = $(LDADD) $(LIBUNISTRING)  test_uc_is_grapheme_break_SOURCES = unigbrk/test-uc-is-grapheme-break.c  test_uc_is_grapheme_break_LDADD = $(LDADD) $(LIBUNISTRING)  test_ulc_grapheme_breaks_SOURCES = unigbrk/test-ulc-grapheme-breaks.c -test_ulc_grapheme_breaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_grapheme_breaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_possible_linebreaks_SOURCES = unilbrk/test-u16-possible-linebreaks.c  test_u16_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_width_linebreaks_SOURCES = unilbrk/test-u16-width-linebreaks.c @@ -7850,6 +8549,8 @@ test_ulc_possible_linebreaks_SOURCES = unilbrk/test-ulc-possible-linebreaks.c  test_ulc_possible_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_ulc_width_linebreaks_SOURCES = unilbrk/test-ulc-width-linebreaks.c  test_ulc_width_linebreaks_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ +test_u_version_SOURCES = unimetadata/test-u-version.c +test_u_version_LDADD = $(LDADD) $(LIBUNISTRING)  @LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@test_uninames_SOURCES = uniname/test-uninames.c  @LIBUNISTRING_COMPILE_UNINAME_UNINAME_TRUE@test_uninames_LDADD = $(LDADD) @LIBINTL@  test_canonical_decomposition_SOURCES = uninorm/test-canonical-decomposition.c @@ -7929,9 +8630,9 @@ test_u16_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c  test_u16_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c -test_u16_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c -test_u16_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u16_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_vasprintf1_SOURCES = unistdio/test-u16-vasprintf1.c  test_u16_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u16_vsnprintf1_SOURCES = unistdio/test-u16-vsnprintf1.c @@ -7943,9 +8644,9 @@ test_u32_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c  test_u32_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c -test_u32_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c -test_u32_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u32_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u32_vasprintf1_SOURCES = unistdio/test-u32-vasprintf1.c  test_u32_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u32_vsnprintf1_SOURCES = unistdio/test-u32-vsnprintf1.c @@ -7957,9 +8658,9 @@ test_u8_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c  test_u8_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c -test_u8_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c -test_u8_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_u8_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u8_vasprintf1_SOURCES = unistdio/test-u8-vasprintf1.c  test_u8_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@  test_u8_vsnprintf1_SOURCES = unistdio/test-u8-vsnprintf1.c @@ -7967,19 +8668,19 @@ test_u8_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@  test_u8_vsprintf1_SOURCES = unistdio/test-u8-vsprintf1.c  test_u8_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@  test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c -test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_asnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c -test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c -test_ulc_vasnprintf2_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf2_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c -test_ulc_vasnprintf3_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasnprintf3_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c -test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vasprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c -test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsnprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB)  test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c -test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(LIB_MBRTOWC) +test_ulc_vsprintf1_LDADD = $(LDADD) $(LIBUNISTRING) @LIBINTL@ @LIBICONV@ $(MBRTOWC_LIB)  test_u16_check_SOURCES = unistr/test-u16-check.c  test_u16_check_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_chr_SOURCES = unistr/test-u16-chr.c @@ -8006,6 +8707,8 @@ test_u16_move_SOURCES = unistr/test-u16-move.c  test_u16_move_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_next_SOURCES = unistr/test-u16-next.c  test_u16_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u16_pcpy_SOURCES = unistr/test-u16-pcpy.c +test_u16_pcpy_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_prev_SOURCES = unistr/test-u16-prev.c  test_u16_prev_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_set_SOURCES = unistr/test-u16-set.c @@ -8076,6 +8779,8 @@ test_u32_move_SOURCES = unistr/test-u32-move.c  test_u32_move_LDADD = $(LDADD) $(LIBUNISTRING)  test_u32_next_SOURCES = unistr/test-u32-next.c  test_u32_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u32_pcpy_SOURCES = unistr/test-u32-pcpy.c +test_u32_pcpy_LDADD = $(LDADD) $(LIBUNISTRING)  test_u32_prev_SOURCES = unistr/test-u32-prev.c  test_u32_prev_LDADD = $(LDADD) $(LIBUNISTRING)  test_u32_set_SOURCES = unistr/test-u32-set.c @@ -8146,6 +8851,8 @@ test_u8_move_SOURCES = unistr/test-u8-move.c  test_u8_move_LDADD = $(LDADD) $(LIBUNISTRING)  test_u8_next_SOURCES = unistr/test-u8-next.c  test_u8_next_LDADD = $(LDADD) $(LIBUNISTRING) +test_u8_pcpy_SOURCES = unistr/test-u8-pcpy.c +test_u8_pcpy_LDADD = $(LDADD) $(LIBUNISTRING)  test_u8_prev_SOURCES = unistr/test-u8-prev.c  test_u8_prev_LDADD = $(LDADD) $(LIBUNISTRING)  test_u8_set_SOURCES = unistr/test-u8-set.c @@ -8199,7 +8906,7 @@ test_uc_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING)  test_u8_wordbreaks_SOURCES = uniwbrk/test-u8-wordbreaks.c  test_u8_wordbreaks_LDADD = $(LDADD) $(LIBUNISTRING)  test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c -test_ulc_wordbreaks_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) @LIBICONV@ +test_ulc_wordbreaks_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING) @LIBICONV@  test_u16_strwidth_SOURCES = uniwidth/test-u16-strwidth.c  test_u16_strwidth_LDADD = $(LDADD) $(LIBUNISTRING)  test_u16_width_SOURCES = uniwidth/test-u16-width.c @@ -8216,8 +8923,8 @@ test_uc_width_SOURCES = uniwidth/test-uc_width.c  test_uc_width_LDADD = $(LDADD) $(LIBUNISTRING)  test_uc_width2_SOURCES = uniwidth/test-uc_width2.c  test_uc_width2_LDADD = $(LDADD) $(LIBUNISTRING) -test_wcrtomb_LDADD = $(LDADD) $(LIB_SETLOCALE) -test_wcwidth_LDADD = $(LDADD) $(LIB_SETLOCALE) $(LIBUNISTRING) +test_wcrtomb_LDADD = $(LDADD) $(SETLOCALE_LIB) +test_wcwidth_LDADD = $(LDADD) $(SETLOCALE_LIB) $(LIBUNISTRING)  test_xalloc_die_LDADD = $(LDADD) @LIBINTL@  # Ensure that ../lib/config.h is seen before ../config.h. @@ -8310,6 +9017,10 @@ test-accept$(EXEEXT): $(test_accept_OBJECTS) $(test_accept_DEPENDENCIES) $(EXTRA  	@rm -f test-accept$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_accept_OBJECTS) $(test_accept_LDADD) $(LIBS) +test-alignasof$(EXEEXT): $(test_alignasof_OBJECTS) $(test_alignasof_DEPENDENCIES) $(EXTRA_test_alignasof_DEPENDENCIES)  +	@rm -f test-alignasof$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_alignasof_OBJECTS) $(test_alignasof_LDADD) $(LIBS) +  test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) $(EXTRA_test_alloca_opt_DEPENDENCIES)   	@rm -f test-alloca-opt$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) @@ -8388,6 +9099,10 @@ test-block_test$(EXEEXT): $(test_block_test_OBJECTS) $(test_block_test_DEPENDENC  	@rm -f test-block_test$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_block_test_OBJECTS) $(test_block_test_LDADD) $(LIBS) +test-btoc32$(EXEEXT): $(test_btoc32_OBJECTS) $(test_btoc32_DEPENDENCIES) $(EXTRA_test_btoc32_DEPENDENCIES)  +	@rm -f test-btoc32$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_btoc32_OBJECTS) $(test_btoc32_LDADD) $(LIBS) +  test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) $(EXTRA_test_btowc_DEPENDENCIES)   	@rm -f test-btowc$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) @@ -8404,6 +9119,70 @@ test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_  	@rm -f test-c-strncasecmp$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) +test-c32isalnum$(EXEEXT): $(test_c32isalnum_OBJECTS) $(test_c32isalnum_DEPENDENCIES) $(EXTRA_test_c32isalnum_DEPENDENCIES)  +	@rm -f test-c32isalnum$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isalnum_OBJECTS) $(test_c32isalnum_LDADD) $(LIBS) + +test-c32isalpha$(EXEEXT): $(test_c32isalpha_OBJECTS) $(test_c32isalpha_DEPENDENCIES) $(EXTRA_test_c32isalpha_DEPENDENCIES)  +	@rm -f test-c32isalpha$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isalpha_OBJECTS) $(test_c32isalpha_LDADD) $(LIBS) + +test-c32isblank$(EXEEXT): $(test_c32isblank_OBJECTS) $(test_c32isblank_DEPENDENCIES) $(EXTRA_test_c32isblank_DEPENDENCIES)  +	@rm -f test-c32isblank$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isblank_OBJECTS) $(test_c32isblank_LDADD) $(LIBS) + +test-c32iscntrl$(EXEEXT): $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_DEPENDENCIES) $(EXTRA_test_c32iscntrl_DEPENDENCIES)  +	@rm -f test-c32iscntrl$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32iscntrl_OBJECTS) $(test_c32iscntrl_LDADD) $(LIBS) + +test-c32isdigit$(EXEEXT): $(test_c32isdigit_OBJECTS) $(test_c32isdigit_DEPENDENCIES) $(EXTRA_test_c32isdigit_DEPENDENCIES)  +	@rm -f test-c32isdigit$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isdigit_OBJECTS) $(test_c32isdigit_LDADD) $(LIBS) + +test-c32isgraph$(EXEEXT): $(test_c32isgraph_OBJECTS) $(test_c32isgraph_DEPENDENCIES) $(EXTRA_test_c32isgraph_DEPENDENCIES)  +	@rm -f test-c32isgraph$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isgraph_OBJECTS) $(test_c32isgraph_LDADD) $(LIBS) + +test-c32islower$(EXEEXT): $(test_c32islower_OBJECTS) $(test_c32islower_DEPENDENCIES) $(EXTRA_test_c32islower_DEPENDENCIES)  +	@rm -f test-c32islower$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32islower_OBJECTS) $(test_c32islower_LDADD) $(LIBS) + +test-c32isprint$(EXEEXT): $(test_c32isprint_OBJECTS) $(test_c32isprint_DEPENDENCIES) $(EXTRA_test_c32isprint_DEPENDENCIES)  +	@rm -f test-c32isprint$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isprint_OBJECTS) $(test_c32isprint_LDADD) $(LIBS) + +test-c32ispunct$(EXEEXT): $(test_c32ispunct_OBJECTS) $(test_c32ispunct_DEPENDENCIES) $(EXTRA_test_c32ispunct_DEPENDENCIES)  +	@rm -f test-c32ispunct$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32ispunct_OBJECTS) $(test_c32ispunct_LDADD) $(LIBS) + +test-c32isspace$(EXEEXT): $(test_c32isspace_OBJECTS) $(test_c32isspace_DEPENDENCIES) $(EXTRA_test_c32isspace_DEPENDENCIES)  +	@rm -f test-c32isspace$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isspace_OBJECTS) $(test_c32isspace_LDADD) $(LIBS) + +test-c32isupper$(EXEEXT): $(test_c32isupper_OBJECTS) $(test_c32isupper_DEPENDENCIES) $(EXTRA_test_c32isupper_DEPENDENCIES)  +	@rm -f test-c32isupper$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isupper_OBJECTS) $(test_c32isupper_LDADD) $(LIBS) + +test-c32isxdigit$(EXEEXT): $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_DEPENDENCIES) $(EXTRA_test_c32isxdigit_DEPENDENCIES)  +	@rm -f test-c32isxdigit$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32isxdigit_OBJECTS) $(test_c32isxdigit_LDADD) $(LIBS) + +test-c32rtomb$(EXEEXT): $(test_c32rtomb_OBJECTS) $(test_c32rtomb_DEPENDENCIES) $(EXTRA_test_c32rtomb_DEPENDENCIES)  +	@rm -f test-c32rtomb$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32rtomb_OBJECTS) $(test_c32rtomb_LDADD) $(LIBS) + +test-c32rtomb-w32$(EXEEXT): $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_DEPENDENCIES) $(EXTRA_test_c32rtomb_w32_DEPENDENCIES)  +	@rm -f test-c32rtomb-w32$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32rtomb_w32_OBJECTS) $(test_c32rtomb_w32_LDADD) $(LIBS) + +test-c32tolower$(EXEEXT): $(test_c32tolower_OBJECTS) $(test_c32tolower_DEPENDENCIES) $(EXTRA_test_c32tolower_DEPENDENCIES)  +	@rm -f test-c32tolower$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32tolower_OBJECTS) $(test_c32tolower_LDADD) $(LIBS) + +test-c32width$(EXEEXT): $(test_c32width_OBJECTS) $(test_c32width_DEPENDENCIES) $(EXTRA_test_c32width_DEPENDENCIES)  +	@rm -f test-c32width$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_c32width_OBJECTS) $(test_c32width_LDADD) $(LIBS) +  test-calloc-gnu$(EXEEXT): $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_DEPENDENCIES) $(EXTRA_test_calloc_gnu_DEPENDENCIES)   	@rm -f test-calloc-gnu$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_calloc_gnu_OBJECTS) $(test_calloc_gnu_LDADD) $(LIBS) @@ -8874,6 +9653,10 @@ test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) $(EXTRA_te  	@rm -f test-errno$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-error$(EXEEXT): $(test_error_OBJECTS) $(test_error_DEPENDENCIES) $(EXTRA_test_error_DEPENDENCIES)  +	@rm -f test-error$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_error_OBJECTS) $(test_error_LDADD) $(LIBS) +  test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) $(EXTRA_test_fcntl_DEPENDENCIES)   	@rm -f test-fcntl$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) @@ -8967,6 +9750,24 @@ test-ignorable$(EXEEXT): $(test_ignorable_OBJECTS) $(test_ignorable_DEPENDENCIES  test-ignore-value$(EXEEXT): $(test_ignore_value_OBJECTS) $(test_ignore_value_DEPENDENCIES) $(EXTRA_test_ignore_value_DEPENDENCIES)   	@rm -f test-ignore-value$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_ignore_value_OBJECTS) $(test_ignore_value_LDADD) $(LIBS) +unictype/test-incb_byname.$(OBJEXT): unictype/$(am__dirstamp) \ +	unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_byname$(EXEEXT): $(test_incb_byname_OBJECTS) $(test_incb_byname_DEPENDENCIES) $(EXTRA_test_incb_byname_DEPENDENCIES)  +	@rm -f test-incb_byname$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_incb_byname_OBJECTS) $(test_incb_byname_LDADD) $(LIBS) +unictype/test-incb_name.$(OBJEXT): unictype/$(am__dirstamp) \ +	unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_name$(EXEEXT): $(test_incb_name_OBJECTS) $(test_incb_name_DEPENDENCIES) $(EXTRA_test_incb_name_DEPENDENCIES)  +	@rm -f test-incb_name$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_incb_name_OBJECTS) $(test_incb_name_LDADD) $(LIBS) +unictype/test-incb_of.$(OBJEXT): unictype/$(am__dirstamp) \ +	unictype/$(DEPDIR)/$(am__dirstamp) + +test-incb_of$(EXEEXT): $(test_incb_of_OBJECTS) $(test_incb_of_DEPENDENCIES) $(EXTRA_test_incb_of_DEPENDENCIES)  +	@rm -f test-incb_of$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_incb_of_OBJECTS) $(test_incb_of_LDADD) $(LIBS)  test-inet_pton$(EXEEXT): $(test_inet_pton_OBJECTS) $(test_inet_pton_DEPENDENCIES) $(EXTRA_test_inet_pton_DEPENDENCIES)   	@rm -f test-inet_pton$(EXEEXT) @@ -9008,6 +9809,10 @@ test-iswdigit$(EXEEXT): $(test_iswdigit_OBJECTS) $(test_iswdigit_DEPENDENCIES) $  	@rm -f test-iswdigit$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_iswdigit_OBJECTS) $(test_iswdigit_LDADD) $(LIBS) +test-iswpunct$(EXEEXT): $(test_iswpunct_OBJECTS) $(test_iswpunct_DEPENDENCIES) $(EXTRA_test_iswpunct_DEPENDENCIES)  +	@rm -f test-iswpunct$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_iswpunct_OBJECTS) $(test_iswpunct_LDADD) $(LIBS) +  test-iswxdigit$(EXEEXT): $(test_iswxdigit_OBJECTS) $(test_iswxdigit_DEPENDENCIES) $(EXTRA_test_iswxdigit_DEPENDENCIES)   	@rm -f test-iswxdigit$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_iswxdigit_OBJECTS) $(test_iswxdigit_LDADD) $(LIBS) @@ -9058,6 +9863,10 @@ test-langinfo$(EXEEXT): $(test_langinfo_OBJECTS) $(test_langinfo_DEPENDENCIES) $  	@rm -f test-langinfo$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_langinfo_OBJECTS) $(test_langinfo_LDADD) $(LIBS) +test-largefile$(EXEEXT): $(test_largefile_OBJECTS) $(test_largefile_DEPENDENCIES) $(EXTRA_test_largefile_DEPENDENCIES)  +	@rm -f test-largefile$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_largefile_OBJECTS) $(test_largefile_LDADD) $(LIBS) +  test-limits-h$(EXEEXT): $(test_limits_h_OBJECTS) $(test_limits_h_DEPENDENCIES) $(EXTRA_test_limits_h_DEPENDENCIES)   	@rm -f test-limits-h$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_limits_h_OBJECTS) $(test_limits_h_LDADD) $(LIBS) @@ -9104,6 +9913,14 @@ test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) $(EXTRA_test_  	@rm -f test-math$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) +test-mbrtoc32$(EXEEXT): $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_DEPENDENCIES)  +	@rm -f test-mbrtoc32$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_mbrtoc32_OBJECTS) $(test_mbrtoc32_LDADD) $(LIBS) + +test-mbrtoc32-w32$(EXEEXT): $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_DEPENDENCIES) $(EXTRA_test_mbrtoc32_w32_DEPENDENCIES)  +	@rm -f test-mbrtoc32-w32$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_mbrtoc32_w32_OBJECTS) $(test_mbrtoc32_w32_LDADD) $(LIBS) +  test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) $(EXTRA_test_mbrtowc_DEPENDENCIES)   	@rm -f test-mbrtowc$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) @@ -9503,6 +10320,18 @@ unictype/test-pr_hyphen.$(OBJEXT): unictype/$(am__dirstamp) \  test-pr_hyphen$(EXEEXT): $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_DEPENDENCIES) $(EXTRA_test_pr_hyphen_DEPENDENCIES)   	@rm -f test-pr_hyphen$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_LDADD) $(LIBS) +unictype/test-pr_id_compat_math_continue.$(OBJEXT):  \ +	unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_id_compat_math_continue$(EXEEXT): $(test_pr_id_compat_math_continue_OBJECTS) $(test_pr_id_compat_math_continue_DEPENDENCIES) $(EXTRA_test_pr_id_compat_math_continue_DEPENDENCIES)  +	@rm -f test-pr_id_compat_math_continue$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_pr_id_compat_math_continue_OBJECTS) $(test_pr_id_compat_math_continue_LDADD) $(LIBS) +unictype/test-pr_id_compat_math_start.$(OBJEXT):  \ +	unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_id_compat_math_start$(EXEEXT): $(test_pr_id_compat_math_start_OBJECTS) $(test_pr_id_compat_math_start_DEPENDENCIES) $(EXTRA_test_pr_id_compat_math_start_DEPENDENCIES)  +	@rm -f test-pr_id_compat_math_start$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_pr_id_compat_math_start_OBJECTS) $(test_pr_id_compat_math_start_LDADD) $(LIBS)  unictype/test-pr_id_continue.$(OBJEXT): unictype/$(am__dirstamp) \  	unictype/$(DEPDIR)/$(am__dirstamp) @@ -9533,6 +10362,12 @@ unictype/test-pr_ids_trinary_operator.$(OBJEXT):  \  test-pr_ids_trinary_operator$(EXEEXT): $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_DEPENDENCIES) $(EXTRA_test_pr_ids_trinary_operator_DEPENDENCIES)   	@rm -f test-pr_ids_trinary_operator$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_LDADD) $(LIBS) +unictype/test-pr_ids_unary_operator.$(OBJEXT):  \ +	unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_ids_unary_operator$(EXEEXT): $(test_pr_ids_unary_operator_OBJECTS) $(test_pr_ids_unary_operator_DEPENDENCIES) $(EXTRA_test_pr_ids_unary_operator_DEPENDENCIES)  +	@rm -f test-pr_ids_unary_operator$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_pr_ids_unary_operator_OBJECTS) $(test_pr_ids_unary_operator_LDADD) $(LIBS)  unictype/test-pr_ignorable_control.$(OBJEXT):  \  	unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) @@ -9671,6 +10506,12 @@ unictype/test-pr_pattern_white_space.$(OBJEXT):  \  test-pr_pattern_white_space$(EXEEXT): $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_DEPENDENCIES) $(EXTRA_test_pr_pattern_white_space_DEPENDENCIES)   	@rm -f test-pr_pattern_white_space$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_LDADD) $(LIBS) +unictype/test-pr_prepended_concatenation_mark.$(OBJEXT):  \ +	unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) + +test-pr_prepended_concatenation_mark$(EXEEXT): $(test_pr_prepended_concatenation_mark_OBJECTS) $(test_pr_prepended_concatenation_mark_DEPENDENCIES) $(EXTRA_test_pr_prepended_concatenation_mark_DEPENDENCIES)  +	@rm -f test-pr_prepended_concatenation_mark$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_pr_prepended_concatenation_mark_OBJECTS) $(test_pr_prepended_concatenation_mark_LDADD) $(LIBS)  unictype/test-pr_private_use.$(OBJEXT): unictype/$(am__dirstamp) \  	unictype/$(DEPDIR)/$(am__dirstamp) @@ -9818,6 +10659,18 @@ test-raise$(EXEEXT): $(test_raise_OBJECTS) $(test_raise_DEPENDENCIES) $(EXTRA_te  	@rm -f test-raise$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_raise_OBJECTS) $(test_raise_LDADD) $(LIBS) +test-random$(EXEEXT): $(test_random_OBJECTS) $(test_random_DEPENDENCIES) $(EXTRA_test_random_DEPENDENCIES)  +	@rm -f test-random$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_random_OBJECTS) $(test_random_LDADD) $(LIBS) + +test-random-mt$(EXEEXT): $(test_random_mt_OBJECTS) $(test_random_mt_DEPENDENCIES) $(EXTRA_test_random_mt_DEPENDENCIES)  +	@rm -f test-random-mt$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_random_mt_OBJECTS) $(test_random_mt_LDADD) $(LIBS) + +test-random_r$(EXEEXT): $(test_random_r_OBJECTS) $(test_random_r_DEPENDENCIES) $(EXTRA_test_random_r_DEPENDENCIES)  +	@rm -f test-random_r$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_random_r_OBJECTS) $(test_random_r_LDADD) $(LIBS) +  test-realloc-gnu$(EXEEXT): $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_DEPENDENCIES) $(EXTRA_test_realloc_gnu_DEPENDENCIES)   	@rm -f test-realloc-gnu$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_realloc_gnu_OBJECTS) $(test_realloc_gnu_LDADD) $(LIBS) @@ -9876,6 +10729,10 @@ test-setlocale_null-mt-one$(EXEEXT): $(test_setlocale_null_mt_one_OBJECTS) $(tes  	@rm -f test-setlocale_null-mt-one$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_setlocale_null_mt_one_OBJECTS) $(test_setlocale_null_mt_one_LDADD) $(LIBS) +test-setlocale_null-unlocked$(EXEEXT): $(test_setlocale_null_unlocked_OBJECTS) $(test_setlocale_null_unlocked_DEPENDENCIES) $(EXTRA_test_setlocale_null_unlocked_DEPENDENCIES)  +	@rm -f test-setlocale_null-unlocked$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_setlocale_null_unlocked_OBJECTS) $(test_setlocale_null_unlocked_LDADD) $(LIBS) +  test-setsockopt$(EXEEXT): $(test_setsockopt_OBJECTS) $(test_setsockopt_DEPENDENCIES) $(EXTRA_test_setsockopt_DEPENDENCIES)   	@rm -f test-setsockopt$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_setsockopt_OBJECTS) $(test_setsockopt_LDADD) $(LIBS) @@ -9908,10 +10765,6 @@ test-stat-time$(EXEEXT): $(test_stat_time_OBJECTS) $(test_stat_time_DEPENDENCIES  	@rm -f test-stat-time$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_stat_time_OBJECTS) $(test_stat_time_LDADD) $(LIBS) -test-stdalign$(EXEEXT): $(test_stdalign_OBJECTS) $(test_stdalign_DEPENDENCIES) $(EXTRA_test_stdalign_DEPENDENCIES)  -	@rm -f test-stdalign$(EXEEXT) -	$(AM_V_CCLD)$(LINK) $(test_stdalign_OBJECTS) $(test_stdalign_LDADD) $(LIBS) -  test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) $(EXTRA_test_stdbool_DEPENDENCIES)   	@rm -f test-stdbool$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) @@ -10031,6 +10884,22 @@ test-thread_self$(EXEEXT): $(test_thread_self_OBJECTS) $(test_thread_self_DEPEND  test-time$(EXEEXT): $(test_time_OBJECTS) $(test_time_DEPENDENCIES) $(EXTRA_test_time_DEPENDENCIES)   	@rm -f test-time$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_time_OBJECTS) $(test_time_LDADD) $(LIBS) + +test-time-h$(EXEEXT): $(test_time_h_OBJECTS) $(test_time_h_DEPENDENCIES) $(EXTRA_test_time_h_DEPENDENCIES)  +	@rm -f test-time-h$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_time_h_OBJECTS) $(test_time_h_LDADD) $(LIBS) +unimetadata/$(am__dirstamp): +	@$(MKDIR_P) unimetadata +	@: > unimetadata/$(am__dirstamp) +unimetadata/$(DEPDIR)/$(am__dirstamp): +	@$(MKDIR_P) unimetadata/$(DEPDIR) +	@: > unimetadata/$(DEPDIR)/$(am__dirstamp) +unimetadata/test-u-version.$(OBJEXT): unimetadata/$(am__dirstamp) \ +	unimetadata/$(DEPDIR)/$(am__dirstamp) + +test-u-version$(EXEEXT): $(test_u_version_OBJECTS) $(test_u_version_DEPENDENCIES) $(EXTRA_test_u_version_DEPENDENCIES)  +	@rm -f test-u-version$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_u_version_OBJECTS) $(test_u_version_LDADD) $(LIBS)  unistdio/$(am__dirstamp):  	@$(MKDIR_P) unistdio  	@: > unistdio/$(am__dirstamp) @@ -10229,6 +11098,12 @@ uninorm/test-u16-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \  test-u16-normcoll$(EXEEXT): $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_DEPENDENCIES) $(EXTRA_test_u16_normcoll_DEPENDENCIES)   	@rm -f test-u16-normcoll$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_LDADD) $(LIBS) +unistr/test-u16-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ +	unistr/$(DEPDIR)/$(am__dirstamp) + +test-u16-pcpy$(EXEEXT): $(test_u16_pcpy_OBJECTS) $(test_u16_pcpy_DEPENDENCIES) $(EXTRA_test_u16_pcpy_DEPENDENCIES)  +	@rm -f test-u16-pcpy$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_u16_pcpy_OBJECTS) $(test_u16_pcpy_LDADD) $(LIBS)  unilbrk/$(am__dirstamp):  	@$(MKDIR_P) unilbrk  	@: > unilbrk/$(am__dirstamp) @@ -10675,6 +11550,12 @@ uninorm/test-u32-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \  test-u32-normcoll$(EXEEXT): $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_DEPENDENCIES) $(EXTRA_test_u32_normcoll_DEPENDENCIES)   	@rm -f test-u32-normcoll$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_LDADD) $(LIBS) +unistr/test-u32-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ +	unistr/$(DEPDIR)/$(am__dirstamp) + +test-u32-pcpy$(EXEEXT): $(test_u32_pcpy_OBJECTS) $(test_u32_pcpy_DEPENDENCIES) $(EXTRA_test_u32_pcpy_DEPENDENCIES)  +	@rm -f test-u32-pcpy$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_u32_pcpy_OBJECTS) $(test_u32_pcpy_LDADD) $(LIBS)  unilbrk/test-u32-possible-linebreaks.$(OBJEXT):  \  	unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) @@ -11077,6 +11958,12 @@ uninorm/test-u8-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \  test-u8-normcoll$(EXEEXT): $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_DEPENDENCIES) $(EXTRA_test_u8_normcoll_DEPENDENCIES)   	@rm -f test-u8-normcoll$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_LDADD) $(LIBS) +unistr/test-u8-pcpy.$(OBJEXT): unistr/$(am__dirstamp) \ +	unistr/$(DEPDIR)/$(am__dirstamp) + +test-u8-pcpy$(EXEEXT): $(test_u8_pcpy_OBJECTS) $(test_u8_pcpy_DEPENDENCIES) $(EXTRA_test_u8_pcpy_DEPENDENCIES)  +	@rm -f test-u8-pcpy$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_u8_pcpy_OBJECTS) $(test_u8_pcpy_LDADD) $(LIBS)  unilbrk/test-u8-possible-linebreaks.$(OBJEXT):  \  	unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) @@ -11359,6 +12246,10 @@ uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \  test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) $(EXTRA_test_uc_width2_DEPENDENCIES)   	@rm -f test-uc_width2$(EXEEXT)  	$(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) + +test-uchar$(EXEEXT): $(test_uchar_OBJECTS) $(test_uchar_DEPENDENCIES) $(EXTRA_test_uchar_DEPENDENCIES)  +	@rm -f test-uchar$(EXEEXT) +	$(AM_V_CCLD)$(LINK) $(test_uchar_OBJECTS) $(test_uchar_LDADD) $(LIBS)  unistdio/test-ulc-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \  	unistdio/$(DEPDIR)/$(am__dirstamp) @@ -11508,6 +12399,7 @@ mostlyclean-compile:  	-rm -f unictype/*.$(OBJEXT)  	-rm -f unigbrk/*.$(OBJEXT)  	-rm -f unilbrk/*.$(OBJEXT) +	-rm -f unimetadata/*.$(OBJEXT)  	-rm -f uniname/*.$(OBJEXT)  	-rm -f uninorm/*.$(OBJEXT)  	-rm -f unistdio/*.$(OBJEXT) @@ -11523,7 +12415,10 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary-io.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btoc32.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32rtomb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c32tob.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calloc.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ # am--include-marker @@ -11562,10 +12457,13 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread_sigmask.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putenv.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/raise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random_r.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randomd.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randoml.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realloc.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reallocarray.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/same-inode.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sched_yield.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/select.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ # am--include-marker @@ -11586,16 +12484,34 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symlink.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-accept.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alignasof.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-arpa_inet.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-array-mergesort.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-assert.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bind.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btoc32.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalnum.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isalpha.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isblank.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32iscntrl.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isgraph.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32islower.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isprint.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32ispunct.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isspace.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isupper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32isxdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb-w32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32rtomb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32tolower.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c32width.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-calloc-gnu.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-cloexec.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-close.Po@am__quote@ # am--include-marker @@ -11604,6 +12520,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dup2.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-error.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl-h.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fdopen.Po@am__quote@ # am--include-marker @@ -11636,8 +12553,10 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswblank.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswdigit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswpunct.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iswxdigit.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-langinfo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-largefile.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-limits-h.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-listen.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localcharset.Po@am__quote@ # am--include-marker @@ -11648,6 +12567,8 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloc-gnu.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32-w32.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtoc32.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc-w32.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ # am--include-marker @@ -11668,6 +12589,9 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask1.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-pthread_sigmask2.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-raise.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random-mt.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-random_r.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-realloc-gnu.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-reallocarray.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rwlock1.Po@am__quote@ # am--include-marker @@ -11680,6 +12604,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale2.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-all.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-mt-one.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null-unlocked.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setlocale_null.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-setsockopt.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal-h.Po@am__quote@ # am--include-marker @@ -11689,7 +12614,6 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sockets.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat-time.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stat.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdalign.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdckdint.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stddef.Po@am__quote@ # am--include-marker @@ -11713,7 +12637,9 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_uio.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_create.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-thread_self.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time-h.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-time.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-uchar.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unsetenv.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-usleep.Po@am__quote@ # am--include-marker @@ -11725,6 +12651,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype-h.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xalloc-die.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@ # am--include-marker @@ -11861,6 +12788,9 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_xdigit.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-decdigit.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-digit.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_byname.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_name.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-incb_of.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_byname.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_name.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-joininggroup_of.Po@am__quote@ # am--include-marker @@ -11918,11 +12848,14 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_grapheme_link.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hex_digit.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hyphen.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_continue.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_start.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ideographic.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ignorable_control.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_iso_control.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_join_control.Po@am__quote@ # am--include-marker @@ -11946,6 +12879,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_paragraph_separator.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_syntax.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_white_space.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_private_use.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_punctuation.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_quotation_mark.Po@am__quote@ # am--include-marker @@ -11991,6 +12925,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unimetadata/$(DEPDIR)/test-u-version.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@uniname/$(DEPDIR)/test-uninames.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-canonical-decomposition.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-compat-decomposition.Po@am__quote@ # am--include-marker @@ -12066,6 +13001,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-mbtoucr.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-move.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-pcpy.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-prev.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-set.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u16-stpcpy.Po@am__quote@ # am--include-marker @@ -12101,6 +13037,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-mbtoucr.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-move.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-pcpy.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-prev.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-set.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u32-stpcpy.Po@am__quote@ # am--include-marker @@ -12136,6 +13073,7 @@ distclean-compile:  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-mbtoucr.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-move.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-next.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-pcpy.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-prev.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-set.Po@am__quote@ # am--include-marker  @AMDEP_TRUE@@am__include@ @am__quote@unistr/$(DEPDIR)/test-u8-stpcpy.Po@am__quote@ # am--include-marker @@ -12455,6 +13393,13 @@ test-accept.log: test-accept$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-alignasof.log: test-alignasof$(EXEEXT) +	@p='test-alignasof$(EXEEXT)'; \ +	b='test-alignasof'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-alloca-opt.log: test-alloca-opt$(EXEEXT)  	@p='test-alloca-opt$(EXEEXT)'; \  	b='test-alloca-opt'; \ @@ -12497,16 +13442,44 @@ test-bind.log: test-bind$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-btowc1.sh.log: test-btowc1.sh -	@p='test-btowc1.sh'; \ -	b='test-btowc1.sh'; \ +test-btoc32-1.sh.log: test-btoc32-1.sh +	@p='test-btoc32-1.sh'; \ +	b='test-btoc32-1.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-btoc32-2.sh.log: test-btoc32-2.sh +	@p='test-btoc32-2.sh'; \ +	b='test-btoc32-2.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-btowc2.sh.log: test-btowc2.sh -	@p='test-btowc2.sh'; \ -	b='test-btowc2.sh'; \ +test-btoc32-3.sh.log: test-btoc32-3.sh +	@p='test-btoc32-3.sh'; \ +	b='test-btoc32-3.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-1.sh.log: test-btowc-1.sh +	@p='test-btowc-1.sh'; \ +	b='test-btowc-1.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-2.sh.log: test-btowc-2.sh +	@p='test-btowc-2.sh'; \ +	b='test-btowc-2.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-btowc-3.sh.log: test-btowc-3.sh +	@p='test-btowc-3.sh'; \ +	b='test-btowc-3.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -12525,6 +13498,160 @@ test-c-strcase.sh.log: test-c-strcase.sh  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isalnum.sh.log: test-c32isalnum.sh +	@p='test-c32isalnum.sh'; \ +	b='test-c32isalnum.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isalpha.sh.log: test-c32isalpha.sh +	@p='test-c32isalpha.sh'; \ +	b='test-c32isalpha.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isblank.sh.log: test-c32isblank.sh +	@p='test-c32isblank.sh'; \ +	b='test-c32isblank.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32iscntrl.sh.log: test-c32iscntrl.sh +	@p='test-c32iscntrl.sh'; \ +	b='test-c32iscntrl.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isdigit.sh.log: test-c32isdigit.sh +	@p='test-c32isdigit.sh'; \ +	b='test-c32isdigit.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isgraph.sh.log: test-c32isgraph.sh +	@p='test-c32isgraph.sh'; \ +	b='test-c32isgraph.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32islower.sh.log: test-c32islower.sh +	@p='test-c32islower.sh'; \ +	b='test-c32islower.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isprint.sh.log: test-c32isprint.sh +	@p='test-c32isprint.sh'; \ +	b='test-c32isprint.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32ispunct.sh.log: test-c32ispunct.sh +	@p='test-c32ispunct.sh'; \ +	b='test-c32ispunct.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isspace.sh.log: test-c32isspace.sh +	@p='test-c32isspace.sh'; \ +	b='test-c32isspace.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isupper.sh.log: test-c32isupper.sh +	@p='test-c32isupper.sh'; \ +	b='test-c32isupper.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32isxdigit.sh.log: test-c32isxdigit.sh +	@p='test-c32isxdigit.sh'; \ +	b='test-c32isxdigit.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb.sh.log: test-c32rtomb.sh +	@p='test-c32rtomb.sh'; \ +	b='test-c32rtomb.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-2.sh.log: test-c32rtomb-w32-2.sh +	@p='test-c32rtomb-w32-2.sh'; \ +	b='test-c32rtomb-w32-2.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-3.sh.log: test-c32rtomb-w32-3.sh +	@p='test-c32rtomb-w32-3.sh'; \ +	b='test-c32rtomb-w32-3.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-4.sh.log: test-c32rtomb-w32-4.sh +	@p='test-c32rtomb-w32-4.sh'; \ +	b='test-c32rtomb-w32-4.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-5.sh.log: test-c32rtomb-w32-5.sh +	@p='test-c32rtomb-w32-5.sh'; \ +	b='test-c32rtomb-w32-5.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-6.sh.log: test-c32rtomb-w32-6.sh +	@p='test-c32rtomb-w32-6.sh'; \ +	b='test-c32rtomb-w32-6.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-7.sh.log: test-c32rtomb-w32-7.sh +	@p='test-c32rtomb-w32-7.sh'; \ +	b='test-c32rtomb-w32-7.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32rtomb-w32-8.sh.log: test-c32rtomb-w32-8.sh +	@p='test-c32rtomb-w32-8.sh'; \ +	b='test-c32rtomb-w32-8.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32tolower.sh.log: test-c32tolower.sh +	@p='test-c32tolower.sh'; \ +	b='test-c32tolower.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-c32width.log: test-c32width$(EXEEXT) +	@p='test-c32width$(EXEEXT)'; \ +	b='test-c32width'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-calloc-gnu.log: test-calloc-gnu$(EXEEXT)  	@p='test-calloc-gnu$(EXEEXT)'; \  	b='test-calloc-gnu'; \ @@ -12581,6 +13708,13 @@ test-errno.log: test-errno$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-error.sh.log: test-error.sh +	@p='test-error.sh'; \ +	b='test-error.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-fcntl-h.log: test-fcntl-h$(EXEEXT)  	@p='test-fcntl-h$(EXEEXT)'; \  	b='test-fcntl-h'; \ @@ -12805,6 +13939,13 @@ test-iswdigit.sh.log: test-iswdigit.sh  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-iswpunct.sh.log: test-iswpunct.sh +	@p='test-iswpunct.sh'; \ +	b='test-iswpunct.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-iswxdigit.sh.log: test-iswxdigit.sh  	@p='test-iswxdigit.sh'; \  	b='test-iswxdigit.sh'; \ @@ -12819,6 +13960,13 @@ test-langinfo.log: test-langinfo$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-largefile.log: test-largefile$(EXEEXT) +	@p='test-largefile$(EXEEXT)'; \ +	b='test-largefile'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-limits-h.log: test-limits-h$(EXEEXT)  	@p='test-limits-h$(EXEEXT)'; \  	b='test-limits-h'; \ @@ -12903,44 +14051,121 @@ test-math.log: test-math$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc1.sh.log: test-mbrtowc1.sh -	@p='test-mbrtowc1.sh'; \ -	b='test-mbrtowc1.sh'; \ +test-mbrtoc32-1.sh.log: test-mbrtoc32-1.sh +	@p='test-mbrtoc32-1.sh'; \ +	b='test-mbrtoc32-1.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-2.sh.log: test-mbrtoc32-2.sh +	@p='test-mbrtoc32-2.sh'; \ +	b='test-mbrtoc32-2.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-3.sh.log: test-mbrtoc32-3.sh +	@p='test-mbrtoc32-3.sh'; \ +	b='test-mbrtoc32-3.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-4.sh.log: test-mbrtoc32-4.sh +	@p='test-mbrtoc32-4.sh'; \ +	b='test-mbrtoc32-4.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc2.sh.log: test-mbrtowc2.sh -	@p='test-mbrtowc2.sh'; \ -	b='test-mbrtowc2.sh'; \ +test-mbrtoc32-5.sh.log: test-mbrtoc32-5.sh +	@p='test-mbrtoc32-5.sh'; \ +	b='test-mbrtoc32-5.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc3.sh.log: test-mbrtowc3.sh -	@p='test-mbrtowc3.sh'; \ -	b='test-mbrtowc3.sh'; \ +test-mbrtoc32-w32-2.sh.log: test-mbrtoc32-w32-2.sh +	@p='test-mbrtoc32-w32-2.sh'; \ +	b='test-mbrtoc32-w32-2.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc4.sh.log: test-mbrtowc4.sh -	@p='test-mbrtowc4.sh'; \ -	b='test-mbrtowc4.sh'; \ +test-mbrtoc32-w32-3.sh.log: test-mbrtoc32-w32-3.sh +	@p='test-mbrtoc32-w32-3.sh'; \ +	b='test-mbrtoc32-w32-3.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc5.sh.log: test-mbrtowc5.sh -	@p='test-mbrtowc5.sh'; \ -	b='test-mbrtowc5.sh'; \ +test-mbrtoc32-w32-4.sh.log: test-mbrtoc32-w32-4.sh +	@p='test-mbrtoc32-w32-4.sh'; \ +	b='test-mbrtoc32-w32-4.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-mbrtowc-w32-1.sh.log: test-mbrtowc-w32-1.sh -	@p='test-mbrtowc-w32-1.sh'; \ -	b='test-mbrtowc-w32-1.sh'; \ +test-mbrtoc32-w32-5.sh.log: test-mbrtoc32-w32-5.sh +	@p='test-mbrtoc32-w32-5.sh'; \ +	b='test-mbrtoc32-w32-5.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-6.sh.log: test-mbrtoc32-w32-6.sh +	@p='test-mbrtoc32-w32-6.sh'; \ +	b='test-mbrtoc32-w32-6.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-7.sh.log: test-mbrtoc32-w32-7.sh +	@p='test-mbrtoc32-w32-7.sh'; \ +	b='test-mbrtoc32-w32-7.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtoc32-w32-8.sh.log: test-mbrtoc32-w32-8.sh +	@p='test-mbrtoc32-w32-8.sh'; \ +	b='test-mbrtoc32-w32-8.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-1.sh.log: test-mbrtowc-1.sh +	@p='test-mbrtowc-1.sh'; \ +	b='test-mbrtowc-1.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-2.sh.log: test-mbrtowc-2.sh +	@p='test-mbrtowc-2.sh'; \ +	b='test-mbrtowc-2.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-3.sh.log: test-mbrtowc-3.sh +	@p='test-mbrtowc-3.sh'; \ +	b='test-mbrtowc-3.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-4.sh.log: test-mbrtowc-4.sh +	@p='test-mbrtowc-4.sh'; \ +	b='test-mbrtowc-4.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-5.sh.log: test-mbrtowc-5.sh +	@p='test-mbrtowc-5.sh'; \ +	b='test-mbrtowc-5.sh'; \  	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -12987,6 +14212,13 @@ test-mbrtowc-w32-7.sh.log: test-mbrtowc-w32-7.sh  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-mbrtowc-w32-8.sh.log: test-mbrtowc-w32-8.sh +	@p='test-mbrtowc-w32-8.sh'; \ +	b='test-mbrtowc-w32-8.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-mbsinit.sh.log: test-mbsinit.sh  	@p='test-mbsinit.sh'; \  	b='test-mbsinit.sh'; \ @@ -13106,6 +14338,27 @@ test-raise.log: test-raise$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-random.log: test-random$(EXEEXT) +	@p='test-random$(EXEEXT)'; \ +	b='test-random'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-random-mt.log: test-random-mt$(EXEEXT) +	@p='test-random-mt$(EXEEXT)'; \ +	b='test-random-mt'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-random_r.log: test-random_r$(EXEEXT) +	@p='test-random_r$(EXEEXT)'; \ +	b='test-random_r'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-realloc-gnu.log: test-realloc-gnu$(EXEEXT)  	@p='test-realloc-gnu$(EXEEXT)'; \  	b='test-realloc-gnu'; \ @@ -13176,6 +14429,13 @@ test-setlocale_null-mt-all.log: test-setlocale_null-mt-all$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-setlocale_null-unlocked.log: test-setlocale_null-unlocked$(EXEEXT) +	@p='test-setlocale_null-unlocked$(EXEEXT)'; \ +	b='test-setlocale_null-unlocked'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-setlocale1.sh.log: test-setlocale1.sh  	@p='test-setlocale1.sh'; \  	b='test-setlocale1.sh'; \ @@ -13246,13 +14506,6 @@ test-stat-time.log: test-stat-time$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-stdalign.log: test-stdalign$(EXEEXT) -	@p='test-stdalign$(EXEEXT)'; \ -	b='test-stdalign'; \ -	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ -	--log-file $$b.log --trs-file $$b.trs \ -	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ -	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-stdbool.log: test-stdbool$(EXEEXT)  	@p='test-stdbool$(EXEEXT)'; \  	b='test-stdbool'; \ @@ -13421,6 +14674,13 @@ test-thread_create.log: test-thread_create$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-time-h.log: test-time-h$(EXEEXT) +	@p='test-time-h$(EXEEXT)'; \ +	b='test-time-h'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-time.log: test-time$(EXEEXT)  	@p='test-time$(EXEEXT)'; \  	b='test-time'; \ @@ -13428,6 +14688,13 @@ test-time.log: test-time$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-uchar.log: test-uchar$(EXEEXT) +	@p='test-uchar$(EXEEXT)'; \ +	b='test-uchar'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-cased.log: test-cased$(EXEEXT)  	@p='test-cased$(EXEEXT)'; \  	b='test-cased'; \ @@ -14324,6 +15591,27 @@ test-digit.log: test-digit$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_byname.log: test-incb_byname$(EXEEXT) +	@p='test-incb_byname$(EXEEXT)'; \ +	b='test-incb_byname'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_name.log: test-incb_name$(EXEEXT) +	@p='test-incb_name$(EXEEXT)'; \ +	b='test-incb_name'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-incb_of.log: test-incb_of$(EXEEXT) +	@p='test-incb_of$(EXEEXT)'; \ +	b='test-incb_of'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-joininggroup_byname.log: test-joininggroup_byname$(EXEEXT)  	@p='test-joininggroup_byname$(EXEEXT)'; \  	b='test-joininggroup_byname'; \ @@ -14723,6 +16011,20 @@ test-pr_hyphen.log: test-pr_hyphen$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_id_compat_math_continue.log: test-pr_id_compat_math_continue$(EXEEXT) +	@p='test-pr_id_compat_math_continue$(EXEEXT)'; \ +	b='test-pr_id_compat_math_continue'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_id_compat_math_start.log: test-pr_id_compat_math_start$(EXEEXT) +	@p='test-pr_id_compat_math_start$(EXEEXT)'; \ +	b='test-pr_id_compat_math_start'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-pr_id_continue.log: test-pr_id_continue$(EXEEXT)  	@p='test-pr_id_continue$(EXEEXT)'; \  	b='test-pr_id_continue'; \ @@ -14758,6 +16060,13 @@ test-pr_ids_trinary_operator.log: test-pr_ids_trinary_operator$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_ids_unary_operator.log: test-pr_ids_unary_operator$(EXEEXT) +	@p='test-pr_ids_unary_operator$(EXEEXT)'; \ +	b='test-pr_ids_unary_operator'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-pr_ignorable_control.log: test-pr_ignorable_control$(EXEEXT)  	@p='test-pr_ignorable_control$(EXEEXT)'; \  	b='test-pr_ignorable_control'; \ @@ -14919,6 +16228,13 @@ test-pr_pattern_white_space.log: test-pr_pattern_white_space$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-pr_prepended_concatenation_mark.log: test-pr_prepended_concatenation_mark$(EXEEXT) +	@p='test-pr_prepended_concatenation_mark$(EXEEXT)'; \ +	b='test-pr_prepended_concatenation_mark'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-pr_private_use.log: test-pr_private_use$(EXEEXT)  	@p='test-pr_private_use$(EXEEXT)'; \  	b='test-pr_private_use'; \ @@ -15234,6 +16550,13 @@ test-ulc-width-linebreaks.log: test-ulc-width-linebreaks$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-u-version.log: test-u-version$(EXEEXT) +	@p='test-u-version$(EXEEXT)'; \ +	b='test-u-version'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  uniname/test-uninames.sh.log: uniname/test-uninames.sh  	@p='uniname/test-uninames.sh'; \  	b='uniname/test-uninames.sh'; \ @@ -15675,6 +16998,13 @@ test-u16-next.log: test-u16-next$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-u16-pcpy.log: test-u16-pcpy$(EXEEXT) +	@p='test-u16-pcpy$(EXEEXT)'; \ +	b='test-u16-pcpy'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-u16-prev.log: test-u16-prev$(EXEEXT)  	@p='test-u16-prev$(EXEEXT)'; \  	b='test-u16-prev'; \ @@ -15920,6 +17250,13 @@ test-u32-next.log: test-u32-next$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-u32-pcpy.log: test-u32-pcpy$(EXEEXT) +	@p='test-u32-pcpy$(EXEEXT)'; \ +	b='test-u32-pcpy'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-u32-prev.log: test-u32-prev$(EXEEXT)  	@p='test-u32-prev$(EXEEXT)'; \  	b='test-u32-prev'; \ @@ -16165,6 +17502,13 @@ test-u8-next.log: test-u8-next$(EXEEXT)  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-u8-pcpy.log: test-u8-pcpy$(EXEEXT) +	@p='test-u8-pcpy$(EXEEXT)'; \ +	b='test-u8-pcpy'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-u8-prev.log: test-u8-prev$(EXEEXT)  	@p='test-u8-prev$(EXEEXT)'; \  	b='test-u8-prev'; \ @@ -16452,13 +17796,6 @@ test-wcrtomb.sh.log: test-wcrtomb.sh  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) -test-wcrtomb-w32-1.sh.log: test-wcrtomb-w32-1.sh -	@p='test-wcrtomb-w32-1.sh'; \ -	b='test-wcrtomb-w32-1.sh'; \ -	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ -	--log-file $$b.log --trs-file $$b.trs \ -	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ -	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-wcrtomb-w32-2.sh.log: test-wcrtomb-w32-2.sh  	@p='test-wcrtomb-w32-2.sh'; \  	b='test-wcrtomb-w32-2.sh'; \ @@ -16501,6 +17838,13 @@ test-wcrtomb-w32-7.sh.log: test-wcrtomb-w32-7.sh  	--log-file $$b.log --trs-file $$b.trs \  	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \  	"$$tst" $(AM_TESTS_FD_REDIRECT) +test-wcrtomb-w32-8.sh.log: test-wcrtomb-w32-8.sh +	@p='test-wcrtomb-w32-8.sh'; \ +	b='test-wcrtomb-w32-8.sh'; \ +	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ +	--log-file $$b.log --trs-file $$b.trs \ +	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ +	"$$tst" $(AM_TESTS_FD_REDIRECT)  test-wctype-h.log: test-wctype-h$(EXEEXT)  	@p='test-wctype-h$(EXEEXT)'; \  	b='test-wctype-h'; \ @@ -16647,6 +17991,8 @@ distclean-generic:  	-rm -f unigbrk/$(am__dirstamp)  	-rm -f unilbrk/$(DEPDIR)/$(am__dirstamp)  	-rm -f unilbrk/$(am__dirstamp) +	-rm -f unimetadata/$(DEPDIR)/$(am__dirstamp) +	-rm -f unimetadata/$(am__dirstamp)  	-rm -f uniname/$(DEPDIR)/$(am__dirstamp)  	-rm -f uniname/$(am__dirstamp)  	-rm -f uninorm/$(DEPDIR)/$(am__dirstamp) @@ -16678,7 +18024,10 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/basename-lgpl.Po  	-rm -f ./$(DEPDIR)/binary-io.Po  	-rm -f ./$(DEPDIR)/bind.Po +	-rm -f ./$(DEPDIR)/btoc32.Po  	-rm -f ./$(DEPDIR)/btowc.Po +	-rm -f ./$(DEPDIR)/c32rtomb.Po +	-rm -f ./$(DEPDIR)/c32tob.Po  	-rm -f ./$(DEPDIR)/calloc.Po  	-rm -f ./$(DEPDIR)/cloexec.Po  	-rm -f ./$(DEPDIR)/close.Po @@ -16717,10 +18066,13 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/pthread_sigmask.Po  	-rm -f ./$(DEPDIR)/putenv.Po  	-rm -f ./$(DEPDIR)/raise.Po +	-rm -f ./$(DEPDIR)/random.Po +	-rm -f ./$(DEPDIR)/random_r.Po  	-rm -f ./$(DEPDIR)/randomd.Po  	-rm -f ./$(DEPDIR)/randoml.Po  	-rm -f ./$(DEPDIR)/realloc.Po  	-rm -f ./$(DEPDIR)/reallocarray.Po +	-rm -f ./$(DEPDIR)/same-inode.Po  	-rm -f ./$(DEPDIR)/sched_yield.Po  	-rm -f ./$(DEPDIR)/select.Po  	-rm -f ./$(DEPDIR)/setenv.Po @@ -16741,16 +18093,34 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/symlink.Po  	-rm -f ./$(DEPDIR)/sys_socket.Po  	-rm -f ./$(DEPDIR)/test-accept.Po +	-rm -f ./$(DEPDIR)/test-alignasof.Po  	-rm -f ./$(DEPDIR)/test-alloca-opt.Po  	-rm -f ./$(DEPDIR)/test-arpa_inet.Po  	-rm -f ./$(DEPDIR)/test-array-mergesort.Po  	-rm -f ./$(DEPDIR)/test-assert.Po  	-rm -f ./$(DEPDIR)/test-binary-io.Po  	-rm -f ./$(DEPDIR)/test-bind.Po +	-rm -f ./$(DEPDIR)/test-btoc32.Po  	-rm -f ./$(DEPDIR)/test-btowc.Po  	-rm -f ./$(DEPDIR)/test-c-ctype.Po  	-rm -f ./$(DEPDIR)/test-c-strcasecmp.Po  	-rm -f ./$(DEPDIR)/test-c-strncasecmp.Po +	-rm -f ./$(DEPDIR)/test-c32isalnum.Po +	-rm -f ./$(DEPDIR)/test-c32isalpha.Po +	-rm -f ./$(DEPDIR)/test-c32isblank.Po +	-rm -f ./$(DEPDIR)/test-c32iscntrl.Po +	-rm -f ./$(DEPDIR)/test-c32isdigit.Po +	-rm -f ./$(DEPDIR)/test-c32isgraph.Po +	-rm -f ./$(DEPDIR)/test-c32islower.Po +	-rm -f ./$(DEPDIR)/test-c32isprint.Po +	-rm -f ./$(DEPDIR)/test-c32ispunct.Po +	-rm -f ./$(DEPDIR)/test-c32isspace.Po +	-rm -f ./$(DEPDIR)/test-c32isupper.Po +	-rm -f ./$(DEPDIR)/test-c32isxdigit.Po +	-rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po +	-rm -f ./$(DEPDIR)/test-c32rtomb.Po +	-rm -f ./$(DEPDIR)/test-c32tolower.Po +	-rm -f ./$(DEPDIR)/test-c32width.Po  	-rm -f ./$(DEPDIR)/test-calloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-cloexec.Po  	-rm -f ./$(DEPDIR)/test-close.Po @@ -16759,6 +18129,7 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-dup2.Po  	-rm -f ./$(DEPDIR)/test-environ.Po  	-rm -f ./$(DEPDIR)/test-errno.Po +	-rm -f ./$(DEPDIR)/test-error.Po  	-rm -f ./$(DEPDIR)/test-fcntl-h.Po  	-rm -f ./$(DEPDIR)/test-fcntl.Po  	-rm -f ./$(DEPDIR)/test-fdopen.Po @@ -16791,8 +18162,10 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po  	-rm -f ./$(DEPDIR)/test-iswblank.Po  	-rm -f ./$(DEPDIR)/test-iswdigit.Po +	-rm -f ./$(DEPDIR)/test-iswpunct.Po  	-rm -f ./$(DEPDIR)/test-iswxdigit.Po  	-rm -f ./$(DEPDIR)/test-langinfo.Po +	-rm -f ./$(DEPDIR)/test-largefile.Po  	-rm -f ./$(DEPDIR)/test-limits-h.Po  	-rm -f ./$(DEPDIR)/test-listen.Po  	-rm -f ./$(DEPDIR)/test-localcharset.Po @@ -16803,6 +18176,8 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-malloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-malloca.Po  	-rm -f ./$(DEPDIR)/test-math.Po +	-rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po +	-rm -f ./$(DEPDIR)/test-mbrtoc32.Po  	-rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po  	-rm -f ./$(DEPDIR)/test-mbrtowc.Po  	-rm -f ./$(DEPDIR)/test-mbsinit.Po @@ -16823,6 +18198,9 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po  	-rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po  	-rm -f ./$(DEPDIR)/test-raise.Po +	-rm -f ./$(DEPDIR)/test-random-mt.Po +	-rm -f ./$(DEPDIR)/test-random.Po +	-rm -f ./$(DEPDIR)/test-random_r.Po  	-rm -f ./$(DEPDIR)/test-realloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-reallocarray.Po  	-rm -f ./$(DEPDIR)/test-rwlock1.Po @@ -16835,6 +18213,7 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-setlocale2.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po +	-rm -f ./$(DEPDIR)/test-setlocale_null-unlocked.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null.Po  	-rm -f ./$(DEPDIR)/test-setsockopt.Po  	-rm -f ./$(DEPDIR)/test-signal-h.Po @@ -16844,7 +18223,6 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-sockets.Po  	-rm -f ./$(DEPDIR)/test-stat-time.Po  	-rm -f ./$(DEPDIR)/test-stat.Po -	-rm -f ./$(DEPDIR)/test-stdalign.Po  	-rm -f ./$(DEPDIR)/test-stdbool.Po  	-rm -f ./$(DEPDIR)/test-stdckdint.Po  	-rm -f ./$(DEPDIR)/test-stddef.Po @@ -16868,7 +18246,9 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-sys_uio.Po  	-rm -f ./$(DEPDIR)/test-thread_create.Po  	-rm -f ./$(DEPDIR)/test-thread_self.Po +	-rm -f ./$(DEPDIR)/test-time-h.Po  	-rm -f ./$(DEPDIR)/test-time.Po +	-rm -f ./$(DEPDIR)/test-uchar.Po  	-rm -f ./$(DEPDIR)/test-unistd.Po  	-rm -f ./$(DEPDIR)/test-unsetenv.Po  	-rm -f ./$(DEPDIR)/test-usleep.Po @@ -16880,6 +18260,7 @@ distclean: distclean-recursive  	-rm -f ./$(DEPDIR)/test-wctype-h.Po  	-rm -f ./$(DEPDIR)/test-wcwidth.Po  	-rm -f ./$(DEPDIR)/test-xalloc-die.Po +	-rm -f ./$(DEPDIR)/time.Po  	-rm -f ./$(DEPDIR)/unsetenv.Po  	-rm -f ./$(DEPDIR)/usleep.Po  	-rm -f ./$(DEPDIR)/wcrtomb.Po @@ -17016,6 +18397,9 @@ distclean: distclean-recursive  	-rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po  	-rm -f unictype/$(DEPDIR)/test-decdigit.Po  	-rm -f unictype/$(DEPDIR)/test-digit.Po +	-rm -f unictype/$(DEPDIR)/test-incb_byname.Po +	-rm -f unictype/$(DEPDIR)/test-incb_name.Po +	-rm -f unictype/$(DEPDIR)/test-incb_of.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_byname.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_name.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_of.Po @@ -17073,11 +18457,14 @@ distclean: distclean-recursive  	-rm -f unictype/$(DEPDIR)/test-pr_grapheme_link.Po  	-rm -f unictype/$(DEPDIR)/test-pr_hex_digit.Po  	-rm -f unictype/$(DEPDIR)/test-pr_hyphen.Po +	-rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po +	-rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po  	-rm -f unictype/$(DEPDIR)/test-pr_id_continue.Po  	-rm -f unictype/$(DEPDIR)/test-pr_id_start.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ideographic.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po +	-rm -f unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ignorable_control.Po  	-rm -f unictype/$(DEPDIR)/test-pr_iso_control.Po  	-rm -f unictype/$(DEPDIR)/test-pr_join_control.Po @@ -17101,6 +18488,7 @@ distclean: distclean-recursive  	-rm -f unictype/$(DEPDIR)/test-pr_paragraph_separator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_pattern_syntax.Po  	-rm -f unictype/$(DEPDIR)/test-pr_pattern_white_space.Po +	-rm -f unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po  	-rm -f unictype/$(DEPDIR)/test-pr_private_use.Po  	-rm -f unictype/$(DEPDIR)/test-pr_punctuation.Po  	-rm -f unictype/$(DEPDIR)/test-pr_quotation_mark.Po @@ -17146,6 +18534,7 @@ distclean: distclean-recursive  	-rm -f unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po  	-rm -f unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po  	-rm -f unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po +	-rm -f unimetadata/$(DEPDIR)/test-u-version.Po  	-rm -f uniname/$(DEPDIR)/test-uninames.Po  	-rm -f uninorm/$(DEPDIR)/test-canonical-decomposition.Po  	-rm -f uninorm/$(DEPDIR)/test-compat-decomposition.Po @@ -17221,6 +18610,7 @@ distclean: distclean-recursive  	-rm -f unistr/$(DEPDIR)/test-u16-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u16-move.Po  	-rm -f unistr/$(DEPDIR)/test-u16-next.Po +	-rm -f unistr/$(DEPDIR)/test-u16-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u16-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u16-set.Po  	-rm -f unistr/$(DEPDIR)/test-u16-stpcpy.Po @@ -17256,6 +18646,7 @@ distclean: distclean-recursive  	-rm -f unistr/$(DEPDIR)/test-u32-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u32-move.Po  	-rm -f unistr/$(DEPDIR)/test-u32-next.Po +	-rm -f unistr/$(DEPDIR)/test-u32-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u32-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u32-set.Po  	-rm -f unistr/$(DEPDIR)/test-u32-stpcpy.Po @@ -17291,6 +18682,7 @@ distclean: distclean-recursive  	-rm -f unistr/$(DEPDIR)/test-u8-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u8-move.Po  	-rm -f unistr/$(DEPDIR)/test-u8-next.Po +	-rm -f unistr/$(DEPDIR)/test-u8-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u8-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u8-set.Po  	-rm -f unistr/$(DEPDIR)/test-u8-stpcpy.Po @@ -17376,7 +18768,10 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/basename-lgpl.Po  	-rm -f ./$(DEPDIR)/binary-io.Po  	-rm -f ./$(DEPDIR)/bind.Po +	-rm -f ./$(DEPDIR)/btoc32.Po  	-rm -f ./$(DEPDIR)/btowc.Po +	-rm -f ./$(DEPDIR)/c32rtomb.Po +	-rm -f ./$(DEPDIR)/c32tob.Po  	-rm -f ./$(DEPDIR)/calloc.Po  	-rm -f ./$(DEPDIR)/cloexec.Po  	-rm -f ./$(DEPDIR)/close.Po @@ -17415,10 +18810,13 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/pthread_sigmask.Po  	-rm -f ./$(DEPDIR)/putenv.Po  	-rm -f ./$(DEPDIR)/raise.Po +	-rm -f ./$(DEPDIR)/random.Po +	-rm -f ./$(DEPDIR)/random_r.Po  	-rm -f ./$(DEPDIR)/randomd.Po  	-rm -f ./$(DEPDIR)/randoml.Po  	-rm -f ./$(DEPDIR)/realloc.Po  	-rm -f ./$(DEPDIR)/reallocarray.Po +	-rm -f ./$(DEPDIR)/same-inode.Po  	-rm -f ./$(DEPDIR)/sched_yield.Po  	-rm -f ./$(DEPDIR)/select.Po  	-rm -f ./$(DEPDIR)/setenv.Po @@ -17439,16 +18837,34 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/symlink.Po  	-rm -f ./$(DEPDIR)/sys_socket.Po  	-rm -f ./$(DEPDIR)/test-accept.Po +	-rm -f ./$(DEPDIR)/test-alignasof.Po  	-rm -f ./$(DEPDIR)/test-alloca-opt.Po  	-rm -f ./$(DEPDIR)/test-arpa_inet.Po  	-rm -f ./$(DEPDIR)/test-array-mergesort.Po  	-rm -f ./$(DEPDIR)/test-assert.Po  	-rm -f ./$(DEPDIR)/test-binary-io.Po  	-rm -f ./$(DEPDIR)/test-bind.Po +	-rm -f ./$(DEPDIR)/test-btoc32.Po  	-rm -f ./$(DEPDIR)/test-btowc.Po  	-rm -f ./$(DEPDIR)/test-c-ctype.Po  	-rm -f ./$(DEPDIR)/test-c-strcasecmp.Po  	-rm -f ./$(DEPDIR)/test-c-strncasecmp.Po +	-rm -f ./$(DEPDIR)/test-c32isalnum.Po +	-rm -f ./$(DEPDIR)/test-c32isalpha.Po +	-rm -f ./$(DEPDIR)/test-c32isblank.Po +	-rm -f ./$(DEPDIR)/test-c32iscntrl.Po +	-rm -f ./$(DEPDIR)/test-c32isdigit.Po +	-rm -f ./$(DEPDIR)/test-c32isgraph.Po +	-rm -f ./$(DEPDIR)/test-c32islower.Po +	-rm -f ./$(DEPDIR)/test-c32isprint.Po +	-rm -f ./$(DEPDIR)/test-c32ispunct.Po +	-rm -f ./$(DEPDIR)/test-c32isspace.Po +	-rm -f ./$(DEPDIR)/test-c32isupper.Po +	-rm -f ./$(DEPDIR)/test-c32isxdigit.Po +	-rm -f ./$(DEPDIR)/test-c32rtomb-w32.Po +	-rm -f ./$(DEPDIR)/test-c32rtomb.Po +	-rm -f ./$(DEPDIR)/test-c32tolower.Po +	-rm -f ./$(DEPDIR)/test-c32width.Po  	-rm -f ./$(DEPDIR)/test-calloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-cloexec.Po  	-rm -f ./$(DEPDIR)/test-close.Po @@ -17457,6 +18873,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-dup2.Po  	-rm -f ./$(DEPDIR)/test-environ.Po  	-rm -f ./$(DEPDIR)/test-errno.Po +	-rm -f ./$(DEPDIR)/test-error.Po  	-rm -f ./$(DEPDIR)/test-fcntl-h.Po  	-rm -f ./$(DEPDIR)/test-fcntl.Po  	-rm -f ./$(DEPDIR)/test-fdopen.Po @@ -17489,8 +18906,10 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-isnanl-nolibm.Po  	-rm -f ./$(DEPDIR)/test-iswblank.Po  	-rm -f ./$(DEPDIR)/test-iswdigit.Po +	-rm -f ./$(DEPDIR)/test-iswpunct.Po  	-rm -f ./$(DEPDIR)/test-iswxdigit.Po  	-rm -f ./$(DEPDIR)/test-langinfo.Po +	-rm -f ./$(DEPDIR)/test-largefile.Po  	-rm -f ./$(DEPDIR)/test-limits-h.Po  	-rm -f ./$(DEPDIR)/test-listen.Po  	-rm -f ./$(DEPDIR)/test-localcharset.Po @@ -17501,6 +18920,8 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-malloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-malloca.Po  	-rm -f ./$(DEPDIR)/test-math.Po +	-rm -f ./$(DEPDIR)/test-mbrtoc32-w32.Po +	-rm -f ./$(DEPDIR)/test-mbrtoc32.Po  	-rm -f ./$(DEPDIR)/test-mbrtowc-w32.Po  	-rm -f ./$(DEPDIR)/test-mbrtowc.Po  	-rm -f ./$(DEPDIR)/test-mbsinit.Po @@ -17521,6 +18942,9 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-pthread_sigmask1.Po  	-rm -f ./$(DEPDIR)/test-pthread_sigmask2.Po  	-rm -f ./$(DEPDIR)/test-raise.Po +	-rm -f ./$(DEPDIR)/test-random-mt.Po +	-rm -f ./$(DEPDIR)/test-random.Po +	-rm -f ./$(DEPDIR)/test-random_r.Po  	-rm -f ./$(DEPDIR)/test-realloc-gnu.Po  	-rm -f ./$(DEPDIR)/test-reallocarray.Po  	-rm -f ./$(DEPDIR)/test-rwlock1.Po @@ -17533,6 +18957,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-setlocale2.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null-mt-all.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null-mt-one.Po +	-rm -f ./$(DEPDIR)/test-setlocale_null-unlocked.Po  	-rm -f ./$(DEPDIR)/test-setlocale_null.Po  	-rm -f ./$(DEPDIR)/test-setsockopt.Po  	-rm -f ./$(DEPDIR)/test-signal-h.Po @@ -17542,7 +18967,6 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-sockets.Po  	-rm -f ./$(DEPDIR)/test-stat-time.Po  	-rm -f ./$(DEPDIR)/test-stat.Po -	-rm -f ./$(DEPDIR)/test-stdalign.Po  	-rm -f ./$(DEPDIR)/test-stdbool.Po  	-rm -f ./$(DEPDIR)/test-stdckdint.Po  	-rm -f ./$(DEPDIR)/test-stddef.Po @@ -17566,7 +18990,9 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-sys_uio.Po  	-rm -f ./$(DEPDIR)/test-thread_create.Po  	-rm -f ./$(DEPDIR)/test-thread_self.Po +	-rm -f ./$(DEPDIR)/test-time-h.Po  	-rm -f ./$(DEPDIR)/test-time.Po +	-rm -f ./$(DEPDIR)/test-uchar.Po  	-rm -f ./$(DEPDIR)/test-unistd.Po  	-rm -f ./$(DEPDIR)/test-unsetenv.Po  	-rm -f ./$(DEPDIR)/test-usleep.Po @@ -17578,6 +19004,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f ./$(DEPDIR)/test-wctype-h.Po  	-rm -f ./$(DEPDIR)/test-wcwidth.Po  	-rm -f ./$(DEPDIR)/test-xalloc-die.Po +	-rm -f ./$(DEPDIR)/time.Po  	-rm -f ./$(DEPDIR)/unsetenv.Po  	-rm -f ./$(DEPDIR)/usleep.Po  	-rm -f ./$(DEPDIR)/wcrtomb.Po @@ -17714,6 +19141,9 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unictype/$(DEPDIR)/test-ctype_xdigit.Po  	-rm -f unictype/$(DEPDIR)/test-decdigit.Po  	-rm -f unictype/$(DEPDIR)/test-digit.Po +	-rm -f unictype/$(DEPDIR)/test-incb_byname.Po +	-rm -f unictype/$(DEPDIR)/test-incb_name.Po +	-rm -f unictype/$(DEPDIR)/test-incb_of.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_byname.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_name.Po  	-rm -f unictype/$(DEPDIR)/test-joininggroup_of.Po @@ -17771,11 +19201,14 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unictype/$(DEPDIR)/test-pr_grapheme_link.Po  	-rm -f unictype/$(DEPDIR)/test-pr_hex_digit.Po  	-rm -f unictype/$(DEPDIR)/test-pr_hyphen.Po +	-rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_continue.Po +	-rm -f unictype/$(DEPDIR)/test-pr_id_compat_math_start.Po  	-rm -f unictype/$(DEPDIR)/test-pr_id_continue.Po  	-rm -f unictype/$(DEPDIR)/test-pr_id_start.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ideographic.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po +	-rm -f unictype/$(DEPDIR)/test-pr_ids_unary_operator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_ignorable_control.Po  	-rm -f unictype/$(DEPDIR)/test-pr_iso_control.Po  	-rm -f unictype/$(DEPDIR)/test-pr_join_control.Po @@ -17799,6 +19232,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unictype/$(DEPDIR)/test-pr_paragraph_separator.Po  	-rm -f unictype/$(DEPDIR)/test-pr_pattern_syntax.Po  	-rm -f unictype/$(DEPDIR)/test-pr_pattern_white_space.Po +	-rm -f unictype/$(DEPDIR)/test-pr_prepended_concatenation_mark.Po  	-rm -f unictype/$(DEPDIR)/test-pr_private_use.Po  	-rm -f unictype/$(DEPDIR)/test-pr_punctuation.Po  	-rm -f unictype/$(DEPDIR)/test-pr_quotation_mark.Po @@ -17844,6 +19278,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po  	-rm -f unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po  	-rm -f unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po +	-rm -f unimetadata/$(DEPDIR)/test-u-version.Po  	-rm -f uniname/$(DEPDIR)/test-uninames.Po  	-rm -f uninorm/$(DEPDIR)/test-canonical-decomposition.Po  	-rm -f uninorm/$(DEPDIR)/test-compat-decomposition.Po @@ -17919,6 +19354,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unistr/$(DEPDIR)/test-u16-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u16-move.Po  	-rm -f unistr/$(DEPDIR)/test-u16-next.Po +	-rm -f unistr/$(DEPDIR)/test-u16-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u16-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u16-set.Po  	-rm -f unistr/$(DEPDIR)/test-u16-stpcpy.Po @@ -17954,6 +19390,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unistr/$(DEPDIR)/test-u32-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u32-move.Po  	-rm -f unistr/$(DEPDIR)/test-u32-next.Po +	-rm -f unistr/$(DEPDIR)/test-u32-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u32-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u32-set.Po  	-rm -f unistr/$(DEPDIR)/test-u32-stpcpy.Po @@ -17989,6 +19426,7 @@ maintainer-clean: maintainer-clean-recursive  	-rm -f unistr/$(DEPDIR)/test-u8-mbtoucr.Po  	-rm -f unistr/$(DEPDIR)/test-u8-move.Po  	-rm -f unistr/$(DEPDIR)/test-u8-next.Po +	-rm -f unistr/$(DEPDIR)/test-u8-pcpy.Po  	-rm -f unistr/$(DEPDIR)/test-u8-prev.Po  	-rm -f unistr/$(DEPDIR)/test-u8-set.Po  	-rm -f unistr/$(DEPDIR)/test-u8-stpcpy.Po @@ -18106,6 +19544,21 @@ ctype.h: ctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)  	      $(srcdir)/ctype.in.h > $@-t  	$(AM_V_at)mv $@-t $@ +# We need the following in order to override <error.h>. +error.h: error.in.h $(top_builddir)/config.status $(CXXDEFS_H) +	$(gl_V_at)$(SED_HEADER_STDOUT) \ +	      -e 's|@''GUARD_PREFIX''@|GL|g' \ +	      -e 's|@''HAVE_ERROR_H''@|$(HAVE_ERROR_H)|g' \ +	      -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ +	      -e 's|@''NEXT_ERROR_H''@|$(NEXT_ERROR_H)|g' \ +	      -e 's|@''HAVE_ERROR''@|$(HAVE_ERROR)|g' \ +	      -e 's|@''HAVE_ERROR_AT_LINE''@|$(HAVE_ERROR_AT_LINE)|g' \ +	      -e 's|@''REPLACE_ERROR''@|$(REPLACE_ERROR)|g' \ +	      -e 's|@''REPLACE_ERROR_AT_LINE''@|$(REPLACE_ERROR_AT_LINE)|g' \ +	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ +	      $(srcdir)/error.in.h > $@-t +	$(AM_V_at)mv $@-t $@ +  # We need the following in order to create <fcntl.h> when the system  # doesn't have one that works with the given compiler.  fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @@ -18184,6 +19637,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''HAVE_PTHREAD_DETACH''@|$(HAVE_PTHREAD_DETACH)|g' \  	      -e 's|@''HAVE_PTHREAD_JOIN''@|$(HAVE_PTHREAD_JOIN)|g' \  	      -e 's|@''HAVE_PTHREAD_EXIT''@|$(HAVE_PTHREAD_EXIT)|g' \ +	      < $(srcdir)/pthread.in.h > $@-t1 +	$(AM_V_at)sed \  	      -e 's|@''HAVE_PTHREAD_ONCE''@|$(HAVE_PTHREAD_ONCE)|g' \  	      -e 's|@''HAVE_PTHREAD_MUTEX_INIT''@|$(HAVE_PTHREAD_MUTEX_INIT)|g' \  	      -e 's|@''HAVE_PTHREAD_MUTEXATTR_INIT''@|$(HAVE_PTHREAD_MUTEXATTR_INIT)|g' \ @@ -18225,8 +19680,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''HAVE_PTHREAD_SPIN_TRYLOCK''@|$(HAVE_PTHREAD_SPIN_TRYLOCK)|g' \  	      -e 's|@''HAVE_PTHREAD_SPIN_UNLOCK''@|$(HAVE_PTHREAD_SPIN_UNLOCK)|g' \  	      -e 's|@''HAVE_PTHREAD_SPIN_DESTROY''@|$(HAVE_PTHREAD_SPIN_DESTROY)|g' \ -	      < $(srcdir)/pthread.in.h | \ -	  sed -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \ +	      < $@-t1 > $@-t2 +	$(AM_V_at)sed \ +	      -e 's|@''REPLACE_PTHREAD_CREATE''@|$(REPLACE_PTHREAD_CREATE)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_INIT''@|$(REPLACE_PTHREAD_ATTR_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_GETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_GETDETACHSTATE)|g' \  	      -e 's|@''REPLACE_PTHREAD_ATTR_SETDETACHSTATE''@|$(REPLACE_PTHREAD_ATTR_SETDETACHSTATE)|g' \ @@ -18260,6 +19716,8 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK''@|$(REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK)|g' \  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_UNLOCK''@|$(REPLACE_PTHREAD_RWLOCK_UNLOCK)|g' \  	      -e 's|@''REPLACE_PTHREAD_RWLOCK_DESTROY''@|$(REPLACE_PTHREAD_RWLOCK_DESTROY)|g' \ +	      < $@-t2 > $@-t3 +	$(AM_V_at)sed \  	      -e 's|@''REPLACE_PTHREAD_COND_INIT''@|$(REPLACE_PTHREAD_COND_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_CONDATTR_INIT''@|$(REPLACE_PTHREAD_CONDATTR_INIT)|g' \  	      -e 's|@''REPLACE_PTHREAD_CONDATTR_DESTROY''@|$(REPLACE_PTHREAD_CONDATTR_DESTROY)|g' \ @@ -18281,8 +19739,9 @@ pthread.h: pthread.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(_NORETURN_H  	      -e '/definition of _Noreturn/r $(_NORETURN_H)' \  	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \  	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ -	      > $@-t -	$(AM_V_at)mv $@-t $@ +	      < $@-t3 > $@-t4 +	$(AM_V_at)rm -f $@-t1 $@-t2 $@-t3 +	$(AM_V_at)mv $@-t4 $@  # We need the following in order to create a replacement for <sched.h> when  # the system doesn't have one. @@ -18335,14 +19794,6 @@ signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H  	      $(srcdir)/signal.in.h > $@-t  	$(AM_V_at)mv $@-t $@ -# We need the following in order to create <stdalign.h> when the system -# doesn't have one that works. -@GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status -@GL_GENERATE_STDALIGN_H_TRUE@	$(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h -@GL_GENERATE_STDALIGN_H_TRUE@	$(AM_V_at)mv $@-t $@ -@GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status -@GL_GENERATE_STDALIGN_H_FALSE@	rm -f $@ -  # We need the following in order to create <stdio.h> when the system  # doesn't have one that works with the given compiler.  stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) @@ -18412,14 +19863,17 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \  	      -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \  	      -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ -	      < $(srcdir)/stdio.in.h | \ -	  sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ +	      < $(srcdir)/stdio.in.h > $@-t1 +	$(AM_V_at)sed \ +	      -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \  	      -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \  	      -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \  	      -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \  	      -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \  	      -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ +	      -e 's|@''HAVE_DECL_GETW''@|$(HAVE_DECL_GETW)|g' \  	      -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ +	      -e 's|@''HAVE_DECL_PUTW''@|$(HAVE_DECL_PUTW)|g' \  	      -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \  	      -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \  	      -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ @@ -18430,6 +19884,8 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \  	      -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \  	      -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ +	      < $@-t1 > $@-t2 +	$(AM_V_at)sed \  	      -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \  	      -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \  	      -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ @@ -18467,8 +19923,9 @@ stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H)  	      -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \  	      -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \  	      -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ -	      > $@-t -	$(AM_V_at)mv $@-t $@ +	      < $@-t2 > $@-t3 +	$(AM_V_at)rm -f $@-t1 $@-t2 +	$(AM_V_at)mv $@-t3 $@  # We need the following in order to create <sys/ioctl.h> when the system  # does not have a complete one. @@ -18666,6 +20123,7 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(  	      -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \  	      -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \  	      -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ +	      -e 's/@''GNULIB_TIME''@/$(GL_GNULIB_TIME)/g' \  	      -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \  	      -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \  	      -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ @@ -18687,7 +20145,10 @@ time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(  	      -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \  	      -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \  	      -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ +	      -e 's|@''REPLACE_TIME''@|$(REPLACE_TIME)|g' \  	      -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ +	      -e 's|@''REPLACE_TIMESPEC_GET''@|$(REPLACE_TIMESPEC_GET)|g' \ +	      -e 's|@''REPLACE_TIMESPEC_GETRES''@|$(REPLACE_TIMESPEC_GETRES)|g' \  	      -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \  	      -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \  	      -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ diff --git a/tests/_Noreturn.h b/tests/_Noreturn.h index e914627a..7326bd47 100644 --- a/tests/_Noreturn.h +++ b/tests/_Noreturn.h @@ -1,5 +1,5 @@  /* A C macro for declaring that a function does not return. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -26,6 +26,11 @@         AIX system header files and several gnulib header files use precisely         this syntax with 'extern'.  */  #  define _Noreturn [[noreturn]] +# elif (defined __clang__ && __clang_major__ < 16 \ +        && defined _GL_WORK_AROUND_LLVM_BUG_59792) +   /* Compile with -D_GL_WORK_AROUND_LLVM_BUG_59792 to work around +      that rare LLVM bug, though you may get many false-alarm warnings.  */ +#  define _Noreturn  # elif ((!defined __cplusplus || defined __clang__) \          && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \              || (!defined __STRICT_ANSI__ \ diff --git a/tests/accept.c b/tests/accept.c index 5c4d1f35..18ce80c6 100644 --- a/tests/accept.c +++ b/tests/accept.c @@ -1,6 +1,6 @@  /* accept.c --- wrappers for Windows accept function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/arg-nonnull.h b/tests/arg-nonnull.h index e4513efe..46c711ca 100644 --- a/tests/arg-nonnull.h +++ b/tests/arg-nonnull.h @@ -1,5 +1,5 @@  /* A C macro for declaring that specific arguments must not be NULL. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published diff --git a/tests/arpa_inet.in.h b/tests/arpa_inet.in.h index f5d7db2d..523a448c 100644 --- a/tests/arpa_inet.in.h +++ b/tests/arpa_inet.in.h @@ -1,6 +1,6 @@  /* A GNU-like <arpa/inet.h>. -   Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2006, 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -49,6 +49,11 @@  #ifndef _@GUARD_PREFIX@_ARPA_INET_H  #define _@GUARD_PREFIX@_ARPA_INET_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* Get all possible declarations of inet_ntop() and inet_pton().  */  #if (@GNULIB_INET_NTOP@ || @GNULIB_INET_PTON@ || defined GNULIB_POSIXCHECK) \      && @HAVE_WS2TCPIP_H@ diff --git a/tests/atomic-int-gnulib.h b/tests/atomic-int-gnulib.h index d1c68a2b..b459f344 100644 --- a/tests/atomic-int-gnulib.h +++ b/tests/atomic-int-gnulib.h @@ -1,5 +1,5 @@  /* Atomic integers.  Useful for testing multithreaded locking primitives. -   Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -107,6 +107,7 @@ init_atomic_int (struct atomic_int *ai)            else              {                perror ("sem_open failed"); +              fflush (stderr);                abort ();              }          } diff --git a/tests/basename-lgpl.c b/tests/basename-lgpl.c index f8da1484..256f8460 100644 --- a/tests/basename-lgpl.c +++ b/tests/basename-lgpl.c @@ -1,6 +1,6 @@  /* basename.c -- return the last element in a file name -   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2022 Free Software +   Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2024 Free Software     Foundation, Inc.     This file is free software: you can redistribute it and/or modify diff --git a/tests/basename-lgpl.h b/tests/basename-lgpl.h index 5569f219..2a56be98 100644 --- a/tests/basename-lgpl.h +++ b/tests/basename-lgpl.h @@ -1,6 +1,6 @@  /* Extract the last component (base name) of a file name. -   Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation, +   Copyright (C) 1998, 2001, 2003-2006, 2009-2024 Free Software Foundation,     Inc.     This file is free software: you can redistribute it and/or modify @@ -19,6 +19,11 @@  #ifndef _BASENAME_LGPL_H  #define _BASENAME_LGPL_H +/* This file uses _GL_ATTRIBUTE_PURE.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #include <stddef.h>  #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT diff --git a/tests/binary-io.c b/tests/binary-io.c index ea407fd7..40f01d67 100644 --- a/tests/binary-io.c +++ b/tests/binary-io.c @@ -1,5 +1,5 @@  /* Binary mode I/O. -   Copyright 2017-2022 Free Software Foundation, Inc. +   Copyright 2017-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/binary-io.h b/tests/binary-io.h index 5b7661e2..0cc5c117 100644 --- a/tests/binary-io.h +++ b/tests/binary-io.h @@ -1,5 +1,5 @@  /* Binary mode I/O. -   Copyright (C) 2001, 2003, 2005, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2001, 2003, 2005, 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -17,6 +17,11 @@  #ifndef _BINARY_H  #define _BINARY_H +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* For systems that distinguish between text and binary I/O.     O_BINARY is guaranteed by the gnulib <fcntl.h>. */  #include <fcntl.h> @@ -25,9 +30,6 @@     so we include it here first.  */  #include <stdio.h> -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif  _GL_INLINE_HEADER_BEGIN  #ifndef BINARY_IO_INLINE  # define BINARY_IO_INLINE _GL_INLINE diff --git a/tests/bind.c b/tests/bind.c index 199e0ba9..7c557448 100644 --- a/tests/bind.c +++ b/tests/bind.c @@ -1,6 +1,6 @@  /* bind.c --- wrappers for Windows bind function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/btoc32.c b/tests/btoc32.c new file mode 100644 index 00000000..4f223059 --- /dev/null +++ b/tests/btoc32.c @@ -0,0 +1,68 @@ +/* Convert unibyte character to 32-bit wide character. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020.  */ + +#include <config.h> + +#define IN_BTOC32 +/* Specification.  */ +#include <uchar.h> + +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +wint_t +btoc32 (int c) +{ +#if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 +  /* The char32_t encoding of a multibyte character may be different than its +     wchar_t encoding.  */ +  if (c != EOF) +    { +      mbstate_t state; +      char s[1]; +      char32_t wc; + +      mbszero (&state); +      s[0] = (unsigned char) c; +      if (mbrtoc32 (&wc, s, 1, &state) <= 1) +        return wc; +    } +  return WEOF; +#else +  /* In all known locale encodings, unibyte characters correspond only to +     characters in the BMP.  */ +  wint_t wc = btowc (c); +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION +  if (wc != WEOF && wc != 0) +    { +      wc = locale_encoding_to_unicode (wc); +      if (wc == 0) +        return WEOF; +    } +# endif +  return wc; +#endif +} diff --git a/tests/btowc.c b/tests/btowc.c index 4af58bb0..8bf21aa6 100644 --- a/tests/btowc.c +++ b/tests/btowc.c @@ -1,5 +1,5 @@  /* Convert unibyte character to wide character. -   Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2008.     This file is free software: you can redistribute it and/or modify @@ -22,6 +22,7 @@  #include <stdio.h>  #include <stdlib.h> +#include <string.h>  wint_t  btowc (int c) @@ -32,7 +33,14 @@ btowc (int c)        wchar_t wc;        buf[0] = c; +#if HAVE_MBRTOWC +      mbstate_t state; +      mbszero (&state); +      size_t ret = mbrtowc (&wc, buf, 1, &state); +      if (!(ret == (size_t)(-1) || ret == (size_t)(-2))) +#else        if (mbtowc (&wc, buf, 1) >= 0) +#endif          return wc;      }    return WEOF; diff --git a/tests/c++defs.h b/tests/c++defs.h index ad181558..eb66967b 100644 --- a/tests/c++defs.h +++ b/tests/c++defs.h @@ -1,5 +1,5 @@  /* C++ compatible function declaration macros. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -99,6 +99,12 @@     Example:       _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)                                    _GL_ARG_NONNULL ((1))); + +   Note: Attributes, such as _GL_ATTRIBUTE_DEPRECATED, are supported in front +   of a _GL_FUNCDECL_RPL invocation only in C mode, not in C++ mode.  (That's +   because +     [[...]] extern "C" <declaration>; +   is invalid syntax in C++.)   */  #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \    _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) diff --git a/tests/c32rtomb.c b/tests/c32rtomb.c new file mode 100644 index 00000000..260bf097 --- /dev/null +++ b/tests/c32rtomb.c @@ -0,0 +1,132 @@ +/* Convert 32-bit wide character to multibyte character. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020.  */ + +#include <config.h> + +/* Specification.  */ +#include <uchar.h> + +#include <errno.h> +#include <wchar.h> + +#include "attribute.h" /* FALLTHROUGH */ +#include "localcharset.h" +#include "streq.h" + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +size_t +c32rtomb (char *s, char32_t wc, mbstate_t *ps) +#undef c32rtomb +{ +#if HAVE_WORKING_MBRTOC32 + +# if C32RTOMB_RETVAL_BUG +  if (s == NULL) +    /* We know the NUL wide character corresponds to the NUL character.  */ +    return 1; +# endif + +  return c32rtomb (s, wc, ps); + +#elif _GL_SMALL_WCHAR_T + +  if (s == NULL) +    return wcrtomb (NULL, 0, ps); +  else +    { +      /* Special-case all encodings that may produce wide character values +         > WCHAR_MAX.  */ +      const char *encoding = locale_charset (); +      if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) +        { +          /* Special-case the UTF-8 encoding.  Assume that the wide-character +             encoding in a UTF-8 locale is UCS-2 or, equivalently, UTF-16.  */ +          if (wc < 0x80) +            { +              s[0] = (unsigned char) wc; +              return 1; +            } +          else +            { +              int count; + +              if (wc < 0x800) +                count = 2; +              else if (wc < 0x10000) +                { +                  if (wc < 0xd800 || wc >= 0xe000) +                    count = 3; +                  else +                    { +                      errno = EILSEQ; +                      return (size_t)(-1); +                    } +                } +              else if (wc < 0x110000) +                count = 4; +              else +                { +                  errno = EILSEQ; +                  return (size_t)(-1); +                } + +              switch (count) /* note: code falls through cases! */ +                { +                case 4: s[3] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x10000; +                  FALLTHROUGH; +                case 3: s[2] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0x800; +                  FALLTHROUGH; +                case 2: s[1] = 0x80 | (wc & 0x3f); wc = wc >> 6; wc |= 0xc0; +              /*case 1:*/ s[0] = wc; +                } +              return count; +            } +        } +      else +        { +          if ((wchar_t) wc == wc) +            return wcrtomb (s, (wchar_t) wc, ps); +          else +            { +              errno = EILSEQ; +              return (size_t)(-1); +            } +        } +    } + +#else + +  /* char32_t and wchar_t are equivalent.  */ +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION +  if (wc != 0) +    { +      wc = unicode_to_locale_encoding (wc); +      if (wc == 0) +        { +          errno = EILSEQ; +          return (size_t)(-1); +        } +    } +# endif +  return wcrtomb (s, (wchar_t) wc, ps); + +#endif +} diff --git a/tests/c32tob.c b/tests/c32tob.c new file mode 100644 index 00000000..901c9249 --- /dev/null +++ b/tests/c32tob.c @@ -0,0 +1,70 @@ +/* Convert 32-bit wide character to unibyte character. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation, either version 3 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2020.  */ + +#include <config.h> + +#define IN_C32TOB +/* Specification.  */ +#include <uchar.h> + +#include <stdio.h> +#include <string.h> +#include <wchar.h> + +#if GL_CHAR32_T_IS_UNICODE +# include "lc-charset-unicode.h" +#endif + +#if _GL_WCHAR_T_IS_UCS4 +_GL_EXTERN_INLINE +#endif +int +c32tob (wint_t wc) +{ +#if HAVE_WORKING_MBRTOC32 && !_GL_WCHAR_T_IS_UCS4 +  /* The char32_t encoding of a multibyte character may be different than its +     wchar_t encoding.  */ +  if (wc != WEOF) +    { +      mbstate_t state; +      char buf[8]; + +      mbszero (&state); +      if (c32rtomb (buf, wc, &state) == 1) +        return (unsigned char) buf[0]; +    } +  return EOF; +#elif _GL_SMALL_WCHAR_T +  /* In all known encodings, unibyte characters correspond only to +     characters in the BMP.  */ +  if (wc != WEOF && (wchar_t) wc == wc) +    return wctob ((wchar_t) wc); +  else +    return EOF; +#else +# if GL_CHAR32_T_IS_UNICODE && GL_CHAR32_T_VS_WCHAR_T_NEEDS_CONVERSION +  if (wc != 0) +    { +      wc = unicode_to_locale_encoding (wc); +      if (wc == 0) +        return EOF; +    } +# endif +  return wctob (wc); +#endif +} diff --git a/tests/calloc.c b/tests/calloc.c index 0a934b30..81dfd3ef 100644 --- a/tests/calloc.c +++ b/tests/calloc.c @@ -1,6 +1,6 @@  /* calloc() function that is glibc compatible.     This wrapper function is required at least on Tru64 UNIX 5.1 and mingw. -   Copyright (C) 2004-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2004-2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/cdefs.h b/tests/cdefs.h new file mode 100644 index 00000000..d38382ad --- /dev/null +++ b/tests/cdefs.h @@ -0,0 +1,715 @@ +/* Copyright (C) 1992-2024 Free Software Foundation, Inc. +   Copyright The GNU Toolchain Authors. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, see +   <https://www.gnu.org/licenses/>.  */ + +#ifndef	_SYS_CDEFS_H +#define	_SYS_CDEFS_H	1 + +/* We are almost always included from features.h. */ +#ifndef _FEATURES_H +# include <features.h> +#endif + +/* The GNU libc does not support any K&R compilers or the traditional mode +   of ISO C compilers anymore.  Check for some of the combinations not +   supported anymore.  */ +#if defined __GNUC__ && !defined __STDC__ +# error "You need a ISO C conforming compiler to use the glibc headers" +#endif + +/* Some user header file might have defined this before.  */ +#undef	__P +#undef	__PMT + +/* Compilers that lack __has_attribute may object to +       #if defined __has_attribute && __has_attribute (...) +   even though they do not need to evaluate the right-hand side of the &&. +   Similarly for __has_builtin, etc.  */ +#if (defined __has_attribute \ +     && (!defined __clang_minor__ \ +         || (defined __apple_build_version__ \ +             ? 7000000 <= __apple_build_version__ \ +             : 5 <= __clang_major__))) +# define __glibc_has_attribute(attr) __has_attribute (attr) +#else +# define __glibc_has_attribute(attr) 0 +#endif +#ifdef __has_builtin +# define __glibc_has_builtin(name) __has_builtin (name) +#else +# define __glibc_has_builtin(name) 0 +#endif +#ifdef __has_extension +# define __glibc_has_extension(ext) __has_extension (ext) +#else +# define __glibc_has_extension(ext) 0 +#endif + +#if defined __GNUC__ || defined __clang__ + +/* All functions, except those with callbacks or those that +   synchronize memory, are leaf functions.  */ +# if __GNUC_PREREQ (4, 6) && !defined _LIBC +#  define __LEAF , __leaf__ +#  define __LEAF_ATTR __attribute__ ((__leaf__)) +# else +#  define __LEAF +#  define __LEAF_ATTR +# endif + +/* GCC can always grok prototypes.  For C++ programs we add throw() +   to help it optimize the function calls.  But this only works with +   gcc 2.8.x and egcs.  For gcc 3.4 and up we even mark C functions +   as non-throwing using a function attribute since programs can use +   the -fexceptions options for C code as well.  */ +# if !defined __cplusplus \ +     && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) +#  define __THROW	__attribute__ ((__nothrow__ __LEAF)) +#  define __THROWNL	__attribute__ ((__nothrow__)) +#  define __NTH(fct)	__attribute__ ((__nothrow__ __LEAF)) fct +#  define __NTHNL(fct)  __attribute__ ((__nothrow__)) fct +# else +#  if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) +#   if __cplusplus >= 201103L +#    define __THROW	noexcept (true) +#   else +#    define __THROW	throw () +#   endif +#   define __THROWNL	__THROW +#   define __NTH(fct)	__LEAF_ATTR fct __THROW +#   define __NTHNL(fct) fct __THROW +#  else +#   define __THROW +#   define __THROWNL +#   define __NTH(fct)	fct +#   define __NTHNL(fct) fct +#  endif +# endif + +#else	/* Not GCC or clang.  */ + +# if (defined __cplusplus						\ +      || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) +#  define __inline	inline +# else +#  define __inline		/* No inline functions.  */ +# endif + +# define __THROW +# define __THROWNL +# define __NTH(fct)	fct + +#endif	/* GCC || clang.  */ + +/* These two macros are not used in glibc anymore.  They are kept here +   only because some other projects expect the macros to be defined.  */ +#define __P(args)	args +#define __PMT(args)	args + +/* For these things, GCC behaves the ANSI way normally, +   and the non-ANSI way under -traditional.  */ + +#define __CONCAT(x,y)	x ## y +#define __STRING(x)	#x + +/* This is not a typedef so `const __ptr_t' does the right thing.  */ +#define __ptr_t void * + + +/* C++ needs to know that types and declarations are C, not C++.  */ +#ifdef	__cplusplus +# define __BEGIN_DECLS	extern "C" { +# define __END_DECLS	} +#else +# define __BEGIN_DECLS +# define __END_DECLS +#endif + + +/* Gnulib avoids these definitions, as they don't work on non-glibc platforms. +   In particular, __bos and __bos0 are defined differently in the Android libc. + */ +#ifndef __GNULIB_CDEFS + +/* Fortify support.  */ +# define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) +# define __bos0(ptr) __builtin_object_size (ptr, 0) + +/* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available.  */ +# if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0)		      \ +				  || __GNUC_PREREQ (12, 0)) +#  define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) +#  define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) +# else +#  define __glibc_objsize0(__o) __bos0 (__o) +#  define __glibc_objsize(__o) __bos (__o) +# endif + +/* Compile time conditions to choose between the regular, _chk and _chk_warn +   variants.  These conditions should get evaluated to constant and optimized +   away.  */ + +# define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) +# define __glibc_unsigned_or_positive(__l) \ +  ((__typeof (__l)) 0 < (__typeof (__l)) -1				      \ +   || (__builtin_constant_p (__l) && (__l) > 0)) + +/* Length is known to be safe at compile time if the __L * __S <= __OBJSZ +   condition can be folded to a constant and if it is true, or unknown (-1) */ +# define __glibc_safe_or_unknown_len(__l, __s, __osz) \ +  ((__osz) == (__SIZE_TYPE__) -1					      \ +   || (__glibc_unsigned_or_positive (__l)				      \ +       && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ +						       (__s), (__osz)))	      \ +       && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), (__s), (__osz)))) + +/* Conversely, we know at compile time that the length is unsafe if the +   __L * __S <= __OBJSZ condition can be folded to a constant and if it is +   false.  */ +# define __glibc_unsafe_len(__l, __s, __osz) \ +  (__glibc_unsigned_or_positive (__l)					      \ +   && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l),     \ +						   __s, __osz))		      \ +   && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) + +/* Fortify function f.  __f_alias, __f_chk and __f_chk_warn must be +   declared.  */ + +# define __glibc_fortify(f, __l, __s, __osz, ...) \ +  (__glibc_safe_or_unknown_len (__l, __s, __osz)			      \ +   ? __ ## f ## _alias (__VA_ARGS__)					      \ +   : (__glibc_unsafe_len (__l, __s, __osz)				      \ +      ? __ ## f ## _chk_warn (__VA_ARGS__, __osz)			      \ +      : __ ## f ## _chk (__VA_ARGS__, __osz)))			      \ + +/* Fortify function f, where object size argument passed to f is the number of +   elements and not total size.  */ + +# define __glibc_fortify_n(f, __l, __s, __osz, ...) \ +  (__glibc_safe_or_unknown_len (__l, __s, __osz)			      \ +   ? __ ## f ## _alias (__VA_ARGS__)					      \ +   : (__glibc_unsafe_len (__l, __s, __osz)				      \ +      ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s))		      \ +      : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s))))		      \ + +#endif + + +#if __GNUC_PREREQ (4,3) +# define __warnattr(msg) __attribute__((__warning__ (msg))) +# define __errordecl(name, msg) \ +  extern void name (void) __attribute__((__error__ (msg))) +#else +# define __warnattr(msg) +# define __errordecl(name, msg) extern void name (void) +#endif + +/* Support for flexible arrays. +   Headers that should use flexible arrays only if they're "real" +   (e.g. only if they won't affect sizeof()) should test +   #if __glibc_c99_flexarr_available.  */ +#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc +# define __flexarr	[] +# define __glibc_c99_flexarr_available 1 +#elif __GNUC_PREREQ (2,97) || defined __clang__ +/* GCC 2.97 and clang support C99 flexible array members as an extension, +   even when in C89 mode or compiling C++ (any version).  */ +# define __flexarr	[] +# define __glibc_c99_flexarr_available 1 +#elif defined __GNUC__ +/* Pre-2.97 GCC did not support C99 flexible arrays but did have +   an equivalent extension with slightly different notation.  */ +# define __flexarr	[0] +# define __glibc_c99_flexarr_available 1 +#else +/* Some other non-C99 compiler.  Approximate with [1].  */ +# define __flexarr	[1] +# define __glibc_c99_flexarr_available 0 +#endif + + +/* __asm__ ("xyz") is used throughout the headers to rename functions +   at the assembly language level.  This is wrapped by the __REDIRECT +   macro, in order to support compilers that can do this some other +   way.  When compilers don't support asm-names at all, we have to do +   preprocessor tricks instead (which don't have exactly the right +   semantics, but it's the best we can do). + +   Example: +   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ + +#if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) + +# define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) +# ifdef __cplusplus +#  define __REDIRECT_NTH(name, proto, alias) \ +     name proto __THROW __asm__ (__ASMNAME (#alias)) +#  define __REDIRECT_NTHNL(name, proto, alias) \ +     name proto __THROWNL __asm__ (__ASMNAME (#alias)) +# else +#  define __REDIRECT_NTH(name, proto, alias) \ +     name proto __asm__ (__ASMNAME (#alias)) __THROW +#  define __REDIRECT_NTHNL(name, proto, alias) \ +     name proto __asm__ (__ASMNAME (#alias)) __THROWNL +# endif +# define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname) +# define __ASMNAME2(prefix, cname) __STRING (prefix) cname + +/* +#elif __SOME_OTHER_COMPILER__ + +# define __REDIRECT(name, proto, alias) name proto; \ +	_Pragma("let " #name " = " #alias) +*/ +#endif + +/* GCC and clang have various useful declarations that can be made with +   the '__attribute__' syntax.  All of the ways we use this do fine if +   they are omitted for compilers that don't understand it.  */ +#if !(defined __GNUC__ || defined __clang__) +# define __attribute__(xyz)	/* Ignore */ +#endif + +/* At some point during the gcc 2.96 development the `malloc' attribute +   for functions was introduced.  We don't want to use it unconditionally +   (although this would be possible) since it generates warnings.  */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) +# define __attribute_malloc__ __attribute__ ((__malloc__)) +#else +# define __attribute_malloc__ /* Ignore */ +#endif + +/* Tell the compiler which arguments to an allocation function +   indicate the size of the allocation.  */ +#if __GNUC_PREREQ (4, 3) +# define __attribute_alloc_size__(params) \ +  __attribute__ ((__alloc_size__ params)) +#else +# define __attribute_alloc_size__(params) /* Ignore.  */ +#endif + +/* Tell the compiler which argument to an allocation function +   indicates the alignment of the allocation.  */ +#if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) +# define __attribute_alloc_align__(param) \ +  __attribute__ ((__alloc_align__ param)) +#else +# define __attribute_alloc_align__(param) /* Ignore.  */ +#endif + +/* At some point during the gcc 2.96 development the `pure' attribute +   for functions was introduced.  We don't want to use it unconditionally +   (although this would be possible) since it generates warnings.  */ +#if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) +# define __attribute_pure__ __attribute__ ((__pure__)) +#else +# define __attribute_pure__ /* Ignore */ +#endif + +/* This declaration tells the compiler that the value is constant.  */ +#if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) +# define __attribute_const__ __attribute__ ((__const__)) +#else +# define __attribute_const__ /* Ignore */ +#endif + +#if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) +# define __attribute_maybe_unused__ __attribute__ ((__unused__)) +#else +# define __attribute_maybe_unused__ /* Ignore */ +#endif + +/* At some point during the gcc 3.1 development the `used' attribute +   for functions was introduced.  We don't want to use it unconditionally +   (although this would be possible) since it generates warnings.  */ +#if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) +# define __attribute_used__ __attribute__ ((__used__)) +# define __attribute_noinline__ __attribute__ ((__noinline__)) +#else +# define __attribute_used__ __attribute__ ((__unused__)) +# define __attribute_noinline__ /* Ignore */ +#endif + +/* Since version 3.2, gcc allows marking deprecated functions.  */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) +# define __attribute_deprecated__ __attribute__ ((__deprecated__)) +#else +# define __attribute_deprecated__ /* Ignore */ +#endif + +/* Since version 4.5, gcc also allows one to specify the message printed +   when a deprecated function is used.  clang claims to be gcc 4.2, but +   may also support this feature.  */ +#if __GNUC_PREREQ (4,5) \ +    || __glibc_has_extension (__attribute_deprecated_with_message__) +# define __attribute_deprecated_msg__(msg) \ +	 __attribute__ ((__deprecated__ (msg))) +#else +# define __attribute_deprecated_msg__(msg) __attribute_deprecated__ +#endif + +/* At some point during the gcc 2.8 development the `format_arg' attribute +   for functions was introduced.  We don't want to use it unconditionally +   (although this would be possible) since it generates warnings. +   If several `format_arg' attributes are given for the same function, in +   gcc-3.0 and older, all but the last one are ignored.  In newer gccs, +   all designated arguments are considered.  */ +#if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) +# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) +#else +# define __attribute_format_arg__(x) /* Ignore */ +#endif + +/* At some point during the gcc 2.97 development the `strfmon' format +   attribute for functions was introduced.  We don't want to use it +   unconditionally (although this would be possible) since it +   generates warnings.  */ +#if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) +# define __attribute_format_strfmon__(a,b) \ +  __attribute__ ((__format__ (__strfmon__, a, b))) +#else +# define __attribute_format_strfmon__(a,b) /* Ignore */ +#endif + +/* The nonnull function attribute marks pointer parameters that +   must not be NULL.  This has the name __nonnull in glibc, +   and __attribute_nonnull__ in files shared with Gnulib to avoid +   collision with a different __nonnull in DragonFlyBSD 5.9.  */ +#ifndef __attribute_nonnull__ +# if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) +#  define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) +# else +#  define __attribute_nonnull__(params) +# endif +#endif +#ifndef __nonnull +# define __nonnull(params) __attribute_nonnull__ (params) +#endif + +/* The returns_nonnull function attribute marks the return type of the function +   as always being non-null.  */ +#ifndef __returns_nonnull +# if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) +# define __returns_nonnull __attribute__ ((__returns_nonnull__)) +# else +# define __returns_nonnull +# endif +#endif + +/* If fortification mode, we warn about unused results of certain +   function calls which can lead to problems.  */ +#if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) +# define __attribute_warn_unused_result__ \ +   __attribute__ ((__warn_unused_result__)) +# if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 +#  define __wur __attribute_warn_unused_result__ +# endif +#else +# define __attribute_warn_unused_result__ /* empty */ +#endif +#ifndef __wur +# define __wur /* Ignore */ +#endif + +/* Forces a function to be always inlined.  */ +#if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) +/* The Linux kernel defines __always_inline in stddef.h (283d7573), and +   it conflicts with this definition.  Therefore undefine it first to +   allow either header to be included first.  */ +# undef __always_inline +# define __always_inline __inline __attribute__ ((__always_inline__)) +#else +# undef __always_inline +# define __always_inline __inline +#endif + +/* Associate error messages with the source location of the call site rather +   than with the source location inside the function.  */ +#if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) +# define __attribute_artificial__ __attribute__ ((__artificial__)) +#else +# define __attribute_artificial__ /* Ignore */ +#endif + +/* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 +   inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__ +   or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions +   older than 4.3 may define these macros and still not guarantee GNU inlining +   semantics. + +   clang++ identifies itself as gcc-4.2, but has support for GNU inlining +   semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and +   __GNUC_GNU_INLINE__ macro definitions.  */ +#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ +     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ +			       || defined __GNUC_GNU_INLINE__))) +# if defined __GNUC_STDC_INLINE__ || defined __cplusplus +#  define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) +#  define __extern_always_inline \ +  extern __always_inline __attribute__ ((__gnu_inline__)) +# else +#  define __extern_inline extern __inline +#  define __extern_always_inline extern __always_inline +# endif +#endif + +#ifdef __extern_always_inline +# define __fortify_function __extern_always_inline __attribute_artificial__ +#endif + +/* GCC 4.3 and above allow passing all anonymous arguments of an +   __extern_always_inline function to some other vararg function.  */ +#if __GNUC_PREREQ (4,3) +# define __va_arg_pack() __builtin_va_arg_pack () +# define __va_arg_pack_len() __builtin_va_arg_pack_len () +#endif + +/* It is possible to compile containing GCC extensions even if GCC is +   run in pedantic mode if the uses are carefully marked using the +   `__extension__' keyword.  But this is not generally available before +   version 2.8.  */ +#if !(__GNUC_PREREQ (2,8) || defined __clang__) +# define __extension__		/* Ignore */ +#endif + +/* __restrict is known in EGCS 1.2 and above, and in clang. +   It works also in C++ mode (outside of arrays), but only when spelled +   as '__restrict', not 'restrict'.  */ +#if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#  define __restrict	restrict +# else +#  define __restrict	/* Ignore */ +# endif +#endif + +/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is +     array_name[restrict] +   GCC 3.1 and clang support this. +   This syntax is not usable in C++ mode.  */ +#if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus +# define __restrict_arr	__restrict +#else +# ifdef __GNUC__ +#  define __restrict_arr	/* Not supported in old GCC.  */ +# else +#  if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#   define __restrict_arr	restrict +#  else +/* Some other non-C99 compiler.  */ +#   define __restrict_arr	/* Not supported.  */ +#  endif +# endif +#endif + +#if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) +# define __glibc_unlikely(cond)	__builtin_expect ((cond), 0) +# define __glibc_likely(cond)	__builtin_expect ((cond), 1) +#else +# define __glibc_unlikely(cond)	(cond) +# define __glibc_likely(cond)	(cond) +#endif + +#if (!defined _Noreturn \ +     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ +     &&  !(__GNUC_PREREQ (4,7) \ +           || (3 < __clang_major__ + (5 <= __clang_minor__)))) +# if __GNUC_PREREQ (2,8) +#  define _Noreturn __attribute__ ((__noreturn__)) +# else +#  define _Noreturn +# endif +#endif + +#if __GNUC_PREREQ (8, 0) +/* Describes a char array whose address can safely be passed as the first +   argument to strncpy and strncat, as the char array is not necessarily +   a NUL-terminated string.  */ +# define __attribute_nonstring__ __attribute__ ((__nonstring__)) +#else +# define __attribute_nonstring__ +#endif + +/* Undefine (also defined in libc-symbols.h).  */ +#undef __attribute_copy__ +#if __GNUC_PREREQ (9, 0) +/* Copies attributes from the declaration or type referenced by +   the argument.  */ +# define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) +#else +# define __attribute_copy__(arg) +#endif + +#if (!defined _Static_assert && !defined __cplusplus \ +     && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ +     && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ +         || defined __STRICT_ANSI__)) +# define _Static_assert(expr, diagnostic) \ +    extern int (*__Static_assert_function (void)) \ +      [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] +#endif + +/* Gnulib avoids including these, as they don't work on non-glibc or +   older glibc platforms.  */ +#ifndef __GNULIB_CDEFS +# include <bits/wordsize.h> +# include <bits/long-double.h> +#endif + +#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 +# ifdef __REDIRECT + +/* Alias name defined automatically.  */ +#  define __LDBL_REDIR(name, proto) ... unused__ldbl_redir +#  define __LDBL_REDIR_DECL(name) \ +  extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined automatically, with leading underscores.  */ +#  define __LDBL_REDIR2_DECL(name) \ +  extern __typeof (__##name) __##name \ +    __asm (__ASMNAME ("__" #name "ieee128")); + +/* Alias name defined manually.  */ +#  define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 +#  define __LDBL_REDIR1_DECL(name, alias) \ +  extern __typeof (name) name __asm (__ASMNAME (#alias)); + +#  define __LDBL_REDIR1_NTH(name, proto, alias) \ +  __REDIRECT_NTH (name, proto, alias) +#  define __REDIRECT_NTH_LDBL(name, proto, alias) \ +  __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) + +/* Unused.  */ +#  define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl +#  define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth + +# else +_Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); +# endif +#elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH +# define __LDBL_COMPAT 1 +# ifdef __REDIRECT +#  define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) +#  define __LDBL_REDIR(name, proto) \ +  __LDBL_REDIR1 (name, proto, __nldbl_##name) +#  define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) +#  define __LDBL_REDIR_NTH(name, proto) \ +  __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) +#  define __LDBL_REDIR2_DECL(name) \ +  extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); +#  define __LDBL_REDIR1_DECL(name, alias) \ +  extern __typeof (name) name __asm (__ASMNAME (#alias)); +#  define __LDBL_REDIR_DECL(name) \ +  extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); +#  define __REDIRECT_LDBL(name, proto, alias) \ +  __LDBL_REDIR1 (name, proto, __nldbl_##alias) +#  define __REDIRECT_NTH_LDBL(name, proto, alias) \ +  __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) +# endif +#endif +#if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ +    || !defined __REDIRECT +# define __LDBL_REDIR1(name, proto, alias) name proto +# define __LDBL_REDIR(name, proto) name proto +# define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW +# define __LDBL_REDIR_NTH(name, proto) name proto __THROW +# define __LDBL_REDIR2_DECL(name) +# define __LDBL_REDIR_DECL(name) +# ifdef __REDIRECT +#  define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) +#  define __REDIRECT_NTH_LDBL(name, proto, alias) \ +  __REDIRECT_NTH (name, proto, alias) +# endif +#endif + +/* __glibc_macro_warning (MESSAGE) issues warning MESSAGE.  This is +   intended for use in preprocessor macros. + +   Note: MESSAGE must be a _single_ string; concatenation of string +   literals is not supported.  */ +#if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ +  __glibc_macro_warning1 (GCC warning message) +#else +# define __glibc_macro_warning(msg) +#endif + +/* Generic selection (ISO C11) is a C-only feature, available in GCC +   since version 4.9.  Previous versions do not provide generic +   selection, even though they might set __STDC_VERSION__ to 201112L, +   when in -std=c11 mode.  Thus, we must check for !defined __GNUC__ +   when testing __STDC_VERSION__ for generic selection support. +   On the other hand, Clang also defines __GNUC__, so a clang-specific +   check is required to enable the use of generic selection.  */ +#if !defined __cplusplus \ +    && (__GNUC_PREREQ (4, 9) \ +	|| __glibc_has_extension (c_generic_selections) \ +	|| (!defined __GNUC__ && defined __STDC_VERSION__ \ +	    && __STDC_VERSION__ >= 201112L)) +# define __HAVE_GENERIC_SELECTION 1 +#else +# define __HAVE_GENERIC_SELECTION 0 +#endif + +#if __GNUC_PREREQ (10, 0) +/* Designates a 1-based positional argument ref-index of pointer type +   that can be used to access size-index elements of the pointed-to +   array according to access mode, or at least one element when +   size-index is not provided: +     access (access-mode, <ref-index> [, <size-index>])  */ +#  define __attr_access(x) __attribute__ ((__access__ x)) +/* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may +   use the access attribute to get object sizes from function definition +   arguments, so we can't use them on functions we fortify.  Drop the object +   size hints for such functions.  */ +#  if __USE_FORTIFY_LEVEL == 3 +#    define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) +#  else +#    define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) +#  endif +#  if __GNUC_PREREQ (11, 0) +#    define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) +#  else +#    define __attr_access_none(argno) +#  endif +#else +#  define __fortified_attr_access(a, o, s) +#  define __attr_access(x) +#  define __attr_access_none(argno) +#endif + +#if __GNUC_PREREQ (11, 0) +/* Designates dealloc as a function to call to deallocate objects +   allocated by the declared function.  */ +# define __attr_dealloc(dealloc, argno) \ +    __attribute__ ((__malloc__ (dealloc, argno))) +# define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) +#else +# define __attr_dealloc(dealloc, argno) +# define __attr_dealloc_free +#endif + +/* Specify that a function such as setjmp or vfork may return +   twice.  */ +#if __GNUC_PREREQ (4, 1) +# define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) +#else +# define __attribute_returns_twice__ /* Ignore.  */ +#endif + +#endif	 /* sys/cdefs.h */ diff --git a/tests/cloexec.c b/tests/cloexec.c index 812be01a..cdb0d740 100644 --- a/tests/cloexec.c +++ b/tests/cloexec.c @@ -1,6 +1,6 @@  /* cloexec.c - set or clear the close-on-exec descriptor flag -   Copyright (C) 1991, 2004-2006, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 1991, 2004-2006, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/cloexec.h b/tests/cloexec.h index 15d2d5ef..f52e5f2e 100644 --- a/tests/cloexec.h +++ b/tests/cloexec.h @@ -1,6 +1,6 @@  /* cloexec.c - set or clear the close-on-exec descriptor flag -   Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2004, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/close.c b/tests/close.c index 44990ba7..830fd820 100644 --- a/tests/close.c +++ b/tests/close.c @@ -1,5 +1,5 @@  /* close replacement. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/connect.c b/tests/connect.c index d1600634..421849c1 100644 --- a/tests/connect.c +++ b/tests/connect.c @@ -1,6 +1,6 @@  /* connect.c --- wrappers for Windows connect function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/ctype.in.h b/tests/ctype.in.h index dc81170d..61bcbf16 100644 --- a/tests/ctype.in.h +++ b/tests/ctype.in.h @@ -1,6 +1,6 @@  /* A substitute for ISO C99 <ctype.h>, for platforms on which it is incomplete. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -36,6 +36,11 @@  #ifndef _@GUARD_PREFIX@_CTYPE_H  #define _@GUARD_PREFIX@_CTYPE_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */  /* The definition of _GL_WARN_ON_USE is copied here.  */ diff --git a/tests/dup2.c b/tests/dup2.c index 1c766ab3..916e113d 100644 --- a/tests/dup2.c +++ b/tests/dup2.c @@ -1,6 +1,6 @@  /* Duplicate an open file descriptor to a specified file descriptor. -   Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 1999, 2004-2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/error.c b/tests/error.c index 272d45e4..c53dfeb6 100644 --- a/tests/error.c +++ b/tests/error.c @@ -1,5 +1,5 @@  /* Error handler for noninteractive utilities -   Copyright (C) 1990-1998, 2000-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 1990-1998, 2000-2007, 2009-2024 Free Software Foundation, Inc.     This file is part of the GNU C Library.     This file is free software: you can redistribute it and/or modify @@ -19,9 +19,10 @@  #if !_LIBC  # include <config.h> +# define _GL_NO_INLINE_ERROR  #endif -#include "error.h" +#include <error.h>  #include <stdarg.h>  #include <stdio.h> @@ -42,8 +43,6 @@  # define USE_UNLOCKED_IO 0  # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b)  # define _GL_ARG_NONNULL(a) -#else -# include "getprogname.h"  #endif  #if USE_UNLOCKED_IO diff --git a/tests/error.h b/tests/error.h deleted file mode 100644 index 45ec2a5e..00000000 --- a/tests/error.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Declaration for error-reporting function -   Copyright (C) 1995-1997, 2003, 2006, 2008-2022 Free Software Foundation, -   Inc. -   This file is part of the GNU C Library. - -   This file is free software: you can redistribute it and/or modify -   it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   This file is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public License -   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ - -#ifndef _ERROR_H -#define _ERROR_H 1 - -/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM.  */ -#include <stdio.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/* Print a message with 'fprintf (stderr, FORMAT, ...)'; -   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). -   If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */ - -extern void error (int __status, int __errnum, const char *__format, ...) -#if GNULIB_VFPRINTF_POSIX -     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)) -#else -     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 3, 4)) -#endif -     ; - -extern void error_at_line (int __status, int __errnum, const char *__fname, -                           unsigned int __lineno, const char *__format, ...) -#if GNULIB_VFPRINTF_POSIX -     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 6)) -#else -     _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 5, 6)) -#endif -     ; - -/* If NULL, error will flush stdout, then print on stderr the program -   name, a colon and a space.  Otherwise, error will call this -   function without parameters instead.  */ -extern void (*error_print_progname) (void); - -/* This variable is incremented each time 'error' is called.  */ -extern unsigned int error_message_count; - -/* Sometimes we want to have at most one error per line.  This -   variable controls whether this mode is selected or not.  */ -extern int error_one_per_line; - -#ifdef __cplusplus -} -#endif - -#endif /* error.h */ diff --git a/tests/error.in.h b/tests/error.in.h new file mode 100644 index 00000000..51f8cafd --- /dev/null +++ b/tests/error.in.h @@ -0,0 +1,216 @@ +/* Declarations for error-reporting functions. +   Copyright (C) 1995-1997, 2003, 2006, 2008-2024 Free Software Foundation, +   Inc. +   This file is part of the GNU C Library. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#ifndef _@GUARD_PREFIX@_ERROR_H + +/* No @PRAGMA_SYSTEM_HEADER@ here, because it would prevent +   -Wimplicit-fallthrough warnings for missing FALLTHROUGH after error(...) +   or error_at_line(...) invocations.  */ + +/* The include_next requires a split double-inclusion guard.  */ +#if @HAVE_ERROR_H@ +# @INCLUDE_NEXT@ @NEXT_ERROR_H@ +#endif + +#ifndef _@GUARD_PREFIX@_ERROR_H +#define _@GUARD_PREFIX@_ERROR_H + +/* This file uses _GL_ATTRIBUTE_ALWAYS_INLINE, _GL_ATTRIBUTE_FORMAT, +  _GL_ATTRIBUTE_MAYBE_UNUSED.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +/* Get 'unreachable'.  */ +#include <stddef.h> + +/* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM.  */ +#include <stdio.h> + +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */ + +#if GNULIB_VFPRINTF_POSIX +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD +#else +# define _GL_ATTRIBUTE_SPEC_PRINTF_ERROR _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM +#endif + +/* Helper macro for supporting the compiler's control flow analysis better. +   It evaluates its arguments only once. +   Test case: Compile copy-file.c with "gcc -Wimplicit-fallthrough".  */ +#if defined __GNUC__ || defined __clang__ +/* Use 'unreachable' to tell the compiler when the function call does not +   return.  */ +# define __gl_error_call1(function, status, ...) \ +    ((function) (status, __VA_ARGS__), \ +     (status) != 0 ? unreachable () : (void) 0) +/* If STATUS is a not a constant, the function call may or may not return; +   therefore -Wimplicit-fallthrough will produce a warning.  Use a compound +   statement in order to evaluate STATUS only once. +   If STATUS is a constant, we don't use a compound statement, because that +   would trigger a -Wimplicit-fallthrough warning even when STATUS is != 0, +   when not optimizing.  This causes STATUS to be evaluated twice, but +   that's OK since it does not have side effects.  */ +# define __gl_error_call(function, status, ...)                 \ +    (__builtin_constant_p (status)                              \ +     ? __gl_error_call1 (function, status, __VA_ARGS__)         \ +     : __extension__                                            \ +       ({                                                       \ +         int const __errstatus = status;                        \ +         __gl_error_call1 (function, __errstatus, __VA_ARGS__); \ +       })) +#else +# define __gl_error_call(function, status, ...) \ +    (function) (status, __VA_ARGS__) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with 'fprintf (stderr, FORMAT, ...)'; +   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). +   If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */ +#if @REPLACE_ERROR@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#  undef error +#  define error rpl_error +# endif +_GL_FUNCDECL_RPL (error, void, +                  (int __status, int __errnum, const char *__format, ...) +                  _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +_GL_CXXALIAS_RPL (error, void, +                  (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +#  undef error +#  define error(status, ...) \ +     __gl_error_call (rpl_error, status, __VA_ARGS__) +# endif +#else +# if ! @HAVE_ERROR@ +_GL_FUNCDECL_SYS (error, void, +                  (int __status, int __errnum, const char *__format, ...) +                  _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4))); +# endif +_GL_CXXALIAS_SYS (error, void, +                  (int __status, int __errnum, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +#  ifdef error +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack.  */ +#   if _GL_GNUC_PREREQ (4, 7) +#    pragma GCC diagnostic push +#    pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 3, 4)) +_gl_inline_error (int __status, int __errnum, const char *__format, ...) +{ +  return error (__status, __errnum, __format, __builtin_va_arg_pack ()); +} +#    pragma GCC diagnostic pop +#    undef error +#    define error(status, ...) \ +       __gl_error_call (_gl_inline_error, status, __VA_ARGS__) +#   endif +#  else +#   define error(status, ...) \ +      __gl_error_call (error, status, __VA_ARGS__) +#  endif +# endif +#endif +#if __GLIBC__ >= 2 +_GL_CXXALIASWARN (error); +#endif + +/* Likewise.  If FILENAME is non-NULL, include FILENAME:LINENO: in the +   message.  */ +#if @REPLACE_ERROR_AT_LINE@ +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#  undef error_at_line +#  define error_at_line rpl_error_at_line +# endif +_GL_FUNCDECL_RPL (error_at_line, void, +                  (int __status, int __errnum, const char *__filename, +                   unsigned int __lineno, const char *__format, ...) +                  _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +_GL_CXXALIAS_RPL (error_at_line, void, +                  (int __status, int __errnum, const char *__filename, +                   unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +#  undef error_at_line +#  define error_at_line(status, ...) \ +     __gl_error_call (rpl_error_at_line, status, __VA_ARGS__) +# endif +#else +# if ! @HAVE_ERROR_AT_LINE@ +_GL_FUNCDECL_SYS (error_at_line, void, +                  (int __status, int __errnum, const char *__filename, +                   unsigned int __lineno, const char *__format, ...) +                  _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6))); +# endif +_GL_CXXALIAS_SYS (error_at_line, void, +                  (int __status, int __errnum, const char *__filename, +                   unsigned int __lineno, const char *__format, ...)); +# ifndef _GL_NO_INLINE_ERROR +#  ifdef error_at_line +/* Only gcc ≥ 4.7 has __builtin_va_arg_pack.  */ +#   if _GL_GNUC_PREREQ (4, 7) +#    pragma GCC diagnostic push +#    pragma GCC diagnostic ignored "-Wattributes" +_GL_ATTRIBUTE_MAYBE_UNUSED +static void +_GL_ATTRIBUTE_ALWAYS_INLINE +_GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_ERROR, 5, 6)) +_gl_inline_error_at_line (int __status, int __errnum, const char *__filename, +                          unsigned int __lineno, const char *__format, ...) +{ +  return error_at_line (__status, __errnum, __filename, __lineno, __format, +                        __builtin_va_arg_pack ()); +} +#    pragma GCC diagnostic pop +#    undef error_at_line +#    define error_at_line(status, ...) \ +       __gl_error_call (_gl_inline_error_at_line, status, __VA_ARGS__) +#   endif +#  else +#   define error_at_line(status, ...) \ +      __gl_error_call (error_at_line, status, __VA_ARGS__) +#  endif +# endif +#endif +_GL_CXXALIASWARN (error_at_line); + +/* If NULL, error will flush stdout, then print on stderr the program +   name, a colon and a space.  Otherwise, error will call this +   function without parameters instead.  */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time 'error' is called.  */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line.  This +   variable controls whether this mode is selected or not.  */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* _@GUARD_PREFIX@_ERROR_H */ +#endif /* _@GUARD_PREFIX@_ERROR_H */ diff --git a/tests/exitfail.c b/tests/exitfail.c index 84fb0eff..8a5962e8 100644 --- a/tests/exitfail.c +++ b/tests/exitfail.c @@ -1,6 +1,6 @@  /* Failure exit status -   Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2002-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/exitfail.h b/tests/exitfail.h index 865f096a..20ac506b 100644 --- a/tests/exitfail.h +++ b/tests/exitfail.h @@ -1,6 +1,6 @@  /* Failure exit status -   Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2002, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/fcntl.c b/tests/fcntl.c index f9753c40..7cd3a0f9 100644 --- a/tests/fcntl.c +++ b/tests/fcntl.c @@ -1,6 +1,6 @@  /* Provide file descriptor control. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/fcntl.in.h b/tests/fcntl.in.h index 9270ced8..eea3b954 100644 --- a/tests/fcntl.in.h +++ b/tests/fcntl.in.h @@ -1,6 +1,6 @@  /* Like <fcntl.h>, but with non-working flags defined to 0. -   Copyright (C) 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -74,6 +74,11 @@  #ifndef _@GUARD_PREFIX@_FCNTL_H  #define _@GUARD_PREFIX@_FCNTL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems.  */  # include <unistd.h>  #endif diff --git a/tests/fd-hook.c b/tests/fd-hook.c index 64a7a80c..75bbe49c 100644 --- a/tests/fd-hook.c +++ b/tests/fd-hook.c @@ -1,5 +1,5 @@  /* Hook for making file descriptor functions close(), ioctl() extensible. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2009.     This file is free software: you can redistribute it and/or modify diff --git a/tests/fd-hook.h b/tests/fd-hook.h index d6c4964d..2150460b 100644 --- a/tests/fd-hook.h +++ b/tests/fd-hook.h @@ -1,5 +1,5 @@  /* Hook for making file descriptor functions close(), ioctl() extensible. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/fdopen.c b/tests/fdopen.c index f1c5dff1..5a8cd535 100644 --- a/tests/fdopen.c +++ b/tests/fdopen.c @@ -1,5 +1,5 @@  /* Open a stream with a given file descriptor. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/filename.h b/tests/filename.h index ab77ca2d..4f0f0fbc 100644 --- a/tests/filename.h +++ b/tests/filename.h @@ -1,5 +1,5 @@  /* Basic filename support macros. -   Copyright (C) 2001-2022 Free Software Foundation, Inc. +   Copyright (C) 2001-2024 Free Software Foundation, Inc.     This file is part of the GNU C Library.     The GNU C Library is free software; you can redistribute it and/or diff --git a/tests/fstat.c b/tests/fstat.c index 3928c860..205d5aab 100644 --- a/tests/fstat.c +++ b/tests/fstat.c @@ -1,5 +1,5 @@  /* fstat() replacement. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/ftruncate.c b/tests/ftruncate.c index 4a9279b7..63947257 100644 --- a/tests/ftruncate.c +++ b/tests/ftruncate.c @@ -1,5 +1,5 @@  /* ftruncate emulations for native Windows. -   Copyright (C) 1992-2022 Free Software Foundation, Inc. +   Copyright (C) 1992-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/getcwd-lgpl.c b/tests/getcwd-lgpl.c index f449ac85..67ed2878 100644 --- a/tests/getcwd-lgpl.c +++ b/tests/getcwd-lgpl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2022 Free Software Foundation, Inc. +/* Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is part of gnulib.     This file is free software: you can redistribute it and/or modify @@ -45,12 +45,12 @@ typedef int dummy;  char *  rpl_getcwd (char *buf, size_t size)  { -  char *ptr;    char *result;    /* Handle single size operations.  */    if (buf)      { +      /* Check SIZE argument.  */        if (!size)          {            errno = EINVAL; @@ -79,7 +79,7 @@ rpl_getcwd (char *buf, size_t size)    {      char tmp[4032];      size = sizeof tmp; -    ptr = getcwd (tmp, size); +    char *ptr = getcwd (tmp, size);      if (ptr)        {          result = strdup (ptr); @@ -95,7 +95,7 @@ rpl_getcwd (char *buf, size_t size)    do      {        size <<= 1; -      ptr = realloc (buf, size); +      char *ptr = realloc (buf, size);        if (ptr == NULL)          {            free (buf); diff --git a/tests/getdtablesize.c b/tests/getdtablesize.c index 793e0f88..762c100b 100644 --- a/tests/getdtablesize.c +++ b/tests/getdtablesize.c @@ -1,5 +1,5 @@  /* getdtablesize() function: Return maximum possible file descriptor value + 1. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2008.     This file is free software: you can redistribute it and/or modify diff --git a/tests/getpagesize.c b/tests/getpagesize.c index a19669f6..d2031553 100644 --- a/tests/getpagesize.c +++ b/tests/getpagesize.c @@ -1,6 +1,6 @@  /* getpagesize emulation for systems where it cannot be done in a C macro. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/getprogname.c b/tests/getprogname.c index 62a48004..392a9a2f 100644 --- a/tests/getprogname.c +++ b/tests/getprogname.c @@ -1,5 +1,5 @@  /* Program name management. -   Copyright (C) 2016-2022 Free Software Foundation, Inc. +   Copyright (C) 2016-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as published by @@ -16,11 +16,10 @@  #include <config.h> -/* Specification.  */ -#include "getprogname.h" +/* Specification.  Also get __argv declaration.  */ +#include <stdlib.h>  #include <errno.h> /* get program_invocation_name declaration */ -#include <stdlib.h> /* get __argv declaration */  #ifdef _AIX  # include <unistd.h> @@ -53,13 +52,12 @@  #if defined __SCO_VERSION__ || defined __sysv5__  # include <fcntl.h> -# include <stdlib.h>  # include <string.h>  #endif  #include "basename-lgpl.h" -#ifndef HAVE_GETPROGNAME             /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ +#ifndef HAVE_GETPROGNAME  /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Solaris >= 11, Cygwin, Android API level >= 21 */  char const *  getprogname (void)  { @@ -214,7 +212,19 @@ getprogname (void)                  {                    char *s = strdup (last_component (buf.ps_pathptr));                    if (s) -                    p = s; +                    { +#  if defined __XPLINK__ && __CHARSET_LIB == 1 +                      /* The compiler option -qascii is in use. +                         https://makingdeveloperslivesbetter.wordpress.com/2022/01/07/is-z-os-ascii-or-ebcdic-yes/ +                         https://www.ibm.com/docs/en/zos/2.5.0?topic=features-macros-related-compiler-option-settings +                         So, convert the result from EBCDIC to ASCII. +                         https://www.ibm.com/docs/en/zos/2.5.0?topic=functions-e2a-s-convert-string-from-ebcdic-ascii */ +                      if (__e2a_s (s) == (size_t)-1) +                        free (s); +                      else +#  endif +                        p = s; +                    }                    break;                  }              } diff --git a/tests/getprogname.h b/tests/getprogname.h index 9a35e584..bee1c1a2 100644 --- a/tests/getprogname.h +++ b/tests/getprogname.h @@ -1,5 +1,5 @@  /* Program name management. -   Copyright (C) 2016-2022 Free Software Foundation, Inc. +   Copyright (C) 2016-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as published by @@ -19,22 +19,8 @@  #include <stdlib.h> -#ifdef __cplusplus -extern "C" { -#endif - -/* Return the base name of the executing program. -   On native Windows this will usually end in ".exe" or ".EXE". */ -#ifndef HAVE_GETPROGNAME -extern char const *getprogname (void) -# ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME -  _GL_ATTRIBUTE_PURE -# endif -  ; -#endif - -#ifdef __cplusplus -} +#if __GNUC__ || (__clang_major__ >= 4) +# warning "The include file getprogname.h is deprecated. Use <stdlib.h> instead."  #endif  #endif diff --git a/tests/gettext.h b/tests/gettext.h index b3577a04..39d5ae4d 100644 --- a/tests/gettext.h +++ b/tests/gettext.h @@ -1,5 +1,5 @@  /* Convenience header for conditional use of GNU <libintl.h>. -   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software +   Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2024 Free Software     Foundation, Inc.     This file is free software: you can redistribute it and/or modify diff --git a/tests/gettimeofday.c b/tests/gettimeofday.c index 36c7920a..8dd26f73 100644 --- a/tests/gettimeofday.c +++ b/tests/gettimeofday.c @@ -1,6 +1,6 @@  /* Provide gettimeofday for systems that don't have it or for which it's broken. -   Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2001-2003, 2005-2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -113,8 +113,10 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)    ULONGLONG since_1970 =      since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000;    ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; -  tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; -  tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; +  *tv = (struct timeval) { +    .tv_sec  = microseconds_since_1970 / (ULONGLONG) 1000000, +    .tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000 +  };    return 0; @@ -127,10 +129,7 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)    struct timeval otv;    int result = gettimeofday (&otv, (struct timezone *) tz);    if (result == 0) -    { -      tv->tv_sec = otv.tv_sec; -      tv->tv_usec = otv.tv_usec; -    } +    *tv = otv;  #  else    int result = gettimeofday (tv, (struct timezone *) tz);  #  endif @@ -143,8 +142,7 @@ gettimeofday (struct timeval *restrict tv, void *restrict tz)  #   error "Only 1-second nominal clock resolution found.  Is that intended?" \            "If so, compile with the -DOK_TO_USE_1S_CLOCK option."  #  endif -  tv->tv_sec = time (NULL); -  tv->tv_usec = 0; +  *tv = (struct timeval) { .tv_sec = time (NULL), .tv_usec = 0 };    return 0; diff --git a/tests/glthread/thread.c b/tests/glthread/thread.c index 0b923c04..9c8c3035 100644 --- a/tests/glthread/thread.c +++ b/tests/glthread/thread.c @@ -1,5 +1,5 @@  /* Creating and controlling threads. -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -139,9 +139,11 @@ gl_thread_self (void)              /* Memory allocation failed.  There is not much we can do.  Have to                 busy-loop, waiting for the availability of memory.  */              { -              struct timespec ts; -              ts.tv_sec = 1; -              ts.tv_nsec = 0; +              struct timespec ts = +                { +                  .tv_sec = 1, +                  .tv_nsec = 0 +                };                thrd_sleep (&ts, NULL);              }            } diff --git a/tests/glthread/thread.h b/tests/glthread/thread.h index 6d98f2d6..748bb045 100644 --- a/tests/glthread/thread.h +++ b/tests/glthread/thread.h @@ -1,5 +1,5 @@  /* Creating and controlling threads. -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -70,6 +70,11 @@  #ifndef _GLTHREAD_THREAD_H  #define _GLTHREAD_THREAD_H +/* This file uses _Noreturn, HAVE_THREADS_H, HAVE_PTHREAD_ATFORK.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #include <errno.h>  #include <stdlib.h> @@ -125,6 +130,9 @@ extern _Noreturn void gl_thread_exit (void *return_value);  # include <pthread.h> +/* Get intptr_t.  */ +# include <stdint.h> +  /* On IRIX, pthread_atfork is declared in <unistd.h>, not in <pthread.h>.  */  # if defined __sgi  #  include <unistd.h> @@ -228,7 +236,7 @@ extern const gl_thread_t gl_null_thread;  #  define gl_thread_self() \       (pthread_in_use () ? pthread_self () : (pthread_t) 0)  #  define gl_thread_self_pointer() \ -     (pthread_in_use () ? (void *) pthread_self () : NULL) +     (pthread_in_use () ? (void *) (intptr_t) (pthread_t) pthread_self () : NULL)  # endif  # define gl_thread_exit(RETVAL) \      (void) (pthread_in_use () ? (pthread_exit (RETVAL), 0) : 0) diff --git a/tests/glthread/yield.h b/tests/glthread/yield.h index f74267ea..29105cc2 100644 --- a/tests/glthread/yield.h +++ b/tests/glthread/yield.h @@ -1,5 +1,5 @@  /* Yielding the processor to other threads and processes. -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/ialloc.c b/tests/ialloc.c index 43c10433..8564a15b 100644 --- a/tests/ialloc.c +++ b/tests/ialloc.c @@ -1,6 +1,6 @@  /* malloc with idx_t rather than size_t -   Copyright 2021-2022 Free Software Foundation, Inc. +   Copyright 2021-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/ialloc.h b/tests/ialloc.h index 37cf4bfb..2aa94ae7 100644 --- a/tests/ialloc.h +++ b/tests/ialloc.h @@ -1,6 +1,6 @@  /* ialloc.h -- malloc with idx_t rather than size_t -   Copyright 2021-2022 Free Software Foundation, Inc. +   Copyright 2021-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -18,15 +18,21 @@  #ifndef IALLOC_H_  #define IALLOC_H_ +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_ATTRIBUTE_COLD, +   _GL_ATTRIBUTE_MALLOC.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #include "idx.h"  #include <errno.h>  #include <stdint.h>  #include <stdlib.h> - -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." +#if defined __CHERI_PURE_CAPABILITY__ +# include <cheri.h>  #endif +  _GL_INLINE_HEADER_BEGIN  #ifndef IALLOC_INLINE  # define IALLOC_INLINE _GL_INLINE @@ -43,6 +49,9 @@ _gl_alloc_nomem (void)    return NULL;  } +/* imalloc (size) is like malloc (size). +   It returns a non-NULL pointer to size bytes of memory. +   Upon failure, it returns NULL with errno set.  */  IALLOC_INLINE  _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/  void * @@ -51,16 +60,32 @@ imalloc (idx_t s)    return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem ();  } +/* irealloc (ptr, size) is like realloc (ptr, size). +   It returns a non-NULL pointer to size bytes of memory. +   Upon failure, it returns NULL with errno set.  */  IALLOC_INLINE  /*_GL_ATTRIBUTE_DEALLOC_FREE*/  void *  irealloc (void *p, idx_t s)  { -  /* Work around GNU realloc glitch by treating a zero size as if it -     were 1, so that returning NULL is equivalent to failing.  */ -  return s <= SIZE_MAX ? realloc (p, s | !s) : _gl_alloc_nomem (); +  if (s <= SIZE_MAX) +    { +      /* Work around GNU realloc glitch by treating a zero size as if it +         were 1, so that returning NULL is equivalent to failing.  */ +      p = realloc (p, s | !s); +#if defined __CHERI_PURE_CAPABILITY__ +      if (p != NULL) +        p = cheri_bounds_set (p, s); +#endif +      return p; +    } +  else +    return _gl_alloc_nomem ();  } +/* icalloc (num, size) is like calloc (num, size). +   It returns a non-NULL pointer to num * size bytes of memory. +   Upon failure, it returns NULL with errno set.  */  IALLOC_INLINE  _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/  void * @@ -81,20 +106,35 @@ icalloc (idx_t n, idx_t s)    return calloc (n, s);  } +/* ireallocarray (ptr, num, size) is like reallocarray (ptr, num, size). +   It returns a non-NULL pointer to num * size bytes of memory. +   Upon failure, it returns NULL with errno set.  */  IALLOC_INLINE void *  ireallocarray (void *p, idx_t n, idx_t s)  { -  /* Work around GNU reallocarray glitch by treating a zero size as if -     it were 1, so that returning NULL is equivalent to failing.  */ -  if (n == 0 || s == 0) -    n = s = 1; -  return (n <= SIZE_MAX && s <= SIZE_MAX -          ? reallocarray (p, n, s) -          : _gl_alloc_nomem ()); +  if (n <= SIZE_MAX && s <= SIZE_MAX) +    { +      /* Work around GNU reallocarray glitch by treating a zero size as if +         it were 1, so that returning NULL is equivalent to failing.  */ +      size_t nx = n; +      size_t sx = s; +      if (n == 0 || s == 0) +        nx = sx = 1; +      p = reallocarray (p, nx, sx); +#if defined __CHERI_PURE_CAPABILITY__ +      if (p != NULL && (n == 0 || s == 0)) +        p = cheri_bounds_set (p, 0); +#endif +      return p; +    } +  else +    return _gl_alloc_nomem ();  }  #ifdef __cplusplus  }  #endif +_GL_INLINE_HEADER_END +  #endif diff --git a/tests/iconvsupport.c b/tests/iconvsupport.c index ee2af0dd..e887eb0d 100644 --- a/tests/iconvsupport.c +++ b/tests/iconvsupport.c @@ -1,5 +1,5 @@  /* Test iconv support. -   Copyright (C) 2018-2022 Free Software Foundation, Inc. +   Copyright (C) 2018-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/ignore-value.h b/tests/ignore-value.h index 173b63f5..de4a240c 100644 --- a/tests/ignore-value.h +++ b/tests/ignore-value.h @@ -1,6 +1,6 @@  /* ignore a function return without a compiler warning.  -*- coding: utf-8 -*- -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/inet_pton.c b/tests/inet_pton.c index a239b7d1..2d29608d 100644 --- a/tests/inet_pton.c +++ b/tests/inet_pton.c @@ -1,6 +1,6 @@  /* inet_pton.c -- convert IPv4 and IPv6 addresses from text to binary form -   Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2006, 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/infinity.h b/tests/infinity.h index 6f68f368..40e663ff 100644 --- a/tests/infinity.h +++ b/tests/infinity.h @@ -1,5 +1,5 @@  /* Macros for infinity. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/init.sh b/tests/init.sh index d5d37c98..c5ec5cfd 100644 --- a/tests/init.sh +++ b/tests/init.sh @@ -1,6 +1,6 @@  # source this file; set up for tests -# Copyright (C) 2009-2022 Free Software Foundation, Inc. +# Copyright (C) 2009-2024 Free Software Foundation, Inc.  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU General Public License as published by @@ -434,15 +434,15 @@ setup_ ()    # Remove relative and non-accessible directories from PATH, including '.'    # and Zero-length entries. -  saved_IFS="$IFS" -  IFS=: +  saved_IFS="$IFS"; IFS="$PATH_SEPARATOR"    new_PATH= -  sep_=    for dir in $PATH; do +    IFS="$saved_IFS"      case "$dir" in -      /*) test -d "$dir/." || continue -          new_PATH="${new_PATH}${sep_}${dir}" -          sep_=':';; +      [\\/]* | ?:[\\/]*) +        test -d "$dir/." || continue +        new_PATH="${new_PATH}${new_PATH:+$PATH_SEPARATOR}${dir}" +        ;;      esac    done    IFS="$saved_IFS" @@ -646,18 +646,19 @@ compare_dev_null_ ()  for diff_opt_ in -u -U3 -c '' no; do    test "$diff_opt_" != no && -    diff_out_=`exec 2>/dev/null; diff $diff_opt_ "$0" "$0" < /dev/null` && +    diff_out_=`exec 2>/dev/null +      LC_ALL=C diff $diff_opt_ "$0" "$0" < /dev/null` &&      break  done  if test "$diff_opt_" != no; then    if test -z "$diff_out_"; then -    compare_ () { diff $diff_opt_ "$@"; } +    compare_ () { LC_ALL=C diff $diff_opt_ "$@"; }    else      compare_ ()      {        # If no differences were found, AIX and HP-UX 'diff' produce output        # like "No differences encountered".  Hide this output. -      diff $diff_opt_ "$@" > diff.out +      LC_ALL=C diff $diff_opt_ "$@" > diff.out        diff_status_=$?        test $diff_status_ -eq 0 || cat diff.out || diff_status_=2        rm -f diff.out || diff_status_=2 @@ -702,4 +703,4 @@ test -f "$srcdir/init.cfg" \  setup_ "$@"  # This trap is here, rather than in the setup_ function, because some  # shells run the exit trap at shell function exit, rather than script exit. -trap remove_tmp_ 0 +trap remove_tmp_ EXIT diff --git a/tests/intprops-internal.h b/tests/intprops-internal.h index f6455f78..c8a87d2b 100644 --- a/tests/intprops-internal.h +++ b/tests/intprops-internal.h @@ -1,6 +1,6 @@  /* intprops-internal.h -- properties of integer types not visible to users -   Copyright (C) 2001-2022 Free Software Foundation, Inc. +   Copyright (C) 2001-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -20,6 +20,11 @@  #include <limits.h> +/* Pacify GCC 13.2 in some calls to _GL_EXPR_SIGNED.  */ +#if defined __GNUC__ && 4 < __GNUC__ + (3 <= __GNUC_MINOR__) +# pragma GCC diagnostic ignored "-Wtype-limits" +#endif +  /* Return a value with the common real type of E and V and the value of V.     Do not evaluate E.  */  #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) diff --git a/tests/intprops.h b/tests/intprops.h index f182ddc1..43734f34 100644 --- a/tests/intprops.h +++ b/tests/intprops.h @@ -1,6 +1,6 @@  /* intprops.h -- properties of integer types -   Copyright (C) 2001-2022 Free Software Foundation, Inc. +   Copyright (C) 2001-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published diff --git a/tests/ioctl.c b/tests/ioctl.c index b1c7b2ee..3ee63fd8 100644 --- a/tests/ioctl.c +++ b/tests/ioctl.c @@ -1,6 +1,6 @@  /* ioctl.c --- wrappers for Windows ioctl function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/isblank.c b/tests/isblank.c index e3545593..d16450aa 100644 --- a/tests/isblank.c +++ b/tests/isblank.c @@ -1,6 +1,6 @@  /* Test whether a character is a blank. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/libc-config.h b/tests/libc-config.h new file mode 100644 index 00000000..70114608 --- /dev/null +++ b/tests/libc-config.h @@ -0,0 +1,204 @@ +/* System definitions for code taken from the GNU C Library + +   Copyright 2017-2024 Free Software Foundation, Inc. + +   This program is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with this program; if not, see +   <https://www.gnu.org/licenses/>.  */ + +/* Written by Paul Eggert.  */ + +/* This is intended to be a good-enough substitute for glibc system +   macros like those defined in <sys/cdefs.h>, so that Gnulib code +   shared with glibc can do this as the first #include: + +     #ifndef _LIBC +     # include <libc-config.h> +     #endif + +   When compiled as part of glibc this is a no-op; when compiled as +   part of Gnulib this includes Gnulib's <config.h> and defines macros +   that glibc library code would normally assume. + +   Note: This header file MUST NOT be included by public header files +   of Gnulib.  */ + +#include <config.h> + +/* On glibc this includes <features.h> and <sys/cdefs.h> and #defines +   _FEATURES_H, __WORDSIZE, and __set_errno.  On FreeBSD 11 and +   DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. +   Elsewhere it is harmless.  */ +#include <errno.h> + +/* From glibc <errno.h>.  */ +#ifndef __set_errno +# define __set_errno(val) (errno = (val)) +#endif + +/* From glibc <features.h>.  */ + +#ifndef __GNUC_PREREQ +# if defined __GNUC__ && defined __GNUC_MINOR__ +#  define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) +# else +#  define __GNUC_PREREQ(maj, min) 0 +# endif +#endif + +#ifndef __glibc_clang_prereq +# if defined __clang_major__ && defined __clang_minor__ +#  ifdef __apple_build_version__ +/* Apple for some reason renumbers __clang_major__ and __clang_minor__. +   Gnulib code uses only __glibc_clang_prereq (3, 5); map it to +   6000000 <= __apple_build_version__.  Support for other calls to +   __glibc_clang_prereq can be added here as needed.  */ +#   define __glibc_clang_prereq(maj, min) \ +      ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) +#  else +#   define __glibc_clang_prereq(maj, min) \ +      ((maj) < __clang_major__ + ((min) <= __clang_minor__)) +#  endif +# else +#  define __glibc_clang_prereq(maj, min) 0 +# endif +#endif + +#ifndef __attribute_nonnull__ +/* <sys/cdefs.h> either does not exist, or is too old for Gnulib. +   Prepare to include <cdefs.h>, which is Gnulib's version of a +   more-recent glibc <sys/cdefs.h>.  */ + +/* Define _FEATURES_H so that <cdefs.h> does not include <features.h>.  */ +# ifndef _FEATURES_H +#  define _FEATURES_H 1 +# endif +/* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include +   nonexistent files.  */ +# define __GNULIB_CDEFS +/* Undef the macros unconditionally defined by our copy of glibc +   <sys/cdefs.h>, so that they do not clash with any system-defined +   versions.  */ +# undef _SYS_CDEFS_H +# undef __ASMNAME +# undef __ASMNAME2 +# undef __BEGIN_DECLS +# undef __CONCAT +# undef __END_DECLS +# undef __HAVE_GENERIC_SELECTION +# undef __LDBL_COMPAT +# undef __LDBL_REDIR +# undef __LDBL_REDIR1 +# undef __LDBL_REDIR1_DECL +# undef __LDBL_REDIR1_NTH +# undef __LDBL_REDIR2_DECL +# undef __LDBL_REDIR_DECL +# undef __LDBL_REDIR_NTH +# undef __LEAF +# undef __LEAF_ATTR +# undef __NTH +# undef __NTHNL +# undef __REDIRECT +# undef __REDIRECT_LDBL +# undef __REDIRECT_NTH +# undef __REDIRECT_NTHNL +# undef __REDIRECT_NTH_LDBL +# undef __STRING +# undef __THROW +# undef __THROWNL +# undef __attr_access +# undef __attr_access_none +# undef __attr_dealloc +# undef __attr_dealloc_free +# undef __attribute__ +# undef __attribute_alloc_align__ +# undef __attribute_alloc_size__ +# undef __attribute_artificial__ +# undef __attribute_const__ +# undef __attribute_deprecated__ +# undef __attribute_deprecated_msg__ +# undef __attribute_format_arg__ +# undef __attribute_format_strfmon__ +# undef __attribute_malloc__ +# undef __attribute_maybe_unused__ +# undef __attribute_noinline__ +# undef __attribute_nonstring__ +# undef __attribute_pure__ +# undef __attribute_returns_twice__ +# undef __attribute_used__ +# undef __attribute_warn_unused_result__ +# undef __errordecl +# undef __extension__ +# undef __extern_always_inline +# undef __extern_inline +# undef __flexarr +# undef __fortified_attr_access +# undef __fortify_function +# undef __glibc_c99_flexarr_available +# undef __glibc_has_attribute +# undef __glibc_has_builtin +# undef __glibc_has_extension +# undef __glibc_likely +# undef __glibc_macro_warning +# undef __glibc_macro_warning1 +# undef __glibc_unlikely +# undef __inline +# undef __ptr_t +# undef __restrict +# undef __restrict_arr +# undef __va_arg_pack +# undef __va_arg_pack_len +# undef __warnattr +# undef __wur +# ifndef __GNULIB_CDEFS +#  undef __bos +#  undef __bos0 +#  undef __glibc_fortify +#  undef __glibc_fortify_n +#  undef __glibc_objsize +#  undef __glibc_objsize0 +#  undef __glibc_safe_len_cond +#  undef __glibc_safe_or_unknown_len +#  undef __glibc_unsafe_len +#  undef __glibc_unsigned_or_positive +# endif + +/* Include our copy of glibc <sys/cdefs.h>.  */ +# include <cdefs.h> + +/* <cdefs.h> __inline is too pessimistic for non-GCC.  */ +# undef __inline +# ifndef HAVE___INLINE +#  if 199901 <= __STDC_VERSION__ || defined inline +#   define __inline inline +#  else +#   define __inline +#  endif +# endif + +#endif /* defined __glibc_likely */ + + +/* A substitute for glibc <libc-symbols.h>, good enough for Gnulib.  */ +#define attribute_hidden +#define libc_hidden_proto(name) +#define libc_hidden_def(name) +#define libc_hidden_weak(name) +#define libc_hidden_ver(local, name) +#define strong_alias(name, aliasname) +#define weak_alias(name, aliasname) + +/* A substitute for glibc <shlib-compat.h>, good enough for Gnulib.  */ +#define SHLIB_COMPAT(lib, introduced, obsoleted) 0 +#define compat_symbol(lib, local, symbol, version) extern int dummy +#define versioned_symbol(lib, local, symbol, version) extern int dummy diff --git a/tests/listen.c b/tests/listen.c index e67bdc9e..785b1319 100644 --- a/tests/listen.c +++ b/tests/listen.c @@ -1,6 +1,6 @@  /* listen.c --- wrappers for Windows listen function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/locale.c b/tests/locale.c index d7ae6103..bd2bc00e 100644 --- a/tests/locale.c +++ b/tests/locale.c @@ -1,5 +1,5 @@  /* Program that prints the names of the categories of the current locale. -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/lstat.c b/tests/lstat.c index 472bfbce..7c09957e 100644 --- a/tests/lstat.c +++ b/tests/lstat.c @@ -1,6 +1,6 @@  /* Work around a bug of lstat on some systems -   Copyright (C) 1997-2006, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 1997-2006, 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/macros.h b/tests/macros.h index 7f5eb2de..d182cd6f 100644 --- a/tests/macros.h +++ b/tests/macros.h @@ -1,5 +1,5 @@  /* Common macros used by gnulib tests. -   Copyright (C) 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/malloc.c b/tests/malloc.c index f334dd6e..2a7867a1 100644 --- a/tests/malloc.c +++ b/tests/malloc.c @@ -1,6 +1,6 @@  /* malloc() function that is glibc compatible. -   Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 1997-1998, 2006-2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/mbtowc-impl.h b/tests/mbtowc-impl.h index 2b27bafd..92efb4a7 100644 --- a/tests/mbtowc-impl.h +++ b/tests/mbtowc-impl.h @@ -1,5 +1,5 @@  /* Convert multibyte character to wide character. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This file is free software: you can redistribute it and/or modify @@ -30,7 +30,7 @@ mbtowc (wchar_t *pwc, const char *s, size_t n)        wchar_t wc;        size_t result; -      memset (&state, 0, sizeof (mbstate_t)); +      mbszero (&state);        result = mbrtowc (&wc, s, n, &state);        if (result == (size_t)-1 || result == (size_t)-2)          { diff --git a/tests/mbtowc.c b/tests/mbtowc.c index a9a79951..31a2d635 100644 --- a/tests/mbtowc.c +++ b/tests/mbtowc.c @@ -1,5 +1,5 @@  /* Convert multibyte character to wide character. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This file is free software: you can redistribute it and/or modify diff --git a/tests/minus-zero.h b/tests/minus-zero.h index d43d8e32..73a388f6 100644 --- a/tests/minus-zero.h +++ b/tests/minus-zero.h @@ -1,5 +1,5 @@  /* Macros for floating-point negative zero. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/msvc-inval.c b/tests/msvc-inval.c index d6651caa..da3fc86a 100644 --- a/tests/msvc-inval.c +++ b/tests/msvc-inval.c @@ -1,5 +1,5 @@  /* Invalid parameter handler for MSVC runtime libraries. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/msvc-inval.h b/tests/msvc-inval.h index 1230b899..7aee6e5d 100644 --- a/tests/msvc-inval.h +++ b/tests/msvc-inval.h @@ -1,5 +1,5 @@  /* Invalid parameter handler for MSVC runtime libraries. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -52,6 +52,11 @@         AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING])   */ +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #define DEFAULT_HANDLING       0  #define HAIRY_LIBRARY_HANDLING 1  #define SANE_LIBRARY_HANDLING  2 diff --git a/tests/msvc-nothrow.c b/tests/msvc-nothrow.c index aa069643..06b35a61 100644 --- a/tests/msvc-nothrow.c +++ b/tests/msvc-nothrow.c @@ -1,6 +1,6 @@  /* Wrappers that don't throw invalid parameter notifications     with MSVC runtime libraries. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/msvc-nothrow.h b/tests/msvc-nothrow.h index 53451557..dc6dd35d 100644 --- a/tests/msvc-nothrow.h +++ b/tests/msvc-nothrow.h @@ -1,6 +1,6 @@  /* Wrappers that don't throw invalid parameter notifications     with MSVC runtime libraries. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -25,6 +25,11 @@     This file defines wrappers that turn such an invalid parameter notification     into an error code.  */ +/* This file uses HAVE_MSVC_INVALID_PARAMETER_HANDLER.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #if defined _WIN32 && ! defined __CYGWIN__  /* Get original declaration of _get_osfhandle.  */ diff --git a/tests/nan.h b/tests/nan.h index 6a3a239a..d540a0bb 100644 --- a/tests/nan.h +++ b/tests/nan.h @@ -1,5 +1,5 @@ -/* Macros for not-a-number. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +/* Macros for quiet not-a-number. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -14,6 +14,9 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ +#ifndef _GL_NAN_H +#define _GL_NAN_H +  /* IBM z/OS supports both hexadecimal and IEEE floating-point formats. The     former does not support NaN and its isnan() implementation returns zero @@ -26,14 +29,15 @@  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke     on the expression 0.0 / 0.0.  The IBM XL C compiler on z/OS complains. -   PGI 16.10 complains.  */ +   PGI 16.10 complains.  clang 13 on mips64 does incorrect constant-folding.  */  #if (defined __DECC || defined _MSC_VER \ -     || (defined __MVS__ && defined __IBMC__)   \ -     || defined __PGI) +     || (defined __MVS__ && defined __IBMC__) \ +     || defined __PGI \ +     || defined __mips__)  static float  NaNf ()  { -  static float zero = 0.0f; +  static float volatile zero = 0.0f;    return zero / zero;  }  #else @@ -45,14 +49,15 @@ NaNf ()  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke     on the expression 0.0 / 0.0.  The IBM XL C compiler on z/OS complains. -   PGI 16.10 complains.  */ +   PGI 16.10 complains.  clang 13 on mips64 does incorrect constant-folding.  */  #if (defined __DECC || defined _MSC_VER \ -     || (defined __MVS__ && defined __IBMC__)   \ -     || defined __PGI) +     || (defined __MVS__ && defined __IBMC__) \ +     || defined __PGI \ +     || defined __mips__)  static double  NaNd ()  { -  static double zero = 0.0; +  static double volatile zero = 0.0;    return zero / zero;  }  #else @@ -66,20 +71,27 @@ NaNd ()     runtime type conversion.     The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L.     The IBM XL C compiler on z/OS complains. -   PGI 16.10 complains.  */ +   PGI 16.10 complains. +   Avoid possible incorrect constant-folding on mips.  */  #ifdef __sgi  static long double NaNl ()  {    double zero = 0.0;    return zero / zero;  } -#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI +#elif (defined _MSC_VER \ +       || (defined __MVS__ && defined __IBMC__) \ +       || defined __PGI \ +       || defined __mips__)  static long double  NaNl ()  { -  static long double zero = 0.0L; +  static long double volatile zero = 0.0L;    return zero / zero;  }  #else  # define NaNl() (0.0L / 0.0L)  #endif + + +#endif /* _GL_NAN_H */ diff --git a/tests/nanosleep.c b/tests/nanosleep.c index 55d6fa65..c6a76ec0 100644 --- a/tests/nanosleep.c +++ b/tests/nanosleep.c @@ -1,6 +1,6 @@  /* Provide a replacement for the POSIX nanosleep function. -   Copyright (C) 1999-2000, 2002, 2004-2022 Free Software Foundation, Inc. +   Copyright (C) 1999-2000, 2002, 2004-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -60,8 +60,7 @@ nanosleep (const struct timespec *requested_delay,      static_assert (TYPE_MAXIMUM (time_t) / 24 / 24 / 60 / 60);      const time_t limit = 24 * 24 * 60 * 60;      time_t seconds = requested_delay->tv_sec; -    struct timespec intermediate; -    intermediate.tv_nsec = requested_delay->tv_nsec; +    struct timespec intermediate = *requested_delay;      while (limit < seconds)        { diff --git a/tests/nap.h b/tests/nap.h index 37f8009c..cf7d998b 100644 --- a/tests/nap.h +++ b/tests/nap.h @@ -1,5 +1,5 @@  /* Assist in file system timestamp tests. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/netinet_in.in.h b/tests/netinet_in.in.h index e23807ca..4e9f6f2d 100644 --- a/tests/netinet_in.in.h +++ b/tests/netinet_in.in.h @@ -1,5 +1,5 @@  /* Substitute for <netinet/in.h>. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/open.c b/tests/open.c index 170bff10..e690c9ea 100644 --- a/tests/open.c +++ b/tests/open.c @@ -1,5 +1,5 @@  /* Open a descriptor to a file. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -38,9 +38,13 @@ orig_open (const char *filename, int flags, mode_t mode)  }  /* Specification.  */ +#ifdef __osf__  /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates     this include because of the preliminary #include <fcntl.h> above.  */ -#include "fcntl.h" +# include "fcntl.h" +#else +# include <fcntl.h> +#endif  #include "cloexec.h" diff --git a/tests/pathmax.h b/tests/pathmax.h index 19b93d7e..d6512c6f 100644 --- a/tests/pathmax.h +++ b/tests/pathmax.h @@ -1,5 +1,5 @@  /* Define PATH_MAX somehow.  Requires sys/types.h. -   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software +   Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2024 Free Software     Foundation, Inc.     This file is free software: you can redistribute it and/or modify @@ -39,6 +39,11 @@           #endif   */ +/* This file uses HAVE_SYS_PARAM_H.  */ +# if !_GL_CONFIG_H_INCLUDED +#  error "Please include config.h first." +# endif +  # include <unistd.h>  # include <limits.h> diff --git a/tests/perror.c b/tests/perror.c index 977a9a55..f29cd031 100644 --- a/tests/perror.c +++ b/tests/perror.c @@ -1,5 +1,5 @@  /* Print a message describing error code. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     Written by Bruno Haible and Simon Josefsson.     This file is free software: you can redistribute it and/or modify diff --git a/tests/pipe.c b/tests/pipe.c index ce909b9f..fa6db541 100644 --- a/tests/pipe.c +++ b/tests/pipe.c @@ -1,5 +1,5 @@  /* Create a pipe. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/pselect.c b/tests/pselect.c index a1eca0c6..54732e5c 100644 --- a/tests/pselect.c +++ b/tests/pselect.c @@ -1,6 +1,6 @@  /* pselect - synchronous I/O multiplexing -   Copyright 2011-2022 Free Software Foundation, Inc. +   Copyright 2011-2024 Free Software Foundation, Inc.     This file is part of gnulib. @@ -45,6 +45,12 @@ pselect (int nfds, fd_set *restrict rfds,    sigset_t origmask;    struct timeval tv, *tvp; +  if (nfds < 0 || nfds > FD_SETSIZE) +    { +      errno = EINVAL; +      return -1; +    } +    if (timeout)      {        if (! (0 <= timeout->tv_nsec && timeout->tv_nsec < 1000000000)) @@ -53,8 +59,10 @@ pselect (int nfds, fd_set *restrict rfds,            return -1;          } -      tv.tv_sec = timeout->tv_sec; -      tv.tv_usec = (timeout->tv_nsec + 999) / 1000; +      tv = (struct timeval) { +        .tv_sec = timeout->tv_sec, +        .tv_usec = (timeout->tv_nsec + 999) / 1000 +      };        tvp = &tv;      }    else diff --git a/tests/pthread-thread.c b/tests/pthread-thread.c index a5f07fb2..b81748d1 100644 --- a/tests/pthread-thread.c +++ b/tests/pthread-thread.c @@ -1,5 +1,5 @@  /* Creating and controlling POSIX threads. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/pthread.in.h b/tests/pthread.in.h index cf9ca3a4..cd705fbd 100644 --- a/tests/pthread.in.h +++ b/tests/pthread.in.h @@ -1,6 +1,6 @@  /* Implement the most essential subset of POSIX 1003.1-2008 pthread.h. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -51,6 +51,12 @@  #ifndef _@GUARD_PREFIX@_PTHREAD_H_  #define _@GUARD_PREFIX@_PTHREAD_H_ +/* This file uses _Noreturn, _GL_ATTRIBUTE_PURE, GNULIB_POSIXCHECK, +   HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #define __need_system_stdlib_h  #include <stdlib.h>  #undef __need_system_stdlib_h @@ -409,7 +415,21 @@ typedef pthread_mutex_t pthread_spinlock_t;  # define PTHREAD_PROCESS_PRIVATE 0  # define PTHREAD_PROCESS_SHARED 1  #else -# if !@HAVE_PTHREAD_SPINLOCK_T@ +# if @HAVE_PTHREAD_SPINLOCK_T@ +/* <pthread.h> exists and defines pthread_spinlock_t.  */ +#  if !(((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7) \ +          || __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 1)) \ +         || (((__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) \ +              && !defined __ANDROID__) \ +             || __clang_major__ >= 3)) \ +        && !defined __ibmxl__) +/* We can't use GCC built-ins.  Approximate spinlocks with mutexes.  */ +#   if !GNULIB_defined_pthread_spin_types +#    define pthread_spinlock_t pthread_mutex_t +#    define GNULIB_defined_pthread_spin_types 1 +#   endif +#  endif +# else  /* Approximate spinlocks with mutexes.  */  #  if !GNULIB_defined_pthread_spin_types  typedef pthread_mutex_t pthread_spinlock_t; diff --git a/tests/pthread_sigmask.c b/tests/pthread_sigmask.c index cd4eb807..3b6e6e45 100644 --- a/tests/pthread_sigmask.c +++ b/tests/pthread_sigmask.c @@ -1,5 +1,5 @@  /* POSIX compatible signal blocking for threads. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/putenv.c b/tests/putenv.c index b0d27e2f..2ab6f248 100644 --- a/tests/putenv.c +++ b/tests/putenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2022 Free Software +/* Copyright (C) 1991, 1994, 1997-1998, 2000, 2003-2024 Free Software     Foundation, Inc.     NOTE: The canonical source of this file is maintained with the GNU C diff --git a/tests/raise.c b/tests/raise.c index 385ddd38..891f355a 100644 --- a/tests/raise.c +++ b/tests/raise.c @@ -1,6 +1,6 @@  /* Provide a non-threads replacement for the POSIX raise function. -   Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2002-2003, 2005-2006, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/random.c b/tests/random.c new file mode 100644 index 00000000..97ba1691 --- /dev/null +++ b/tests/random.c @@ -0,0 +1,317 @@ +/* Copyright (C) 1995-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation, either version 3 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* + * This is derived from the Berkeley source: + *      @(#)random.c    5.5 (Berkeley) 7/6/88 + * It was reworked for the GNU C Library by Roland McGrath. + * Rewritten to use reentrant functions by Ulrich Drepper, 1995. + */ + +/* +   Copyright (C) 1983 Regents of the University of California. +   All rights reserved. + +   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. +   4. Neither the name of the University nor the names of its contributors +      may be used to endorse or promote products derived from this software +      without specific prior written permission. + +   THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.*/ + +#ifndef _LIBC +# include <libc-config.h> +# define __srandom srandom +# define __initstate initstate +# define __setstate setstate +# define __random random +# define __srandom_r srandom_r +# define __initstate_r initstate_r +# define __setstate_r setstate_r +# define __random_r random_r +#endif + +/* Specification.  */ +#include <stdlib.h> + +#ifdef _LIBC +# include <libc-lock.h> +#else +# include "glthread/lock.h" +# define __libc_lock_define_initialized gl_lock_define_initialized +# define __libc_lock_lock gl_lock_lock +# define __libc_lock_unlock gl_lock_unlock +#endif + +/* An improved random number generation package.  In addition to the standard +   rand()/srand() like interface, this package also has a special state info +   interface.  The initstate() routine is called with a seed, an array of +   bytes, and a count of how many bytes are being passed in; this array is +   then initialized to contain information for random number generation with +   that much state information.  Good sizes for the amount of state +   information are 32, 64, 128, and 256 bytes.  The state can be switched by +   calling the setstate() function with the same array as was initialized +   with initstate().  By default, the package runs with 128 bytes of state +   information and generates far better random numbers than a linear +   congruential generator.  If the amount of state information is less than +   32 bytes, a simple linear congruential R.N.G. is used.  Internally, the +   state information is treated as an array of longs; the zeroth element of +   the array is the type of R.N.G. being used (small integer); the remainder +   of the array is the state information for the R.N.G.  Thus, 32 bytes of +   state information will give 7 longs worth of state information, which will +   allow a degree seven polynomial.  (Note: The zeroth word of state +   information also has some other information stored in it; see setstate +   for details).  The random number generation technique is a linear feedback +   shift register approach, employing trinomials (since there are fewer terms +   to sum up that way).  In this approach, the least significant bit of all +   the numbers in the state table will act as a linear feedback shift register, +   and will have period 2^deg - 1 (where deg is the degree of the polynomial +   being used, assuming that the polynomial is irreducible and primitive). +   The higher order bits will have longer periods, since their values are +   also influenced by pseudo-random carries out of the lower bits.  The +   total period of the generator is approximately deg*(2**deg - 1); thus +   doubling the amount of state information has a vast influence on the +   period of the generator.  Note: The deg*(2**deg - 1) is an approximation +   only good for large deg, when the period of the shift register is the +   dominant factor.  With deg equal to seven, the period is actually much +   longer than the 7*(2**7 - 1) predicted by this formula.  */ + + + +/* For each of the currently supported random number generators, we have a +   break value on the amount of state information (you need at least this many +   bytes of state info to support this random number generator), a degree for +   the polynomial (actually a trinomial) that the R.N.G. is based on, and +   separation between the two lower order coefficients of the trinomial.  */ + +/* Linear congruential.  */ +#define TYPE_0          0 +#define BREAK_0         8 +#define DEG_0           0 +#define SEP_0           0 + +/* x**7 + x**3 + 1.  */ +#define TYPE_1          1 +#define BREAK_1         32 +#define DEG_1           7 +#define SEP_1           3 + +/* x**15 + x + 1.  */ +#define TYPE_2          2 +#define BREAK_2         64 +#define DEG_2           15 +#define SEP_2           1 + +/* x**31 + x**3 + 1.  */ +#define TYPE_3          3 +#define BREAK_3         128 +#define DEG_3           31 +#define SEP_3           3 + +/* x**63 + x + 1.  */ +#define TYPE_4          4 +#define BREAK_4         256 +#define DEG_4           63 +#define SEP_4           1 + + +/* Array versions of the above information to make code run faster. +   Relies on fact that TYPE_i == i.  */ + +#define MAX_TYPES       5       /* Max number of types above.  */ + + +/* Initially, everything is set up as if from: +        initstate(1, randtbl, 128); +   Note that this initialization takes advantage of the fact that srandom +   advances the front and rear pointers 10*rand_deg times, and hence the +   rear pointer which starts at 0 will also end up at zero; thus the zeroth +   element of the state information, which contains info about the current +   position of the rear pointer is just +        (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3.  */ + +static int32_t randtbl[DEG_3 + 1] = +  { +    TYPE_3, + +    -1726662223, 379960547, 1735697613, 1040273694, 1313901226, +    1627687941, -179304937, -2073333483, 1780058412, -1989503057, +    -615974602, 344556628, 939512070, -1249116260, 1507946756, +    -812545463, 154635395, 1388815473, -1926676823, 525320961, +    -1009028674, 968117788, -123449607, 1284210865, 435012392, +    -2017506339, -911064859, -370259173, 1132637927, 1398500161, +    -205601318, +  }; + + +static struct random_data unsafe_state = +  { +/* FPTR and RPTR are two pointers into the state info, a front and a rear +   pointer.  These two pointers are always rand_sep places apart, as they +   cycle through the state information.  (Yes, this does mean we could get +   away with just one pointer, but the code for random is more efficient +   this way).  The pointers are left positioned as they would be from the call: +        initstate(1, randtbl, 128); +   (The position of the rear pointer, rptr, is really 0 (as explained above +   in the initialization of randtbl) because the state table pointer is set +   to point to randtbl[1] (as explained below).)  */ + +    .fptr = &randtbl[SEP_3 + 1], +    .rptr = &randtbl[1], + +/* The following things are the pointer to the state information table, +   the type of the current generator, the degree of the current polynomial +   being used, and the separation between the two pointers. +   Note that for efficiency of random, we remember the first location of +   the state information, not the zeroth.  Hence it is valid to access +   state[-1], which is used to store the type of the R.N.G. +   Also, we remember the last location, since this is more efficient than +   indexing every time to find the address of the last element to see if +   the front and rear pointers have wrapped.  */ + +    .state = &randtbl[1], + +    .rand_type = TYPE_3, +    .rand_deg = DEG_3, +    .rand_sep = SEP_3, + +    .end_ptr = &randtbl[sizeof (randtbl) / sizeof (randtbl[0])] +}; + +/* POSIX.1c requires that there is mutual exclusion for the 'rand' and +   'srand' functions to prevent concurrent calls from modifying common +   data.  */ +__libc_lock_define_initialized (static, lock) + +/* Initialize the random number generator based on the given seed.  If the +   type is the trivial no-state-information type, just remember the seed. +   Otherwise, initializes state[] based on the given "seed" via a linear +   congruential generator.  Then, the pointers are set to known locations +   that are exactly rand_sep places apart.  Lastly, it cycles the state +   information a given number of times to get rid of any initial dependencies +   introduced by the L.C.R.N.G.  Note that the initialization of randtbl[] +   for default usage relies on values produced by this routine.  */ +void +__srandom (unsigned int x) +{ +  __libc_lock_lock (lock); +  (void) __srandom_r (x, &unsafe_state); +  __libc_lock_unlock (lock); +} + +weak_alias (__srandom, srandom) +weak_alias (__srandom, srand) + +/* Initialize the state information in the given array of N bytes for +   future random number generation.  Based on the number of bytes we +   are given, and the break values for the different R.N.G.'s, we choose +   the best (largest) one we can and set things up for it.  srandom is +   then called to initialize the state information.  Note that on return +   from srandom, we set state[-1] to be the type multiplexed with the current +   value of the rear pointer; this is so successive calls to initstate won't +   lose this information and will be able to restart with setstate. +   Note: The first thing we do is save the current state, if any, just like +   setstate so that it doesn't matter when initstate is called. +   Returns a pointer to the old state.  */ +char * +__initstate (unsigned int seed, char *arg_state, size_t n) +{ +  int32_t *ostate; +  int ret; + +  __libc_lock_lock (lock); + +  ostate = &unsafe_state.state[-1]; + +  ret = __initstate_r (seed, arg_state, n, &unsafe_state); + +  __libc_lock_unlock (lock); + +  return ret == -1 ? NULL : (char *) ostate; +} + +weak_alias (__initstate, initstate) + +/* Restore the state from the given state array. +   Note: It is important that we also remember the locations of the pointers +   in the current state information, and restore the locations of the pointers +   from the old state information.  This is done by multiplexing the pointer +   location into the zeroth word of the state information. Note that due +   to the order in which things are done, it is OK to call setstate with the +   same state as the current state +   Returns a pointer to the old state information.  */ +char * +__setstate (char *arg_state) +{ +  int32_t *ostate; + +  __libc_lock_lock (lock); + +  ostate = &unsafe_state.state[-1]; + +  if (__setstate_r (arg_state, &unsafe_state) < 0) +    ostate = NULL; + +  __libc_lock_unlock (lock); + +  return (char *) ostate; +} + +weak_alias (__setstate, setstate) + +/* If we are using the trivial TYPE_0 R.N.G., just do the old linear +   congruential bit.  Otherwise, we do our fancy trinomial stuff, which is the +   same in all the other cases due to all the global variables that have been +   set up.  The basic operation is to add the number at the rear pointer into +   the one at the front pointer.  Then both pointers are advanced to the next +   location cyclically in the table.  The value returned is the sum generated, +   reduced to 31 bits by throwing away the "least random" low bit. +   Note: The code takes advantage of the fact that both the front and +   rear pointers can't wrap on the same call by not testing the rear +   pointer if the front one has wrapped.  Returns a 31-bit random number.  */ + +long int +__random (void) +{ +  int32_t retval; + +  __libc_lock_lock (lock); + +  (void) __random_r (&unsafe_state, &retval); + +  __libc_lock_unlock (lock); + +  return retval; +} + +weak_alias (__random, random) diff --git a/tests/random_r.c b/tests/random_r.c new file mode 100644 index 00000000..b0ab81ac --- /dev/null +++ b/tests/random_r.c @@ -0,0 +1,430 @@ +/* +   Copyright (C) 1995-2024 Free Software Foundation, Inc. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public +   License as published by the Free Software Foundation; either +   version 2.1 of the License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; if not, see +   <https://www.gnu.org/licenses/>.  */ + +/* +   Copyright (C) 1983 Regents of the University of California. +   All rights reserved. + +   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. +   4. Neither the name of the University nor the names of its contributors +      may be used to endorse or promote products derived from this software +      without specific prior written permission. + +   THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.*/ + +/* + * This is derived from the Berkeley source: + *      @(#)random.c    5.5 (Berkeley) 7/6/88 + * It was reworked for the GNU C Library by Roland McGrath. + * Rewritten to be reentrant by Ulrich Drepper, 1995 + */ + +#ifndef _LIBC +/* Don't use __attribute__ __nonnull__ in this compilation unit.  Otherwise gcc +   optimizes away the buf == NULL, arg_state == NULL, result == NULL tests +   below.  */ +# define _GL_ARG_NONNULL(params) + +# include <libc-config.h> +# define __srandom_r srandom_r +# define __initstate_r initstate_r +# define __setstate_r setstate_r +# define __random_r random_r +#endif + +/* Specification.  */ +#include <stdlib.h> + +#include <errno.h> +#include <stddef.h> +#include <string.h> + + +/* An improved random number generation package.  In addition to the standard +   rand()/srand() like interface, this package also has a special state info +   interface.  The initstate() routine is called with a seed, an array of +   bytes, and a count of how many bytes are being passed in; this array is +   then initialized to contain information for random number generation with +   that much state information.  Good sizes for the amount of state +   information are 32, 64, 128, and 256 bytes.  The state can be switched by +   calling the setstate() function with the same array as was initialized +   with initstate().  By default, the package runs with 128 bytes of state +   information and generates far better random numbers than a linear +   congruential generator.  If the amount of state information is less than +   32 bytes, a simple linear congruential R.N.G. is used.  Internally, the +   state information is treated as an array of longs; the zeroth element of +   the array is the type of R.N.G. being used (small integer); the remainder +   of the array is the state information for the R.N.G.  Thus, 32 bytes of +   state information will give 7 longs worth of state information, which will +   allow a degree seven polynomial.  (Note: The zeroth word of state +   information also has some other information stored in it; see setstate +   for details).  The random number generation technique is a linear feedback +   shift register approach, employing trinomials (since there are fewer terms +   to sum up that way).  In this approach, the least significant bit of all +   the numbers in the state table will act as a linear feedback shift register, +   and will have period 2^deg - 1 (where deg is the degree of the polynomial +   being used, assuming that the polynomial is irreducible and primitive). +   The higher order bits will have longer periods, since their values are +   also influenced by pseudo-random carries out of the lower bits.  The +   total period of the generator is approximately deg*(2**deg - 1); thus +   doubling the amount of state information has a vast influence on the +   period of the generator.  Note: The deg*(2**deg - 1) is an approximation +   only good for large deg, when the period of the shift register is the +   dominant factor.  With deg equal to seven, the period is actually much +   longer than the 7*(2**7 - 1) predicted by this formula.  */ + + + +/* For each of the currently supported random number generators, we have a +   break value on the amount of state information (you need at least this many +   bytes of state info to support this random number generator), a degree for +   the polynomial (actually a trinomial) that the R.N.G. is based on, and +   separation between the two lower order coefficients of the trinomial.  */ + +/* Linear congruential.  */ +#define TYPE_0          0 +#define BREAK_0         8 +#define DEG_0           0 +#define SEP_0           0 + +/* x**7 + x**3 + 1.  */ +#define TYPE_1          1 +#define BREAK_1         32 +#define DEG_1           7 +#define SEP_1           3 + +/* x**15 + x + 1.  */ +#define TYPE_2          2 +#define BREAK_2         64 +#define DEG_2           15 +#define SEP_2           1 + +/* x**31 + x**3 + 1.  */ +#define TYPE_3          3 +#define BREAK_3         128 +#define DEG_3           31 +#define SEP_3           3 + +/* x**63 + x + 1.  */ +#define TYPE_4          4 +#define BREAK_4         256 +#define DEG_4           63 +#define SEP_4           1 + + +/* Array versions of the above information to make code run faster. +   Relies on fact that TYPE_i == i.  */ + +#define MAX_TYPES       5       /* Max number of types above.  */ + +struct random_poly_info +{ +  int seps[MAX_TYPES]; +  int degrees[MAX_TYPES]; +}; + +static const struct random_poly_info random_poly_info = +{ +  { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }, +  { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 } +}; + +static int32_t +get_int32 (void *p) +{ +  int32_t v; +  memcpy (&v, p, sizeof v); +  return v; +} + +static void +set_int32 (void *p, int32_t v) +{ +  memcpy (p, &v, sizeof v); +} + + +/* Initialize the random number generator based on the given seed.  If the +   type is the trivial no-state-information type, just remember the seed. +   Otherwise, initializes state[] based on the given "seed" via a linear +   congruential generator.  Then, the pointers are set to known locations +   that are exactly rand_sep places apart.  Lastly, it cycles the state +   information a given number of times to get rid of any initial dependencies +   introduced by the L.C.R.N.G.  Note that the initialization of randtbl[] +   for default usage relies on values produced by this routine.  */ +int +__srandom_r (unsigned int seed, struct random_data *buf) +{ +  int type; +  int32_t *state; +  long int i; +  int32_t word; +  int32_t *dst; +  int kc; + +  if (buf == NULL) +    goto fail; +  type = buf->rand_type; +  if ((unsigned int) type >= MAX_TYPES) +    goto fail; + +  state = buf->state; +  /* We must make sure the seed is not 0.  Take arbitrarily 1 in this case.  */ +  if (seed == 0) +    seed = 1; +  set_int32 (&state[0], seed); +  if (type == TYPE_0) +    goto done; + +  dst = state; +  word = seed; +  kc = buf->rand_deg; +  for (i = 1; i < kc; ++i) +    { +      /* This does: +           state[i] = (16807 * state[i - 1]) % 2147483647; +         but avoids overflowing 31 bits.  */ +      long int hi = word / 127773; +      long int lo = word % 127773; +      word = 16807 * lo - 2836 * hi; +      if (word < 0) +        word += 2147483647; +      set_int32 (++dst, word); +    } + +  buf->fptr = &state[buf->rand_sep]; +  buf->rptr = &state[0]; +  kc *= 10; +  while (--kc >= 0) +    { +      int32_t discard; +      (void) __random_r (buf, &discard); +    } + + done: +  return 0; + + fail: +  return -1; +} + +weak_alias (__srandom_r, srandom_r) + +/* Initialize the state information in the given array of N bytes for +   future random number generation.  Based on the number of bytes we +   are given, and the break values for the different R.N.G.'s, we choose +   the best (largest) one we can and set things up for it.  srandom is +   then called to initialize the state information.  Note that on return +   from srandom, we set state[-1] to be the type multiplexed with the current +   value of the rear pointer; this is so successive calls to initstate won't +   lose this information and will be able to restart with setstate. +   Note: The first thing we do is save the current state, if any, just like +   setstate so that it doesn't matter when initstate is called. +   Returns 0 on success, non-zero on failure.  */ +int +__initstate_r (unsigned int seed, char *arg_state, size_t n, +               struct random_data *buf) +{ +  if (buf == NULL) +    goto fail; + +  int32_t *old_state = buf->state; +  if (old_state != NULL) +    { +      int old_type = buf->rand_type; +      set_int32 (&old_state[-1], +                 (old_type == TYPE_0 +                  ? TYPE_0 +                  : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); +    } + +  int type; +  if (n >= BREAK_3) +    type = n < BREAK_4 ? TYPE_3 : TYPE_4; +  else if (n < BREAK_1) +    { +      if (n < BREAK_0) +        goto fail; + +      type = TYPE_0; +    } +  else +    type = n < BREAK_2 ? TYPE_1 : TYPE_2; + +  int degree = random_poly_info.degrees[type]; +  int separation = random_poly_info.seps[type]; + +  buf->rand_type = type; +  buf->rand_sep = separation; +  buf->rand_deg = degree; +  int32_t *state = &((int32_t *) arg_state)[1]; /* First location.  */ +  /* Must set END_PTR before srandom.  */ +  buf->end_ptr = &state[degree]; + +  buf->state = state; + +  __srandom_r (seed, buf); + +  set_int32 (&state[-1], +             type == TYPE_0 ? TYPE_0 : (buf->rptr - state) * MAX_TYPES + type); + +  return 0; + + fail: +  __set_errno (EINVAL); +  return -1; +} + +weak_alias (__initstate_r, initstate_r) + +/* Restore the state from the given state array. +   Note: It is important that we also remember the locations of the pointers +   in the current state information, and restore the locations of the pointers +   from the old state information.  This is done by multiplexing the pointer +   location into the zeroth word of the state information. Note that due +   to the order in which things are done, it is OK to call setstate with the +   same state as the current state +   Returns 0 on success, non-zero on failure.  */ +int +__setstate_r (char *arg_state, struct random_data *buf) +{ +  int32_t *new_state = 1 + (int32_t *) arg_state; +  int type; +  int old_type; +  int32_t *old_state; +  int degree; +  int separation; + +  if (arg_state == NULL || buf == NULL) +    goto fail; + +  old_type = buf->rand_type; +  old_state = buf->state; +  set_int32 (&old_state[-1], +             (old_type == TYPE_0 +              ? TYPE_0 +              : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); + +  type = get_int32 (&new_state[-1]) % MAX_TYPES; +  if (type < TYPE_0 || type > TYPE_4) +    goto fail; + +  buf->rand_deg = degree = random_poly_info.degrees[type]; +  buf->rand_sep = separation = random_poly_info.seps[type]; +  buf->rand_type = type; + +  if (type != TYPE_0) +    { +      int rear = get_int32 (&new_state[-1]) / MAX_TYPES; +      buf->rptr = &new_state[rear]; +      buf->fptr = &new_state[(rear + separation) % degree]; +    } +  buf->state = new_state; +  /* Set end_ptr too.  */ +  buf->end_ptr = &new_state[degree]; + +  return 0; + + fail: +  __set_errno (EINVAL); +  return -1; +} + +weak_alias (__setstate_r, setstate_r) + +/* If we are using the trivial TYPE_0 R.N.G., just do the old linear +   congruential bit.  Otherwise, we do our fancy trinomial stuff, which is the +   same in all the other cases due to all the global variables that have been +   set up.  The basic operation is to add the number at the rear pointer into +   the one at the front pointer.  Then both pointers are advanced to the next +   location cyclically in the table.  The value returned is the sum generated, +   reduced to 31 bits by throwing away the "least random" low bit. +   Note: The code takes advantage of the fact that both the front and +   rear pointers can't wrap on the same call by not testing the rear +   pointer if the front one has wrapped.  Returns a 31-bit random number.  */ + +int +__random_r (struct random_data *buf, int32_t *result) +{ +  int32_t *state; + +  if (buf == NULL || result == NULL) +    goto fail; + +  state = buf->state; + +  if (buf->rand_type == TYPE_0) +    { +      int32_t val = (((get_int32 (&state[0]) * 1103515245U) + 12345U) +                     & 0x7fffffff); +      set_int32 (&state[0], val); +      *result = val; +    } +  else +    { +      int32_t *fptr = buf->fptr; +      int32_t *rptr = buf->rptr; +      int32_t *end_ptr = buf->end_ptr; +      /* F and R are unsigned int, not uint32_t, to avoid undefined +         overflow behavior on platforms where INT_MAX == UINT32_MAX.  */ +      unsigned int f = get_int32 (fptr); +      unsigned int r = get_int32 (rptr); +      uint32_t val = f + r; +      set_int32 (fptr, val); +      /* Chucking least random bit.  */ +      *result = val >> 1; +      ++fptr; +      if (fptr >= end_ptr) +        { +          fptr = state; +          ++rptr; +        } +      else +        { +          ++rptr; +          if (rptr >= end_ptr) +            rptr = state; +        } +      buf->fptr = fptr; +      buf->rptr = rptr; +    } +  return 0; + + fail: +  __set_errno (EINVAL); +  return -1; +} + +weak_alias (__random_r, random_r) diff --git a/tests/randomd.c b/tests/randomd.c index 87e8faef..df2edbf3 100644 --- a/tests/randomd.c +++ b/tests/randomd.c @@ -1,5 +1,5 @@  /* Some random 'double' numbers used by gnulib tests. -   Copyright (C) 2012-2022 Free Software Foundation, Inc. +   Copyright (C) 2012-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/randoml.c b/tests/randoml.c index 8feab2a9..7a52f8a2 100644 --- a/tests/randoml.c +++ b/tests/randoml.c @@ -1,5 +1,5 @@  /* Some random 'long double' numbers used by gnulib tests. -   Copyright (C) 2012-2022 Free Software Foundation, Inc. +   Copyright (C) 2012-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/realloc.c b/tests/realloc.c index c8783815..05731396 100644 --- a/tests/realloc.c +++ b/tests/realloc.c @@ -1,6 +1,6 @@  /* realloc() function that is glibc compatible. -   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software +   Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2024 Free Software     Foundation, Inc.     This file is free software: you can redistribute it and/or modify diff --git a/tests/reallocarray.c b/tests/reallocarray.c index 70c1b478..09711a0e 100644 --- a/tests/reallocarray.c +++ b/tests/reallocarray.c @@ -1,6 +1,6 @@  /* reallocarray function that is glibc compatible. -   Copyright (C) 2017-2022 Free Software Foundation, Inc. +   Copyright (C) 2017-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/same-inode.c b/tests/same-inode.c new file mode 100644 index 00000000..08c66a25 --- /dev/null +++ b/tests/same-inode.c @@ -0,0 +1,3 @@ +#include <config.h> +#define SAME_INODE_INLINE _GL_EXTERN_INLINE +#include "same-inode.h" diff --git a/tests/same-inode.h b/tests/same-inode.h index f65f3d03..62dd088e 100644 --- a/tests/same-inode.h +++ b/tests/same-inode.h @@ -1,6 +1,6 @@  /* Determine whether two stat buffers are known to refer to the same file. -   Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2006, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -16,32 +16,70 @@     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */  #ifndef SAME_INODE_H -# define SAME_INODE_H 1 - -# include <sys/types.h> - -# if defined __VMS && __CRTL_VER < 80200000 -#  define SAME_INODE(a, b)             \ -    ((a).st_ino[0] == (b).st_ino[0]    \ -     && (a).st_ino[1] == (b).st_ino[1] \ -     && (a).st_ino[2] == (b).st_ino[2] \ -     && (a).st_dev == (b).st_dev) -# elif defined _WIN32 && ! defined __CYGWIN__ -   /* Native Windows.  */ -#  if _GL_WINDOWS_STAT_INODES -    /* stat() and fstat() set st_dev and st_ino to 0 if information about -       the inode is not available.  */ -#   define SAME_INODE(a, b) \ -     (!((a).st_ino == 0 && (a).st_dev == 0) \ -      && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) +#define SAME_INODE_H 1 + +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + +#include <sys/stat.h> + +_GL_INLINE_HEADER_BEGIN +#ifndef SAME_INODE_INLINE +# define SAME_INODE_INLINE _GL_INLINE +#endif + +/* True if A and B point to structs with st_dev and st_ino members +   that are known to represent the same file. + +   Use | and ^ to shorten generated code, and to lessen the +   probability of screwups if st_ino is an array.  */ + +#if defined __VMS && __CRTL_VER < 80200000 +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ +                               | ((a)->st_ino[0] ^ (b)->st_ino[0]) \ +                               | ((a)->st_ino[1] ^ (b)->st_ino[1]) \ +                               | ((a)->st_ino[2] ^ (b)->st_ino[2]))) +#elif defined _WIN32 && ! defined __CYGWIN__ +  /* Native Windows.  */ +# if _GL_WINDOWS_STAT_INODES +  /* stat() and fstat() set st_dev and st_ino to 0 if information about +     the inode is not available.  */ +#  if _GL_WINDOWS_STAT_INODES == 2 +#   define PSAME_INODE(a, b) \ +     (! (! ((a)->st_dev | (a)->st_ino._gl_ino[0] | (a)->st_ino._gl_ino[1]) \ +         | ((a)->st_dev ^ (b)->st_dev) \ +         | ((a)->st_ino._gl_ino[0] ^ (b)->st_ino._gl_ino[0]) \ +         | ((a)->st_ino._gl_ino[1] ^ (b)->st_ino._gl_ino[1])))  #  else -    /* stat() and fstat() set st_ino to 0 always.  */ -#   define SAME_INODE(a, b) 0 +#   define PSAME_INODE(a, b) (! (! ((a)->st_dev | (a)->st_ino) \ +                                 | ((a)->st_dev ^ (b)->st_dev) \ +                                 | ((a)->st_ino ^ (b)->st_ino)))  #  endif  # else -#  define SAME_INODE(a, b)    \ -    ((a).st_ino == (b).st_ino \ -     && (a).st_dev == (b).st_dev) +  /* stat() and fstat() set st_ino to 0 always.  */ +#  define PSAME_INODE(a, b) 0  # endif +#else +  /* POSIX.  */ +# define PSAME_INODE(a, b) (! (((a)->st_dev ^ (b)->st_dev) \ +                               | ((a)->st_ino ^ (b)->st_ino))) +#endif + +/* True if struct objects A and B are known to represent the same file.  */ + +#define SAME_INODE(a, b) PSAME_INODE (&(a), &(b)) + +/* True if *A and *B represent the same file.  Unlike PSAME_INODE, +   args are evaluated once and must point to struct stat.  */ + +SAME_INODE_INLINE bool +psame_inode (struct stat const *a, struct stat const *b) +{ +  return PSAME_INODE (a, b); +} + +_GL_INLINE_HEADER_END  #endif diff --git a/tests/sched.in.h b/tests/sched.in.h index d19c5022..838fb12b 100644 --- a/tests/sched.in.h +++ b/tests/sched.in.h @@ -1,5 +1,5 @@  /* A GNU-like <sched.h>. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -21,6 +21,13 @@  #endif  @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. +   For the 'year2038' module to work right, <config.h> needs to have been +   included before.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* The include_next requires a split double-inclusion guard.  */  #if @HAVE_SCHED_H@  # if @HAVE_SYS_CDEFS_H@ @@ -32,6 +39,11 @@  #ifndef _@GUARD_PREFIX@_SCHED_H  #define _@GUARD_PREFIX@_SCHED_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* Get pid_t.     This is needed on glibc 2.11 (see     glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) diff --git a/tests/sched_yield.c b/tests/sched_yield.c index 255de34e..72928b72 100644 --- a/tests/sched_yield.c +++ b/tests/sched_yield.c @@ -1,5 +1,5 @@  /* Schedule other threads to run. -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/select.c b/tests/select.c index c2424982..5f7a5d00 100644 --- a/tests/select.c +++ b/tests/select.c @@ -1,7 +1,7 @@  /* Emulation for select(2)     Contributed by Paolo Bonzini. -   Copyright 2008-2022 Free Software Foundation, Inc. +   Copyright 2008-2024 Free Software Foundation, Inc.     This file is part of gnulib. @@ -279,8 +279,11 @@ rpl_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,    int i, fd, rc;    clock_t tend; -  if (nfds > FD_SETSIZE) -    nfds = FD_SETSIZE; +  if (nfds < 0 || nfds > FD_SETSIZE) +    { +      errno = EINVAL; +      return -1; +    }    if (!timeout)      wait_timeout = INFINITE; diff --git a/tests/setenv.c b/tests/setenv.c index ebfd4e55..9e2e9e2f 100644 --- a/tests/setenv.c +++ b/tests/setenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2003, 2005-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2003, 2005-2024 Free Software Foundation, Inc.     This file is part of the GNU C Library.     This file is free software: you can redistribute it and/or modify @@ -82,6 +82,7 @@ typedef int (*compar_fn_t) (const void *, const void *);  static void *known_values;  # define KNOWN_VALUE(Str) \ +  __extension__                                                               \    ({                                                                          \      void *value = tfind (Str, &known_values, (compar_fn_t) strcmp);           \      value != NULL ? *(char **) value : NULL;                                  \ @@ -375,6 +376,11 @@ rpl_setenv (const char *name, const char *value, int replace)            int saved_errno;            size_t len = strlen (value);            tmp = malloca (len + 2); +          if (tmp == NULL) +            { +              errno = ENOMEM; +              return -1; +            }            /* Since leading '=' is eaten, double it up.  */            *tmp = '=';            memcpy (tmp + 1, value, len + 1); diff --git a/tests/setlocale.c b/tests/setlocale.c index b9a29ee6..eb263617 100644 --- a/tests/setlocale.c +++ b/tests/setlocale.c @@ -1,5 +1,5 @@  /* Set the current locale.  -*- coding: utf-8 -*- -   Copyright (C) 2009, 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2009, 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -1574,7 +1574,7 @@ setlocale_improved (int category, const char *locale)                             For LC_COLLATE, the application should use the locale                             properties kCFLocaleCollationIdentifier,                             kCFLocaleCollatorIdentifier. -                           For LC_MONETARY, the applicationshould use the locale +                           For LC_MONETARY, the application should use the locale                             properties kCFLocaleCurrencySymbol,                             kCFLocaleCurrencyCode.                             But since most applications don't have macOS specific diff --git a/tests/setsockopt.c b/tests/setsockopt.c index 2811c19a..42cc3dcc 100644 --- a/tests/setsockopt.c +++ b/tests/setsockopt.c @@ -1,6 +1,6 @@  /* setsockopt.c --- wrappers for Windows setsockopt function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/signal.in.h b/tests/signal.in.h index c0d4848d..107226e3 100644 --- a/tests/signal.in.h +++ b/tests/signal.in.h @@ -1,6 +1,6 @@  /* A GNU-like <signal.h>. -   Copyright (C) 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -55,6 +55,11 @@  #ifndef _@GUARD_PREFIX@_SIGNAL_H  #define _@GUARD_PREFIX@_SIGNAL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* For testing the OpenBSD version.  */  #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \      && defined __OpenBSD__ diff --git a/tests/signature.h b/tests/signature.h index 7a8ef91a..d2a24622 100644 --- a/tests/signature.h +++ b/tests/signature.h @@ -1,5 +1,5 @@  /* Macro for checking that a function declaration is compliant. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/signed-nan.h b/tests/signed-nan.h new file mode 100644 index 00000000..18a550a7 --- /dev/null +++ b/tests/signed-nan.h @@ -0,0 +1,88 @@ +/* Macros for quiet not-a-number. +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#ifndef _SIGNED_NAN_H +#define _SIGNED_NAN_H + +#include <math.h> + +#include "nan.h" + + +/* Returns a quiet 'float' NaN with sign bit == 0.  */ +_GL_UNUSED static float +positive_NaNf () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  float volatile nan = NaNf (); +  return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'float' NaN with sign bit == 1.  */ +_GL_UNUSED static float +negative_NaNf () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  float volatile nan = NaNf (); +  return (signbit (nan) ? nan : - nan); +} + + +/* Returns a quiet 'double' NaN with sign bit == 0.  */ +_GL_UNUSED static double +positive_NaNd () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  double volatile nan = NaNd (); +  return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'double' NaN with sign bit == 1.  */ +_GL_UNUSED static double +negative_NaNd () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  double volatile nan = NaNd (); +  return (signbit (nan) ? nan : - nan); +} + + +/* Returns a quiet 'long double' NaN with sign bit == 0.  */ +_GL_UNUSED static long double +positive_NaNl () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  long double volatile nan = NaNl (); +  return (signbit (nan) ? - nan : nan); +} + +/* Returns a quiet 'long double' NaN with sign bit == 1.  */ +_GL_UNUSED static long double +negative_NaNl () +{ +  /* 'volatile' works around a GCC bug: +     <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111655>  */ +  long double volatile nan = NaNl (); +  return (signbit (nan) ? nan : - nan); +} + + +#endif /* _SIGNED_NAN_H */ diff --git a/tests/signed-snan.h b/tests/signed-snan.h new file mode 100644 index 00000000..7e6483a7 --- /dev/null +++ b/tests/signed-snan.h @@ -0,0 +1,142 @@ +/* Macros for signalling not-a-number. +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#ifndef _SIGNED_SNAN_H +#define _SIGNED_SNAN_H + +#include "signed-nan.h" +#include "snan.h" + + +#if HAVE_SNANF + +/* Returns a signalling 'float' NaN with sign bit == 0 in memory.  */ +_GL_UNUSED static memory_float +memory_positive_SNaNf () +{ +  return construct_memory_SNaNf (positive_NaNf ()); +} + +/* Returns a signalling 'float' NaN with sign bit == 1 in memory.  */ +_GL_UNUSED static memory_float +memory_negative_SNaNf () +{ +  return construct_memory_SNaNf (negative_NaNf ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", the following functions may return a quiet NaN +   instead.  Use the functions with 'memory_' prefix if you need to avoid this. +   See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ + +/* Returns a signalling 'float' NaN with sign bit == 0.  */ +_GL_UNUSED static float +positive_SNaNf () +{ +  return memory_positive_SNaNf ().value; +} + +/* Returns a signalling 'float' NaN with sign bit == 1.  */ +_GL_UNUSED static float +negative_SNaNf () +{ +  return memory_negative_SNaNf ().value; +} + +#endif + + +#if HAVE_SNAND + +/* Returns a signalling 'double' NaN with sign bit == 0 in memory.  */ +_GL_UNUSED static memory_double +memory_positive_SNaNd () +{ +  return construct_memory_SNaNd (positive_NaNd ()); +} + +/* Returns a signalling 'double' NaN with sign bit == 1 in memory.  */ +_GL_UNUSED static memory_double +memory_negative_SNaNd () +{ +  return construct_memory_SNaNd (negative_NaNd ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", the following functions may return a quiet NaN +   instead.  Use the functions with 'memory_' prefix if you need to avoid this. +   See <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ + +/* Returns a signalling 'double' NaN with sign bit == 0.  */ +_GL_UNUSED static double +positive_SNaNd () +{ +  return memory_positive_SNaNd ().value; +} + +/* Returns a signalling 'double' NaN with sign bit == 1.  */ +_GL_UNUSED static double +negative_SNaNd () +{ +  return memory_negative_SNaNd ().value; +} + +#endif + + +#if HAVE_SNANL + +/* Returns a signalling 'long double' NaN with sign bit == 0 in memory.  */ +_GL_UNUSED static memory_long_double +memory_positive_SNaNl () +{ +  return construct_memory_SNaNl (positive_NaNl ()); +} + +/* Returns a signalling 'long double' NaN with sign bit == 1 in memory.  */ +_GL_UNUSED static memory_long_double +memory_negative_SNaNl () +{ +  return construct_memory_SNaNl (negative_NaNl ()); +} + +/* Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, the +   following functions may return a quiet NaN instead.  Use the functions +   with 'memory_' prefix if you need to avoid this.  See +   <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ + +/* Returns a signalling 'long double' NaN with sign bit == 0.  */ +_GL_UNUSED static long double +positive_SNaNl () +{ +  return memory_positive_SNaNl ().value; +} + +/* Returns a signalling 'long double' NaN with sign bit == 1.  */ +_GL_UNUSED static long double +negative_SNaNl () +{ +  return memory_negative_SNaNl ().value; +} + +#endif + + +#endif /* _SIGNED_SNAN_H */ diff --git a/tests/sigprocmask.c b/tests/sigprocmask.c index a805da66..3df69b51 100644 --- a/tests/sigprocmask.c +++ b/tests/sigprocmask.c @@ -1,5 +1,5 @@  /* POSIX compatible signal blocking. -   Copyright (C) 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2006.     This file is free software: you can redistribute it and/or modify diff --git a/tests/sleep.c b/tests/sleep.c index 80431c10..1cab9aa6 100644 --- a/tests/sleep.c +++ b/tests/sleep.c @@ -1,5 +1,5 @@  /* Pausing execution of the current thread. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2007.     This file is free software: you can redistribute it and/or modify diff --git a/tests/snan.h b/tests/snan.h new file mode 100644 index 00000000..95235040 --- /dev/null +++ b/tests/snan.h @@ -0,0 +1,276 @@ +/* Macros for signalling not-a-number. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#ifndef _SNAN_H +#define _SNAN_H + +#include <float.h> +#include <limits.h> +#include <math.h> + +#include "nan.h" + + +/* The bit that distinguishes a quiet NaN from a signalling NaN is, according to +   <https://en.wikipedia.org/wiki/NaN#Encoding>, the most significant bit of the +   mantissa field. +   According to <https://en.wikipedia.org/wiki/IEEE_754#Formats>, this is the +   next bit, right below the bit 0 of the exponent. +   This bit is +     *  == 0 to indicate a quiet NaN or Infinity, +        == 1 to indicate a signalling NaN, +        on these CPUs: hppa, mips (*), sh4. +     *  == 1 to indicate a quiet NaN, +        == 0 to indicate a signalling NaN or Infinity, +        on all other CPUs. +        On these platforms, additionally a signalling NaN must have some other +        mantissa bit == 1, because when all exponent bits are == 1 and all +        mantissa bits are == 0, the number denotes ±Infinity. +        This NaN encoding is specified by IEEE 754-2008 § 6.2.1. + +   (*) On mips CPUs, it depends on the CPU model.  The classical behaviour is +   as indicated above.  On some newer models, it's like on the other CPUs. +   On some (but not all!) models this meta-info can be determined from two +   special CPU registers: If the "Floating Point Implementation Register" (fir) +   bit 23, also known as Has2008 bit, is set, the "Floating Point Control and +   Status Register" (fcsr) bit 18, also known as the NAN2008 bit, has the value +     - 0 for the classical behaviour, +     - 1 for like on the other CPUs. +   Both of these bits are read-only. +   This module has determined the behaviour at configure time and defines the +   C macros MIPS_NAN2008_FLOAT, MIPS_NAN2008_DOUBLE, MIPS_NAN2008_LONG_DOUBLE +   accordingly.  */ + + +/* 'float' = IEEE 754 single-precision +   <https://en.wikipedia.org/wiki/Single-precision_floating-point_format>  */ + +#define NWORDS \ +  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + +# define HAVE_SNANF 1 + +_GL_UNUSED static memory_float +construct_memory_SNaNf (float quiet_value) +{ +  memory_float m; +  m.value = quiet_value; +  /* Turn the quiet NaN into a signalling NaN.  */ +  #if FLT_EXPBIT0_BIT > 0 +    m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); +  #else +    m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] +      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +  #endif +  /* Set some arbitrary mantissa bit.  */ +  if (FLT_EXPBIT0_WORD < NWORDS / 2) /* NWORDS > 1 and big endian */ +    m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; +  else /* NWORDS == 1 or little endian */ +    m.word[0] |= (unsigned int) 1; +  return m; +} + +/* Returns a signalling 'float' NaN in memory.  */ +_GL_UNUSED static memory_float +memory_SNaNf () +{ +  return construct_memory_SNaNf (NaNf ()); +} + +_GL_UNUSED static float +construct_SNaNf (float quiet_value) +{ +  return construct_memory_SNaNf (quiet_value).value; +} + +/* Returns a signalling 'float' NaN. +   Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", this function may return a quiet NaN instead. +   Use memory_SNaNf() if you need to avoid this.  See +   <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ +_GL_UNUSED static float +SNaNf () +{ +  return memory_SNaNf ().value; +} + +#endif + +#undef NWORDS + + +/* 'double' = IEEE 754 double-precision +   <https://en.wikipedia.org/wiki/Double-precision_floating-point_format>  */ + +#define NWORDS \ +  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; + +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + +# define HAVE_SNAND 1 + +_GL_UNUSED static memory_double +construct_memory_SNaNd (double quiet_value) +{ +  memory_double m; +  m.value = quiet_value; +  /* Turn the quiet NaN into a signalling NaN.  */ +  #if DBL_EXPBIT0_BIT > 0 +    m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); +  #else +    m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] +      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +  #endif +  /* Set some arbitrary mantissa bit.  */ +  m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] +    |= (unsigned int) 1 << DBL_EXPBIT0_BIT; +  return m; +} + +/* Returns a signalling 'double' NaN in memory.  */ +_GL_UNUSED static memory_double +memory_SNaNd () +{ +  return construct_memory_SNaNd (NaNd ()); +} + +_GL_UNUSED static double +construct_SNaNd (double quiet_value) +{ +  return construct_memory_SNaNd (quiet_value).value; +} + +/* Returns a signalling 'double' NaN. +   Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", this function may return a quiet NaN instead. +   Use memory_SNaNf() if you need to avoid this.  See +   <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ +_GL_UNUSED static double +SNaNd () +{ +  return memory_SNaNd ().value; +} + +#endif + +#undef NWORDS + + +/* 'long double' = +   * if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE: +     IEEE 754 double-precision +     <https://en.wikipedia.org/wiki/Double-precision_floating-point_format> +   * Otherwise: +     - On i386, x86_64, ia64: +       80-bits extended-precision +       <https://en.wikipedia.org/wiki/Extended_precision#x86_extended_precision_format> +     - On alpha, arm64, loongarch64, mips64, riscv64, s390x, sparc64: +       IEEE 754 quadruple-precision +       <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#IEEE_754_quadruple-precision_binary_floating-point_format:_binary128> +     - On powerpc, powerpc64, powerpc64le: +       2x64-bits double-double +       <https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format#Double-double_arithmetic> +     - On m68k: +       80-bits extended-precision, padded to 96 bits, with non-IEEE exponent + */ + +#define NWORDS \ +  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } +        memory_long_double; + +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + +# define HAVE_SNANL 1 + +_GL_UNUSED static memory_long_double +construct_memory_SNaNl (long double quiet_value) +{ +  memory_long_double m; +  m.value = quiet_value; +  #if defined __powerpc__ && LDBL_MANT_DIG == 106 +    /* This is PowerPC "double double", a pair of two doubles.  Inf and NaN are +       represented as the corresponding 64-bit IEEE values in the first double; +       the second is ignored.  Manipulate only the first double.  */ +    #define HNWORDS \ +      ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +  #else +    #define HNWORDS NWORDS +  #endif +  /* Turn the quiet NaN into a signalling NaN.  */ +  #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE +  /* In this representation, the leading 1 of the mantissa is explicitly +     stored.  */ +   #if LDBL_EXPBIT0_BIT > 1 +    m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 2); +   #else +    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] +      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 2); +   #endif +  #else +  /* In this representation, the leading 1 of the mantissa is implicit.  */ +   #if LDBL_EXPBIT0_BIT > 0 +    m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); +   #else +    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] +      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +   #endif +  #endif +  /* Set some arbitrary mantissa bit.  */ +  m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < HNWORDS / 2 ? 1 : - 1)] +    |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; +  #undef HNWORDS +  return m; +} + +/* Returns a signalling 'long double' NaN in memory.  */ +_GL_UNUSED static memory_long_double +memory_SNaNl () +{ +  return construct_memory_SNaNl (NaNl ()); +} + +_GL_UNUSED static long double +construct_SNaNl (long double quiet_value) +{ +  return construct_memory_SNaNl (quiet_value).value; +} + +/* Returns a signalling 'long double' NaN. +   Note: On 32-bit x86 processors, as well as on x86_64 processors with +   CC="gcc -mfpmath=387", if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE is 1, this +   function may return a quiet NaN instead.  Use memory_SNaNf() if you +   need to avoid this.  See +   <https://lists.gnu.org/archive/html/bug-gnulib/2023-10/msg00060.html> +   for details.  */ +_GL_UNUSED static long double +SNaNl () +{ +  return memory_SNaNl ().value; +} + +#endif + +#undef NWORDS + + +#endif /* _SNAN_H */ diff --git a/tests/socket.c b/tests/socket.c index 49e013c7..6061a3fb 100644 --- a/tests/socket.c +++ b/tests/socket.c @@ -1,6 +1,6 @@  /* socket.c --- wrappers for Windows socket function -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/sockets.c b/tests/sockets.c index 31b43029..92beb7d3 100644 --- a/tests/sockets.c +++ b/tests/sockets.c @@ -1,6 +1,6 @@  /* sockets.c --- wrappers for Windows socket functions -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/sockets.h b/tests/sockets.h index 75e49fce..99d6efca 100644 --- a/tests/sockets.h +++ b/tests/sockets.h @@ -1,6 +1,6 @@  /* sockets.h - wrappers for Windows socket functions -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,11 @@  #ifndef SOCKETS_H  #define SOCKETS_H 1 +/* This file uses _GL_ATTRIBUTE_CONST.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #define SOCKETS_1_0 0x0001  #define SOCKETS_1_1 0x0101  #define SOCKETS_2_0 0x0002 diff --git a/tests/stat-time.c b/tests/stat-time.c index 3d48a2b5..1ab01f53 100644 --- a/tests/stat-time.c +++ b/tests/stat-time.c @@ -1,6 +1,6 @@  /* stat-related time functions. -   Copyright (C) 2012-2022 Free Software Foundation, Inc. +   Copyright (C) 2012-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat-time.h b/tests/stat-time.h index b661196e..3cd8478f 100644 --- a/tests/stat-time.h +++ b/tests/stat-time.h @@ -1,6 +1,6 @@  /* stat-related time functions. -   Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -20,15 +20,18 @@  #ifndef STAT_TIME_H  #define STAT_TIME_H 1 +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _GL_UNUSED, +   _GL_ATTRIBUTE_PURE, HAVE_STRUCT_STAT_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #include <errno.h>  #include <stdckdint.h>  #include <stddef.h>  #include <sys/stat.h>  #include <time.h> -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif  _GL_INLINE_HEADER_BEGIN  #ifndef _GL_STAT_TIME_INLINE  # define _GL_STAT_TIME_INLINE _GL_INLINE @@ -49,11 +52,13 @@ extern "C" {  #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC  # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC  #  define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) +#  define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim)  # else  #  define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec)  # endif  #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC  # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) +# define STAT_TIMESPEC_OFFSETOF(st_xtim) offsetof (struct stat, st_xtim##espec)  #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC  # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec)  #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC @@ -119,10 +124,8 @@ get_stat_atime (struct stat const *st)  #ifdef STAT_TIMESPEC    return STAT_TIMESPEC (st, st_atim);  #else -  struct timespec t; -  t.tv_sec = st->st_atime; -  t.tv_nsec = get_stat_atime_ns (st); -  return t; +  return (struct timespec) { .tv_sec = st->st_atime, +                             .tv_nsec = get_stat_atime_ns (st) };  #endif  } @@ -133,10 +136,8 @@ get_stat_ctime (struct stat const *st)  #ifdef STAT_TIMESPEC    return STAT_TIMESPEC (st, st_ctim);  #else -  struct timespec t; -  t.tv_sec = st->st_ctime; -  t.tv_nsec = get_stat_ctime_ns (st); -  return t; +  return (struct timespec) { .tv_sec = st->st_ctime, +                             .tv_nsec = get_stat_ctime_ns (st) };  #endif  } @@ -147,10 +148,8 @@ get_stat_mtime (struct stat const *st)  #ifdef STAT_TIMESPEC    return STAT_TIMESPEC (st, st_mtim);  #else -  struct timespec t; -  t.tv_sec = st->st_mtime; -  t.tv_nsec = get_stat_mtime_ns (st); -  return t; +  return (struct timespec) { .tv_sec = st->st_mtime, +                             .tv_nsec = get_stat_mtime_ns (st) };  #endif  } @@ -165,8 +164,8 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st)       || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC)    t = STAT_TIMESPEC (st, st_birthtim);  #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC -  t.tv_sec = st->st_birthtime; -  t.tv_nsec = st->st_birthtimensec; +  t = (struct timespec) { .tv_sec = st->st_birthtime, +                          .tv_nsec = st->st_birthtimensec };  #elif defined _WIN32 && ! defined __CYGWIN__    /* Native Windows platforms (but not Cygwin) put the "file creation       time" in st_ctime (!).  See @@ -174,13 +173,11 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st)  # if _GL_WINDOWS_STAT_TIMESPEC    t = st->st_ctim;  # else -  t.tv_sec = st->st_ctime; -  t.tv_nsec = 0; +  t = (struct timespec) { .tv_sec = st->st_ctime };  # endif  #else    /* Birth time is not supported.  */ -  t.tv_sec = -1; -  t.tv_nsec = -1; +  t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 };  #endif  #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ @@ -192,30 +189,28 @@ get_stat_birthtime (_GL_UNUSED struct stat const *st)       sometimes returns junk in the birth time fields; work around this       bug if it is detected.  */    if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) -    { -      t.tv_sec = -1; -      t.tv_nsec = -1; -    } +    t = (struct timespec) { .tv_sec = -1, .tv_nsec = -1 };  #endif    return t;  }  /* If a stat-like function returned RESULT, normalize the timestamps -   in *ST, in case this platform suffers from the Solaris 11 bug where +   in *ST, if this platform suffers from a macOS and Solaris bug where     tv_nsec might be negative.  Return the adjusted RESULT, setting     errno to EOVERFLOW if normalization overflowed.  This function     is intended to be private to this .h file.  */  _GL_STAT_TIME_INLINE int  stat_time_normalize (int result, _GL_UNUSED struct stat *st)  { -#if defined __sun && defined STAT_TIMESPEC +#if (((defined __APPLE__ && defined __MACH__) || defined __sun) \ +     && defined STAT_TIMESPEC_OFFSETOF)    if (result == 0)      {        long int timespec_hz = 1000000000; -      short int const ts_off[] = { offsetof (struct stat, st_atim), -                                   offsetof (struct stat, st_mtim), -                                   offsetof (struct stat, st_ctim) }; +      short int const ts_off[] = { STAT_TIMESPEC_OFFSETOF (st_atim), +                                   STAT_TIMESPEC_OFFSETOF (st_mtim), +                                   STAT_TIMESPEC_OFFSETOF (st_ctim) };        int i;        for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++)          { @@ -229,8 +224,7 @@ stat_time_normalize (int result, _GL_UNUSED struct stat *st)              }            ts->tv_nsec = r;            /* Overflow is possible, as Solaris 11 stat can yield -             tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. -             INT_ADD_WRAPV is OK, since time_t is signed on Solaris.  */ +             tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000.  */            if (ckd_add (&ts->tv_sec, q, ts->tv_sec))              {                errno = EOVERFLOW; diff --git a/tests/stat-w32.c b/tests/stat-w32.c index e61b75c6..ddd6f598 100644 --- a/tests/stat-w32.c +++ b/tests/stat-w32.c @@ -1,5 +1,5 @@  /* Core of implementation of fstat and stat for native Windows. -   Copyright (C) 2017-2022 Free Software Foundation, Inc. +   Copyright (C) 2017-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat-w32.h b/tests/stat-w32.h index 0f79d614..392faed1 100644 --- a/tests/stat-w32.h +++ b/tests/stat-w32.h @@ -1,5 +1,5 @@  /* Core of implementation of fstat and stat for native Windows. -   Copyright (C) 2017-2022 Free Software Foundation, Inc. +   Copyright (C) 2017-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/stat.c b/tests/stat.c index adb61233..ecf9f9bb 100644 --- a/tests/stat.c +++ b/tests/stat.c @@ -1,5 +1,5 @@  /* Work around platform bugs in stat. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/stdalign.in.h b/tests/stdalign.in.h deleted file mode 100644 index 58fd245c..00000000 --- a/tests/stdalign.in.h +++ /dev/null @@ -1,133 +0,0 @@ -/* A substitute for ISO C11 <stdalign.h>. - -   Copyright 2011-2022 Free Software Foundation, Inc. - -   This file is free software: you can redistribute it and/or modify -   it under the terms of the GNU Lesser General Public License as -   published by the Free Software Foundation; either version 2.1 of the -   License, or (at your option) any later version. - -   This file is distributed in the hope that it will be useful, -   but WITHOUT ANY WARRANTY; without even the implied warranty of -   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -   GNU Lesser General Public License for more details. - -   You should have received a copy of the GNU Lesser General Public License -   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ - -/* Written by Paul Eggert and Bruno Haible.  */ - -#ifndef _GL_STDALIGN_H -#define _GL_STDALIGN_H - -/* ISO C11 <stdalign.h> for platforms that lack it. - -   References: -   ISO C11 (latest free draft -   <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) -   sections 6.5.3.4, 6.7.5, 7.15. -   C++11 (latest free draft -   <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) -   section 18.10. */ - -/* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment -   requirement of a structure member (i.e., slot or field) that is of -   type TYPE, as an integer constant expression. - -   This differs from GCC's and clang's __alignof__ operator, which can -   yield a better-performing alignment for an object of that type.  For -   example, on x86 with GCC and on Linux/x86 with clang, -   __alignof__ (double) and __alignof__ (long long) are 8, whereas -   alignof (double) and alignof (long long) are 4 unless the option -   '-malign-double' is used. - -   The result cannot be used as a value for an 'enum' constant, if you -   want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc.  */ - -/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other -   standard headers, defines conflicting implementations of _Alignas -   and _Alignof that are no better than ours; override them.  */ -#undef _Alignas -#undef _Alignof - -/* GCC releases before GCC 4.9 had a bug in _Alignof.  See GCC bug 52023 -   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. -   clang versions < 8.0.0 have the same bug.  */ -#if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ -     || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ -         && !defined __clang__) \ -     || (defined __clang__ && __clang_major__ < 8)) -# ifdef __cplusplus -#  if (201103 <= __cplusplus || defined _MSC_VER) -#   define _Alignof(type) alignof (type) -#  else -   template <class __t> struct __alignof_helper { char __a; __t __b; }; -#   define _Alignof(type) offsetof (__alignof_helper<type>, __b) -#   define _GL_STDALIGN_NEEDS_STDDEF 1 -#  endif -# else -#  define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) -#  define _GL_STDALIGN_NEEDS_STDDEF 1 -# endif -#endif -#if ! (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER)) -# define alignof _Alignof -#endif -#define __alignof_is_defined 1 - -/* alignas (A), also known as _Alignas (A), aligns a variable or type -   to the alignment A, where A is an integer constant expression.  For -   example: - -      int alignas (8) foo; -      struct s { int a; int alignas (8) bar; }; - -   aligns the address of FOO and the offset of BAR to be multiples of 8. - -   A should be a power of two that is at least the type's alignment -   and at most the implementation's alignment limit.  This limit is -   2**28 on typical GNUish hosts, and 2**13 on MSVC.  To be portable -   to MSVC through at least version 10.0, A should be an integer -   constant, as MSVC does not support expressions such as 1 << 3. -   To be portable to Sun C 5.11, do not align auto variables to -   anything stricter than their default alignment. - -   The following C11 requirements are not supported here: - -     - If A is zero, alignas has no effect. -     - alignas can be used multiple times; the strictest one wins. -     - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). - -   */ - -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 -# if defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER) -#  define _Alignas(a) alignas (a) -# elif (!defined __attribute__ \ -        && ((defined __APPLE__ && defined __MACH__ \ -             ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ -             : __GNUC__ && !defined __ibmxl__) \ -            || (4 <= __clang_major__) \ -            || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ -            || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) -#  define _Alignas(a) __attribute__ ((__aligned__ (a))) -# elif 1300 <= _MSC_VER -#  define _Alignas(a) __declspec (align (a)) -# endif -#endif -#if ((defined _Alignas \ -      && !(defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))) \ -     || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) -# define alignas _Alignas -#endif -#if (defined alignas \ -     || (defined __cplusplus && (201103 <= __cplusplus || defined _MSC_VER))) -# define __alignas_is_defined 1 -#endif - -/* Include <stddef.h> if needed for offsetof.  */ -#if _GL_STDALIGN_NEEDS_STDDEF -# include <stddef.h> -#endif - -#endif /* _GL_STDALIGN_H */ diff --git a/tests/stdio-read.c b/tests/stdio-read.c index 85efa0d4..253b8aa4 100644 --- a/tests/stdio-read.c +++ b/tests/stdio-read.c @@ -1,5 +1,5 @@  /* POSIX compatible FILE stream read function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This file is free software: you can redistribute it and/or modify diff --git a/tests/stdio-write.c b/tests/stdio-write.c index 82facf54..ca6aa00c 100644 --- a/tests/stdio-write.c +++ b/tests/stdio-write.c @@ -1,5 +1,5 @@  /* POSIX compatible FILE stream write function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2008.     This file is free software: you can redistribute it and/or modify diff --git a/tests/stdio.in.h b/tests/stdio.in.h index 7b36dac2..4947307e 100644 --- a/tests/stdio.in.h +++ b/tests/stdio.in.h @@ -1,6 +1,6 @@  /* A GNU-like <stdio.h>. -   Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -36,6 +36,18 @@  #ifndef _@GUARD_PREFIX@_STDIO_H +/* Suppress macOS deprecation warnings for sprintf and vsprintf.  */ +#if (defined __APPLE__ && defined __MACH__) && !defined _POSIX_C_SOURCE +# ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +#  include <AvailabilityMacros.h> +# endif +# if (defined MAC_OS_X_VERSION_MIN_REQUIRED \ +      && 130000 <= MAC_OS_X_VERSION_MIN_REQUIRED) +#  define _POSIX_C_SOURCE 200809L +#  define _GL_DEFINED__POSIX_C_SOURCE +# endif +#endif +  #define _GL_ALREADY_INCLUDING_STDIO_H  /* The include_next requires a split double-inclusion guard.  */ @@ -43,9 +55,21 @@  #undef _GL_ALREADY_INCLUDING_STDIO_H +#ifdef _GL_DEFINED__POSIX_C_SOURCE +# undef _GL_DEFINED__POSIX_C_SOURCE +# undef _POSIX_C_SOURCE +#endif +  #ifndef _@GUARD_PREFIX@_STDIO_H  #define _@GUARD_PREFIX@_STDIO_H +/* This file uses _GL_ATTRIBUTE_DEALLOC, _GL_ATTRIBUTE_FORMAT, +   _GL_ATTRIBUTE_MALLOC, _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, +   HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* Get va_list.  Needed on many systems, including glibc 2.8.  */  #include <stdarg.h> @@ -116,6 +140,38 @@  # endif  #endif +/* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly +   allocated memory.  */ +#ifndef _GL_ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 || defined __clang__ +#  define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +#  define _GL_ATTRIBUTE_MALLOC +# endif +#endif + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 +#   if __cplusplus >= 201103L +#    define _GL_ATTRIBUTE_NOTHROW noexcept (true) +#   else +#    define _GL_ATTRIBUTE_NOTHROW throw () +#   endif +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# else +#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# endif +#endif +  /* An __attribute__ __format__ specifier for a function that takes a format     string and arguments, where the format string directives are the ones     standardized by ISO C99 and POSIX. @@ -193,6 +249,36 @@  # undef putc_unlocked  #endif + +/* Maximum number of characters produced by printing a NaN value.  */ +#ifndef _PRINTF_NAN_LEN_MAX +# if defined __FreeBSD__ || defined __DragonFly__ \ +     || defined __NetBSD__ \ +     || (defined __APPLE__ && defined __MACH__) +/* On BSD systems, a NaN value prints as just "nan", without a sign.  */ +#  define _PRINTF_NAN_LEN_MAX 3 +# elif (__GLIBC__ >= 2) || MUSL_LIBC || defined __OpenBSD__ || defined __sun || defined __CYGWIN__ +/* glibc, musl libc, OpenBSD, Solaris libc, and Cygwin produce "[-]nan".  */ +#  define _PRINTF_NAN_LEN_MAX 4 +# elif defined _AIX +/* AIX produces "[-]NaNQ".  */ +#  define _PRINTF_NAN_LEN_MAX 5 +# elif defined _WIN32 && !defined __CYGWIN__ +/* On native Windows, the output can be: +   - with MSVC ucrt: "[-]nan" or "[-]nan(ind)" or "[-]nan(snan)", +   - with mingw: "[-]1.#IND" or "[-]1.#QNAN".  */ +#  define _PRINTF_NAN_LEN_MAX 10 +# elif defined __sgi +/* On IRIX, the output typically is "[-]nan0xNNNNNNNN" with 8 hexadecimal +   digits.  */ +#  define _PRINTF_NAN_LEN_MAX 14 +# else +/* We don't know, but 32 should be a safe maximum.  */ +#  define _PRINTF_NAN_LEN_MAX 32 +# endif +#endif + +  #if @GNULIB_DPRINTF@  # if @REPLACE_DPRINTF@  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -210,7 +296,9 @@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...)  #  endif  _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (dprintf); +# endif  #elif defined GNULIB_POSIXCHECK  # undef dprintf  # if HAVE_RAW_DECL_DPRINTF @@ -273,7 +361,8 @@ _GL_CXXALIASWARN (fcloseall);  #  endif  _GL_FUNCDECL_RPL (fdopen, FILE *,                    (int fd, const char *mode) -                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC);  _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));  # elif defined _WIN32 && !defined __CYGWIN__  #  if !(defined __cplusplus && defined GNULIB_NAMESPACE) @@ -284,9 +373,18 @@ _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode));  # else  #  if __GNUC__ >= 11  /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */ +#   if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2  _GL_FUNCDECL_SYS (fdopen, FILE *,                    (int fd, const char *mode) -                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                  _GL_ATTRIBUTE_NOTHROW +                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC); +#   else +_GL_FUNCDECL_SYS (fdopen, FILE *, +                  (int fd, const char *mode) +                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC); +#   endif  #  endif  _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));  # endif @@ -294,9 +392,18 @@ _GL_CXXALIASWARN (fdopen);  #else  # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen  /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose.  */ +#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (fdopen, FILE *, +                  (int fd, const char *mode) +                  _GL_ATTRIBUTE_NOTHROW +                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC); +#  else  _GL_FUNCDECL_SYS (fdopen, FILE *,                    (int fd, const char *mode) -                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                  _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC); +#  endif  # endif  # if defined GNULIB_POSIXCHECK  #  undef fdopen @@ -407,7 +514,8 @@ _GL_CXXALIASWARN (fileno);  #  endif  _GL_FUNCDECL_RPL (fopen, FILE *,                    (const char *restrict filename, const char *restrict mode) -                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                  _GL_ATTRIBUTE_MALLOC);  _GL_CXXALIAS_RPL (fopen, FILE *,                    (const char *restrict filename, const char *restrict mode));  # else @@ -882,7 +990,9 @@ _GL_CXXALIAS_SYS (getdelim, ssize_t,                     int delimiter,                     FILE *restrict stream));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (getdelim); +# endif  #elif defined GNULIB_POSIXCHECK  # undef getdelim  # if HAVE_RAW_DECL_GETDELIM @@ -921,7 +1031,7 @@ _GL_CXXALIAS_SYS (getline, ssize_t,                    (char **restrict lineptr, size_t *restrict linesize,                     FILE *restrict stream));  # endif -# if @HAVE_DECL_GETLINE@ +# if __GLIBC__ >= 2 && @HAVE_DECL_GETLINE@  _GL_CXXALIASWARN (getline);  # endif  #elif defined GNULIB_POSIXCHECK @@ -951,9 +1061,17 @@ _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");  #  endif  _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream));  # else +#  if @HAVE_DECL_GETW@ +#   if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE.  */ +_GL_FUNCDECL_SYS (getw, int, (FILE *restrict stream)); +#   endif  _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); +#  endif  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (getw); +# endif  #endif  #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ @@ -1052,13 +1170,15 @@ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "  #  endif  _GL_FUNCDECL_RPL (popen, FILE *,                    (const char *cmd, const char *mode) -                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) +                  _GL_ATTRIBUTE_MALLOC);  _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));  # else  #  if !@HAVE_POPEN@ || __GNUC__ >= 11  _GL_FUNCDECL_SYS (popen, FILE *,                    (const char *cmd, const char *mode) -                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) +                  _GL_ATTRIBUTE_MALLOC);  #  endif  _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));  # endif @@ -1068,7 +1188,8 @@ _GL_CXXALIASWARN (popen);  /* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose.  */  _GL_FUNCDECL_SYS (popen, FILE *,                    (const char *cmd, const char *mode) -                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); +                  _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1) +                  _GL_ATTRIBUTE_MALLOC);  # endif  # if defined GNULIB_POSIXCHECK  #  undef popen @@ -1190,9 +1311,17 @@ _GL_CXXALIASWARN (puts);  #  endif  _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream));  # else +#  if @HAVE_DECL_PUTW@ +#   if defined __APPLE__ && defined __MACH__ +/* The presence of the declaration depends on _POSIX_C_SOURCE.  */ +_GL_FUNCDECL_SYS (putw, int, (int w, FILE *restrict stream)); +#   endif  _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); +#  endif  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (putw); +# endif  #endif  #if @GNULIB_REMOVE@ @@ -1398,13 +1527,15 @@ _GL_CXXALIASWARN (tempnam);  #   define tmpfile rpl_tmpfile  #  endif  _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) -                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                                   _GL_ATTRIBUTE_MALLOC);  _GL_CXXALIAS_RPL (tmpfile, FILE *, (void));  # else  #  if __GNUC__ >= 11  /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose.  */  _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) -                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                                   _GL_ATTRIBUTE_MALLOC);  #  endif  _GL_CXXALIAS_SYS (tmpfile, FILE *, (void));  # endif @@ -1415,7 +1546,8 @@ _GL_CXXALIASWARN (tmpfile);  # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile  /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose.  */  _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) -                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1)); +                                   _GL_ATTRIBUTE_DEALLOC (fclose, 1) +                                   _GL_ATTRIBUTE_MALLOC);  # endif  # if defined GNULIB_POSIXCHECK  #  undef tmpfile diff --git a/tests/strerror-override.c b/tests/strerror-override.c index 6be1afdc..b9c1c7ab 100644 --- a/tests/strerror-override.c +++ b/tests/strerror-override.c @@ -1,6 +1,6 @@  /* strerror-override.c --- POSIX compatible system error routine -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/strerror-override.h b/tests/strerror-override.h index d010d27c..872fa7d6 100644 --- a/tests/strerror-override.h +++ b/tests/strerror-override.h @@ -1,6 +1,6 @@  /* strerror-override.h --- POSIX compatible system error routine -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -18,6 +18,11 @@  #ifndef _GL_STRERROR_OVERRIDE_H  # define _GL_STRERROR_OVERRIDE_H +/* This file uses _GL_ATTRIBUTE_CONST.  */ +# if !_GL_CONFIG_H_INCLUDED +#  error "Please include config.h first." +# endif +  # include <errno.h>  # include <stddef.h> diff --git a/tests/strerror.c b/tests/strerror.c index 1019fe9e..6b760ff4 100644 --- a/tests/strerror.c +++ b/tests/strerror.c @@ -1,6 +1,6 @@  /* strerror.c --- POSIX compatible system error routine -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/strerror_r.c b/tests/strerror_r.c index b154c292..0cd28ade 100644 --- a/tests/strerror_r.c +++ b/tests/strerror_r.c @@ -1,6 +1,6 @@  /* strerror_r.c --- POSIX compatible system error routine -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/symlink.c b/tests/symlink.c index 26310af7..6ba83666 100644 --- a/tests/symlink.c +++ b/tests/symlink.c @@ -1,5 +1,5 @@  /* Stub for symlink(). -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/sys_ioctl.in.h b/tests/sys_ioctl.in.h index 7f1cdc86..787d35f7 100644 --- a/tests/sys_ioctl.in.h +++ b/tests/sys_ioctl.in.h @@ -1,5 +1,5 @@  /* Substitute for and wrapper around <sys/ioctl.h>. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -29,6 +29,11 @@  #ifndef _@GUARD_PREFIX@_SYS_IOCTL_H  #define _@GUARD_PREFIX@_SYS_IOCTL_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* AIX 5.1 and Solaris 10 declare ioctl() in <unistd.h> and in <stropts.h>,     but not in <sys/ioctl.h>.     Haiku declares ioctl() in <unistd.h>, but not in <sys/ioctl.h>. @@ -62,7 +67,9 @@ _GL_FUNCDECL_SYS (ioctl, int,  _GL_CXXALIAS_SYS (ioctl, int,                    (int fd, int request, ... /* {void *,char *} arg */));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (ioctl); +# endif  #elif @SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@  # undef ioctl  # define ioctl ioctl_used_without_requesting_gnulib_module_ioctl diff --git a/tests/sys_select.in.h b/tests/sys_select.in.h index 860e957f..de29c779 100644 --- a/tests/sys_select.in.h +++ b/tests/sys_select.in.h @@ -1,5 +1,5 @@  /* Substitute for <sys/select.h>. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -19,6 +19,13 @@  # endif  @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. +   For the 'year2038' module to work right, <config.h> needs to have been +   included before.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* On OSF/1 and Solaris 2.6, <sys/types.h> and <sys/time.h>     both include <sys/select.h>.     On Cygwin and OpenBSD, <sys/time.h> includes <sys/select.h>. @@ -71,6 +78,11 @@  #ifndef _@GUARD_PREFIX@_SYS_SELECT_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* On many platforms, <sys/select.h> assumes prior inclusion of     <sys/types.h>.  Also, mingw defines sigset_t there, instead of     in <signal.h> where it belongs.  */ diff --git a/tests/sys_socket.c b/tests/sys_socket.c index 0bfd60f2..672d3aac 100644 --- a/tests/sys_socket.c +++ b/tests/sys_socket.c @@ -1,6 +1,6 @@  /* Inline functions for <sys/socket.h>. -   Copyright (C) 2012-2022 Free Software Foundation, Inc. +   Copyright (C) 2012-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -18,5 +18,5 @@  #include <config.h>  #define _GL_SYS_SOCKET_INLINE _GL_EXTERN_INLINE -#include "sys/socket.h" +#include <sys/socket.h>  typedef int dummy; diff --git a/tests/sys_socket.in.h b/tests/sys_socket.in.h index 637a248d..13833c0f 100644 --- a/tests/sys_socket.in.h +++ b/tests/sys_socket.in.h @@ -1,6 +1,6 @@  /* Provide a sys/socket header file for systems lacking it (read: MinGW)     and for systems where it is incomplete. -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     Written by Simon Josefsson.     This file is free software: you can redistribute it and/or modify @@ -63,9 +63,12 @@  #ifndef _@GUARD_PREFIX@_SYS_SOCKET_H  #define _@GUARD_PREFIX@_SYS_SOCKET_H -#ifndef _GL_INLINE_HEADER_BEGIN +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, GNULIB_POSIXCHECK, +   HAVE_RAW_DECL_*, alignof.  */ +#if !_GL_CONFIG_H_INCLUDED   #error "Please include config.h first."  #endif +  _GL_INLINE_HEADER_BEGIN  #ifndef _GL_SYS_SOCKET_INLINE  # define _GL_SYS_SOCKET_INLINE _GL_INLINE @@ -355,7 +358,9 @@ _GL_CXXALIAS_SYS_CAST (accept, int,                          struct sockaddr *restrict addr,                          socklen_t *restrict addrlen));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (accept); +# endif  #elif @HAVE_WINSOCK2_H@  # undef accept  # define accept accept_used_without_requesting_gnulib_module_accept @@ -417,7 +422,9 @@ _GL_CXXALIAS_SYS_CAST (getpeername, int,                         (int fd, struct sockaddr *restrict addr,                          socklen_t *restrict addrlen));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (getpeername); +# endif  #elif @HAVE_WINSOCK2_H@  # undef getpeername  # define getpeername getpeername_used_without_requesting_gnulib_module_getpeername @@ -449,7 +456,9 @@ _GL_CXXALIAS_SYS_CAST (getsockname, int,                         (int fd, struct sockaddr *restrict addr,                          socklen_t *restrict addrlen));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (getsockname); +# endif  #elif @HAVE_WINSOCK2_H@  # undef getsockname  # define getsockname getsockname_used_without_requesting_gnulib_module_getsockname @@ -596,7 +605,9 @@ _GL_CXXALIAS_SYS_CAST (recvfrom, ssize_t,                          struct sockaddr *restrict from,                          socklen_t *restrict fromlen));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (recvfrom); +# endif  #elif @HAVE_WINSOCK2_H@  # undef recvfrom  # define recvfrom recvfrom_used_without_requesting_gnulib_module_recvfrom diff --git a/tests/sys_stat.in.h b/tests/sys_stat.in.h index 0ec320f5..bf08f335 100644 --- a/tests/sys_stat.in.h +++ b/tests/sys_stat.in.h @@ -1,5 +1,5 @@  /* Provide a more complete sys/stat.h header file. -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -25,6 +25,13 @@  #endif  @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. +   For the 'year2038' module to work right, <config.h> needs to have been +   included before.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #if defined __need_system_sys_stat_h  /* Special invocation convention.  */ @@ -48,12 +55,41 @@  #ifndef _@GUARD_PREFIX@_SYS_STAT_H  #define _@GUARD_PREFIX@_SYS_STAT_H +/* This file uses _GL_ATTRIBUTE_NOTHROW, GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif + + +/* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. + */ +#ifndef _GL_ATTRIBUTE_NOTHROW +# if defined __cplusplus +#  if (__GNUC__ + (__GNUC_MINOR__ >= 8) > 2) || __clang_major >= 4 +#   if __cplusplus >= 201103L +#    define _GL_ATTRIBUTE_NOTHROW noexcept (true) +#   else +#    define _GL_ATTRIBUTE_NOTHROW throw () +#   endif +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# else +#  if (__GNUC__ + (__GNUC_MINOR__ >= 3) > 3) || defined __clang__ +#   define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) +#  else +#   define _GL_ATTRIBUTE_NOTHROW +#  endif +# endif +#endif +  /* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */  /* The definition of _GL_ARG_NONNULL is copied here.  */  /* The definition of _GL_WARN_ON_USE is copied here.  */ +  /* Before doing "#define mknod rpl_mknod" below, we need to include all     headers that may declare mknod().  OS/2 kLIBC declares mknod() in     <unistd.h>, not in <sys/stat.h>.  */ @@ -549,7 +585,7 @@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2]));  #  endif  _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2]));  # endif -# if @HAVE_FUTIMENS@ +# if __GLIBC__ >= 2 && @HAVE_FUTIMENS@  _GL_CXXALIASWARN (futimens);  # endif  #elif defined GNULIB_POSIXCHECK @@ -563,7 +599,11 @@ _GL_WARN_ON_USE (futimens, "futimens is not portable - "  #if @GNULIB_GETUMASK@  # if !@HAVE_GETUMASK@ +#  if __GLIBC__ + (__GLIBC_MINOR__ >= 2) > 2 +_GL_FUNCDECL_SYS (getumask, mode_t, (void) _GL_ATTRIBUTE_NOTHROW); +#  else  _GL_FUNCDECL_SYS (getumask, mode_t, (void)); +#  endif  # endif  _GL_CXXALIAS_SYS (getumask, mode_t, (void));  # if @HAVE_GETUMASK@ @@ -716,7 +756,9 @@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)  #  endif  _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mkfifoat); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mkfifoat  # if HAVE_RAW_DECL_MKFIFOAT @@ -773,7 +815,9 @@ _GL_FUNCDECL_SYS (mknodat, int,  _GL_CXXALIAS_SYS (mknodat, int,                    (int fd, char const *file, mode_t mode, dev_t dev));  # endif +# if __GLIBC__ >= 2  _GL_CXXALIASWARN (mknodat); +# endif  #elif defined GNULIB_POSIXCHECK  # undef mknodat  # if HAVE_RAW_DECL_MKNODAT @@ -937,7 +981,7 @@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name,  _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name,                                     struct timespec const times[2], int flag));  # endif -# if @HAVE_UTIMENSAT@ +# if __GLIBC__ >= 2 && @HAVE_UTIMENSAT@  _GL_CXXALIASWARN (utimensat);  # endif  #elif defined GNULIB_POSIXCHECK diff --git a/tests/sys_time.in.h b/tests/sys_time.in.h index 87db1a88..4a301c48 100644 --- a/tests/sys_time.in.h +++ b/tests/sys_time.in.h @@ -1,6 +1,6 @@  /* Provide a more complete sys/time.h. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -24,6 +24,13 @@  #endif  @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. +   For the 'year2038' module to work right, <config.h> needs to have been +   included before.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself     recursively via <sys/select.h>.     Simply delegate to the system's header in this case; it is a no-op. @@ -41,6 +48,11 @@  #ifndef _@GUARD_PREFIX@_SYS_TIME_H  #define _@GUARD_PREFIX@_SYS_TIME_H +/* This file uses GNULIB_POSIXCHECK, HAVE_RAW_DECL_*.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #if ! @HAVE_SYS_TIME_H@  # include <time.h>  #endif diff --git a/tests/sys_uio.in.h b/tests/sys_uio.in.h index 788d461f..5e71859d 100644 --- a/tests/sys_uio.in.h +++ b/tests/sys_uio.in.h @@ -1,5 +1,5 @@  /* Substitute for <sys/uio.h>. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/test-accept.c b/tests/test-accept.c index 234de641..ed02450b 100644 --- a/tests/test-accept.c +++ b/tests/test-accept.c @@ -1,5 +1,5 @@  /* Test accepting a connection to a server socket. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-stdalign.c b/tests/test-alignasof.c index a9355545..1cc75b0f 100644 --- a/tests/test-stdalign.c +++ b/tests/test-alignasof.c @@ -1,5 +1,5 @@ -/* Test of <stdalign.h>. -   Copyright 2009-2022 Free Software Foundation, Inc. +/* Test of alignasof module. +   Copyright 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -35,6 +35,7 @@ typedef struct { char a[4]; } struct4;     limit the test to 8 for now.  */  # define TEST_ALIGNMENT 8  #else +# undef alignas  # define alignas(alignment)  # define TEST_ALIGNMENT 1  #endif diff --git a/tests/test-alloca-opt.c b/tests/test-alloca-opt.c index a64ed82a..3f20779c 100644 --- a/tests/test-alloca-opt.c +++ b/tests/test-alloca-opt.c @@ -1,5 +1,5 @@  /* Test of optional automatic memory allocation. -   Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-arpa_inet.c b/tests/test-arpa_inet.c index cfe4a7a2..77222638 100644 --- a/tests/test-arpa_inet.c +++ b/tests/test-arpa_inet.c @@ -1,5 +1,5 @@  /* Test of <arpa/inet.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-array-mergesort.c b/tests/test-array-mergesort.c index 5996bc31..71639d12 100644 --- a/tests/test-array-mergesort.c +++ b/tests/test-array-mergesort.c @@ -1,5 +1,5 @@  /* Test of stable-sorting of an array using mergesort. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published diff --git a/tests/test-assert.c b/tests/test-assert.c index 45b0c0f4..771eec34 100644 --- a/tests/test-assert.c +++ b/tests/test-assert.c @@ -1,5 +1,5 @@  /* Test assert.h and static_assert. -   Copyright 2022 Free Software Foundation, Inc. +   Copyright 2022-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -65,6 +65,7 @@ int  main (void)  {    STATIC_ASSERT_TESTS; +  f ("");    g ();    h ();    return 0; diff --git a/tests/test-binary-io.c b/tests/test-binary-io.c index 2d71ae9c..32de2fe4 100644 --- a/tests/test-binary-io.c +++ b/tests/test-binary-io.c @@ -1,5 +1,5 @@  /* Test of binary mode I/O. -   Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@  #include "macros.h"  int -main (int argc, char *argv[]) +main (_GL_UNUSED int argc, char *argv[])  {    /* Test the O_BINARY macro.  */    { diff --git a/tests/test-binary-io.sh b/tests/test-binary-io.sh index a177d947..7bc5aa07 100755 --- a/tests/test-binary-io.sh +++ b/tests/test-binary-io.sh @@ -1,7 +1,7 @@  #!/bin/sh  tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM  tmpfiles="$tmpfiles t-bin-out0.tmp t-bin-out1.tmp"  ${CHECKER} ./test-binary-io${EXEEXT} 1 > t-bin-out1.tmp || exit 1 diff --git a/tests/test-bind.c b/tests/test-bind.c index 17063bf7..0f8e783a 100644 --- a/tests/test-bind.c +++ b/tests/test-bind.c @@ -1,5 +1,5 @@  /* Test binding a server socket to a port. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-btoc32-1.sh b/tests/test-btoc32-1.sh new file mode 100755 index 00000000..25caea64 --- /dev/null +++ b/tests/test-btoc32-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-btoc32${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtowc1.sh b/tests/test-btoc32-2.sh index 2b6eaf99..ba52767b 100755 --- a/tests/test-mbrtowc1.sh +++ b/tests/test-btoc32-2.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR = none; then  fi  LC_ALL=$LOCALE_FR \ -${CHECKER} ./test-mbrtowc${EXEEXT} 1 +${CHECKER} ./test-btoc32${EXEEXT} 2 diff --git a/tests/test-mbrtowc2.sh b/tests/test-btoc32-3.sh index 6868e863..8c6b1803 100755 --- a/tests/test-mbrtowc2.sh +++ b/tests/test-btoc32-3.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR_UTF8 = none; then  fi  LC_ALL=$LOCALE_FR_UTF8 \ -${CHECKER} ./test-mbrtowc${EXEEXT} 2 +${CHECKER} ./test-btoc32${EXEEXT} 3 diff --git a/tests/test-btoc32.c b/tests/test-btoc32.c new file mode 100644 index 00000000..7e15dcce --- /dev/null +++ b/tests/test-btoc32.c @@ -0,0 +1,94 @@ +/* Test of conversion of unibyte character to 32-bit wide character. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (btoc32, wint_t, (int)); + +#include <locale.h> +#include <stdio.h> +#include <wchar.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ +  int c; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  ASSERT (btoc32 (EOF) == WEOF); + +#ifdef __ANDROID__ +  /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the +     "C" locale.  Furthermore, when you attempt to set the "C" or "POSIX" +     locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, +     that is, effectively the "C.UTF-8" locale.  */ +  if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) +    argv[1] = "3"; +#endif + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '1': +        /* C or POSIX locale.  */ +        for (c = 0; c < 0x100; c++) +          if (c != 0) +            { +              /* We are testing all nonnull bytes.  */ +              wint_t wc = btoc32 (c); +              /* POSIX:2018 says regarding btowc: "In the POSIX locale, btowc() +                 shall not return WEOF if c has a value in the range 0 to 255 +                 inclusive."  It is reasonable to expect btoc32 to behave in +                 the same way.  */ +              if (c < 0x80) +                /* c is an ASCII character.  */ +                ASSERT (wc == c); +              else +                /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. +                   But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF.  */ +                ASSERT (wc == c || wc == 0xDF00 + c); +            } +        return 0; + +      case '2': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        for (c = 0; c < 0x80; c++) +          ASSERT (btoc32 (c) == c); +        for (c = 0xA0; c < 0x100; c++) +          ASSERT (btoc32 (c) != WEOF); +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        for (c = 0; c < 0x80; c++) +          ASSERT (btoc32 (c) == c); +        for (c = 0x80; c < 0x100; c++) +          ASSERT (btoc32 (c) == WEOF); +        return 0; +      } + +  return 1; +} diff --git a/tests/test-btowc-1.sh b/tests/test-btowc-1.sh new file mode 100755 index 00000000..d6776565 --- /dev/null +++ b/tests/test-btowc-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-btowc${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-btowc1.sh b/tests/test-btowc-2.sh index e51e1c5c..9f939d6c 100755 --- a/tests/test-btowc1.sh +++ b/tests/test-btowc-2.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR = none; then  fi  LC_ALL=$LOCALE_FR \ -${CHECKER} ./test-btowc${EXEEXT} 1 +${CHECKER} ./test-btowc${EXEEXT} 2 diff --git a/tests/test-btowc2.sh b/tests/test-btowc-3.sh index 9f38f4e8..41244765 100755 --- a/tests/test-btowc2.sh +++ b/tests/test-btowc-3.sh @@ -12,4 +12,4 @@ if test $LOCALE_FR_UTF8 = none; then  fi  LC_ALL=$LOCALE_FR_UTF8 \ -${CHECKER} ./test-btowc${EXEEXT} 2 +${CHECKER} ./test-btowc${EXEEXT} 3 diff --git a/tests/test-btowc.c b/tests/test-btowc.c index 32806f07..aeac4bbf 100644 --- a/tests/test-btowc.c +++ b/tests/test-btowc.c @@ -1,5 +1,5 @@  /* Test of conversion of unibyte character to wide character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -39,10 +39,38 @@ main (int argc, char *argv[])    ASSERT (btowc (EOF) == WEOF); +#ifdef __ANDROID__ +  /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the +     "C" locale.  Furthermore, when you attempt to set the "C" or "POSIX" +     locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, +     that is, effectively the "C.UTF-8" locale.  */ +  if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) +    argv[1] = "3"; +#endif +    if (argc > 1)      switch (argv[1][0])        {        case '1': +        /* C or POSIX locale.  */ +        for (c = 0; c < 0x100; c++) +          if (c != 0) +            { +              /* We are testing all nonnull bytes.  */ +              wint_t wc = btowc (c); +              /* POSIX:2018 says: "In the POSIX locale, btowc() shall not return +                 WEOF if c has a value in the range 0 to 255 inclusive."  */ +              if (c < 0x80) +                /* c is an ASCII character.  */ +                ASSERT (wc == c); +              else +                /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. +                   But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF.  */ +                ASSERT (wc == c || wc == 0xDF00 + c); +            } +        return 0; + +      case '2':          /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */          for (c = 0; c < 0x80; c++)            ASSERT (btowc (c) == c); @@ -50,7 +78,7 @@ main (int argc, char *argv[])            ASSERT (btowc (c) != WEOF);          return 0; -      case '2': +      case '3':          /* Locale encoding is UTF-8.  */          for (c = 0; c < 0x80; c++)            ASSERT (btowc (c) == c); diff --git a/tests/test-c-ctype.c b/tests/test-c-ctype.c index 9870520d..8414a31d 100644 --- a/tests/test-c-ctype.c +++ b/tests/test-c-ctype.c @@ -1,5 +1,5 @@  /* Test of character handling in C locale. -   Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-c-strcasecmp.c b/tests/test-c-strcasecmp.c index 1bb518da..fd07e009 100644 --- a/tests/test-c-strcasecmp.c +++ b/tests/test-c-strcasecmp.c @@ -1,5 +1,5 @@  /* Test of case-insensitive string comparison function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-c-strncasecmp.c b/tests/test-c-strncasecmp.c index 734eb87b..a8bb3358 100644 --- a/tests/test-c-strncasecmp.c +++ b/tests/test-c-strncasecmp.c @@ -1,5 +1,5 @@  /* Test of case-insensitive string comparison function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-c32isalnum.c b/tests/test-c32isalnum.c new file mode 100644 index 00000000..4f75e0f4 --- /dev/null +++ b/tests/test-c32isalnum.c @@ -0,0 +1,261 @@ +/* Test of c32isalnum() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isalnum, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isalnum for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isalnum (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isalnum (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the alphanumeric characters include the uppercase and +         lowercase characters and digits and, consequently, include the A ... Z +         and a ... z and 0 ... 9 characters. +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the alphanumeric characters include only the ASCII A ... Z and a ... z +         and 0 ... 9 characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '0': case '1': case '2': case '3': case '4': +            case '5': case '6': case '7': case '8': case '9': +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +            case 'a': case 'b': case 'c': case 'd': case 'e': +            case 'f': case 'g': case 'h': case 'i': case 'j': +            case 'k': case 'l': case 'm': case 'n': case 'o': +            case 'p': case 'q': case 'r': case 's': case 't': +            case 'u': case 'v': case 'w': case 'x': case 'y': +            case 'z': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\327", 1); +          ASSERT (is == 0); +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\330", 1); +          ASSERT (is != 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\337", 2); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\217\251\254", 3); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\217\251\250", 3); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +        #if defined __GLIBC__ +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is != 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\303\227", 2); +          ASSERT (is == 0); +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\303\230", 2); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\305\201", 2); +          ASSERT (is != 0); +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\343\200\201", 3); +          ASSERT (is == 0); +        #if defined __GLIBC__ +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\357\274\221", 3); +          ASSERT (is != 0); +        #endif +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\357\275\215", 3); +          ASSERT (is != 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\360\220\214\260", 4); +          ASSERT (is != 0); +        #endif +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\360\235\204\200", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\363\240\201\241", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\301", 2); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\201\060\211\061", 4); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\201\060\221\071", 4); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +        #if defined __GLIBC__ +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is != 0); +        #endif +        #if !defined __DragonFly__ +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is != 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\220\060\322\066", 4); +          ASSERT (is != 0); +        #endif +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\224\062\273\064", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\323\066\237\065", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isalnum.sh b/tests/test-c32isalnum.sh new file mode 100755 index 00000000..df94aade --- /dev/null +++ b/tests/test-c32isalnum.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isalnum${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isalnum${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isalnum${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isalnum${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isalnum${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isalpha.c b/tests/test-c32isalpha.c new file mode 100644 index 00000000..14c78d7d --- /dev/null +++ b/tests/test-c32isalpha.c @@ -0,0 +1,259 @@ +/* Test of c32isalpha() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isalpha, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isalpha for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isalpha (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isalpha (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the alphabetic characters include the uppercase and +         lowercase characters and, consequently, include the A ... Z and a ... z +         characters. +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the alphabetic characters include only the ASCII A ... Z and a ... z +         characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +            case 'a': case 'b': case 'c': case 'd': case 'e': +            case 'f': case 'g': case 'h': case 'i': case 'j': +            case 'k': case 'l': case 'm': case 'n': case 'o': +            case 'p': case 'q': case 'r': case 's': case 't': +            case 'u': case 'v': case 'w': case 'x': case 'y': +            case 'z': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\327", 1); +          ASSERT (is == 0); +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\330", 1); +          ASSERT (is != 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\337", 2); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\217\251\254", 3); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\217\251\250", 3); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__) +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\303\227", 2); +          ASSERT (is == 0); +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\303\230", 2); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\305\201", 2); +          ASSERT (is != 0); +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\343\200\201", 3); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\357\274\221", 3); +          ASSERT (is == 0); +        #endif +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\357\275\215", 3); +          ASSERT (is != 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\360\220\214\260", 4); +          ASSERT (is != 0); +        #endif +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\360\235\204\200", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\363\240\201\241", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\301", 2); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\201\060\211\061", 4); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\201\060\221\071", 4); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +        #endif +        #if !defined __DragonFly__ +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is != 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\220\060\322\066", 4); +          ASSERT (is != 0); +        #endif +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\224\062\273\064", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\323\066\237\065", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isalpha.sh b/tests/test-c32isalpha.sh new file mode 100755 index 00000000..11c896fa --- /dev/null +++ b/tests/test-c32isalpha.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isalpha${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isalpha${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isalpha${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isalpha${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isalpha${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isblank.c b/tests/test-c32isblank.c new file mode 100644 index 00000000..0e722b25 --- /dev/null +++ b/tests/test-c32isblank.c @@ -0,0 +1,205 @@ +/* Test of c32isblank() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isblank, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isblank for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isblank (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isblank (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the blank characters include the <space> and <tab> +         characters, +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the blank characters include only the ASCII <space> and <tab> +         characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': +        #if !(defined __FreeBSD__ || defined __NetBSD__) +        case '\v': +        #endif +        case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          if (c == '\t' || c == ' ') +            ASSERT (is != 0); +          else +            ASSERT (is == 0); +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +        #if defined __GLIBC__ +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\240", 1); +          ASSERT (is == 0); +        #endif +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\267", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+3002 IDEOGRAPHIC FULL STOP */ +          is = for_character ("\241\243", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +        #if defined __GLIBC__ +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\302\240", 2); +          ASSERT (is == 0); +        #endif +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\302\267", 2); +          ASSERT (is == 0); +        #if defined __GLIBC__ +          /* U+202F NARROW NO-BREAK SPACE */ +          is = for_character ("\342\200\257", 3); +          ASSERT (is == 0); +        #endif +          /* U+3002 IDEOGRAPHIC FULL STOP */ +          is = for_character ("\343\200\202", 3); +          ASSERT (is == 0); +          /* U+1D13D MUSICAL SYMBOL QUARTER REST */ +          is = for_character ("\360\235\204\275", 4); +          ASSERT (is == 0); +          /* U+E0020 TAG SPACE */ +          is = for_character ("\363\240\200\240", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +        #if defined __GLIBC__ +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\201\060\204\062", 4); +          ASSERT (is == 0); +        #endif +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\241\244", 2); +          ASSERT (is == 0); +        #if defined __GLIBC__ +          /* U+202F NARROW NO-BREAK SPACE */ +          is = for_character ("\201\066\247\062", 4); +          ASSERT (is == 0); +        #endif +          /* U+3002 IDEOGRAPHIC FULL STOP */ +          is = for_character ("\241\243", 2); +          ASSERT (is == 0); +          /* U+1D13D MUSICAL SYMBOL QUARTER REST */ +          is = for_character ("\224\062\301\065", 4); +          ASSERT (is == 0); +          /* U+E0020 TAG SPACE */ +          is = for_character ("\323\066\231\060", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isblank.sh b/tests/test-c32isblank.sh new file mode 100755 index 00000000..fe5f9b86 --- /dev/null +++ b/tests/test-c32isblank.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isblank${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isblank${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isblank${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isblank${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isblank${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32iscntrl.c b/tests/test-c32iscntrl.c new file mode 100644 index 00000000..674c5804 --- /dev/null +++ b/tests/test-c32iscntrl.c @@ -0,0 +1,212 @@ +/* Test of c32iscntrl() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32iscntrl, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32iscntrl for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32iscntrl (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32iscntrl (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     no explicit list of control characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '\t': case '\v': case '\f': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is != 0); +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\240", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is != 0); +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is != 0); +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\302\240", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\342\200\256", 3); +          ASSERT (is != 0); +        #endif +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\343\200\200", 3); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\357\273\277", 3); +          ASSERT (is != 0); +        #endif +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\360\240\200\200", 4); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\363\240\200\201", 4); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is != 0); +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\201\060\204\062", 4); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\201\066\247\061", 4); +          ASSERT (is != 0); +        #endif +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\204\061\225\063", 4); +          ASSERT (is != 0); +        #endif +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\225\062\202\066", 4); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\323\066\225\071", 4); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32iscntrl.sh b/tests/test-c32iscntrl.sh new file mode 100755 index 00000000..b27747c7 --- /dev/null +++ b/tests/test-c32iscntrl.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32iscntrl${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32iscntrl${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32iscntrl${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32iscntrl${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32iscntrl${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isdigit.c b/tests/test-c32isdigit.c new file mode 100644 index 00000000..82b77015 --- /dev/null +++ b/tests/test-c32isdigit.c @@ -0,0 +1,236 @@ +/* Test of c32isdigit() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isdigit, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isdigit for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isdigit (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isdigit (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     ISO C 99 sections 7.25.2.1.5 and 5.2.1 specify that the decimal digits +     include only the ASCII 0 ... 9 characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '0': case '1': case '2': case '3': case '4': +            case '5': case '6': case '7': case '8': case '9': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\262", 1); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\263", 1); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\271", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\302\262", 2); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\302\263", 2); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\302\271", 2); +          ASSERT (is == 0); +          /* U+0663 ARABIC-INDIC DIGIT THREE */ +          is = for_character ("\331\243", 2); +          ASSERT (is == 0); +          /* U+2070 SUPERSCRIPT ZERO */ +          is = for_character ("\342\201\260", 3); +          ASSERT (is == 0); +          /* U+2079 SUPERSCRIPT NINE */ +          is = for_character ("\342\201\271", 3); +          ASSERT (is == 0); +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\357\274\221", 3); +          ASSERT (is == 0); +          /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ +          is = for_character ("\360\235\237\221", 4); +          ASSERT (is == 0); +          /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ +          is = for_character ("\360\235\237\233", 4); +          ASSERT (is == 0); +          /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ +          is = for_character ("\360\235\237\245", 4); +          ASSERT (is == 0); +          /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ +          is = for_character ("\360\235\237\257", 4); +          ASSERT (is == 0); +          /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ +          is = for_character ("\360\235\237\271", 4); +          ASSERT (is == 0); +          /* U+E0033 TAG DIGIT THREE */ +          is = for_character ("\363\240\200\263", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\201\060\205\065", 4); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\201\060\205\066", 4); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\201\060\206\061", 4); +          ASSERT (is == 0); +          /* U+0663 ARABIC-INDIC DIGIT THREE */ +          is = for_character ("\201\061\211\071", 4); +          ASSERT (is == 0); +          /* U+2070 SUPERSCRIPT ZERO */ +          is = for_character ("\201\066\255\062", 4); +          ASSERT (is == 0); +          /* U+2079 SUPERSCRIPT NINE */ +          is = for_character ("\201\066\256\061", 4); +          ASSERT (is == 0); +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +          /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ +          is = for_character ("\224\063\353\071", 4); +          ASSERT (is == 0); +          /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ +          is = for_character ("\224\063\354\071", 4); +          ASSERT (is == 0); +          /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ +          is = for_character ("\224\063\355\071", 4); +          ASSERT (is == 0); +          /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ +          is = for_character ("\224\063\356\071", 4); +          ASSERT (is == 0); +          /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ +          is = for_character ("\224\063\357\071", 4); +          ASSERT (is == 0); +          /* U+E0033 TAG DIGIT THREE */ +          is = for_character ("\323\066\232\071", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isdigit.sh b/tests/test-c32isdigit.sh new file mode 100755 index 00000000..158d3628 --- /dev/null +++ b/tests/test-c32isdigit.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isdigit${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isdigit${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isdigit${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isdigit${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isdigit${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isgraph.c b/tests/test-c32isgraph.c new file mode 100644 index 00000000..fb993bbb --- /dev/null +++ b/tests/test-c32isgraph.c @@ -0,0 +1,247 @@ +/* Test of c32isgraph() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isgraph, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isgraph for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isgraph (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isgraph (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     no explicit list of graphic characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '\t': case '\v': case '\f': +            case ' ': +              ASSERT (is == 0); +              break; +            default: +              ASSERT (is != 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sgi || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\240", 1); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+00B8 CEDILLA */ +          is = for_character ("\270", 1); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) +          /* U+00B8 CEDILLA */ +          is = for_character ("\217\242\261", 3); +          ASSERT (is != 0); +        #endif +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\302\240", 2); +          ASSERT (is != 0); +        #endif +          /* U+00B8 CEDILLA */ +          is = for_character ("\302\270", 2); +          ASSERT (is != 0); +          /* U+2002 EN SPACE */ +          is = for_character ("\342\200\202", 3); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\342\200\256", 3); +          ASSERT (is == 0); +        #endif +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\343\200\200", 3); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\357\273\277", 3); +          ASSERT (is == 0); +        #endif +        #if !defined __sun +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\360\240\200\200", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\363\240\200\201", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\201\060\204\062", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00B8 CEDILLA */ +          is = for_character ("\201\060\206\060", 4); +          ASSERT (is != 0); +        #endif +          /* U+2002 EN SPACE */ +          is = for_character ("\201\066\243\070", 4); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\201\066\247\061", 4); +          ASSERT (is == 0); +        #endif +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\204\061\225\063", 4); +          ASSERT (is == 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\225\062\202\066", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\323\066\225\071", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isgraph.sh b/tests/test-c32isgraph.sh new file mode 100755 index 00000000..be760fb2 --- /dev/null +++ b/tests/test-c32isgraph.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isgraph${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isgraph${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isgraph${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isgraph${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isgraph${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32islower.c b/tests/test-c32islower.c new file mode 100644 index 00000000..3b799677 --- /dev/null +++ b/tests/test-c32islower.c @@ -0,0 +1,354 @@ +/* Test of c32islower() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32islower, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32islower for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32islower (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32islower (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the lowercase characters include the a ... z +         characters, +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the lowercase characters include only the ASCII a ... z characters. +   */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case 'a': case 'b': case 'c': case 'd': case 'e': +            case 'f': case 'g': case 'h': case 'i': case 'j': +            case 'k': case 'l': case 'm': case 'n': case 'o': +            case 'p': case 'q': case 'r': case 's': case 't': +            case 'u': case 'v': case 'w': case 'x': case 'y': +            case 'z': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\262", 1); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\265", 1); +          ASSERT (is == 0); +        #endif +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\311", 1); +          ASSERT (is == 0); +        #if !defined __CYGWIN__ +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\337", 1); +          ASSERT (is != 0); +        #endif +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\351", 1); +          ASSERT (is != 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\377", 1); +          ASSERT (is != 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\217\252\261", 3); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __CYGWIN__) +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\217\251\316", 3); +          ASSERT (is != 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\217\253\261", 3); +          ASSERT (is != 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\217\253\363", 3); +          ASSERT (is != 0); +        #endif +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\217\251\250", 3); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\217\251\310", 3); +          ASSERT (is != 0); +        #endif +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\247\273", 2); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\247\353", 2); +          ASSERT (is != 0); +        #endif +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\244\323", 2); +          ASSERT (is == 0); +        #if !defined __DragonFly__ +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          is = for_character ("\243\347", 2); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\302\262", 2); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\302\265", 2); +          ASSERT (is == 0); +        #endif +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\303\211", 2); +          ASSERT (is == 0); +        #if !defined __CYGWIN__ +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\303\237", 2); +          ASSERT (is != 0); +        #endif +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\303\251", 2); +          ASSERT (is != 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\303\277", 2); +          ASSERT (is != 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\305\201", 2); +          ASSERT (is == 0); +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\305\202", 2); +          ASSERT (is != 0); +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\320\251", 2); +          ASSERT (is == 0); +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\321\211", 2); +          ASSERT (is != 0); +          /* U+05D5 HEBREW LETTER VAV */ +          is = for_character ("\327\225", 2); +          ASSERT (is == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\343\201\263", 3); +          ASSERT (is == 0); +          /* U+3162 HANGUL LETTER YI */ +          is = for_character ("\343\205\242", 3); +          ASSERT (is == 0); +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          is = for_character ("\357\275\207", 3); +          ASSERT (is != 0); +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          is = for_character ("\357\277\233", 3); +          ASSERT (is == 0); +          /* U+10419 DESERET CAPITAL LETTER EF */ +          is = for_character ("\360\220\220\231", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+10441 DESERET SMALL LETTER EF */ +          is = for_character ("\360\220\221\201", 4); +          ASSERT (is != 0); +        #endif +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\363\240\201\201", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\363\240\201\241", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\201\060\205\065", 4); +          ASSERT (is == 0); +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__) +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\201\060\205\070", 4); +          ASSERT (is == 0); +        #endif +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\201\060\207\067", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\201\060\211\070", 4); +          ASSERT (is != 0); +        #endif +        #if !defined __DragonFly__ +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\250\246", 2); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\201\060\213\067", 4); +          ASSERT (is != 0); +        #endif +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\201\060\221\071", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\201\060\222\060", 4); +          ASSERT (is != 0); +        #endif +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\247\273", 2); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\247\353", 2); +          ASSERT (is != 0); +        #endif +          /* U+05D5 HEBREW LETTER VAV */ +          is = for_character ("\201\060\371\067", 4); +          ASSERT (is == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\244\323", 2); +          ASSERT (is == 0); +          /* U+3162 HANGUL LETTER YI */ +          is = for_character ("\201\071\256\062", 4); +          ASSERT (is == 0); +        #if !defined __DragonFly__ +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          is = for_character ("\243\347", 2); +          ASSERT (is != 0); +        #endif +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          is = for_character ("\204\061\241\071", 4); +          ASSERT (is == 0); +          /* U+10419 DESERET CAPITAL LETTER EF */ +          is = for_character ("\220\060\351\071", 4); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10441 DESERET SMALL LETTER EF */ +          is = for_character ("\220\060\355\071", 4); +          ASSERT (is != 0); +        #endif +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\323\066\234\063", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\323\066\237\065", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32islower.sh b/tests/test-c32islower.sh new file mode 100755 index 00000000..f8b9840c --- /dev/null +++ b/tests/test-c32islower.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32islower${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32islower${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32islower${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32islower${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32islower${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isprint.c b/tests/test-c32isprint.c new file mode 100644 index 00000000..d28eb492 --- /dev/null +++ b/tests/test-c32isprint.c @@ -0,0 +1,250 @@ +/* Test of c32isprint() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isprint, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isprint for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isprint (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isprint (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     no explicit list of printable characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '\t': case '\v': case '\f': +              ASSERT (is == 0); +              break; +            default: +              ASSERT (is != 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sgi || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\240", 1); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+00B8 CEDILLA */ +          is = for_character ("\270", 1); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__) +          /* U+00B8 CEDILLA */ +          is = for_character ("\217\242\261", 3); +          ASSERT (is != 0); +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\302\240", 2); +          ASSERT (is != 0); +        #endif +          /* U+00B8 CEDILLA */ +          is = for_character ("\302\270", 2); +          ASSERT (is != 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+2002 EN SPACE */ +          is = for_character ("\342\200\202", 3); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\342\200\256", 3); +          ASSERT (is == 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\343\200\200", 3); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\357\273\277", 3); +          ASSERT (is == 0); +        #endif +        #if !defined __sun +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\360\240\200\200", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || defined MUSL_LIBC || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\363\240\200\201", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+007F <control> */ +          is = for_character ("\177", 1); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00A0 NO-BREAK SPACE */ +          is = for_character ("\201\060\204\062", 4); +          ASSERT (is != 0); +          /* U+00B8 CEDILLA */ +          is = for_character ("\201\060\206\060", 4); +          ASSERT (is != 0); +          /* U+2002 EN SPACE */ +          is = for_character ("\201\066\243\070", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+202E RIGHT-TO-LEFT OVERRIDE */ +          is = for_character ("\201\066\247\061", 4); +          ASSERT (is == 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+FEFF ZERO WIDTH NO-BREAK SPACE */ +          is = for_character ("\204\061\225\063", 4); +          ASSERT (is == 0); +        #endif +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+20000 <CJK Ideograph> */ +          is = for_character ("\225\062\202\066", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+E0001 LANGUAGE TAG */ +          is = for_character ("\323\066\225\071", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isprint.sh b/tests/test-c32isprint.sh new file mode 100755 index 00000000..d455413b --- /dev/null +++ b/tests/test-c32isprint.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isprint${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isprint${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isprint${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isprint${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isprint${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32ispunct.c b/tests/test-c32ispunct.c new file mode 100644 index 00000000..1b9f8e3b --- /dev/null +++ b/tests/test-c32ispunct.c @@ -0,0 +1,330 @@ +/* Test of c32ispunct() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32ispunct, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32ispunct for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32ispunct (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32ispunct (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     no explicit list of punctuation or symbol characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case ' ': +            case '0': case '1': case '2': case '3': case '4': +            case '5': case '6': case '7': case '8': case '9': +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +            case 'a': case 'b': case 'c': case 'd': case 'e': +            case 'f': case 'g': case 'h': case 'i': case 'j': +            case 'k': case 'l': case 'm': case 'n': case 'o': +            case 'p': case 'q': case 'r': case 's': case 't': +            case 'u': case 'v': case 'w': case 'x': case 'y': +            case 'z': +              /* c is an alphanumeric or space character.  */ +              ASSERT (is == 0); +              break; +            case '!': case '"': case '#': case '%': +            case '&': case '\'': case '(': case ')': case '*': +            case '+': case ',': case '-': case '.': case '/': +            case ':': case ';': case '<': case '=': case '>': +            case '?': +            case '[': case '\\': case ']': case '^': case '_': +            case '{': case '|': case '}': case '~': +              /* These characters are usually expected to be punctuation or +                 symbol characters.  */ +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        /* These characters are not in the ISO C "basic character set", but +           are nevertheless usually expected to be punctuation or symbol +           characters.  */ +        is = for_character ("$", 1); +        ASSERT (is != 0); +        is = for_character ("@", 1); +        ASSERT (is != 0); +        is = for_character ("`", 1); +        ASSERT (is != 0); +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+00BF INVERTED QUESTION MARK */ +          is = for_character ("\277", 1); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\327", 1); +          ASSERT (is != 0); +        #endif +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\330", 1); +          ASSERT (is == 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\337", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+00BF INVERTED QUESTION MARK */ +          is = for_character ("\217\242\304", 3); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\337", 2); +          ASSERT (is != 0); +        #endif +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\217\251\254", 3); +          ASSERT (is == 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\217\251\316", 3); +          ASSERT (is == 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\217\251\250", 3); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+2192 RIGHTWARDS ARROW */ +          is = for_character ("\242\252", 2); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is != 0); +        #endif +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00BF INVERTED QUESTION MARK */ +          is = for_character ("\302\277", 2); +          ASSERT (is != 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\303\227", 2); +          ASSERT (is != 0); +        #endif +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\303\230", 2); +          ASSERT (is == 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\303\237", 2); +          ASSERT (is == 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\305\201", 2); +          ASSERT (is == 0); +          /* U+05F3 HEBREW PUNCTUATION GERESH */ +          is = for_character ("\327\263", 2); +          ASSERT (is != 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+2192 RIGHTWARDS ARROW */ +          is = for_character ("\342\206\222", 3); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\343\200\201", 3); +          ASSERT (is != 0); +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\357\274\221", 3); +          ASSERT (is == 0); +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\357\275\215", 3); +          ASSERT (is == 0); +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\360\220\214\260", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\360\235\204\200", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __NetBSD__ || defined _AIX || defined __sun || defined __CYGWIN__ || (defined _WIN32 && !defined __CYGWIN__)) +          /* U+E003A TAG COLON */ +          is = for_character ("\363\240\200\272", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00BF INVERTED QUESTION MARK */ +          is = for_character ("\201\060\206\067", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+00D7 MULTIPLICATION SIGN */ +          is = for_character ("\241\301", 2); +          ASSERT (is != 0); +        #endif +          /* U+00D8 LATIN CAPITAL LETTER O WITH STROKE */ +          is = for_character ("\201\060\211\061", 4); +          ASSERT (is == 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\201\060\211\070", 4); +          ASSERT (is == 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\201\060\221\071", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+05F3 HEBREW PUNCTUATION GERESH */ +          is = for_character ("\201\060\374\067", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+2192 RIGHTWARDS ARROW */ +          is = for_character ("\241\372", 2); +          ASSERT (is != 0); +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is != 0); +        #endif +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +          /* U+FF4D FULLWIDTH LATIN SMALL LETTER M */ +          is = for_character ("\243\355", 2); +          ASSERT (is == 0); +          /* U+10330 GOTHIC LETTER AHSA */ +          is = for_character ("\220\060\322\066", 4); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+1D100 MUSICAL SYMBOL SINGLE BARLINE */ +          is = for_character ("\224\062\273\064", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __GLIBC__ || (defined __APPLE__ && defined __MACH__) || defined __FreeBSD__) +          /* U+E003A TAG COLON */ +          is = for_character ("\323\066\233\066", 4); +          ASSERT (is == 0); +        #endif +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32ispunct.sh b/tests/test-c32ispunct.sh new file mode 100755 index 00000000..d818bcf7 --- /dev/null +++ b/tests/test-c32ispunct.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32ispunct${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32ispunct${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32ispunct${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32ispunct${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32ispunct${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isspace.c b/tests/test-c32isspace.c new file mode 100644 index 00000000..15cf387d --- /dev/null +++ b/tests/test-c32isspace.c @@ -0,0 +1,198 @@ +/* Test of c32isspace() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isspace, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isspace for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isspace (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isspace (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the white-space characters include the <space>, +         <form-feed>, <newline>, <carriage-return>, <tab>, <vertical-tab> +         characters, +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the white-space characters include only the ASCII <space>, <form-feed>, +         <newline>, <carriage-return>, <tab>, <vertical-tab> characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\f': case '\n': case '\r': case '\t': case '\v': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set" or one of the explicitly +             mentioned white-space characters.  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case ' ': case '\f': case '\n': case '\r': case '\t': case '\v': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\267", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\302\267", 2); +          ASSERT (is == 0); +          /* U+2002 EN SPACE */ +          is = for_character ("\342\200\202", 3); +          ASSERT (is != 0); +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\343\200\200", 3); +          ASSERT (is != 0); +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\343\200\201", 3); +          ASSERT (is == 0); +          /* U+E0020 TAG SPACE */ +          is = for_character ("\363\240\200\240", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B7 MIDDLE DOT */ +          is = for_character ("\241\244", 2); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+2002 EN SPACE */ +          is = for_character ("\201\066\243\070", 4); +          ASSERT (is != 0); +        #endif +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+3000 IDEOGRAPHIC SPACE */ +          is = for_character ("\241\241", 2); +          ASSERT (is != 0); +        #endif +          /* U+3001 IDEOGRAPHIC COMMA */ +          is = for_character ("\241\242", 2); +          ASSERT (is == 0); +          /* U+E0020 TAG SPACE */ +          is = for_character ("\323\066\231\060", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isspace.sh b/tests/test-c32isspace.sh new file mode 100755 index 00000000..a704d86b --- /dev/null +++ b/tests/test-c32isspace.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isspace${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isspace${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isspace${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isspace${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isspace${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isupper.c b/tests/test-c32isupper.c new file mode 100644 index 00000000..178b0d19 --- /dev/null +++ b/tests/test-c32isupper.c @@ -0,0 +1,340 @@ +/* Test of c32isupper() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isupper, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isupper for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isupper (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isupper (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the uppercase characters include the A ... Z +         characters, +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the uppercase characters include only the ASCII A ... Z characters. +   */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\262", 1); +          ASSERT (is == 0); +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\265", 1); +          ASSERT (is == 0); +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\311", 1); +          ASSERT (is != 0); +        #if !defined __hpux +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\337", 1); +          ASSERT (is == 0); +        #endif +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\351", 1); +          ASSERT (is == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\377", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\217\252\261", 3); +          ASSERT (is != 0); +        #endif +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\217\251\316", 3); +          ASSERT (is == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\217\253\261", 3); +          ASSERT (is == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\217\253\363", 3); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__) +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\217\251\250", 3); +          ASSERT (is != 0); +        #endif +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\217\251\310", 3); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\247\273", 2); +          ASSERT (is != 0); +        #endif +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\247\353", 2); +          ASSERT (is == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\244\323", 2); +          ASSERT (is == 0); +        #if !defined __DragonFly__ +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          is = for_character ("\243\307", 2); +          ASSERT (is != 0); +        #endif +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\302\262", 2); +          ASSERT (is == 0); +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\302\265", 2); +          ASSERT (is == 0); +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\303\211", 2); +          ASSERT (is != 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\303\237", 2); +          ASSERT (is == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\303\251", 2); +          ASSERT (is == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\303\277", 2); +          ASSERT (is == 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\305\201", 2); +          ASSERT (is != 0); +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\305\202", 2); +          ASSERT (is == 0); +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\320\251", 2); +          ASSERT (is != 0); +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\321\211", 2); +          ASSERT (is == 0); +          /* U+05D5 HEBREW LETTER VAV */ +          is = for_character ("\327\225", 2); +          ASSERT (is == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\343\201\263", 3); +          ASSERT (is == 0); +          /* U+3162 HANGUL LETTER YI */ +          is = for_character ("\343\205\242", 3); +          ASSERT (is == 0); +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          is = for_character ("\357\274\247", 3); +          ASSERT (is != 0); +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          is = for_character ("\357\277\233", 3); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+10419 DESERET CAPITAL LETTER EF */ +          is = for_character ("\360\220\220\231", 4); +          ASSERT (is != 0); +        #endif +          /* U+10441 DESERET SMALL LETTER EF */ +          is = for_character ("\360\220\221\201", 4); +          ASSERT (is == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\363\240\201\201", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\363\240\201\241", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\201\060\205\065", 4); +          ASSERT (is == 0); +          /* U+00B5 MICRO SIGN */ +          is = for_character ("\201\060\205\070", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          is = for_character ("\201\060\207\067", 4); +          ASSERT (is != 0); +        #endif +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          is = for_character ("\201\060\211\070", 4); +          ASSERT (is == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          is = for_character ("\250\246", 2); +          ASSERT (is == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          is = for_character ("\201\060\213\067", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          is = for_character ("\201\060\221\071", 4); +          ASSERT (is != 0); +        #endif +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          is = for_character ("\201\060\222\060", 4); +          ASSERT (is == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          is = for_character ("\247\273", 2); +          ASSERT (is != 0); +        #endif +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          is = for_character ("\247\353", 2); +          ASSERT (is == 0); +          /* U+05D5 HEBREW LETTER VAV */ +          is = for_character ("\201\060\371\067", 4); +          ASSERT (is == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          is = for_character ("\244\323", 2); +          ASSERT (is == 0); +          /* U+3162 HANGUL LETTER YI */ +          is = for_character ("\201\071\256\062", 4); +          ASSERT (is == 0); +        #if !defined __DragonFly__ +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          is = for_character ("\243\307", 2); +          ASSERT (is != 0); +        #endif +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          is = for_character ("\204\061\241\071", 4); +          ASSERT (is == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10419 DESERET CAPITAL LETTER EF */ +          is = for_character ("\220\060\351\071", 4); +          ASSERT (is != 0); +        #endif +          /* U+10441 DESERET SMALL LETTER EF */ +          is = for_character ("\220\060\355\071", 4); +          ASSERT (is == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\323\066\234\063", 4); +          ASSERT (is == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          is = for_character ("\323\066\237\065", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isupper.sh b/tests/test-c32isupper.sh new file mode 100755 index 00000000..ea3efcb8 --- /dev/null +++ b/tests/test-c32isupper.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isupper${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isupper${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isupper${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isupper${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isupper${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32isxdigit.c b/tests/test-c32isxdigit.c new file mode 100644 index 00000000..0c266f47 --- /dev/null +++ b/tests/test-c32isxdigit.c @@ -0,0 +1,262 @@ +/* Test of c32isxdigit() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32isxdigit, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of c32isxdigit for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  return c32isxdigit (wc); +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = c32isxdigit (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     ISO C 99 sections 7.25.2.1.12 and 6.4.4.1 specify that the hexadecimal +     digits include only the ASCII 0 ... 9 A ... F a ... f characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case '0': case '1': case '2': case '3': case '4': +            case '5': case '6': case '7': case '8': case '9': +            case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': +            case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\262", 1); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\263", 1); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\271", 1); +          ASSERT (is == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +          /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ +          is = for_character ("\243\301", 2); +          ASSERT (is == 0); +          /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ +          is = for_character ("\243\341", 2); +          ASSERT (is == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\302\262", 2); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\302\263", 2); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\302\271", 2); +          ASSERT (is == 0); +          /* U+0663 ARABIC-INDIC DIGIT THREE */ +          is = for_character ("\331\243", 2); +          ASSERT (is == 0); +          /* U+2070 SUPERSCRIPT ZERO */ +          is = for_character ("\342\201\260", 3); +          ASSERT (is == 0); +          /* U+2079 SUPERSCRIPT NINE */ +          is = for_character ("\342\201\271", 3); +          ASSERT (is == 0); +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\357\274\221", 3); +          ASSERT (is == 0); +          /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ +          is = for_character ("\357\274\241", 3); +          ASSERT (is == 0); +          /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ +          is = for_character ("\357\275\201", 3); +          ASSERT (is == 0); +          /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ +          is = for_character ("\360\235\237\221", 4); +          ASSERT (is == 0); +          /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ +          is = for_character ("\360\235\237\233", 4); +          ASSERT (is == 0); +          /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ +          is = for_character ("\360\235\237\245", 4); +          ASSERT (is == 0); +          /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ +          is = for_character ("\360\235\237\257", 4); +          ASSERT (is == 0); +          /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ +          is = for_character ("\360\235\237\271", 4); +          ASSERT (is == 0); +          /* U+E0033 TAG DIGIT THREE */ +          is = for_character ("\363\240\200\263", 4); +          ASSERT (is == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\363\240\201\201", 4); +          ASSERT (is == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          is = for_character ("\201\060\205\065", 4); +          ASSERT (is == 0); +          /* U+00B3 SUPERSCRIPT THREE */ +          is = for_character ("\201\060\205\066", 4); +          ASSERT (is == 0); +          /* U+00B9 SUPERSCRIPT ONE */ +          is = for_character ("\201\060\206\061", 4); +          ASSERT (is == 0); +          /* U+0663 ARABIC-INDIC DIGIT THREE */ +          is = for_character ("\201\061\211\071", 4); +          ASSERT (is == 0); +          /* U+2070 SUPERSCRIPT ZERO */ +          is = for_character ("\201\066\255\062", 4); +          ASSERT (is == 0); +          /* U+2079 SUPERSCRIPT NINE */ +          is = for_character ("\201\066\256\061", 4); +          ASSERT (is == 0); +          /* U+FF11 FULLWIDTH DIGIT ONE */ +          is = for_character ("\243\261", 2); +          ASSERT (is == 0); +          /* U+FF21 FULLWIDTH LATIN CAPITAL LETTER A */ +          is = for_character ("\243\301", 2); +          ASSERT (is == 0); +          /* U+FF41 FULLWIDTH LATIN SMALL LETTER A */ +          is = for_character ("\243\341", 2); +          ASSERT (is == 0); +          /* U+1D7D1 MATHEMATICAL BOLD DIGIT THREE */ +          is = for_character ("\224\063\353\071", 4); +          ASSERT (is == 0); +          /* U+1D7DB MATHEMATICAL DOUBLE-STRUCK DIGIT THREE */ +          is = for_character ("\224\063\354\071", 4); +          ASSERT (is == 0); +          /* U+1D7E5 MATHEMATICAL SANS-SERIF DIGIT THREE */ +          is = for_character ("\224\063\355\071", 4); +          ASSERT (is == 0); +          /* U+1D7EF MATHEMATICAL SANS-SERIF BOLD DIGIT THREE */ +          is = for_character ("\224\063\356\071", 4); +          ASSERT (is == 0); +          /* U+1D7F9 MATHEMATICAL MONOSPACE DIGIT THREE */ +          is = for_character ("\224\063\357\071", 4); +          ASSERT (is == 0); +          /* U+E0033 TAG DIGIT THREE */ +          is = for_character ("\323\066\232\071", 4); +          ASSERT (is == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          is = for_character ("\323\066\234\063", 4); +          ASSERT (is == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32isxdigit.sh b/tests/test-c32isxdigit.sh new file mode 100755 index 00000000..48f8efa7 --- /dev/null +++ b/tests/test-c32isxdigit.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32isxdigit${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32isxdigit${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32isxdigit${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32isxdigit${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32isxdigit${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32rtomb-w32-2.sh b/tests/test-c32rtomb-w32-2.sh new file mode 100755 index 00000000..e797d0e5 --- /dev/null +++ b/tests/test-c32rtomb-w32-2.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1252 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-c32rtomb-w32-3.sh b/tests/test-c32rtomb-w32-3.sh new file mode 100755 index 00000000..1b63d472 --- /dev/null +++ b/tests/test-c32rtomb-w32-3.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1256 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-c32rtomb-w32-4.sh b/tests/test-c32rtomb-w32-4.sh new file mode 100755 index 00000000..3c0f3db4 --- /dev/null +++ b/tests/test-c32rtomb-w32-4.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test some UTF-8 locales. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-c32rtomb-w32-5.sh b/tests/test-c32rtomb-w32-5.sh new file mode 100755 index 00000000..ff59a872 --- /dev/null +++ b/tests/test-c32rtomb-w32-5.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP932 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-c32rtomb-w32-6.sh b/tests/test-c32rtomb-w32-6.sh new file mode 100755 index 00000000..3cf34065 --- /dev/null +++ b/tests/test-c32rtomb-w32-6.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP950 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-c32rtomb-w32-7.sh b/tests/test-c32rtomb-w32-7.sh new file mode 100755 index 00000000..2174c0b5 --- /dev/null +++ b/tests/test-c32rtomb-w32-7.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP936 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-c32rtomb-w32-8.sh b/tests/test-c32rtomb-w32-8.sh new file mode 100755 index 00000000..b7e77b28 --- /dev/null +++ b/tests/test-c32rtomb-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-c32rtomb-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-c32rtomb-w32.c b/tests/test-c32rtomb-w32.c new file mode 100644 index 00000000..3e089d11 --- /dev/null +++ b/tests/test-c32rtomb-w32.c @@ -0,0 +1,349 @@ +/* Test of conversion of wide character to multibyte character. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "localcharset.h" +#include "macros.h" + +#if defined _WIN32 && !defined __CYGWIN__ + +static int +test_one_locale (const char *name, int codepage) +{ +  char buf[64]; +  size_t ret; + +# if 1 +  /* Portable code to set the locale.  */ +  { +    char name_with_codepage[1024]; + +    sprintf (name_with_codepage, "%s.%d", name, codepage); + +    /* Set the locale.  */ +    if (setlocale (LC_ALL, name_with_codepage) == NULL) +      return 77; +  } +# else +  /* Hacky way to set a locale.codepage combination that setlocale() refuses +     to set.  */ +  { +    /* Codepage of the current locale, set with setlocale(). +       Not necessarily the same as GetACP().  */ +    extern __declspec(dllimport) unsigned int __lc_codepage; + +    /* Set the locale.  */ +    if (setlocale (LC_ALL, name) == NULL) +      return 77; + +    /* Clobber the codepage and MB_CUR_MAX, both set by setlocale().  */ +    __lc_codepage = codepage; +    switch (codepage) +      { +      case 1252: +      case 1256: +        MB_CUR_MAX = 1; +        break; +      case 932: +      case 950: +      case 936: +        MB_CUR_MAX = 2; +        break; +      case 54936: +      case 65001: +        MB_CUR_MAX = 4; +        break; +      } + +    /* Test whether the codepage is really available.  */ +    { +      mbstate_t state; +      wchar_t wc; + +      memset (&state, '\0', sizeof (mbstate_t)); +      if (mbrtowc (&wc, " ", 1, &state) == (size_t)(-1)) +        return 77; +    } +  } +# endif + +  /* Test NUL character.  */ +  { +    buf[0] = 'x'; +    ret = c32rtomb (buf, 0, NULL); +    ASSERT (ret == 1); +    ASSERT (buf[0] == '\0'); +  } + +  /* Test single bytes.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          ret = c32rtomb (buf, btoc32 (c), NULL); +          ASSERT (ret == 1); +          ASSERT (buf[0] == (char) c); +          break; +        } +  } + +  /* Test special calling convention, passing a NULL pointer.  */ +  { +    ret = c32rtomb (NULL, '\0', NULL); +    ASSERT (ret == 1); +    ret = c32rtomb (NULL, btoc32 ('x'), NULL); +    ASSERT (ret == 1); +  } + +  switch (codepage) +    { +    case 1252: +      /* Locale encoding is CP1252, an extension of ISO-8859-1.  */ +      { +        /* Convert "B\374\337er": "Büßer" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00FC, NULL); +        ASSERT (ret == 1); +        ASSERT (memcmp (buf, "\374", 1) == 0); +        ASSERT (buf[1] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00DF, NULL); +        ASSERT (ret == 1); +        ASSERT (memcmp (buf, "\337", 1) == 0); +        ASSERT (buf[1] == 'x'); +      } +      return 0; + +    case 1256: +      /* Locale encoding is CP1256, not the same as ISO-8859-6.  */ +      { +        /* Convert "x\302\341\346y": "xآلوy" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x0622, NULL); +        ASSERT (ret == 1); +        ASSERT (memcmp (buf, "\302", 1) == 0); +        ASSERT (buf[1] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x0644, NULL); +        ASSERT (ret == 1); +        ASSERT (memcmp (buf, "\341", 1) == 0); +        ASSERT (buf[1] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x0648, NULL); +        ASSERT (ret == 1); +        ASSERT (memcmp (buf, "\346", 1) == 0); +        ASSERT (buf[1] == 'x'); +      } +      return 0; + +    case 65001: +      /* Locale encoding is CP65001 = UTF-8.  */ +      if (strcmp (locale_charset (), "UTF-8") != 0) +        return 77; +      { +        /* Convert "s\303\274\303\237\360\237\230\213!"; "süß😋!" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00FC, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\303\274", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00DF, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\303\237", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x1F60B, NULL); +        ASSERT (ret == 4); +        ASSERT (memcmp (buf, "\360\237\230\213", 4) == 0); +        ASSERT (buf[4] == 'x'); +      } +      return 0; + +    case 932: +      /* Locale encoding is CP932, similar to Shift_JIS.  */ +      { +        /* Convert "<\223\372\226\173\214\352>": "<日本語>" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x65E5, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\223\372", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x672C, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\226\173", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x8A9E, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\214\352", 2) == 0); +        ASSERT (buf[2] == 'x'); +      } +      return 0; + +    case 950: +      /* Locale encoding is CP950, similar to Big5.  */ +      { +        /* Convert "<\244\351\245\273\273\171>": "<日本語>" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x65E5, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\244\351", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x672C, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\245\273", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x8A9E, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\273\171", 2) == 0); +        ASSERT (buf[2] == 'x'); +      } +      return 0; + +    case 936: +      /* Locale encoding is CP936 = GBK, an extension of GB2312.  */ +      { +        /* Convert "<\310\325\261\276\325\132>": "<日本語>" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x65E5, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\310\325", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x672C, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\261\276", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x8A9E, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\325\132", 2) == 0); +        ASSERT (buf[2] == 'x'); +      } +      return 0; + +    case 54936: +      /* Locale encoding is CP54936 = GB18030.  */ +      if (strcmp (locale_charset (), "GB18030") != 0) +        return 77; +      { +        /* Convert "s\250\271\201\060\211\070\224\071\375\067!"; "süß😋!" */ +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00FC, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\250\271", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x00DF, NULL); +        ASSERT (ret == 4); +        ASSERT (memcmp (buf, "\201\060\211\070", 4) == 0); +        ASSERT (buf[4] == 'x'); + +        memset (buf, 'x', 8); +        ret = c32rtomb (buf, 0x1F60B, NULL); +        ASSERT (ret == 4); +        ASSERT (memcmp (buf, "\224\071\375\067", 4) == 0); +        ASSERT (buf[4] == 'x'); +      } +      return 0; + +    default: +      return 1; +    } +} + +int +main (int argc, char *argv[]) +{ +  int codepage = atoi (argv[argc - 1]); +  int result; +  int i; + +  result = 77; +  for (i = 1; i < argc - 1; i++) +    { +      int ret = test_one_locale (argv[i], codepage); + +      if (ret != 77) +        result = ret; +    } + +  if (result == 77) +    { +      fprintf (stderr, "Skipping test: found no locale with codepage %d\n", +               codepage); +    } +  return result; +} + +#else + +int +main (int argc, char *argv[]) +{ +  fputs ("Skipping test: not a native Windows system\n", stderr); +  return 77; +} + +#endif diff --git a/tests/test-c32rtomb.c b/tests/test-c32rtomb.c new file mode 100644 index 00000000..c33d08d3 --- /dev/null +++ b/tests/test-c32rtomb.c @@ -0,0 +1,174 @@ +/* Test of conversion of wide character to multibyte character. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32rtomb, size_t, (char *, char32_t, mbstate_t *)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> + +#include "macros.h" + +/* Check the multibyte character s[0..n-1].  */ +static void +check_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  char buf[64]; +  int iret; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  iret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (iret == n); + +  ret = c32rtomb (buf, wc, NULL); +  ASSERT (ret == n); +  ASSERT (memcmp (buf, s, n) == 0); + +  /* Test special calling convention, passing a NULL pointer.  */ +  ret = c32rtomb (NULL, wc, NULL); +  ASSERT (ret == 1); +} + +int +main (int argc, char *argv[]) +{ +  char buf[64]; +  size_t ret; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test NUL character.  */ +  { +    buf[0] = 'x'; +    ret = c32rtomb (buf, 0, NULL); +    ASSERT (ret == 1); +    ASSERT (buf[0] == '\0'); +  } + +  /* Test single bytes.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          ret = c32rtomb (buf, btoc32 (c), NULL); +          ASSERT (ret == 1); +          ASSERT (buf[0] == (char) c); +          break; +        } +  } + +  /* Test special calling convention, passing a NULL pointer.  */ +  { +    ret = c32rtomb (NULL, '\0', NULL); +    ASSERT (ret == 1); +    ret = c32rtomb (NULL, btoc32 ('x'), NULL); +    ASSERT (ret == 1); +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '1': +        /* C locale; tested above.  */ +        return 0; + +      case '2': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          const char input[] = "B\374\337er"; /* "Büßer" */ + +          check_character (input + 1, 1); +          check_character (input + 2, 1); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          const char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ + +          check_character (input + 1, 2); +          check_character (input + 3, 2); +          check_character (input + 5, 4); +        } +        return 0; + +      case '4': +        /* Locale encoding is EUC-JP.  */ +        { +          const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + +          check_character (input + 1, 2); +          check_character (input + 3, 2); +          check_character (input + 5, 2); +        } +        return 0; + +      case '5': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          const char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ + +          check_character (input + 1, 2); +          check_character (input + 3, 4); +          check_character (input + 7, 4); +        } +        return 0; +      } + +  return 1; +} diff --git a/tests/test-c32rtomb.sh b/tests/test-c32rtomb.sh new file mode 100755 index 00000000..e5236c97 --- /dev/null +++ b/tests/test-c32rtomb.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32rtomb${EXEEXT} 1 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32rtomb${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32rtomb${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32rtomb${EXEEXT} 4 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32rtomb${EXEEXT} 5 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32tolower.c b/tests/test-c32tolower.c new file mode 100644 index 00000000..681191b4 --- /dev/null +++ b/tests/test-c32tolower.c @@ -0,0 +1,440 @@ +/* Test of c32tolower() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32tolower, wint_t, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Representation of a multibyte character.  */ +#define MBCHAR_BUF_SIZE 6 +struct multibyte +{ +  size_t nbytes;             /* number of bytes of current character, > 0 */ +  char buf[MBCHAR_BUF_SIZE]; /* room for the bytes */ +}; + +/* Returns the value of c32tolower for the multibyte character s[0..n-1], +   as a multibyte character.  */ +static struct multibyte +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; +  struct multibyte result; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (char32_t) 0xBADFACE; +  ret = mbrtoc32 (&wc, s, n, &state); +  ASSERT (ret == n); + +  wc = c32tolower (wc); +  ASSERT (wc != WEOF); + +  memset (&state, '\0', sizeof (mbstate_t)); +  ret = c32rtomb (result.buf, wc, &state); +  ASSERT (ret != 0); +  if (ret == (size_t)(-1)) +    /* wc cannot be converted back to multibyte.  */ +    result.nbytes = 0; +  else +    { +      ASSERT (ret <= MBCHAR_BUF_SIZE); +      result.nbytes = ret; +    } +  return result; +} + +int +main (int argc, char *argv[]) +{ +  wint_t wc; +  struct multibyte mb; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  wc = c32tolower (WEOF); +  ASSERT (wc == WEOF); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     that +       - in all locales, the uppercase characters include the A ... Z +         characters, and the corresponding characters a ... z (if not in a +         Turkish locale) are lowercase, +       - in the "POSIX" locale (which is usually the same as the "C" locale), +         the uppercase characters include only the ASCII A ... Z characters, +         and the corresponding characters a ... z are lowercase. +   */ +#if defined __NetBSD__ +  /* towlower is broken in the zh_CN.GB18030 locale on NetBSD 9.0. +     See <https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=57339>.  */ +  if (!(argc > 1 && argv[1][0] == '4')) +#endif +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          mb = for_character (buf, 1); +          switch (c) +            { +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +              ASSERT (mb.nbytes == 1); +              ASSERT ((unsigned char) mb.buf[0] == (unsigned char) c - 'A' + 'a'); +              break; +            default: +              ASSERT (mb.nbytes == 1); +              ASSERT ((unsigned char) mb.buf[0] == c); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        return 0; + +      case '1': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          mb = for_character ("\262", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\262", 1) == 0); +          /* U+00B5 MICRO SIGN */ +          mb = for_character ("\265", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\265", 1) == 0); +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          mb = for_character ("\311", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\351", 1) == 0); +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          mb = for_character ("\337", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\337", 1) == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          mb = for_character ("\351", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\351", 1) == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          mb = for_character ("\377", 1); +          ASSERT (mb.nbytes == 1); +          ASSERT (memcmp (mb.buf, "\377", 1) == 0); +        } +        return 0; + +      case '2': +        /* Locale encoding is EUC-JP.  */ +        { +        #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          mb = for_character ("\217\252\261", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); +        #endif +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          mb = for_character ("\217\251\316", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\251\316", 3) == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          mb = for_character ("\217\253\261", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\253\261", 3) == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          mb = for_character ("\217\253\363", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\253\363", 3) == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __DragonFly__) +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          mb = for_character ("\217\251\250", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); +        #endif +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          mb = for_character ("\217\251\310", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\217\251\310", 3) == 0); +        #if !defined __DragonFly__ +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          mb = for_character ("\247\273", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); +        #endif +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          mb = for_character ("\247\353", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          mb = for_character ("\244\323", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); +        #if !defined __DragonFly__ +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          mb = for_character ("\243\307", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); +        #endif +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          mb = for_character ("\243\347", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          mb = for_character ("\302\262", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\302\262", 2) == 0); +          /* U+00B5 MICRO SIGN */ +          mb = for_character ("\302\265", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\302\265", 2) == 0); +        #if !(defined _WIN32 && !defined __CYGWIN__) +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          mb = for_character ("\303\211", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); +        #endif +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          mb = for_character ("\303\237", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\303\237", 2) == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          mb = for_character ("\303\251", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\303\251", 2) == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          mb = for_character ("\303\277", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\303\277", 2) == 0); +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          mb = for_character ("\305\201", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          mb = for_character ("\305\202", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\305\202", 2) == 0); +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          mb = for_character ("\320\251", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          mb = for_character ("\321\211", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\321\211", 2) == 0); +          /* U+05D5 HEBREW LETTER VAV */ +          mb = for_character ("\327\225", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\327\225", 2) == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          mb = for_character ("\343\201\263", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\343\201\263", 3) == 0); +          /* U+3162 HANGUL LETTER YI */ +          mb = for_character ("\343\205\242", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\343\205\242", 3) == 0); +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          mb = for_character ("\357\274\247", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          mb = for_character ("\357\275\207", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\357\275\207", 3) == 0); +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          mb = for_character ("\357\277\233", 3); +          ASSERT (mb.nbytes == 3); +          ASSERT (memcmp (mb.buf, "\357\277\233", 3) == 0); +        #if !(defined __DragonFly__ || defined __sun) +          /* U+10419 DESERET CAPITAL LETTER EF */ +          mb = for_character ("\360\220\220\231", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); +        #endif +          /* U+10441 DESERET SMALL LETTER EF */ +          mb = for_character ("\360\220\221\201", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\360\220\221\201", 4) == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          mb = for_character ("\363\240\201\201", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\363\240\201\201", 4) == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          mb = for_character ("\363\240\201\241", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\363\240\201\241", 4) == 0); +        } +        return 0; + +      case '4': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          /* U+00B2 SUPERSCRIPT TWO */ +          mb = for_character ("\201\060\205\065", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\205\065", 4) == 0); +          /* U+00B5 MICRO SIGN */ +          mb = for_character ("\201\060\205\070", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\205\070", 4) == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+00C9 LATIN CAPITAL LETTER E WITH ACUTE */ +          mb = for_character ("\201\060\207\067", 4); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); +        #endif +          /* U+00DF LATIN SMALL LETTER SHARP S */ +          mb = for_character ("\201\060\211\070", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\211\070", 4) == 0); +          /* U+00E9 LATIN SMALL LETTER E WITH ACUTE */ +          mb = for_character ("\250\246", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\250\246", 2) == 0); +          /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */ +          mb = for_character ("\201\060\213\067", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\213\067", 4) == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__ || defined __sun) +          /* U+0141 LATIN CAPITAL LETTER L WITH STROKE */ +          mb = for_character ("\201\060\221\071", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); +        #endif +          /* U+0142 LATIN SMALL LETTER L WITH STROKE */ +          mb = for_character ("\201\060\222\060", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\222\060", 4) == 0); +        #if !(defined __FreeBSD__ || defined __DragonFly__) +          /* U+0429 CYRILLIC CAPITAL LETTER SHCHA */ +          mb = for_character ("\247\273", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); +        #endif +          /* U+0449 CYRILLIC SMALL LETTER SHCHA */ +          mb = for_character ("\247\353", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\247\353", 2) == 0); +          /* U+05D5 HEBREW LETTER VAV */ +          mb = for_character ("\201\060\371\067", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\060\371\067", 4) == 0); +          /* U+3073 HIRAGANA LETTER BI */ +          mb = for_character ("\244\323", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\244\323", 2) == 0); +          /* U+3162 HANGUL LETTER YI */ +          mb = for_character ("\201\071\256\062", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\201\071\256\062", 4) == 0); +        #if !defined __DragonFly__ +          /* U+FF27 FULLWIDTH LATIN CAPITAL LETTER G */ +          mb = for_character ("\243\307", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); +        #endif +          /* U+FF47 FULLWIDTH LATIN SMALL LETTER G */ +          mb = for_character ("\243\347", 2); +          ASSERT (mb.nbytes == 2); +          ASSERT (memcmp (mb.buf, "\243\347", 2) == 0); +          /* U+FFDB HALFWIDTH HANGUL LETTER YI */ +          mb = for_character ("\204\061\241\071", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\204\061\241\071", 4) == 0); +        #if !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __DragonFly__ || defined __NetBSD__ || defined __sun) +          /* U+10419 DESERET CAPITAL LETTER EF */ +          mb = for_character ("\220\060\351\071", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); +        #endif +          /* U+10441 DESERET SMALL LETTER EF */ +          mb = for_character ("\220\060\355\071", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\220\060\355\071", 4) == 0); +          /* U+E0041 TAG LATIN CAPITAL LETTER A */ +          mb = for_character ("\323\066\234\063", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\323\066\234\063", 4) == 0); +          /* U+E0061 TAG LATIN SMALL LETTER A */ +          mb = for_character ("\323\066\237\065", 4); +          ASSERT (mb.nbytes == 4); +          ASSERT (memcmp (mb.buf, "\323\066\237\065", 4) == 0); +        } +        return 0; + +      } + +  return 1; +} diff --git a/tests/test-c32tolower.sh b/tests/test-c32tolower.sh new file mode 100755 index 00000000..02f3e5f6 --- /dev/null +++ b/tests/test-c32tolower.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# Allow distinguishing the various invocations in the .log file. +set -x + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-c32tolower${EXEEXT} 0 || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR != none; then +  LC_ALL=$LOCALE_FR \ +  ${CHECKER} ./test-c32tolower${EXEEXT} 1 \ +  || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA != none; then +  LC_ALL=$LOCALE_JA \ +  ${CHECKER} ./test-c32tolower${EXEEXT} 2 \ +  || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 != none; then +  LC_ALL=$LOCALE_FR_UTF8 \ +  ${CHECKER} ./test-c32tolower${EXEEXT} 3 \ +  || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN != none; then +  LC_ALL=$LOCALE_ZH_CN \ +  ${CHECKER} ./test-c32tolower${EXEEXT} 4 +  case $? in +    0 | 77) ;; +    *) exit 1 ;; +  esac +fi + +exit 0 diff --git a/tests/test-c32width.c b/tests/test-c32width.c new file mode 100644 index 00000000..4ebc1afa --- /dev/null +++ b/tests/test-c32width.c @@ -0,0 +1,104 @@ +/* Test of c32width() function. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (c32width, int, (char32_t)); + +#include <locale.h> +#include <string.h> + +#include "c-ctype.h" +#include "localcharset.h" +#include "macros.h" + +int +main () +{ +  char32_t wc; + +#if !GNULIB_WCHAR_SINGLE_LOCALE +# ifdef C_CTYPE_ASCII +  /* Test width of ASCII characters.  */ +  for (wc = 0x20; wc < 0x7F; wc++) +    ASSERT (c32width (wc) == 1); +# endif +#endif + +  /* Switch to an UTF-8 locale.  */ +  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL +      /* Check whether it's really an UTF-8 locale. +         On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE +         category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the +         LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; +         in particular, locale_charset() returns "ASCII".  */ +      && strcmp (locale_charset (), "UTF-8") == 0) +    { +      /* Test width of ASCII characters.  */ +      for (wc = 0x20; wc < 0x7F; wc++) +        ASSERT (c32width (wc) == 1); + +      /* Test width of some non-spacing characters.  */ +      ASSERT (c32width (0x0301) == 0); +      ASSERT (c32width (0x05B0) == 0); + +      /* Test width of some format control characters.  */ +      ASSERT (c32width (0x200E) <= 0); +      ASSERT (c32width (0x2060) <= 0); +      ASSERT (c32width (0xE0001) <= 0); +      ASSERT (c32width (0xE0044) <= 0); + +      /* Test width of some zero width characters.  */ +      /* While it is desirable that U+200B, U+200C, U+200D have width 0, +         because this makes wcswidth work better on strings that contain these +         characters, it is acceptable if an implementation treats these +         characters like control characters.  */ +      ASSERT (c32width (0x200B) <= 0); +      ASSERT (c32width (0xFEFF) <= 0); + +      /* Test width of some math symbols. +         U+2202 is marked as having ambiguous width (A) in EastAsianWidth.txt +         (see <https://www.unicode.org/Public/12.0.0/ucd/EastAsianWidth.txt>). +         The Unicode Standard Annex 11 +         <https://www.unicode.org/reports/tr11/tr11-36.html> +         says +           "Ambiguous characters behave like wide or narrow characters +            depending on the context (language tag, script identification, +            associated font, source of data, or explicit markup; all can +            provide the context). If the context cannot be established +            reliably, they should be treated as narrow characters by default." +         For c32width(), the only available context information is the locale. +         "fr_FR.UTF-8" is a Western locale, not an East Asian locale, therefore +         U+2202 should be treated like a narrow character.  */ +      ASSERT (c32width (0x2202) == 1); + +      /* Test width of some CJK characters.  */ +      ASSERT (c32width (0x3000) == 2); +      ASSERT (c32width (0xB250) == 2); +      ASSERT (c32width (0xFF1A) == 2); +      #if !(defined __FreeBSD__ && __FreeBSD__ < 13 && !defined __GLIBC__) +      ASSERT (c32width (0x20369) == 2); +      ASSERT (c32width (0x2F876) == 2); +      #endif +    } + +  return 0; +} diff --git a/tests/test-calloc-gnu.c b/tests/test-calloc-gnu.c index 4a7b7745..cf8c564a 100644 --- a/tests/test-calloc-gnu.c +++ b/tests/test-calloc-gnu.c @@ -1,5 +1,5 @@  /* Test of calloc function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -63,7 +63,7 @@ main ()          ASSERT (p == NULL);          ASSERT (errno == ENOMEM); -	p = calloc (SIZE_MAX / n + 1, identity (n)); +        p = calloc (SIZE_MAX / n + 1, identity (n));          ASSERT (p == NULL);          ASSERT (errno == ENOMEM);        } diff --git a/tests/test-cloexec.c b/tests/test-cloexec.c index 6069e537..76480bb6 100644 --- a/tests/test-cloexec.c +++ b/tests/test-cloexec.c @@ -1,5 +1,5 @@  /* Test duplicating non-inheritable file descriptors. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -62,8 +62,12 @@ is_inheritable (int fd)  }  #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ +  return 0; +}  #endif  /* Return non-zero if FD is open in the given MODE, which is either diff --git a/tests/test-close.c b/tests/test-close.c index db25aab0..47b3aa45 100644 --- a/tests/test-close.c +++ b/tests/test-close.c @@ -1,5 +1,5 @@  /* Test closing a file or socket. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-connect.c b/tests/test-connect.c index 2a93d01f..ea4b66ed 100644 --- a/tests/test-connect.c +++ b/tests/test-connect.c @@ -1,5 +1,5 @@  /* Test connecting a client socket. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-ctype.c b/tests/test-ctype.c index 93c4e32b..d7a9e415 100644 --- a/tests/test-ctype.c +++ b/tests/test-ctype.c @@ -1,5 +1,5 @@  /* Test of <ctype.h> substitute. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-dup2.c b/tests/test-dup2.c index e4ec1c25..55f31940 100644 --- a/tests/test-dup2.c +++ b/tests/test-dup2.c @@ -1,5 +1,5 @@  /* Test duplicating file descriptors. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -50,6 +50,12 @@ SIGNATURE_CHECK (dup2, int, (int, int));  #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif +  /* Return non-zero if FD is open.  */  static int  is_open (int fd) @@ -92,8 +98,12 @@ is_inheritable (int fd)  #endif /* GNULIB_TEST_CLOEXEC */  #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ +  return 0; +}  #endif  /* Return non-zero if FD is open in the given MODE, which is either diff --git a/tests/test-environ.c b/tests/test-environ.c index 6242205f..fdd944f6 100644 --- a/tests/test-environ.c +++ b/tests/test-environ.c @@ -1,5 +1,5 @@  /* Test of environ variable. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-errno.c b/tests/test-errno.c index bbfd5da6..99600add 100644 --- a/tests/test-errno.c +++ b/tests/test-errno.c @@ -1,5 +1,5 @@  /* Test of <errno.h> substitute. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-error.c b/tests/test-error.c new file mode 100644 index 00000000..02704d7c --- /dev/null +++ b/tests/test-error.c @@ -0,0 +1,89 @@ +/* Test of error.h functions. +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +#include <config.h> + +/* Specification.  */ +#include <error.h> + +#include <errno.h> + +#include "macros.h" + +/* Custom function to not show the program name in error messages.  */ +static void +print_no_progname (void) +{ +} + +int +main () +{ +  /* Test error() function with zero STATUS and zero ERRNUM.  */ +  error (0, 0, "bummer"); +  /* With format string arguments.  */ +  errno = EINVAL; /* should be ignored */ +  error (0, 0, "Zonk %d%d%d is too large", 1, 2, 3); +  /* With non-ASCII characters.  */ +  error (0, 0, "Pokémon started"); +  /* Verify error_message_count.  */ +  ASSERT (error_message_count == 3); + +  /* Test error_at_line() function with zero STATUS and zero ERRNUM.  */ +  error_at_line (0, 0, "d1/foo.c", 10, "invalid blub"); +  error_at_line (0, 0, "d1/foo.c", 10, "invalid blarn"); +  /* Verify error_message_count.  */ +  ASSERT (error_message_count == 5); + +  /* Test error_one_per_line.  */ +  error_one_per_line = 1; +  error_at_line (0, 0, "d1/foo.c", 10, "unsupported glink"); +  /* Another line number.  */ +  error_at_line (0, 0, "d1/foo.c", 13, "invalid brump"); +  /* Another file name.  */ +  error_at_line (0, 0, "d2/foo.c", 13, "unsupported flinge"); +  /* Same file name and same line number => message not shown.  */ +  error_at_line (0, 0, "d2/foo.c", 13, "invalid bark"); +  /* Verify error_message_count.  */ +  ASSERT (error_message_count == 8); +  error_one_per_line = 0; + +  /* Test error_print_progname.  */ +  error_print_progname = print_no_progname; +  error (0, 0, "hammer"); +  error (0, 0, "boing %d%d%d is too large", 1, 2, 3); +  #if 0 +  /* The documentation does not describe the output if the file name is NULL. */ +  error_at_line (0, 0, NULL, 42, "drummer too loud"); +  #endif +  error_at_line (0, 0, "d2/bar.c", 11, "bark too loud"); +  /* Verify error_message_count.  */ +  ASSERT (error_message_count == 11); +  error_print_progname = NULL; + +  /* Test error() function with nonzero ERRNUM.  */ +  errno = EINVAL; /* should be ignored */ +  error (0, EACCES, "can't steal"); +  /* Verify error_message_count.  */ +  ASSERT (error_message_count == 12); + +  /* Test error() function with nonzero STATUS.  */ +  error (4, 0, "fatal error"); + +  return 0; +} diff --git a/tests/test-error.sh b/tests/test-error.sh new file mode 100755 index 00000000..d173e183 --- /dev/null +++ b/tests/test-error.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# Test of the 'error' module. + +. "${srcdir=.}/init.sh"; path_prepend_ . + +${CHECKER} test-error${EXEEXT} > out 2> err +# Verify the exit code. +case $? in +  4) ;; +  *) Exit 1;; +esac + +# Normalize the stderr output on Windows platforms. +tr -d '\015' < err | sed 's,.*test-error[.ex]*:,test-error:,' > err2 || Exit 1 + +# Verify the stderr output. +compare - err2 <<\EOF || Exit 1 +test-error: bummer +test-error: Zonk 123 is too large +test-error: Pokémon started +test-error:d1/foo.c:10: invalid blub +test-error:d1/foo.c:10: invalid blarn +test-error:d1/foo.c:10: unsupported glink +test-error:d1/foo.c:13: invalid brump +test-error:d2/foo.c:13: unsupported flinge +hammer +boing 123 is too large +d2/bar.c:11: bark too loud +test-error: can't steal: Permission denied +test-error: fatal error +EOF + +# Verify the stdout output. +test -s out && Exit 1 + +Exit 0 diff --git a/tests/test-fcntl-h.c b/tests/test-fcntl-h.c index 15019792..d6331672 100644 --- a/tests/test-fcntl-h.c +++ b/tests/test-fcntl-h.c @@ -1,5 +1,5 @@  /* Test of <fcntl.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-fcntl.c b/tests/test-fcntl.c index 77ca3479..0eb24a9f 100644 --- a/tests/test-fcntl.c +++ b/tests/test-fcntl.c @@ -1,5 +1,5 @@  /* Test of fcntl(2). -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -44,9 +44,19 @@ SIGNATURE_CHECK (fcntl, int, (int, int, ...));  #include "binary-io.h"  #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +# pragma GCC diagnostic ignored "-Wanalyzer-va-arg-type-mismatch" +#endif +  #if !O_BINARY -# define set_binary_mode(f,m) zero () -static int zero (void) { return 0; } +# define set_binary_mode my_set_binary_mode +static int +set_binary_mode (_GL_UNUSED int fd, _GL_UNUSED int mode) +{ +  return 0; +}  #endif  /* Return true if FD is open.  */ @@ -211,7 +221,7 @@ check_flags (void)  }  int -main (int argc, char *argv[]) +main (int argc, _GL_UNUSED char *argv[])  {    if (argc > 1)      /* child process */ diff --git a/tests/test-fdopen.c b/tests/test-fdopen.c index d67beedd..e5aa6442 100644 --- a/tests/test-fdopen.c +++ b/tests/test-fdopen.c @@ -1,5 +1,5 @@  /* Test opening a stream with a file descriptor. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -33,9 +33,14 @@ main (void)       failure, since the behavior is not well-defined on invalid file       descriptors, so try fdopen 1000 times and if that's not enough to       fail due to EMFILE, so be it.  */ +  #if defined __ANDROID__ /* fdsan */ +    #define COUNT 1 +  #else +    #define COUNT 1000 +  #endif    int i; -  for (i = 0; i < 1000; i++) +  for (i = 0; i < COUNT; i++)      {        errno = 0;        if (! fdopen (STDOUT_FILENO, "w")) diff --git a/tests/test-fgetc.c b/tests/test-fgetc.c index 2b289dc1..0d617980 100644 --- a/tests/test-fgetc.c +++ b/tests/test-fgetc.c @@ -1,5 +1,5 @@  /* Test of fgetc() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fgetc, int, (FILE *));  #include "macros.h"  int -main (int argc, char **argv) +main ()  {    const char *filename = "test-fgetc.txt"; @@ -54,6 +54,7 @@ main (int argc, char **argv)    /* Test that fgetc() sets errno if someone else closes the stream       fd behind the back of stdio.  */ +  #if !defined __ANDROID__ /* fdsan */    {      FILE *fp = fopen (filename, "r");      ASSERT (fp != NULL); @@ -64,6 +65,7 @@ main (int argc, char **argv)      ASSERT (ferror (fp));      fclose (fp);    } +  #endif    /* Test that fgetc() sets errno if the stream was constructed with       an invalid file descriptor.  */ diff --git a/tests/test-float.c b/tests/test-float.c index 986f7da8..e9dc4609 100644 --- a/tests/test-float.c +++ b/tests/test-float.c @@ -1,5 +1,5 @@  /* Test of <float.h> substitute. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,12 +20,48 @@  #include <float.h> -#include "fpucw.h" -#include "macros.h" -  /* Check that FLT_RADIX is a constant expression.  */  int a[] = { FLT_RADIX }; +/* ----------------------- Check macros for 'float' ----------------------- */ + +/* Check that the FLT_* macros expand to constant expressions.  */ +int fb[] = +  { +    FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, +    FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP +  }; +float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; + +/* ----------------------- Check macros for 'double' ----------------------- */ + +/* Check that the DBL_* macros expand to constant expressions.  */ +int db[] = +  { +    DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, +    DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP +  }; +double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; + +/* -------------------- Check macros for 'long double' -------------------- */ + +/* Check that the LDBL_* macros expand to constant expressions.  */ +int lb[] = +  { +    LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, +    LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP +  }; +long double lc1 = LDBL_EPSILON; +long double lc2 = LDBL_MIN; +#if 0 /* LDBL_MAX is not a constant expression on some platforms.  */ +long double lc3 = LDBL_MAX; +#endif + +/* ------------------------------------------------------------------------- */ + +#include "fpucw.h" +#include "macros.h" +  #if FLT_RADIX == 2  /* Return 2^n.  */ @@ -117,14 +153,6 @@ pow2l (int n)  /* ----------------------- Check macros for 'float' ----------------------- */ -/* Check that the FLT_* macros expand to constant expressions.  */ -int fb[] = -  { -    FLT_MANT_DIG, FLT_MIN_EXP, FLT_MAX_EXP, -    FLT_DIG, FLT_MIN_10_EXP, FLT_MAX_10_EXP -  }; -float fc[] = { FLT_EPSILON, FLT_MIN, FLT_MAX }; -  static void  test_float (void)  { @@ -196,14 +224,6 @@ test_float (void)  /* ----------------------- Check macros for 'double' ----------------------- */ -/* Check that the DBL_* macros expand to constant expressions.  */ -int db[] = -  { -    DBL_MANT_DIG, DBL_MIN_EXP, DBL_MAX_EXP, -    DBL_DIG, DBL_MIN_10_EXP, DBL_MAX_10_EXP -  }; -double dc[] = { DBL_EPSILON, DBL_MIN, DBL_MAX }; -  static void  test_double (void)  { @@ -275,18 +295,6 @@ test_double (void)  /* -------------------- Check macros for 'long double' -------------------- */ -/* Check that the LDBL_* macros expand to constant expressions.  */ -int lb[] = -  { -    LDBL_MANT_DIG, LDBL_MIN_EXP, LDBL_MAX_EXP, -    LDBL_DIG, LDBL_MIN_10_EXP, LDBL_MAX_10_EXP -  }; -long double lc1 = LDBL_EPSILON; -long double lc2 = LDBL_MIN; -#if 0 /* LDBL_MAX is not a constant expression on some platforms.  */ -long double lc3 = LDBL_MAX; -#endif -  static void  test_long_double (void)  { diff --git a/tests/test-fputc.c b/tests/test-fputc.c index 34f4cf53..0d48a92f 100644 --- a/tests/test-fputc.c +++ b/tests/test-fputc.c @@ -1,5 +1,5 @@  /* Test of fputc() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fputc, int, (int, FILE *));  #include "macros.h"  int -main (int argc, char **argv) +main ()  {    const char *filename = "test-fputc.txt"; @@ -45,6 +45,7 @@ main (int argc, char **argv)    /* Test that fputc() on an unbuffered stream sets errno if someone else       closes the stream fd behind the back of stdio.  */ +  #if !defined __ANDROID__ /* fdsan */    {      FILE *fp = fopen (filename, "w");      ASSERT (fp != NULL); @@ -56,6 +57,7 @@ main (int argc, char **argv)      ASSERT (ferror (fp));      fclose (fp);    } +  #endif    /* Test that fputc() on an unbuffered stream sets errno if the stream       was constructed with an invalid file descriptor.  */ diff --git a/tests/test-fread.c b/tests/test-fread.c index e85ce052..ac6bdecf 100644 --- a/tests/test-fread.c +++ b/tests/test-fread.c @@ -1,5 +1,5 @@  /* Test of fread() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fread, size_t, (void *, size_t, size_t, FILE *));  #include "macros.h"  int -main (int argc, char **argv) +main ()  {    const char *filename = "test-fread.txt"; @@ -54,6 +54,7 @@ main (int argc, char **argv)    /* Test that fread() sets errno if someone else closes the stream       fd behind the back of stdio.  */ +  #if !defined __ANDROID__ /* fdsan */    {      FILE *fp = fopen (filename, "r");      char buf[5]; @@ -65,6 +66,7 @@ main (int argc, char **argv)      ASSERT (ferror (fp));      fclose (fp);    } +  #endif    /* Test that fread() sets errno if the stream was constructed with       an invalid file descriptor.  */ diff --git a/tests/test-free.c b/tests/test-free.c index 9248712b..703c550e 100644 --- a/tests/test-free.c +++ b/tests/test-free.c @@ -1,5 +1,5 @@  /* Test of free() function. -   Copyright (C) 2020-2022 Free Software Foundation, Inc. +   Copyright (C) 2020-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexp.c b/tests/test-frexp.c index db7d2079..3d6bc300 100644 --- a/tests/test-frexp.c +++ b/tests/test-frexp.c @@ -1,5 +1,5 @@  /* Test of splitting a double into fraction and mantissa. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexp.h b/tests/test-frexp.h index cdc6ea3e..439c44ef 100644 --- a/tests/test-frexp.h +++ b/tests/test-frexp.h @@ -1,5 +1,5 @@  /* Test of splitting a double into fraction and mantissa. -   Copyright (C) 2012-2022 Free Software Foundation, Inc. +   Copyright (C) 2012-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-frexpl.c b/tests/test-frexpl.c index d469234d..ea4e9728 100644 --- a/tests/test-frexpl.c +++ b/tests/test-frexpl.c @@ -1,5 +1,5 @@  /* Test of splitting a 'long double' into fraction and mantissa. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-fseterr.c b/tests/test-fseterr.c index de28326d..61584a41 100644 --- a/tests/test-fseterr.c +++ b/tests/test-fseterr.c @@ -1,5 +1,5 @@  /* Test setting the error indicator of a stream. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-fstat.c b/tests/test-fstat.c index f2cb2137..7a361b86 100644 --- a/tests/test-fstat.c +++ b/tests/test-fstat.c @@ -1,5 +1,5 @@  /* Tests of fstat() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ SIGNATURE_CHECK (fstat, int, (int, struct stat *));  #include "macros.h"  int -main (int argc, char *argv[]) +main ()  {    /* Test behaviour for invalid file descriptors.  */    { diff --git a/tests/test-ftruncate.c b/tests/test-ftruncate.c index 64e1152a..e9daf1bd 100644 --- a/tests/test-ftruncate.c +++ b/tests/test-ftruncate.c @@ -1,5 +1,5 @@  /* Test truncating a file. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ SIGNATURE_CHECK (ftruncate, int, (int, off_t));  #include "macros.h"  int -main (int argc, char *argv[]) +main (_GL_UNUSED int argc, char *argv[])  {    const char *filename = argv[1]; diff --git a/tests/test-fwrite.c b/tests/test-fwrite.c index d362c40b..f00f35ca 100644 --- a/tests/test-fwrite.c +++ b/tests/test-fwrite.c @@ -1,5 +1,5 @@  /* Test of fwrite() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ SIGNATURE_CHECK (fwrite, size_t, (const void *, size_t, size_t, FILE *));  #include "macros.h"  int -main (int argc, char **argv) +main ()  {    const char *filename = "test-fwrite.txt"; @@ -45,6 +45,7 @@ main (int argc, char **argv)    /* Test that fwrite() on an unbuffered stream sets errno if someone else       closes the stream fd behind the back of stdio.  */ +  #if !defined __ANDROID__ /* fdsan */    {      FILE *fp = fopen (filename, "w");      char buf[5] = "world"; @@ -57,6 +58,7 @@ main (int argc, char **argv)      ASSERT (ferror (fp));      fclose (fp);    } +  #endif    /* Test that fwrite() on an unbuffered stream sets errno if the stream       was constructed with an invalid file descriptor.  */ diff --git a/tests/test-getcwd-lgpl.c b/tests/test-getcwd-lgpl.c index 73fad473..1e7238a0 100644 --- a/tests/test-getcwd-lgpl.c +++ b/tests/test-getcwd-lgpl.c @@ -1,5 +1,5 @@  /* Test of getcwd() function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -92,7 +92,7 @@ main (int argc, char **argv)    /* Validate a POSIX requirement on size.  */    errno = 0; -  ASSERT (getcwd(pwd2, 0) == NULL); +  ASSERT (getcwd (pwd2, 0) == NULL);    ASSERT (errno == EINVAL);    free (pwd1); diff --git a/tests/test-getdtablesize.c b/tests/test-getdtablesize.c index 48164279..401fe901 100644 --- a/tests/test-getdtablesize.c +++ b/tests/test-getdtablesize.c @@ -1,5 +1,5 @@  /* Test of getdtablesize() function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -25,8 +25,13 @@ SIGNATURE_CHECK (getdtablesize, int, (void));  #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif +  int -main (int argc, char *argv[]) +main ()  {    ASSERT (getdtablesize () >= 3);    ASSERT (dup2 (0, getdtablesize() - 1) == getdtablesize () - 1); diff --git a/tests/test-getprogname.c b/tests/test-getprogname.c index 8503f3c3..f26696db 100644 --- a/tests/test-getprogname.c +++ b/tests/test-getprogname.c @@ -1,5 +1,5 @@  /* Test the gnulib getprogname module. -   Copyright (C) 2016-2022 Free Software Foundation, Inc. +   Copyright (C) 2016-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -16,7 +16,8 @@  #include <config.h> -#include "getprogname.h" +#include <stdlib.h> +  #include <string.h>  #include <assert.h> diff --git a/tests/test-gettimeofday.c b/tests/test-gettimeofday.c index 47a5b58f..ea810bd5 100644 --- a/tests/test-gettimeofday.c +++ b/tests/test-gettimeofday.c @@ -1,6 +1,5 @@  /* - * Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. - * Written by Jim Meyering. + * Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.   *   * This program is free software: you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -15,6 +14,8 @@   * You should have received a copy of the GNU General Public License   * along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ +/* Written by Jim Meyering and Bruno Haible.  */ +  #include <config.h>  #include <sys/time.h> @@ -26,10 +27,13 @@ SIGNATURE_CHECK (gettimeofday, int,  #include <time.h>  #include <stdio.h> +#include <stdlib.h>  #include <string.h> -int -main (void) +#include "macros.h" + +static void +test_clobber ()  {    time_t t = 0;    struct tm *lt; @@ -41,7 +45,44 @@ main (void)    if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0)      {        fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); -      return 1; +      exit (1);      } +} + +static void +test_consistency () +{ +  struct timeval tv1; +  time_t tt2; +  struct timeval tv3; +  time_t tt4; + +  ASSERT (gettimeofday (&tv1, NULL) == 0); +  tt2 = time (NULL); +  ASSERT (gettimeofday (&tv3, NULL) == 0); +  tt4 = time (NULL); + +  /* Verify monotonicity of gettimeofday().  */ +  ASSERT (tv1.tv_sec < tv3.tv_sec +          || (tv1.tv_sec == tv3.tv_sec && tv1.tv_usec <= tv3.tv_usec)); + +  /* Verify monotonicity of time().  */ +  ASSERT (tt2 <= tt4); + +  /* Verify that the tv_sec field of the result is the same as time(NULL).  */ +  /* Note: It's here that the dependency to the 'time' module is needed. +     Without it, this assertion would sometimes fail on glibc systems, see +     https://sourceware.org/bugzilla/show_bug.cgi?id=30200  */ +  ASSERT (tv1.tv_sec <= tt2); +  ASSERT (tt2 <= tv3.tv_sec); +  ASSERT (tv3.tv_sec <= tt4); +} + +int +main (void) +{ +  test_clobber (); +  test_consistency (); +    return 0;  } diff --git a/tests/test-hard-locale.c b/tests/test-hard-locale.c index 8570bc61..151843ca 100644 --- a/tests/test-hard-locale.c +++ b/tests/test-hard-locale.c @@ -1,5 +1,5 @@  /* Test of determination whether a locale is different from the "C" locale. -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -38,8 +38,10 @@ test_one (const char *name, int failure_bitmask)        /* musl libc has special code for the C.UTF-8 locale; other than that,           all locale names are accepted and all locales are trivial.           OpenBSD returns the locale name that was set, but we don't know how it -         behaves under the hood.  Likewise for Haiku.  */ -#if defined MUSL_LIBC || defined __OpenBSD__ || defined __HAIKU__ +         behaves under the hood.  Likewise for Haiku. +         On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't +         know how it will behave in the future.  */ +#if defined MUSL_LIBC || defined __OpenBSD__ || defined __HAIKU__ || defined __ANDROID__        expected = true;  #else        expected = !all_trivial; @@ -57,12 +59,14 @@ test_one (const char *name, int failure_bitmask)        /* On NetBSD 7.0, some locales such as de_DE.ISO8859-1 and de_DE.UTF-8           have the LC_COLLATE category set to "C". -         Similarly, on musl libc, with the C.UTF-8 locale.  */ +         Similarly, on musl libc, with the C.UTF-8 locale. +         On Android >= 5.0, the "C" locale may have UTF-8 encoding, and we don't +         know how it will behave in the future.  */  #if defined __NetBSD__        expected = false;  #elif defined MUSL_LIBC        expected = strcmp (name, "C.UTF-8") != 0; -#elif (defined __OpenBSD__ && HAVE_DUPLOCALE) || defined __HAIKU__ /* OpenBSD >= 6.2, Haiku */ +#elif (defined __OpenBSD__ && HAVE_DUPLOCALE) || defined __HAIKU__ || defined __ANDROID__ /* OpenBSD >= 6.2, Haiku, Android */        expected = true;  #else        expected = !all_trivial; @@ -86,12 +90,16 @@ main ()  {    int fail = 0; -  /* The initial locale is the "C" or "POSIX" locale.  */ +  /* The initial locale is the "C" or "POSIX" locale. +     On Android >= 5.0, it is equivalent to the "C.UTF-8" locale, cf. +     <https://lists.gnu.org/archive/html/bug-gnulib/2023-01/msg00141.html>.  */ +#if ! defined __ANDROID__    if (hard_locale (LC_CTYPE) || hard_locale (LC_COLLATE))      {        fprintf (stderr, "The initial locale should not be hard!\n");        fail |= 1;      } +#endif    all_trivial = (setlocale (LC_ALL, "foobar") != NULL); diff --git a/tests/test-iconv-h.c b/tests/test-iconv-h.c index 32bba5e8..ba1534d3 100644 --- a/tests/test-iconv-h.c +++ b/tests/test-iconv-h.c @@ -1,5 +1,5 @@  /* Test of <iconv.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-iconv.c b/tests/test-iconv.c index c92ac8aa..78bf7a2e 100644 --- a/tests/test-iconv.c +++ b/tests/test-iconv.c @@ -1,5 +1,5 @@  /* Test of character set conversion. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-ignore-value.c b/tests/test-ignore-value.c index d35314b3..32edfb45 100644 --- a/tests/test-ignore-value.c +++ b/tests/test-ignore-value.c @@ -1,6 +1,6 @@  /* Test the "ignore-value" module. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-inet_pton.c b/tests/test-inet_pton.c index 9ea0218f..6598d5a0 100644 --- a/tests/test-inet_pton.c +++ b/tests/test-inet_pton.c @@ -1,5 +1,5 @@  /* Test of inet_pton function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-init.sh b/tests/test-init.sh index cac46f71..8f20fe61 100755 --- a/tests/test-init.sh +++ b/tests/test-init.sh @@ -1,6 +1,6 @@  #!/bin/sh  # Unit tests for init.sh -# Copyright (C) 2011-2022 Free Software Foundation, Inc. +# Copyright (C) 2011-2024 Free Software Foundation, Inc.  # This file is part of the GNUlib Library.  #  # This program is free software: you can redistribute it and/or modify diff --git a/tests/test-intprops.c b/tests/test-intprops.c index a54d5812..e0d63d47 100644 --- a/tests/test-intprops.c +++ b/tests/test-intprops.c @@ -1,5 +1,5 @@  /* Test intprops.h. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -173,7 +173,7 @@ main (void)       INT_<op>_OVERFLOW tests, so define macros to do both.  OP is the       operation, OPNAME its symbolic name, A and B its operands, T the       result type, V the overflow flag, and VRES the result if V and if -     two's complement.  CHECK_BINOP is for most binary operatinos, +     two's complement.  CHECK_BINOP is for most binary operations,       CHECK_SBINOP for binary +, -, * when the result type is signed,       and CHECK_UNOP for unary operations.  */    #define CHECK_BINOP(op, opname, a, b, t, v, vres)                       \ diff --git a/tests/test-inttypes.c b/tests/test-inttypes.c index 161b19c8..036ca510 100644 --- a/tests/test-inttypes.c +++ b/tests/test-inttypes.c @@ -1,5 +1,5 @@  /* Test of <inttypes.h> substitute. -   Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@  #include <inttypes.h> -#include <stddef.h> -  /* Tests for macros supposed to be defined in inttypes.h.  */  const char *k = /* implicit string concatenation */ diff --git a/tests/test-ioctl.c b/tests/test-ioctl.c index 0db59c74..1fef85b4 100644 --- a/tests/test-ioctl.c +++ b/tests/test-ioctl.c @@ -1,5 +1,5 @@  /* Test of ioctl() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-isblank.c b/tests/test-isblank.c index 2af87f42..8e13bae1 100644 --- a/tests/test-isblank.c +++ b/tests/test-isblank.c @@ -1,5 +1,5 @@  /* Test of isblank() function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -29,7 +29,7 @@ SIGNATURE_CHECK (isblank, int, (int));  #include "macros.h"  int -main (int argc, char *argv[]) +main ()  {    unsigned int c; diff --git a/tests/test-isnand-nolibm.c b/tests/test-isnand-nolibm.c index 6c3831c7..7b251aa9 100644 --- a/tests/test-isnand-nolibm.c +++ b/tests/test-isnand-nolibm.c @@ -1,5 +1,5 @@  /* Test of isnand() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnand.h b/tests/test-isnand.h index ef758608..5369e336 100644 --- a/tests/test-isnand.h +++ b/tests/test-isnand.h @@ -1,5 +1,5 @@  /* Test of isnand() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@  #include "minus-zero.h"  #include "infinity.h"  #include "nan.h" +#include "snan.h"  #include "macros.h"  int @@ -40,24 +41,9 @@ main ()    ASSERT (!isnand (- Infinityd ()));    /* Quiet NaN.  */    ASSERT (isnand (NaNd ())); -#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +#if HAVE_SNAND    /* Signalling NaN.  */ -  { -    #define NWORDS \ -      ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -    typedef union { double value; unsigned int word[NWORDS]; } memory_double; -    memory_double m; -    m.value = NaNd (); -# if DBL_EXPBIT0_BIT > 0 -    m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); -# else -    m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      |= (unsigned int) 1 << DBL_EXPBIT0_BIT; -    ASSERT (isnand (m.value)); -  } +  ASSERT (isnand (SNaNd ()));  #endif    return 0;  } diff --git a/tests/test-isnanf-nolibm.c b/tests/test-isnanf-nolibm.c index c651a413..bd39f06f 100644 --- a/tests/test-isnanf-nolibm.c +++ b/tests/test-isnanf-nolibm.c @@ -1,5 +1,5 @@  /* Test of isnanf() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnanf.h b/tests/test-isnanf.h index 0855a031..6f138016 100644 --- a/tests/test-isnanf.h +++ b/tests/test-isnanf.h @@ -1,5 +1,5 @@  /* Test of isnanf() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@  #include "minus-zero.h"  #include "infinity.h"  #include "nan.h" +#include "snan.h"  #include "macros.h"  int @@ -40,26 +41,9 @@ main ()    ASSERT (!isnanf (- Infinityf ()));    /* Quiet NaN.  */    ASSERT (isnanf (NaNf ())); -#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +#if HAVE_SNANF    /* Signalling NaN.  */ -  { -    #define NWORDS \ -      ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -    typedef union { float value; unsigned int word[NWORDS]; } memory_float; -    memory_float m; -    m.value = NaNf (); -# if FLT_EXPBIT0_BIT > 0 -    m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); -# else -    m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    if (FLT_EXPBIT0_WORD < NWORDS / 2) -      m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; -    else -      m.word[0] |= (unsigned int) 1; -    ASSERT (isnanf (m.value)); -  } +  ASSERT (isnanf (SNaNf ()));  #endif    return 0;  } diff --git a/tests/test-isnanl-nolibm.c b/tests/test-isnanl-nolibm.c index 3c3f5d7d..caed43e0 100644 --- a/tests/test-isnanl-nolibm.c +++ b/tests/test-isnanl-nolibm.c @@ -1,5 +1,5 @@  /* Test of isnanl() substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h index 37f986ed..ff42ee54 100644 --- a/tests/test-isnanl.h +++ b/tests/test-isnanl.h @@ -1,5 +1,5 @@  /* Test of isnanl() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -22,16 +22,12 @@  #include "minus-zero.h"  #include "infinity.h"  #include "nan.h" +#include "snan.h"  #include "macros.h"  int  main ()  { -  #define NWORDS \ -    ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -  typedef union { unsigned int word[NWORDS]; long double value; } -          memory_long_double; -    /* Finite values.  */    ASSERT (!isnanl (3.141L));    ASSERT (!isnanl (3.141e30L)); @@ -46,32 +42,9 @@ main ()    ASSERT (!isnanl (- Infinityl ()));    /* Quiet NaN.  */    ASSERT (isnanl (NaNl ())); - -#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT -  /* A bit pattern that is different from a Quiet NaN.  With a bit of luck, -     it's a Signalling NaN.  */ -  { -#if defined __powerpc__ && LDBL_MANT_DIG == 106 -    /* This is PowerPC "double double", a pair of two doubles.  Inf and Nan are -       represented as the corresponding 64-bit IEEE values in the first double; -       the second is ignored.  Manipulate only the first double.  */ -    #undef NWORDS -    #define NWORDS \ -      ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -#endif - -    memory_long_double m; -    m.value = NaNl (); -# if LDBL_EXPBIT0_BIT > 0 -    m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); -# else -    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; -    ASSERT (isnanl (m.value)); -  } +#if HAVE_SNANL +  /* Signalling NaN.  */ +  ASSERT (isnanl (SNaNl ()));  #endif  #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE @@ -89,41 +62,42 @@ main ()  # endif    { /* Quiet NaN.  */      static memory_long_double x = -      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; +      { .word = LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };      ASSERT (isnanl (x.value));    }    {      /* Signalling NaN.  */      static memory_long_double x = -      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; +      { .word = LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };      ASSERT (isnanl (x.value));    }    /* isnanl should return something for noncanonical values.  */    { /* Pseudo-NaN.  */      static memory_long_double x = -      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; +      { .word = LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };      ASSERT (isnanl (x.value) || !isnanl (x.value));    }    { /* Pseudo-Infinity.  */      static memory_long_double x = -      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; +      { .word = LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };      ASSERT (isnanl (x.value) || !isnanl (x.value));    }    { /* Pseudo-Zero.  */      static memory_long_double x = -      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; +      { .word = LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };      ASSERT (isnanl (x.value) || !isnanl (x.value));    }    { /* Unnormalized number.  */      static memory_long_double x = -      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; +      { .word = LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };      ASSERT (isnanl (x.value) || !isnanl (x.value));    }    { /* Pseudo-Denormal.  */      static memory_long_double x = -      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; +      { .word = LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };      ASSERT (isnanl (x.value) || !isnanl (x.value));    } +  #undef NWORDS  #endif    return 0; diff --git a/tests/test-iswblank.c b/tests/test-iswblank.c index fe9a9a1f..e5925179 100644 --- a/tests/test-iswblank.c +++ b/tests/test-iswblank.c @@ -1,5 +1,5 @@  /* Test of iswblank() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -31,5 +31,10 @@ main (void)    /* Check that the isw* functions map WEOF to 0.  */    ASSERT (!iswblank (e)); +  /* Sanity check for the iswblank function.  */ +  ASSERT (iswblank (L' ')); +  ASSERT (iswblank (L'\t')); +  ASSERT (!iswblank (L'\n')); +    return 0;  } diff --git a/tests/test-iswdigit.c b/tests/test-iswdigit.c index ef024dc6..a5bcc4ff 100644 --- a/tests/test-iswdigit.c +++ b/tests/test-iswdigit.c @@ -1,5 +1,5 @@  /* Test of iswdigit() function. -   Copyright (C) 2020-2022 Free Software Foundation, Inc. +   Copyright (C) 2020-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-iswpunct.c b/tests/test-iswpunct.c new file mode 100644 index 00000000..c0bbd168 --- /dev/null +++ b/tests/test-iswpunct.c @@ -0,0 +1,153 @@ +/* Test of iswpunct() function. +   Copyright (C) 2020-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <wctype.h> + +#include "signature.h" +SIGNATURE_CHECK (iswpunct, int, (wint_t)); + +#include <locale.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +/* Returns the value of iswpunct for the multibyte character s[0..n-1].  */ +static int +for_character (const char *s, size_t n) +{ +  mbstate_t state; +  wchar_t wc; +  size_t ret; + +  memset (&state, '\0', sizeof (mbstate_t)); +  wc = (wchar_t) 0xBADFACE; +  ret = mbrtowc (&wc, s, n, &state); +  if (ret == n) +    return iswpunct (wc); +  else +    return 0; +} + +int +main (int argc, char *argv[]) +{ +  int is; +  char buf[4]; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test WEOF.  */ +  is = iswpunct (WEOF); +  ASSERT (is == 0); + +  /* Test single-byte characters. +     POSIX specifies in +       <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html> +     no explicit list of punctuation or symbol characters.  */ +  { +    int c; + +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = (unsigned char) c; +          is = for_character (buf, 1); +          switch (c) +            { +            case ' ': +            case '0': case '1': case '2': case '3': case '4': +            case '5': case '6': case '7': case '8': case '9': +            case 'A': case 'B': case 'C': case 'D': case 'E': +            case 'F': case 'G': case 'H': case 'I': case 'J': +            case 'K': case 'L': case 'M': case 'N': case 'O': +            case 'P': case 'Q': case 'R': case 'S': case 'T': +            case 'U': case 'V': case 'W': case 'X': case 'Y': +            case 'Z': +            case 'a': case 'b': case 'c': case 'd': case 'e': +            case 'f': case 'g': case 'h': case 'i': case 'j': +            case 'k': case 'l': case 'm': case 'n': case 'o': +            case 'p': case 'q': case 'r': case 's': case 't': +            case 'u': case 'v': case 'w': case 'x': case 'y': +            case 'z': +              /* c is an alphanumeric or space character.  */ +              ASSERT (is == 0); +              break; +            case '!': case '"': case '#': case '%': +            case '&': case '\'': case '(': case ')': case '*': +            case '+': case ',': case '-': case '.': case '/': +            case ':': case ';': case '<': case '=': case '>': +            case '?': +            case '[': case '\\': case ']': case '^': case '_': +            case '{': case '|': case '}': case '~': +              /* These characters are usually expected to be punctuation or +                 symbol characters.  */ +              ASSERT (is != 0); +              break; +            default: +              ASSERT (is == 0); +              break; +            } +          break; +        } +  } + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '0': +        /* C locale; tested above.  */ +        /* These characters are not in the ISO C "basic character set", but +           are nevertheless usually expected to be punctuation or symbol +           characters.  */ +        is = for_character ("$", 1); +        ASSERT (is != 0); +        is = for_character ("@", 1); +        ASSERT (is != 0); +        is = for_character ("`", 1); +        ASSERT (is != 0); +        return 0; +      } + +  return 1; +} diff --git a/tests/test-iswpunct.sh b/tests/test-iswpunct.sh new file mode 100755 index 00000000..366e1859 --- /dev/null +++ b/tests/test-iswpunct.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-iswpunct${EXEEXT} 0 || exit 1 + +exit 0 diff --git a/tests/test-iswxdigit.c b/tests/test-iswxdigit.c index 96e578b0..f4aeb493 100644 --- a/tests/test-iswxdigit.c +++ b/tests/test-iswxdigit.c @@ -1,5 +1,5 @@  /* Test of iswxdigit() function. -   Copyright (C) 2020-2022 Free Software Foundation, Inc. +   Copyright (C) 2020-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-langinfo.c b/tests/test-langinfo.c index 1a909b16..9561793b 100644 --- a/tests/test-langinfo.c +++ b/tests/test-langinfo.c @@ -1,5 +1,5 @@  /* Test of <langinfo.h> substitute. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-largefile.c b/tests/test-largefile.c new file mode 100644 index 00000000..d2d6a157 --- /dev/null +++ b/tests/test-largefile.c @@ -0,0 +1,51 @@ +/* Test of largefile module. +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +/* This test may fail if AC_SYS_LARGEFILE could not arrange for a 64-bit off_t. +   This should be rare, though: only very old systems don't have support for +   files larger than 2 GiB.  */ + +#include <config.h> + +#include <sys/types.h> +#include <sys/stat.h> +#include "intprops.h" + +/* Although these tests could be done with static_assert, the test +   harness prefers dynamic checking.  */ + +int +main (void) +{ +  int result = 0; + +  /* Check the range of off_t. +     With MSVC, this test succeeds only thanks to the 'sys_types' module.  */ +  if (TYPE_MAXIMUM (off_t) >> 31 >> 31 == 0) +    result |= 1; + +  /* Check the size of the 'struct stat' field 'st_size'. +     With MSVC, this test succeeds only thanks to the 'sys_stat' module.  */ +  { +    struct stat st; +    if (sizeof st.st_size != sizeof (off_t)) +      result |= 2; +  } + +  return result; +} diff --git a/tests/test-limits-h.c b/tests/test-limits-h.c index ddcb5d56..6f574c88 100644 --- a/tests/test-limits-h.c +++ b/tests/test-limits-h.c @@ -1,5 +1,5 @@  /* Test of <limits.h> substitute. -   Copyright 2016-2022 Free Software Foundation, Inc. +   Copyright 2016-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -94,7 +94,11 @@ unsigned long long limits11[] = { ULLONG_MAX };  static_assert (TYPE_MINIMUM (unsigned long long int) == 0);  static_assert (TYPE_MAXIMUM (unsigned long long int) == ULLONG_MAX); -/* Macros specified by ISO/IEC TS 18661-1:2014.  */ +/* Specified by POSIX, not by ISO C.  */ + +long long limits12[] = { SSIZE_MAX }; + +/* Macros specified by C23 and by ISO/IEC TS 18661-1:2014.  */  verify_width (CHAR_WIDTH, CHAR_MIN, CHAR_MAX);  verify_width (SCHAR_WIDTH, SCHAR_MIN, SCHAR_MAX); @@ -108,10 +112,19 @@ verify_width (ULONG_WIDTH, 0, ULONG_MAX);  verify_width (LLONG_WIDTH, LLONG_MIN, LLONG_MAX);  verify_width (ULLONG_WIDTH, 0, ULLONG_MAX); -/* Macros specified by C2x.  */ +/* Macros specified by C23.  */  int bool_attrs[] = { BOOL_MAX, BOOL_WIDTH }; -static_assert (BOOL_MAX == (((1U << (BOOL_WIDTH - 1)) - 1) * 2) + 1); +static_assert (BOOL_MAX == 1); + +static_assert (0 < MB_LEN_MAX); + +/* Get ssize_t, size_t.  */ +#include <sys/types.h> + +static_assert (TYPE_MAXIMUM (ssize_t) == SSIZE_MAX); +/* Verify that ssize_t has the same width as size_t.  */ +static_assert (TYPE_MAXIMUM (size_t) / 2 == SSIZE_MAX);  int  main (void) diff --git a/tests/test-listen.c b/tests/test-listen.c index e9d34568..21fc7a2b 100644 --- a/tests/test-listen.c +++ b/tests/test-listen.c @@ -1,5 +1,5 @@  /* Test listen() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -27,6 +27,11 @@ SIGNATURE_CHECK (listen, int, (int, int));  #include "sockets.h"  #include "macros.h" +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif +  int  main (void)  { diff --git a/tests/test-localcharset.c b/tests/test-localcharset.c index 9d6f941c..da6cbf6d 100644 --- a/tests/test-localcharset.c +++ b/tests/test-localcharset.c @@ -1,5 +1,5 @@  /* Manual test of localcharset() function. -   Copyright (C) 2018-2022 Free Software Foundation, Inc. +   Copyright (C) 2018-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-locale.c b/tests/test-locale.c index 3aad7d85..e4e61aad 100644 --- a/tests/test-locale.c +++ b/tests/test-locale.c @@ -1,5 +1,5 @@  /* Test of <locale.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-localename.c b/tests/test-localename.c index 9ba388f3..03b70527 100644 --- a/tests/test-localename.c +++ b/tests/test-localename.c @@ -1,5 +1,5 @@  /* Test of gl_locale_name function and its variants. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -30,6 +30,35 @@  # define HAVE_GOOD_USELOCALE 1  #endif +#ifdef __HAIKU__ +/* Work around Haiku bug <https://dev.haiku-os.org/ticket/18344>.  */ +# define freelocale(loc) ((void) (loc)) +#endif + +/* Suppress GCC false positive.  */ +#if __GNUC__ >= 12 +# pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value" +#endif + +/* The name that setlocale(,NULL) returns for the "C" locale.  */ +#ifdef __HAIKU__ +# define C_CANONICALIZED "POSIX" +#else +# define C_CANONICALIZED "C" +#endif + +static int +is_default (const char *name) +{ +  return strcmp (name, gl_locale_name_default ()) == 0 +         || (strcmp (name, C_CANONICALIZED) == 0 +             && strcmp (gl_locale_name_default (), "C") == 0) +#if MUSL_LIBC +         || (strcmp (name, "C.UTF-8") == 0 +             && strcmp (gl_locale_name_default (), "C") == 0) +#endif +         ; +}  #if HAVE_GOOD_USELOCALE @@ -101,10 +130,8 @@ test_locale_name (void)    unsetenv ("LC_TELEPHONE");    ret = setlocale (LC_ALL, "");    ASSERT (ret != NULL); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), -                  gl_locale_name_default ()) == 0); -  ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"), -                  gl_locale_name_default ()) == 0); +  ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"))); +  ASSERT (is_default (gl_locale_name (LC_NUMERIC, "LC_NUMERIC")));    /* Check that an empty environment variable is treated like an unset       environment variable.  */ @@ -114,32 +141,28 @@ test_locale_name (void)    unsetenv ("LC_MESSAGES");    unsetenv ("LANG");    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), -                  gl_locale_name_default ()) == 0); +  ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES")));    unsetenv ("LC_ALL");    setenv ("LC_CTYPE", "", 1);    unsetenv ("LC_MESSAGES");    unsetenv ("LANG");    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), -                  gl_locale_name_default ()) == 0); +  ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES")));    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE");    setenv ("LC_MESSAGES", "", 1);    unsetenv ("LANG");    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), -                  gl_locale_name_default ()) == 0); +  ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES")));    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE");    unsetenv ("LC_MESSAGES");    setenv ("LANG", "", 1);    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), -                  gl_locale_name_default ()) == 0); +  ASSERT (is_default (gl_locale_name (LC_MESSAGES, "LC_MESSAGES")));    /* Check that LC_ALL overrides the others, and LANG is overridden by the       others.  */ @@ -149,21 +172,24 @@ test_locale_name (void)    unsetenv ("LC_MESSAGES");    unsetenv ("LANG");    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); +  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), +                  C_CANONICALIZED) == 0);    unsetenv ("LC_ALL");    setenv ("LC_CTYPE", "C", 1);    setenv ("LC_MESSAGES", "C", 1);    unsetenv ("LANG");    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); +  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), +                  C_CANONICALIZED) == 0);    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE");    unsetenv ("LC_MESSAGES");    setenv ("LANG", "C", 1);    setlocale (LC_ALL, ""); -  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); +  ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), +                  C_CANONICALIZED) == 0);    /* Check mixed situations.  */ @@ -195,7 +221,7 @@ test_locale_name (void)    if (setlocale (LC_ALL, "") != NULL)      {        name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); -      ASSERT (strcmp (name, gl_locale_name_default ()) == 0); +      ASSERT (is_default (name));        name = gl_locale_name (LC_MESSAGES, "LC_MESSAGES");        ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);      } @@ -543,9 +569,9 @@ test_locale_name_posix (void)    ret = setlocale (LC_ALL, "");    ASSERT (ret != NULL);    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    name = gl_locale_name_posix (LC_NUMERIC, "LC_NUMERIC"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    /* Check that an empty environment variable is treated like an unset       environment variable.  */ @@ -556,7 +582,7 @@ test_locale_name_posix (void)    unsetenv ("LANG");    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    unsetenv ("LC_ALL");    setenv ("LC_CTYPE", "", 1); @@ -564,7 +590,7 @@ test_locale_name_posix (void)    unsetenv ("LANG");    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE"); @@ -572,7 +598,7 @@ test_locale_name_posix (void)    unsetenv ("LANG");    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE"); @@ -580,7 +606,7 @@ test_locale_name_posix (void)    setenv ("LANG", "", 1);    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +  ASSERT (name == NULL || is_default (name));    /* Check that LC_ALL overrides the others, and LANG is overridden by the       others.  */ @@ -591,7 +617,7 @@ test_locale_name_posix (void)    unsetenv ("LANG");    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (strcmp (name, "C") == 0); +  ASSERT (strcmp (name, C_CANONICALIZED) == 0);    unsetenv ("LC_ALL");    setenv ("LC_CTYPE", "C", 1); @@ -599,7 +625,7 @@ test_locale_name_posix (void)    unsetenv ("LANG");    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (strcmp (name, "C") == 0); +  ASSERT (strcmp (name, C_CANONICALIZED) == 0);    unsetenv ("LC_ALL");    unsetenv ("LC_CTYPE"); @@ -607,7 +633,7 @@ test_locale_name_posix (void)    setenv ("LANG", "C", 1);    setlocale (LC_ALL, "");    name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -  ASSERT (strcmp (name, "C") == 0); +  ASSERT (strcmp (name, C_CANONICALIZED) == 0);    /* Check mixed situations.  */ @@ -634,7 +660,7 @@ test_locale_name_posix (void)    if (setlocale (LC_ALL, "") != NULL)      {        name = gl_locale_name_posix (LC_CTYPE, "LC_CTYPE"); -      ASSERT (name == NULL || strcmp (name, gl_locale_name_default ()) == 0); +      ASSERT (name == NULL || is_default (name));        name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES");        ASSERT (strcmp (name, "fr_FR.UTF-8") == 0);      } @@ -652,7 +678,7 @@ test_locale_name_posix (void)          setlocale (LC_ALL, "");          uselocale (locale);          name = gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"); -        ASSERT (strcmp (name, "C") == 0); +        ASSERT (strcmp (name, C_CANONICALIZED) == 0);          uselocale (LC_GLOBAL_LOCALE);          freelocale (locale);        } diff --git a/tests/test-lock.c b/tests/test-lock.c index a8fb32f8..b5a5240f 100644 --- a/tests/test-lock.c +++ b/tests/test-lock.c @@ -1,5 +1,5 @@  /* Test of locking in multithreaded situations. -   Copyright (C) 2005, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -118,7 +118,7 @@ static int account[ACCOUNT_COUNT];  static int  random_account (void)  { -  return ((unsigned int) rand () >> 3) % ACCOUNT_COUNT; +  return ((unsigned long) random () >> 3) % ACCOUNT_COUNT;  }  static void @@ -143,7 +143,7 @@ check_accounts (void)  gl_lock_define_initialized(static, my_lock)  static void * -lock_mutator_thread (void *arg) +lock_mutator_thread (_GL_UNUSED void *arg)  {    int repeat; @@ -157,7 +157,7 @@ lock_mutator_thread (void *arg)        i1 = random_account ();        i2 = random_account (); -      value = ((unsigned int) rand () >> 3) % 10; +      value = ((unsigned long) random () >> 3) % 10;        account[i1] += value;        account[i2] -= value; @@ -181,7 +181,7 @@ lock_mutator_thread (void *arg)  static struct atomic_int lock_checker_done;  static void * -lock_checker_thread (void *arg) +lock_checker_thread (_GL_UNUSED void *arg)  {    while (get_atomic_int_value (&lock_checker_done) == 0)      { @@ -234,7 +234,7 @@ test_lock (void)  gl_rwlock_define_initialized(static, my_rwlock)  static void * -rwlock_mutator_thread (void *arg) +rwlock_mutator_thread (_GL_UNUSED void *arg)  {    int repeat; @@ -248,7 +248,7 @@ rwlock_mutator_thread (void *arg)        i1 = random_account ();        i2 = random_account (); -      value = ((unsigned int) rand () >> 3) % 10; +      value = ((unsigned long) random () >> 3) % 10;        account[i1] += value;        account[i2] -= value; @@ -266,7 +266,7 @@ rwlock_mutator_thread (void *arg)  static struct atomic_int rwlock_checker_done;  static void * -rwlock_checker_thread (void *arg) +rwlock_checker_thread (_GL_UNUSED void *arg)  {    while (get_atomic_int_value (&rwlock_checker_done) == 0)      { @@ -331,12 +331,12 @@ recshuffle (void)    i1 = random_account ();    i2 = random_account (); -  value = ((unsigned int) rand () >> 3) % 10; +  value = ((unsigned long) random () >> 3) % 10;    account[i1] += value;    account[i2] -= value;    /* Recursive with probability 0.5.  */ -  if (((unsigned int) rand () >> 3) % 2) +  if (((unsigned long) random () >> 3) % 2)      recshuffle ();    dbgprintf ("Mutator %p before unlock\n", gl_thread_self_pointer ()); @@ -345,7 +345,7 @@ recshuffle (void)  }  static void * -reclock_mutator_thread (void *arg) +reclock_mutator_thread (_GL_UNUSED void *arg)  {    int repeat; @@ -369,7 +369,7 @@ reclock_mutator_thread (void *arg)  static struct atomic_int reclock_checker_done;  static void * -reclock_checker_thread (void *arg) +reclock_checker_thread (_GL_UNUSED void *arg)  {    while (get_atomic_int_value (&reclock_checker_done) == 0)      { diff --git a/tests/test-lstat.c b/tests/test-lstat.c index c35d41cb..3a2d61ec 100644 --- a/tests/test-lstat.c +++ b/tests/test-lstat.c @@ -1,5 +1,5 @@  /* Test of lstat() function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-lstat.h b/tests/test-lstat.h index 3982d160..31476132 100644 --- a/tests/test-lstat.h +++ b/tests/test-lstat.h @@ -1,5 +1,5 @@  /* Test of lstat() function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,14 +32,14 @@ test_lstat_func (int (*func) (char const *, struct stat *), bool print)    ASSERT (func (".", &st1) == 0);    ASSERT (func ("./", &st2) == 0);  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    ASSERT (S_ISDIR (st1.st_mode));    ASSERT (S_ISDIR (st2.st_mode));    ASSERT (func ("/", &st1) == 0);    ASSERT (func ("///", &st2) == 0);  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    ASSERT (S_ISDIR (st1.st_mode));    ASSERT (S_ISDIR (st2.st_mode)); @@ -90,7 +90,7 @@ test_lstat_func (int (*func) (char const *, struct stat *), bool print)    ASSERT (S_ISDIR (st1.st_mode));    ASSERT (S_ISDIR (st2.st_mode));  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    ASSERT (func (BASE "link2", &st1) == 0); diff --git a/tests/test-malloc-gnu.c b/tests/test-malloc-gnu.c index 8873eb89..490efb01 100644 --- a/tests/test-malloc-gnu.c +++ b/tests/test-malloc-gnu.c @@ -1,5 +1,5 @@  /* Test of malloc function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@  #include "macros.h"  int -main (int argc, char **argv) +main (int argc, _GL_UNUSED char **argv)  {    /* Check that malloc (0) is not a NULL pointer.  */    void *volatile p = malloc (0); diff --git a/tests/test-malloca.c b/tests/test-malloca.c index 8665f465..9d46cd42 100644 --- a/tests/test-malloca.c +++ b/tests/test-malloca.c @@ -1,5 +1,5 @@  /* Test of safe automatic memory allocation. -   Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-math.c b/tests/test-math.c index 7089e8d6..d853f2a8 100644 --- a/tests/test-math.c +++ b/tests/test-math.c @@ -1,5 +1,5 @@  /* Test of <math.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -50,15 +50,15 @@ choke me  choke me  #endif -#include <limits.h> - -#include "macros.h" -  #if 0  /* Check that NAN expands into a constant expression.  */  static float n = NAN;  #endif +#include <limits.h> + +#include "macros.h" +  /* Compare two numbers with ==.     This is a separate function because IRIX 6.5 "cc -O" miscompiles an     'x == x' test.  */ diff --git a/tests/test-mbrtoc32-1.sh b/tests/test-mbrtoc32-1.sh new file mode 100755 index 00000000..85abbdad --- /dev/null +++ b/tests/test-mbrtoc32-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtoc32-2.sh b/tests/test-mbrtoc32-2.sh new file mode 100755 index 00000000..1d44338a --- /dev/null +++ b/tests/test-mbrtoc32-2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no traditional french locale is installed" +  else +    echo "Skipping test: no traditional french locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_FR \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 2 diff --git a/tests/test-mbrtoc32-3.sh b/tests/test-mbrtoc32-3.sh new file mode 100755 index 00000000..082bad84 --- /dev/null +++ b/tests/test-mbrtoc32-3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no french Unicode locale is installed" +  else +    echo "Skipping test: no french Unicode locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 3 diff --git a/tests/test-mbrtoc32-4.sh b/tests/test-mbrtoc32-4.sh new file mode 100755 index 00000000..b23a3272 --- /dev/null +++ b/tests/test-mbrtoc32-4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: "${LOCALE_JA=ja_JP}" +if test $LOCALE_JA = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no traditional japanese locale is installed" +  else +    echo "Skipping test: no traditional japanese locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_JA \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 4 diff --git a/tests/test-mbrtoc32-5.sh b/tests/test-mbrtoc32-5.sh new file mode 100755 index 00000000..734a959e --- /dev/null +++ b/tests/test-mbrtoc32-5.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: "${LOCALE_ZH_CN=zh_CN.GB18030}" +if test $LOCALE_ZH_CN = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no transitional chinese locale is installed" +  else +    echo "Skipping test: no transitional chinese locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +${CHECKER} ./test-mbrtoc32${EXEEXT} 5 diff --git a/tests/test-mbrtoc32-w32-2.sh b/tests/test-mbrtoc32-w32-2.sh new file mode 100755 index 00000000..bf6b61ce --- /dev/null +++ b/tests/test-mbrtoc32-w32-2.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1252 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtoc32-w32-3.sh b/tests/test-mbrtoc32-w32-3.sh new file mode 100755 index 00000000..dd96b17f --- /dev/null +++ b/tests/test-mbrtoc32-w32-3.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP1256 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-mbrtoc32-w32-4.sh b/tests/test-mbrtoc32-w32-4.sh new file mode 100755 index 00000000..b2b889b6 --- /dev/null +++ b/tests/test-mbrtoc32-w32-4.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test some UTF-8 locales. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-mbrtoc32-w32-5.sh b/tests/test-mbrtoc32-w32-5.sh new file mode 100755 index 00000000..21a826b5 --- /dev/null +++ b/tests/test-mbrtoc32-w32-5.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP932 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-mbrtoc32-w32-6.sh b/tests/test-mbrtoc32-w32-6.sh new file mode 100755 index 00000000..4e261dbd --- /dev/null +++ b/tests/test-mbrtoc32-w32-6.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP950 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-mbrtoc32-w32-7.sh b/tests/test-mbrtoc32-w32-7.sh new file mode 100755 index 00000000..200c248c --- /dev/null +++ b/tests/test-mbrtoc32-w32-7.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a CP936 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-mbrtoc32-w32-8.sh b/tests/test-mbrtoc32-w32-8.sh new file mode 100755 index 00000000..a763e9fe --- /dev/null +++ b/tests/test-mbrtoc32-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-mbrtoc32-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-mbrtoc32-w32.c b/tests/test-mbrtoc32-w32.c new file mode 100644 index 00000000..93196d48 --- /dev/null +++ b/tests/test-mbrtoc32-w32.c @@ -0,0 +1,750 @@ +/* Test of conversion of multibyte character to 32-bit wide character. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <uchar.h> + +#include <errno.h> +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "localcharset.h" +#include "macros.h" + +#if defined _WIN32 && !defined __CYGWIN__ + +static int +test_one_locale (const char *name, int codepage) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +# if 1 +  /* Portable code to set the locale.  */ +  { +    char name_with_codepage[1024]; + +    sprintf (name_with_codepage, "%s.%d", name, codepage); + +    /* Set the locale.  */ +    if (setlocale (LC_ALL, name_with_codepage) == NULL) +      return 77; +  } +# else +  /* Hacky way to set a locale.codepage combination that setlocale() refuses +     to set.  */ +  { +    /* Codepage of the current locale, set with setlocale(). +       Not necessarily the same as GetACP().  */ +    extern __declspec(dllimport) unsigned int __lc_codepage; + +    /* Set the locale.  */ +    if (setlocale (LC_ALL, name) == NULL) +      return 77; + +    /* Clobber the codepage and MB_CUR_MAX, both set by setlocale().  */ +    __lc_codepage = codepage; +    switch (codepage) +      { +      case 1252: +      case 1256: +        MB_CUR_MAX = 1; +        break; +      case 932: +      case 950: +      case 936: +        MB_CUR_MAX = 2; +        break; +      case 54936: +      case 65001: +        MB_CUR_MAX = 4; +        break; +      } + +    /* Test whether the codepage is really available.  */ +    memset (&state, '\0', sizeof (mbstate_t)); +    if (mbrtoc32 (&wc, " ", 1, &state) == (size_t)(-1)) +      return 77; +  } +# endif + +  /* Test zero-length input.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, "x", 0, &state); +    ASSERT (ret == (size_t)(-2)); +    ASSERT (mbsinit (&state)); +  } + +  /* Test NUL byte input.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, "", 1, &state); +    ASSERT (ret == 0); +    ASSERT (wc == 0); +    ASSERT (mbsinit (&state)); +    ret = mbrtoc32 (NULL, "", 1, &state); +    ASSERT (ret == 0); +    ASSERT (mbsinit (&state)); +  } + +  /* Test single-byte input.  */ +  { +    int c; +    char buf[1]; + +    memset (&state, '\0', sizeof (mbstate_t)); +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          buf[0] = c; +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, buf, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == c); +          ASSERT (mbsinit (&state)); +          ret = mbrtoc32 (NULL, buf, 1, &state); +          ASSERT (ret == 1); +          ASSERT (mbsinit (&state)); +          break; +        } +  } + +  /* Test special calling convention, passing a NULL pointer.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, NULL, 5, &state); +    ASSERT (ret == 0); +    ASSERT (wc == (char32_t) 0xBADFACE); +    ASSERT (mbsinit (&state)); +  } + +  switch (codepage) +    { +    case 1252: +      /* Locale encoding is CP1252, an extension of ISO-8859-1.  */ +      { +        char input[] = "B\374\337er"; /* "Büßer" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'B'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 1, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == (unsigned char) '\374'); +        ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[1] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 2, 3, &state); +        ASSERT (ret == 1); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 2, 3, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == (unsigned char) '\337'); +        ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[2] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 2, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'e'); +        ASSERT (mbsinit (&state)); +        input[3] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 4, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'r'); +        ASSERT (mbsinit (&state)); +      } +      return 0; + +    case 1256: +      /* Locale encoding is CP1256, not the same as ISO-8859-6.  */ +      { +        char input[] = "x\302\341\346y"; /* "xآلوy" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'x'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 1, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == (unsigned char) '\302'); +        ASSERT (wc == 0x0622); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[1] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 2, 3, &state); +        ASSERT (ret == 1); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 2, 3, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == (unsigned char) '\341'); +        ASSERT (wc == 0x0644); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[2] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 2, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == (unsigned char) '\346'); +        ASSERT (wc == 0x0648); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[3] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 4, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'y'); +        ASSERT (mbsinit (&state)); +      } +      return 0; + +    case 65001: +      /* Locale encoding is CP65001 = UTF-8.  */ +      if (strcmp (locale_charset (), "UTF-8") != 0) +        return 77; +      { +        char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 's'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (char32_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[1] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 2, 7, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[2] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 3, 6, &state); +        ASSERT (ret == 2); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 6, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[3] = '\0'; +        input[4] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 5, 4, &state); +        ASSERT (ret == 4); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 5, 4, &state); +        ASSERT (ret == 4); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[5] = '\0'; +        input[6] = '\0'; +        input[7] = '\0'; +        input[8] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 9, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '!'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); +      } +      return 0; + +    case 932: +      /* Locale encoding is CP932, similar to Shift_JIS.  */ +      { +        char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '<'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 2, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x65E5); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[1] = '\0'; +        input[2] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (char32_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[3] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 4, 4, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x672C); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[4] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[5] = '\0'; +        input[6] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 7, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '>'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == 0x30FB)); +      } +      return 0; + +    case 950: +      /* Locale encoding is CP950, similar to Big5.  */ +      { +        char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '<'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 2, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x65E5); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[1] = '\0'; +        input[2] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (char32_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[3] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 4, 4, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x672C); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[4] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[5] = '\0'; +        input[6] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 7, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '>'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); +      } +      return 0; + +    case 936: +      /* Locale encoding is CP936 = GBK, an extension of GB2312.  */ +      { +        char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '<'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 2, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x65E5); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[1] = '\0'; +        input[2] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (char32_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[3] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 4, 4, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x672C); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[4] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 5, 3, &state); +        ASSERT (ret == 2); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[5] = '\0'; +        input[6] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 7, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '>'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || ret == (size_t)-2); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ +        ASSERT ((ret == (size_t)-1 && errno == EILSEQ) || (ret == 2 && wc == '?')); +      } +      return 0; + +    case 54936: +      /* Locale encoding is CP54936 = GB18030.  */ +      if (strcmp (locale_charset (), "GB18030") != 0) +        return 77; +      { +        char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 's'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 1, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (char32_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[1] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 2, 9, &state); +        ASSERT (ret == 1); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[2] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 3, 8, &state); +        ASSERT (ret == 4); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 3, 8, &state); +        ASSERT (ret == 4); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[3] = '\0'; +        input[4] = '\0'; +        input[5] = '\0'; +        input[6] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtoc32 (NULL, input + 7, 4, &state); +        ASSERT (ret == 4); +        ASSERT (mbsinit (&state)); + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 7, 4, &state); +        ASSERT (ret == 4); +        ASSERT (c32tob (wc) == EOF); +        ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ +        ASSERT (mbsinit (&state)); +        input[7] = '\0'; +        input[8] = '\0'; +        input[9] = '\0'; +        input[10] = '\0'; + +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, input + 11, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == '!'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\225\377", 2, &state); /* 0x95 0xFF */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\201\045", 2, &state); /* 0x81 0x25 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\201\060\377", 3, &state); /* 0x81 0x30 0xFF */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\201\060\377\064", 4, &state); /* 0x81 0x30 0xFF 0x34 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (char32_t) 0xBADFACE; +        ret = mbrtoc32 (&wc, "\201\060\211\072", 4, &state); /* 0x81 0x30 0x89 0x3A */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); +      } +      return 0; + +    default: +      return 1; +    } +} + +int +main (int argc, char *argv[]) +{ +  int codepage = atoi (argv[argc - 1]); +  int result; +  int i; + +  result = 77; +  for (i = 1; i < argc - 1; i++) +    { +      int ret = test_one_locale (argv[i], codepage); + +      if (ret != 77) +        result = ret; +    } + +  if (result == 77) +    { +      fprintf (stderr, "Skipping test: found no locale with codepage %d\n", +               codepage); +    } +  return result; +} + +#else + +int +main (int argc, char *argv[]) +{ +  fputs ("Skipping test: not a native Windows system\n", stderr); +  return 77; +} + +#endif diff --git a/tests/test-mbrtoc32.c b/tests/test-mbrtoc32.c new file mode 100644 index 00000000..6fffb2a7 --- /dev/null +++ b/tests/test-mbrtoc32.c @@ -0,0 +1,441 @@ +/* Test of conversion of multibyte character to 32-bit wide character. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2008.  */ + +#include <config.h> + +#include <uchar.h> + +#include "signature.h" +SIGNATURE_CHECK (mbrtoc32, size_t, +                 (char32_t *, const char *, size_t, mbstate_t *)); + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <wchar.h> + +#include "macros.h" + +int +main (int argc, char *argv[]) +{ +  mbstate_t state; +  char32_t wc; +  size_t ret; + +  /* configure should already have checked that the locale is supported.  */ +  if (setlocale (LC_ALL, "") == NULL) +    return 1; + +  /* Test zero-length input.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, "x", 0, &state); +    ASSERT (ret == (size_t)(-2)); +    ASSERT (mbsinit (&state)); +  } + +  /* Test NUL byte input.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, "", 1, &state); +    ASSERT (ret == 0); +    ASSERT (wc == 0); +    ASSERT (mbsinit (&state)); +    ret = mbrtoc32 (NULL, "", 1, &state); +    ASSERT (ret == 0); +    ASSERT (mbsinit (&state)); +  } + +  /* Test single-byte input.  */ +  { +    int c; +    char buf[1]; + +    memset (&state, '\0', sizeof (mbstate_t)); +    for (c = 0; c < 0x100; c++) +      switch (c) +        { +        case '\t': case '\v': case '\f': +        case ' ': case '!': case '"': case '#': case '%': +        case '&': case '\'': case '(': case ')': case '*': +        case '+': case ',': case '-': case '.': case '/': +        case '0': case '1': case '2': case '3': case '4': +        case '5': case '6': case '7': case '8': case '9': +        case ':': case ';': case '<': case '=': case '>': +        case '?': +        case 'A': case 'B': case 'C': case 'D': case 'E': +        case 'F': case 'G': case 'H': case 'I': case 'J': +        case 'K': case 'L': case 'M': case 'N': case 'O': +        case 'P': case 'Q': case 'R': case 'S': case 'T': +        case 'U': case 'V': case 'W': case 'X': case 'Y': +        case 'Z': +        case '[': case '\\': case ']': case '^': case '_': +        case 'a': case 'b': case 'c': case 'd': case 'e': +        case 'f': case 'g': case 'h': case 'i': case 'j': +        case 'k': case 'l': case 'm': case 'n': case 'o': +        case 'p': case 'q': case 'r': case 's': case 't': +        case 'u': case 'v': case 'w': case 'x': case 'y': +        case 'z': case '{': case '|': case '}': case '~': +          /* c is in the ISO C "basic character set".  */ +          ASSERT (c < 0x80); +          /* c is an ASCII character.  */ +          buf[0] = c; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, buf, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == c); +          ASSERT (mbsinit (&state)); + +          ret = mbrtoc32 (NULL, buf, 1, &state); +          ASSERT (ret == 1); +          ASSERT (mbsinit (&state)); + +          break; +        default: +          break; +        } +  } + +  /* Test special calling convention, passing a NULL pointer.  */ +  { +    memset (&state, '\0', sizeof (mbstate_t)); +    wc = (char32_t) 0xBADFACE; +    ret = mbrtoc32 (&wc, NULL, 5, &state); +    ASSERT (ret == 0); +    ASSERT (wc == (char32_t) 0xBADFACE); +    ASSERT (mbsinit (&state)); +  } + +#ifdef __ANDROID__ +  /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the +     "C" locale.  Furthermore, when you attempt to set the "C" or "POSIX" +     locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, +     that is, effectively the "C.UTF-8" locale.  */ +  if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) +    argv[1] = "3"; +#endif + +  if (argc > 1) +    switch (argv[1][0]) +      { +      case '1': +        /* C or POSIX locale.  */ +        { +          int c; +          char buf[1]; + +          memset (&state, '\0', sizeof (mbstate_t)); +          for (c = 0; c < 0x100; c++) +            if (c != 0) +              { +                /* We are testing all nonnull bytes.  */ +                buf[0] = c; + +                wc = (char32_t) 0xBADFACE; +                ret = mbrtoc32 (&wc, buf, 1, &state); +                /* POSIX:2018 says regarding mbrtowc: "In the POSIX locale an +                   [EILSEQ] error cannot occur since all byte values are valid +                   characters."  It is reasonable to expect mbrtoc32 to behave +                   in the same way.  */ +                ASSERT (ret == 1); +                if (c < 0x80) +                  /* c is an ASCII character.  */ +                  ASSERT (wc == c); +                else +                  /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. +                     But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF.  */ +                  ASSERT (wc == (btoc32 (c) == 0xDF00 + c ? btoc32 (c) : c)); +                ASSERT (mbsinit (&state)); + +                ret = mbrtoc32 (NULL, buf, 1, &state); +                ASSERT (ret == 1); +                ASSERT (mbsinit (&state)); +              } +        } +        return 0; + +      case '2': +        /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */ +        { +          char input[] = "B\374\337er"; /* "Büßer" */ +          memset (&state, '\0', sizeof (mbstate_t)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == 'B'); +          ASSERT (mbsinit (&state)); +          input[0] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 1, 1, &state); +          ASSERT (ret == 1); +          ASSERT (c32tob (wc) == (unsigned char) '\374'); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[1] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 2, 3, &state); +          ASSERT (ret == 1); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 2, 3, &state); +          ASSERT (ret == 1); +          ASSERT (c32tob (wc) == (unsigned char) '\337'); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[2] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 3, 2, &state); +          ASSERT (ret == 1); +          ASSERT (wc == 'e'); +          ASSERT (mbsinit (&state)); +          input[3] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 4, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == 'r'); +          ASSERT (mbsinit (&state)); +        } +        return 0; + +      case '3': +        /* Locale encoding is UTF-8.  */ +        { +          char input[] = "s\303\274\303\237\360\237\230\213!"; /* "süß😋!" */ +          memset (&state, '\0', sizeof (mbstate_t)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == 's'); +          ASSERT (mbsinit (&state)); +          input[0] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 1, 1, &state); +          ASSERT (ret == (size_t)(-2)); +          ASSERT (wc == (char32_t) 0xBADFACE); +          ASSERT (!mbsinit (&state)); +          input[1] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 2, 7, &state); +          ASSERT (ret == 1); +          ASSERT (c32tob (wc) == EOF); +          ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +          ASSERT (mbsinit (&state)); +          input[2] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 3, 6, &state); +          ASSERT (ret == 2); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 3, 6, &state); +          ASSERT (ret == 2); +          ASSERT (c32tob (wc) == EOF); +          ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +          ASSERT (mbsinit (&state)); +          input[3] = '\0'; +          input[4] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 5, 4, &state); +          ASSERT (ret == 4); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 5, 4, &state); +          ASSERT (ret == 4); +          ASSERT (c32tob (wc) == EOF); +          ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ +          ASSERT (mbsinit (&state)); +          input[5] = '\0'; +          input[6] = '\0'; +          input[7] = '\0'; +          input[8] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 9, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == '!'); +          ASSERT (mbsinit (&state)); +        } +        return 0; + +      case '4': +        /* Locale encoding is EUC-JP.  */ +        { +          char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ +          memset (&state, '\0', sizeof (mbstate_t)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == '<'); +          ASSERT (mbsinit (&state)); +          input[0] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 1, 2, &state); +          ASSERT (ret == 2); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x65E5); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[1] = '\0'; +          input[2] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 3, 1, &state); +          ASSERT (ret == (size_t)(-2)); +          ASSERT (wc == (char32_t) 0xBADFACE); +          ASSERT (!mbsinit (&state)); +          input[3] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 4, 4, &state); +          ASSERT (ret == 1); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x672C); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[4] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 5, 3, &state); +          ASSERT (ret == 2); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 5, 3, &state); +          ASSERT (ret == 2); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x8A9E); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[5] = '\0'; +          input[6] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 7, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == '>'); +          ASSERT (mbsinit (&state)); +        } +        return 0; + +      case '5': +        /* Locale encoding is GB18030.  */ +        #if (defined __GLIBC__ && __GLIBC__ == 2 && __GLIBC_MINOR__ >= 13 && __GLIBC_MINOR__ <= 15) || (GL_CHAR32_T_IS_UNICODE && (defined __FreeBSD__ || defined __NetBSD__ || defined __sun)) +        fputs ("Skipping test: The GB18030 converter in this system's iconv is broken.\n", stderr); +        return 77; +        #endif +        { +          char input[] = "s\250\271\201\060\211\070\224\071\375\067!"; /* "süß😋!" */ +          memset (&state, '\0', sizeof (mbstate_t)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == 's'); +          ASSERT (mbsinit (&state)); +          input[0] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 1, 1, &state); +          ASSERT (ret == (size_t)(-2)); +          ASSERT (wc == (char32_t) 0xBADFACE); +          ASSERT (!mbsinit (&state)); +          input[1] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 2, 9, &state); +          ASSERT (ret == 1); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x00FC); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[2] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 3, 8, &state); +          ASSERT (ret == 4); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 3, 8, &state); +          ASSERT (ret == 4); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x00DF); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[3] = '\0'; +          input[4] = '\0'; +          input[5] = '\0'; +          input[6] = '\0'; + +          /* Test support of NULL first argument.  */ +          ret = mbrtoc32 (NULL, input + 7, 4, &state); +          ASSERT (ret == 4); +          ASSERT (mbsinit (&state)); + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 7, 4, &state); +          ASSERT (ret == 4); +          ASSERT (c32tob (wc) == EOF); +          #if GL_CHAR32_T_IS_UNICODE +          ASSERT (wc == 0x1F60B); /* expect Unicode encoding */ +          #endif +          ASSERT (mbsinit (&state)); +          input[7] = '\0'; +          input[8] = '\0'; +          input[9] = '\0'; +          input[10] = '\0'; + +          wc = (char32_t) 0xBADFACE; +          ret = mbrtoc32 (&wc, input + 11, 1, &state); +          ASSERT (ret == 1); +          ASSERT (wc == '!'); +          ASSERT (mbsinit (&state)); +        } +        return 0; +      } + +  return 1; +} diff --git a/tests/test-mbrtowc-1.sh b/tests/test-mbrtowc-1.sh new file mode 100755 index 00000000..f0a1feda --- /dev/null +++ b/tests/test-mbrtowc-1.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Test whether the POSIX locale has encoding errors. +LC_ALL=C \ +${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 +LC_ALL=POSIX \ +${CHECKER} ./test-mbrtowc${EXEEXT} 1 || exit 1 + +exit 0 diff --git a/tests/test-mbrtowc-2.sh b/tests/test-mbrtowc-2.sh new file mode 100755 index 00000000..30662926 --- /dev/null +++ b/tests/test-mbrtowc-2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: "${LOCALE_FR=fr_FR}" +if test $LOCALE_FR = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no traditional french locale is installed" +  else +    echo "Skipping test: no traditional french locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_FR \ +${CHECKER} ./test-mbrtowc${EXEEXT} 2 diff --git a/tests/test-mbrtowc-3.sh b/tests/test-mbrtowc-3.sh new file mode 100755 index 00000000..36b0023c --- /dev/null +++ b/tests/test-mbrtowc-3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: "${LOCALE_FR_UTF8=fr_FR.UTF-8}" +if test $LOCALE_FR_UTF8 = none; then +  if test -f /usr/bin/localedef; then +    echo "Skipping test: no french Unicode locale is installed" +  else +    echo "Skipping test: no french Unicode locale is supported" +  fi +  exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +${CHECKER} ./test-mbrtowc${EXEEXT} 3 diff --git a/tests/test-mbrtowc3.sh b/tests/test-mbrtowc-4.sh index eca8d648..1c5943ea 100755 --- a/tests/test-mbrtowc3.sh +++ b/tests/test-mbrtowc-4.sh @@ -12,4 +12,4 @@ if test $LOCALE_JA = none; then  fi  LC_ALL=$LOCALE_JA \ -${CHECKER} ./test-mbrtowc${EXEEXT} 3 +${CHECKER} ./test-mbrtowc${EXEEXT} 4 diff --git a/tests/test-mbrtowc4.sh b/tests/test-mbrtowc-5.sh index 7da23a3c..8690bbef 100755 --- a/tests/test-mbrtowc4.sh +++ b/tests/test-mbrtowc-5.sh @@ -12,4 +12,4 @@ if test $LOCALE_ZH_CN = none; then  fi  LC_ALL=$LOCALE_ZH_CN \ -${CHECKER} ./test-mbrtowc${EXEEXT} 4 +${CHECKER} ./test-mbrtowc${EXEEXT} 5 diff --git a/tests/test-mbrtowc-w32-1.sh b/tests/test-mbrtowc-w32-1.sh deleted file mode 100755 index fec9eadf..00000000 --- a/tests/test-mbrtowc-w32-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Test a CP1252 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtowc-w32-2.sh b/tests/test-mbrtowc-w32-2.sh index c55a0ec0..fec9eadf 100755 --- a/tests/test-mbrtowc-w32-2.sh +++ b/tests/test-mbrtowc-w32-2.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP1256 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 +# Test a CP1252 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France 1252 diff --git a/tests/test-mbrtowc-w32-3.sh b/tests/test-mbrtowc-w32-3.sh index c49f4bdf..c55a0ec0 100755 --- a/tests/test-mbrtowc-w32-3.sh +++ b/tests/test-mbrtowc-w32-3.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP932 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 +# Test a CP1256 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-mbrtowc-w32-4.sh b/tests/test-mbrtowc-w32-4.sh index 3e786150..2c5d555f 100755 --- a/tests/test-mbrtowc-w32-4.sh +++ b/tests/test-mbrtowc-w32-4.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP950 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 +# Test some UTF-8 locales. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-mbrtowc-w32-5.sh b/tests/test-mbrtowc-w32-5.sh index c6ba2226..c49f4bdf 100755 --- a/tests/test-mbrtowc-w32-5.sh +++ b/tests/test-mbrtowc-w32-5.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP936 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 +# Test a CP932 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-mbrtowc-w32-6.sh b/tests/test-mbrtowc-w32-6.sh index c2e8dfe0..3e786150 100755 --- a/tests/test-mbrtowc-w32-6.sh +++ b/tests/test-mbrtowc-w32-6.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a GB18030 locale. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 +# Test a CP950 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-mbrtowc-w32-7.sh b/tests/test-mbrtowc-w32-7.sh index 2c5d555f..c6ba2226 100755 --- a/tests/test-mbrtowc-w32-7.sh +++ b/tests/test-mbrtowc-w32-7.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test some UTF-8 locales. -${CHECKER} ./test-mbrtowc-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 +# Test a CP936 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-mbrtowc-w32-8.sh b/tests/test-mbrtowc-w32-8.sh new file mode 100755 index 00000000..c2e8dfe0 --- /dev/null +++ b/tests/test-mbrtowc-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-mbrtowc-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-mbrtowc-w32.c b/tests/test-mbrtowc-w32.c index 04287e98..2071ddeb 100644 --- a/tests/test-mbrtowc-w32.c +++ b/tests/test-mbrtowc-w32.c @@ -1,5 +1,5 @@  /* Test of conversion of multibyte character to wide character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -265,6 +265,126 @@ test_one_locale (const char *name, int codepage)        }        return 0; +    case 65001: +      /* Locale encoding is CP65001 = UTF-8.  */ +      if (strcmp (locale_charset (), "UTF-8") != 0) +        return 77; +      { +        char input[] = "B\303\274\303\237er"; /* "Büßer" */ +        memset (&state, '\0', sizeof (mbstate_t)); + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'B'); +        ASSERT (mbsinit (&state)); +        input[0] = '\0'; + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input + 1, 1, &state); +        ASSERT (ret == (size_t)(-2)); +        ASSERT (wc == (wchar_t) 0xBADFACE); +        ASSERT (!mbsinit (&state)); +        input[1] = '\0'; + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input + 2, 5, &state); +        ASSERT (ret == 1); +        ASSERT (wctob (wc) == EOF); +        ASSERT (wc == 0x00FC); +        ASSERT (mbsinit (&state)); +        input[2] = '\0'; + +        /* Test support of NULL first argument.  */ +        ret = mbrtowc (NULL, input + 3, 4, &state); +        ASSERT (ret == 2); +        ASSERT (mbsinit (&state)); + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input + 3, 4, &state); +        ASSERT (ret == 2); +        ASSERT (wctob (wc) == EOF); +        ASSERT (wc == 0x00DF); +        ASSERT (mbsinit (&state)); +        input[3] = '\0'; +        input[4] = '\0'; + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input + 5, 2, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'e'); +        ASSERT (mbsinit (&state)); +        input[5] = '\0'; + +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, input + 6, 1, &state); +        ASSERT (ret == 1); +        ASSERT (wc == 'r'); +        ASSERT (mbsinit (&state)); + +        /* Test some invalid input.  */ +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); + +        memset (&state, '\0', sizeof (mbstate_t)); +        wc = (wchar_t) 0xBADFACE; +        ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ +        ASSERT (ret == (size_t)-1); +        ASSERT (errno == EILSEQ); +      } +      return 0; +      case 932:        /* Locale encoding is CP932, similar to Shift_JIS.  */        { @@ -573,126 +693,6 @@ test_one_locale (const char *name, int codepage)        }        return 0; -    case 65001: -      /* Locale encoding is CP65001 = UTF-8.  */ -      if (strcmp (locale_charset (), "UTF-8") != 0) -        return 77; -      { -        char input[] = "B\303\274\303\237er"; /* "Büßer" */ -        memset (&state, '\0', sizeof (mbstate_t)); - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input, 1, &state); -        ASSERT (ret == 1); -        ASSERT (wc == 'B'); -        ASSERT (mbsinit (&state)); -        input[0] = '\0'; - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input + 1, 1, &state); -        ASSERT (ret == (size_t)(-2)); -        ASSERT (wc == (wchar_t) 0xBADFACE); -        ASSERT (!mbsinit (&state)); -        input[1] = '\0'; - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input + 2, 5, &state); -        ASSERT (ret == 1); -        ASSERT (wctob (wc) == EOF); -        ASSERT (wc == 0x00FC); -        ASSERT (mbsinit (&state)); -        input[2] = '\0'; - -        /* Test support of NULL first argument.  */ -        ret = mbrtowc (NULL, input + 3, 4, &state); -        ASSERT (ret == 2); -        ASSERT (mbsinit (&state)); - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input + 3, 4, &state); -        ASSERT (ret == 2); -        ASSERT (wctob (wc) == EOF); -        ASSERT (wc == 0x00DF); -        ASSERT (mbsinit (&state)); -        input[3] = '\0'; -        input[4] = '\0'; - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input + 5, 2, &state); -        ASSERT (ret == 1); -        ASSERT (wc == 'e'); -        ASSERT (mbsinit (&state)); -        input[5] = '\0'; - -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, input + 6, 1, &state); -        ASSERT (ret == 1); -        ASSERT (wc == 'r'); -        ASSERT (mbsinit (&state)); - -        /* Test some invalid input.  */ -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\377", 1, &state); /* 0xFF */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\303\300", 2, &state); /* 0xC3 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\343\300", 2, &state); /* 0xE3 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\343\300\200", 3, &state); /* 0xE3 0xC0 0x80 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\343\200\300", 3, &state); /* 0xE3 0x80 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\363\300", 2, &state); /* 0xF3 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\363\300\200\200", 4, &state); /* 0xF3 0xC0 0x80 0x80 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\363\200\300", 3, &state); /* 0xF3 0x80 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\363\200\300\200", 4, &state); /* 0xF3 0x80 0xC0 0x80 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); - -        memset (&state, '\0', sizeof (mbstate_t)); -        wc = (wchar_t) 0xBADFACE; -        ret = mbrtowc (&wc, "\363\200\200\300", 4, &state); /* 0xF3 0x80 0x80 0xC0 */ -        ASSERT (ret == (size_t)-1); -        ASSERT (errno == EILSEQ); -      } -      return 0; -      default:        return 1;      } diff --git a/tests/test-mbrtowc.c b/tests/test-mbrtowc.c index 0e86bd49..f45f90e4 100644 --- a/tests/test-mbrtowc.c +++ b/tests/test-mbrtowc.c @@ -1,5 +1,5 @@  /* Test of conversion of multibyte character to wide character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -26,6 +26,7 @@ SIGNATURE_CHECK (mbrtowc, size_t, (wchar_t *, char const *, size_t,  #include <locale.h>  #include <stdio.h> +#include <stdlib.h>  #include <string.h>  #include "macros.h" @@ -72,10 +73,6 @@ main (int argc, char *argv[])      for (c = 0; c < 0x100; c++)        switch (c)          { -        default: -          if (! (c && 1 < argc && argv[1][0] == '5')) -            break; -          FALLTHROUGH;          case '\t': case '\v': case '\f':          case ' ': case '!': case '"': case '#': case '%':          case '&': case '\'': case '(': case ')': case '*': @@ -97,25 +94,23 @@ main (int argc, char *argv[])          case 'p': case 'q': case 'r': case 's': case 't':          case 'u': case 'v': case 'w': case 'x': case 'y':          case 'z': case '{': case '|': case '}': case '~': -          /* c is in the ISO C "basic character set", or argv[1] starts -             with '5' so we are testing all nonnull bytes.  */ +          /* c is in the ISO C "basic character set".  */ +          ASSERT (c < 0x80); +          /* c is an ASCII character.  */            buf[0] = c; +            wc = (wchar_t) 0xBADFACE;            ret = mbrtowc (&wc, buf, 1, &state);            ASSERT (ret == 1); -          if (c < 0x80) -            /* c is an ASCII character.  */ -            ASSERT (wc == c); -          else -            /* argv[1] starts with '5', that is, we are testing the C or POSIX -               locale. -               On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. -               But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF.  */ -            ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); +          ASSERT (wc == c);            ASSERT (mbsinit (&state)); +            ret = mbrtowc (NULL, buf, 1, &state);            ASSERT (ret == 1);            ASSERT (mbsinit (&state)); + +          break; +        default:            break;          }    } @@ -130,10 +125,53 @@ main (int argc, char *argv[])      ASSERT (mbsinit (&state));    } +#ifdef __ANDROID__ +  /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the +     "C" locale.  Furthermore, when you attempt to set the "C" or "POSIX" +     locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, +     that is, effectively the "C.UTF-8" locale.  */ +  if (argc > 1 && strcmp (argv[1], "1") == 0 && MB_CUR_MAX > 1) +    argv[1] = "3"; +#endif +    if (argc > 1)      switch (argv[1][0])        {        case '1': +        /* C or POSIX locale.  */ +        { +          int c; +          char buf[1]; + +          memset (&state, '\0', sizeof (mbstate_t)); +          for (c = 0; c < 0x100; c++) +            if (c != 0) +              { +                /* We are testing all nonnull bytes.  */ +                buf[0] = c; + +                wc = (wchar_t) 0xBADFACE; +                ret = mbrtowc (&wc, buf, 1, &state); +                /* POSIX:2018 says: "In the POSIX locale an [EILSEQ] error +                   cannot occur since all byte values are valid characters."  */ +                ASSERT (ret == 1); +                if (c < 0x80) +                  /* c is an ASCII character.  */ +                  ASSERT (wc == c); +                else +                  /* On most platforms, the bytes 0x80..0xFF map to U+0080..U+00FF. +                     But on musl libc, the bytes 0x80..0xFF map to U+DF80..U+DFFF.  */ +                  ASSERT (wc == (btowc (c) == 0xDF00 + c ? btowc (c) : c)); +                ASSERT (mbsinit (&state)); + +                ret = mbrtowc (NULL, buf, 1, &state); +                ASSERT (ret == 1); +                ASSERT (mbsinit (&state)); +              } +        } +        return 0; + +      case '2':          /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */          {            char input[] = "B\374\337er"; /* "Büßer" */ @@ -180,7 +218,7 @@ main (int argc, char *argv[])          }          return 0; -      case '2': +      case '3':          /* Locale encoding is UTF-8.  */          {            char input[] = "B\303\274\303\237er"; /* "Büßer" */ @@ -235,7 +273,7 @@ main (int argc, char *argv[])          }          return 0; -      case '3': +      case '4':          /* Locale encoding is EUC-JP.  */          {            char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ @@ -291,7 +329,7 @@ main (int argc, char *argv[])          }          return 0; -      case '4': +      case '5':          /* Locale encoding is GB18030.  */          {            char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ @@ -347,10 +385,6 @@ main (int argc, char *argv[])            ASSERT (mbsinit (&state));          }          return 0; - -      case '5': -        /* C locale; tested above.  */ -        return 0;        }    return 1; diff --git a/tests/test-mbrtowc5.sh b/tests/test-mbrtowc5.sh deleted file mode 100755 index 490496de..00000000 --- a/tests/test-mbrtowc5.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -# Test whether the POSIX locale has encoding errors. -LC_ALL=C \ -${CHECKER} ./test-mbrtowc${EXEEXT} 5 || exit -LC_ALL=POSIX \ -${CHECKER} ./test-mbrtowc${EXEEXT} 5 diff --git a/tests/test-mbsinit.c b/tests/test-mbsinit.c index 699701eb..0250894d 100644 --- a/tests/test-mbsinit.c +++ b/tests/test-mbsinit.c @@ -1,5 +1,5 @@  /* Test of test for initial conversion state. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-memchr.c b/tests/test-memchr.c index 8a2d3de4..c43ce9ff 100644 --- a/tests/test-memchr.c +++ b/tests/test-memchr.c @@ -1,5 +1,5 @@  /* - * Copyright (C) 2008-2022 Free Software Foundation, Inc. + * Copyright (C) 2008-2024 Free Software Foundation, Inc.   * Written by Eric Blake and Bruno Haible   *   * This program is free software: you can redistribute it and/or modify diff --git a/tests/test-nanosleep.c b/tests/test-nanosleep.c index c2081615..c3953843 100644 --- a/tests/test-nanosleep.c +++ b/tests/test-nanosleep.c @@ -1,5 +1,5 @@  /* Test of nanosleep() function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-netinet_in.c b/tests/test-netinet_in.c index 3bc110e5..6842821e 100644 --- a/tests/test-netinet_in.c +++ b/tests/test-netinet_in.c @@ -1,5 +1,5 @@  /* Test of <netinet/in.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-once.c b/tests/test-once.c index 5efe7c4a..70f54c02 100644 --- a/tests/test-once.c +++ b/tests/test-once.c @@ -1,5 +1,5 @@  /* Test of once-only execution in multithreaded situations. -   Copyright (C) 2018-2022 Free Software Foundation, Inc. +   Copyright (C) 2018-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-open.c b/tests/test-open.c index d7c5a086..52e72be9 100644 --- a/tests/test-open.c +++ b/tests/test-open.c @@ -1,5 +1,5 @@  /* Test of opening a file descriptor. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-open.h b/tests/test-open.h index 0da20a17..05764356 100644 --- a/tests/test-open.h +++ b/tests/test-open.h @@ -1,5 +1,5 @@  /* Test of opening a file descriptor. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -16,6 +16,11 @@  /* Written by Bruno Haible <bruno@clisp.org>, 2007.  */ +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif +  /* Make test_open always inline if we're using Fortify, which defines     __always_inline to do that.  Do nothing otherwise.  This works     around a glibc bug whereby 'open' cannot be used as a function diff --git a/tests/test-pathmax.c b/tests/test-pathmax.c index 5f1f9cc2..a80ee065 100644 --- a/tests/test-pathmax.c +++ b/tests/test-pathmax.c @@ -1,5 +1,5 @@  /* Test of "pathmax.h". -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-perror.c b/tests/test-perror.c index e1ab3d6b..aba12fa1 100644 --- a/tests/test-perror.c +++ b/tests/test-perror.c @@ -1,5 +1,5 @@  /* Test of perror() function. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-perror2.c b/tests/test-perror2.c index f1eb5110..edf1d15f 100644 --- a/tests/test-perror2.c +++ b/tests/test-perror2.c @@ -1,5 +1,5 @@  /* Test of perror() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -22,6 +22,11 @@  #include <string.h>  #include <unistd.h> +/* Tell GCC not to warn about myerr being leaked.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-leak" +#endif +  /* This test intentionally parses stderr.  So, we arrange to have fd 10     (outside the range of interesting fd's during the test) set up to     duplicate the original stderr.  */ diff --git a/tests/test-pipe.c b/tests/test-pipe.c index 0525f7d4..e9ebe162 100644 --- a/tests/test-pipe.c +++ b/tests/test-pipe.c @@ -1,5 +1,5 @@  /* Test of pipe. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-printf-frexp.c b/tests/test-printf-frexp.c index 01b34a51..e3aa7caf 100644 --- a/tests/test-printf-frexp.c +++ b/tests/test-printf-frexp.c @@ -1,5 +1,5 @@  /* Test of splitting a double into fraction and mantissa. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-printf-frexpl.c b/tests/test-printf-frexpl.c index bc30fd1b..dd39fe84 100644 --- a/tests/test-printf-frexpl.c +++ b/tests/test-printf-frexpl.c @@ -1,5 +1,5 @@  /* Test of splitting a 'long double' into fraction and mantissa. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-pselect.c b/tests/test-pselect.c index 898578be..2f239ddf 100644 --- a/tests/test-pselect.c +++ b/tests/test-pselect.c @@ -1,5 +1,5 @@  /* Test of pselect() substitute. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ SIGNATURE_CHECK (pselect, int,                   (int, fd_set *restrict, fd_set *restrict, fd_set *restrict,                    struct timespec const *restrict, const sigset_t *restrict)); +#define TEST_PORT 12347  #include "test-select.h"  static int diff --git a/tests/test-pthread-thread.c b/tests/test-pthread-thread.c index 3c08084d..f0a19793 100644 --- a/tests/test-pthread-thread.c +++ b/tests/test-pthread-thread.c @@ -1,5 +1,5 @@  /* Test of pthread_create () function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static pthread_t worker_thread;  static volatile int work_done;  static void * -worker_thread_func (void *arg) +worker_thread_func (_GL_UNUSED void *arg)  {    work_done = 1;    return MAGIC; diff --git a/tests/test-pthread.c b/tests/test-pthread.c index 2fef5924..f7e89c66 100644 --- a/tests/test-pthread.c +++ b/tests/test-pthread.c @@ -1,5 +1,5 @@  /* Test of <pthread.h> substitute. -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-pthread_sigmask1.c b/tests/test-pthread_sigmask1.c index a7816b5e..a4f9ba6d 100644 --- a/tests/test-pthread_sigmask1.c +++ b/tests/test-pthread_sigmask1.c @@ -1,5 +1,5 @@  /* Test of pthread_sigmask in a single-threaded program. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@  SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *));  #include <errno.h> +#include <inttypes.h>  #include <stdio.h>  #include <stdlib.h>  #include <unistd.h> @@ -35,16 +36,16 @@ SIGNATURE_CHECK (pthread_sigmask, int, (int, const sigset_t *, sigset_t *));  static volatile int sigint_occurred;  static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig)  {    sigint_occurred++;  }  int -main (int argc, char *argv[]) +main ()  {    sigset_t set; -  int pid = getpid (); +  intmax_t pid = getpid ();    char command[80];    signal (SIGINT, sigint_handler); @@ -59,7 +60,7 @@ main (int argc, char *argv[])    ASSERT (pthread_sigmask (SIG_BLOCK, &set, NULL) == 0);    /* Request a SIGINT signal from outside.  */ -  sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, pid); +  sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid);    ASSERT (system (command) == 0);    /* Wait.  */ diff --git a/tests/test-pthread_sigmask2.c b/tests/test-pthread_sigmask2.c index 20349fe0..d527eb8d 100644 --- a/tests/test-pthread_sigmask2.c +++ b/tests/test-pthread_sigmask2.c @@ -1,5 +1,5 @@  /* Test of pthread_sigmask in a multi-threaded program. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static pthread_t main_thread;  static pthread_t killer_thread;  static void * -killer_thread_func (void *arg) +killer_thread_func (_GL_UNUSED void *arg)  {    sleep (1);    pthread_kill (main_thread, SIGINT); @@ -43,13 +43,13 @@ killer_thread_func (void *arg)  static volatile int sigint_occurred;  static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig)  {    sigint_occurred++;  }  int -main (int argc, char *argv[]) +main ()  {    sigset_t set; diff --git a/tests/test-raise.c b/tests/test-raise.c index b1a3c8a4..39ffdc30 100644 --- a/tests/test-raise.c +++ b/tests/test-raise.c @@ -1,5 +1,5 @@  /* Test raising a signal. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -26,11 +26,11 @@ SIGNATURE_CHECK (raise, int, (int));  #include "macros.h" -/* It is safe to use _Noreturn here: exit() never returns, and GCC knows that -   exit() is a non-returning function, even on platforms where its declaration -   in <stdlib.h> does not have the 'noreturn' attribute.  */ +/* It is safe to use _Noreturn here: _exit() never returns, and GCC knows that +   _exit() is a non-returning function, even on platforms where its declaration +   in <unistd.h> does not have the 'noreturn' attribute.  */  static _Noreturn void -handler (int sig) +handler (_GL_UNUSED int sig)  {    _exit (0);  } diff --git a/tests/test-random-mt.c b/tests/test-random-mt.c new file mode 100644 index 00000000..4e2f2d37 --- /dev/null +++ b/tests/test-random-mt.c @@ -0,0 +1,169 @@ +/* Multithread-safety test for random(). +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +#include <config.h> + +#if USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS + +/* Whether to help the scheduler through explicit yield(). +   Uncomment this to see if the operating system has a fair scheduler.  */ +#define EXPLICIT_YIELD 1 + +/* Number of simultaneous threads.  */ +#define THREAD_COUNT 4 + +/* Number of random() invocations operations performed in each thread. +   This value is chosen so that the unit test terminates quickly. +   To reliably determine whether a random() implementation is multithread-safe, +   set REPEAT_COUNT to 1000000 and run the test 100 times: +     $ for i in `seq 100`; do ./test-random-mt; done + */ +#define REPEAT_COUNT 100000 + +/* Specification.  */ +#include <stdlib.h> + +#include <stdio.h> + +#if EXPLICIT_YIELD +# include <sched.h> +#endif + +#include "glthread/thread.h" +#include "xalloc.h" + +#if EXPLICIT_YIELD +# define yield() sched_yield () +#else +# define yield() +#endif + +/* This test runs REPEAT_COUNT invocations of random() in each thread and stores +   the result, then compares the first REPEAT_COUNT among these +     THREAD_COUNT * REPEAT_COUNT +   random numbers against a precomputed sequence with the same seed.  */ + +static void * +random_invocator_thread (void *arg) +{ +  long *storage = (long *) arg; +  int repeat; + +  for (repeat = 0; repeat < REPEAT_COUNT; repeat++) +    { +      storage[repeat] = random (); +      yield (); +    } + +  return NULL; +} + +int +main () +{ +  unsigned int seed = 19891109; + +  /* First, get the expected sequence of random() results.  */ +  srandom (seed); +  long *expected = XNMALLOC (REPEAT_COUNT, long); +  { +    int repeat; +    for (repeat = 0; repeat < REPEAT_COUNT; repeat++) +      expected[repeat] = random (); +  } + +  /* Then, run REPEAT_COUNT invocations of random() each, in THREAD_COUNT +     separate threads.  */ +  gl_thread_t threads[THREAD_COUNT]; +  long *thread_results[THREAD_COUNT]; +  srandom (seed); +  { +    int i; +    for (i = 0; i < THREAD_COUNT; i++) +      thread_results[i] = XNMALLOC (REPEAT_COUNT, long); +    for (i = 0; i < THREAD_COUNT; i++) +      threads[i] = +        gl_thread_create (random_invocator_thread, thread_results[i]); +  } + +  /* Wait for the threads to terminate.  */ +  { +    int i; +    for (i = 0; i < THREAD_COUNT; i++) +      gl_thread_join (threads[i], NULL); +  } + +  /* Finally, determine whether the threads produced the same sequence of +     random() results.  */ +  { +    int expected_index; +    int result_index[THREAD_COUNT]; +    int i; + +    for (i = 0; i < THREAD_COUNT; i++) +      result_index[i] = 0; + +    for (expected_index = 0; expected_index < REPEAT_COUNT; expected_index++) +      { +        long expected_value = expected[expected_index]; + +        for (i = 0; i < THREAD_COUNT; i++) +          { +            if (thread_results[i][result_index[i]] == expected_value) +              { +                result_index[i]++; +                break; +              } +          } +        if (i == THREAD_COUNT) +          { +            if (expected_index == 0) +              { +                /* This occurs on platforms like OpenBSD, where srandom() has no +                   effect and random() always return non-deterministic values. +                   Mark the test as SKIP.  */ +                fprintf (stderr, "Skipping test: random() is non-deterministic.\n"); +                return 77; +              } +            else +              { +                fprintf (stderr, "Expected value #%d not found in multithreaded results.\n", +                         expected_index); +                return 1; +              } +          } +      } +  } + +  return 0; +} + +#else + +/* No multithreading available.  */ + +#include <stdio.h> + +int +main () +{ +  fputs ("Skipping test: multithreading not enabled\n", stderr); +  return 77; +} + +#endif diff --git a/tests/test-random.c b/tests/test-random.c new file mode 100644 index 00000000..4bfc1b84 --- /dev/null +++ b/tests/test-random.c @@ -0,0 +1,49 @@ +/* Test random. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (srandom, void, (unsigned int)); +SIGNATURE_CHECK (initstate, char *, (unsigned int, char *, size_t)); +SIGNATURE_CHECK (setstate, char *, (char *)); +SIGNATURE_CHECK (random, long, (void)); + +#include <time.h> + +#include "macros.h" + +int +main () +{ +  char buf[128]; +  unsigned int i; +  unsigned int n_big = 0; + +  initstate (time (NULL), buf, sizeof buf); +  for (i = 0; i < 1000; i++) +    { +      long r = random (); +      ASSERT (0 <= r); +      if (RAND_MAX / 2 < r) +        ++n_big; +    } + +  /* Fail if none of the numbers were larger than RAND_MAX / 2.  */ +  return !n_big; +} diff --git a/tests/test-random_r.c b/tests/test-random_r.c new file mode 100644 index 00000000..19f570d7 --- /dev/null +++ b/tests/test-random_r.c @@ -0,0 +1,68 @@ +/* Test random_r. +   Copyright (C) 2008-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +#include <stdlib.h> + +#include "signature.h" +SIGNATURE_CHECK (srandom_r, int, (unsigned int, struct random_data *)); +SIGNATURE_CHECK (initstate_r, int, (unsigned int, char *, size_t, +                                    struct random_data *)); +SIGNATURE_CHECK (setstate_r, int, (char *, struct random_data *)); +SIGNATURE_CHECK (random_r, int, (struct random_data *, int32_t *)); + +#include <time.h> + +#include "macros.h" + +/* Note: This test crashes on glibc/SPARC systems. +   Reported at <https://sourceware.org/bugzilla/show_bug.cgi?id=30584>.  */ + +static int +test_failed (int alignment) +{ +  struct random_data rand_state; +  char buf[128 + sizeof (int32_t)]; +  unsigned int i; +  unsigned int n_big = 0; + +  rand_state.state = NULL; +  if (initstate_r (time (NULL), buf + alignment, sizeof buf - alignment, +                   &rand_state)) +    return 1; +  for (i = 0; i < 1000; i++) +    { +      int32_t r; +      ASSERT (random_r (&rand_state, &r) == 0); +      ASSERT (0 <= r); +      if (RAND_MAX / 2 < r) +        ++n_big; +    } + +  /* Fail if none of the numbers were larger than RAND_MAX / 2.  */ +  return !n_big; +} + +int +main () +{ +  int alignment; +  for (alignment = 0; alignment < sizeof (int32_t); alignment++) +    if (test_failed (alignment)) +      return 1; +  return 0; +} diff --git a/tests/test-realloc-gnu.c b/tests/test-realloc-gnu.c index c3bca67a..54832ee8 100644 --- a/tests/test-realloc-gnu.c +++ b/tests/test-realloc-gnu.c @@ -1,5 +1,5 @@  /* Test of realloc function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@  #include "macros.h"  int -main (int argc, char **argv) +main (int argc, _GL_UNUSED char **argv)  {    /* Check that realloc (NULL, 0) is not a NULL pointer.  */    void *volatile p = realloc (NULL, 0); diff --git a/tests/test-reallocarray.c b/tests/test-reallocarray.c index b830361d..fb9171ce 100644 --- a/tests/test-reallocarray.c +++ b/tests/test-reallocarray.c @@ -1,5 +1,5 @@  /* Test of reallocarray function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-rwlock1.c b/tests/test-rwlock1.c index a9c0aa53..4275382c 100644 --- a/tests/test-rwlock1.c +++ b/tests/test-rwlock1.c @@ -1,5 +1,5 @@  /* Test of glthread_rwlock_rdlock function. -   Copyright (C) 2017-2022 Free Software Foundation, Inc. +   Copyright (C) 2017-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -73,7 +73,7 @@ static gl_thread_t timer;  static gl_lock_t baton;  static void * -timer_func (void *ignored) +timer_func (_GL_UNUSED void *ignored)  {    /* Step 13 (can be before or after step 12):       The timer thread takes the baton, then waits a moment to make sure @@ -87,7 +87,7 @@ timer_func (void *ignored)  }  static void * -reader2_func (void *ignored) +reader2_func (_GL_UNUSED void *ignored)  {    int err; @@ -113,7 +113,7 @@ reader2_func (void *ignored)  }  static void * -writer_func (void *ignored) +writer_func (_GL_UNUSED void *ignored)  {    /* Step 4: Take the baton, so that the second reader thread does not go ahead       too early.  */ diff --git a/tests/test-sched.c b/tests/test-sched.c index 1326815b..afefc7d5 100644 --- a/tests/test-sched.c +++ b/tests/test-sched.c @@ -1,5 +1,5 @@  /* Test of <sched.h> substitute. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-select-fd.c b/tests/test-select-fd.c index 90699867..b94addd5 100644 --- a/tests/test-select-fd.c +++ b/tests/test-select-fd.c @@ -1,5 +1,5 @@  /* Test of select() substitute, reading or writing from a given file descriptor. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-select-in.sh b/tests/test-select-in.sh index 68176d30..ad86ea25 100755 --- a/tests/test-select-in.sh +++ b/tests/test-select-in.sh @@ -5,7 +5,7 @@  # of /dev/null.  tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM  tmpfiles="$tmpfiles t-select-in.tmp" diff --git a/tests/test-select-out.sh b/tests/test-select-out.sh index dbeace50..cfa5e179 100755 --- a/tests/test-select-out.sh +++ b/tests/test-select-out.sh @@ -2,7 +2,7 @@  # Test select() on file descriptors opened for writing.  tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM  tmpfiles="$tmpfiles t-select-out.out t-select-out.tmp" diff --git a/tests/test-select-stdin.c b/tests/test-select-stdin.c index bf7e82b3..2f8f08aa 100644 --- a/tests/test-select-stdin.c +++ b/tests/test-select-stdin.c @@ -1,5 +1,5 @@  /* Test of select() substitute, reading from stdin. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-select.c b/tests/test-select.c index 7cca5517..a75c9244 100644 --- a/tests/test-select.c +++ b/tests/test-select.c @@ -1,5 +1,5 @@  /* Test of select() substitute. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -25,6 +25,7 @@  SIGNATURE_CHECK (select, int, (int, fd_set *, fd_set *, fd_set *,                                 struct timeval *)); +#define TEST_PORT 12346  #include "test-select.h"  int diff --git a/tests/test-select.h b/tests/test-select.h index 86a79ad8..4896b674 100644 --- a/tests/test-select.h +++ b/tests/test-select.h @@ -1,5 +1,5 @@  /* Test of select() substitute. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -37,8 +37,10 @@  # include <sys/wait.h>  #endif -#define TEST_PORT       12345 - +/* Tell GCC not to warn about the specific edge cases tested here.  */ +#if __GNUC__ >= 13 +# pragma GCC diagnostic ignored "-Wanalyzer-fd-use-without-check" +#endif  typedef int (*select_fn) (int, fd_set *, fd_set *, fd_set *, struct timeval *); diff --git a/tests/test-setenv.c b/tests/test-setenv.c index 2362c2e1..3b2850e4 100644 --- a/tests/test-setenv.c +++ b/tests/test-setenv.c @@ -1,5 +1,5 @@  /* Tests of setenv. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale1.c b/tests/test-setlocale1.c index 6e50e657..329991b3 100644 --- a/tests/test-setlocale1.c +++ b/tests/test-setlocale1.c @@ -1,5 +1,5 @@  /* Test of setting the current locale. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale2.c b/tests/test-setlocale2.c index 905c1939..b64b64ca 100644 --- a/tests/test-setlocale2.c +++ b/tests/test-setlocale2.c @@ -1,5 +1,5 @@  /* Test of setting the current locale. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale_null-mt-all.c b/tests/test-setlocale_null-mt-all.c index 2739f111..d565aa03 100644 --- a/tests/test-setlocale_null-mt-all.c +++ b/tests/test-setlocale_null-mt-all.c @@ -1,5 +1,5 @@  /* Multithread-safety test for setlocale_null_r (LC_ALL, ...). -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -166,7 +166,7 @@ Solaris 11.0         OK  Solaris 11.4         OK  Solaris OpenIndiana  OK  Haiku                crash < 1 sec -Cygwin               crash < 1 sec +Cygwin < 3.4.6       crash < 1 sec  mingw                OK  MSVC                 OK (assuming compiler option /MD !)  */ diff --git a/tests/test-setlocale_null-mt-one.c b/tests/test-setlocale_null-mt-one.c index 9320efd6..cbd057f9 100644 --- a/tests/test-setlocale_null-mt-one.c +++ b/tests/test-setlocale_null-mt-one.c @@ -1,5 +1,5 @@  /* Multithread-safety test for setlocale_null_r (LC_xxx, ...). -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-setlocale_null-unlocked.c b/tests/test-setlocale_null-unlocked.c new file mode 100644 index 00000000..d06dec60 --- /dev/null +++ b/tests/test-setlocale_null-unlocked.c @@ -0,0 +1,35 @@ +/* Test of setlocale_null_r_unlocked function. +   Copyright (C) 2019-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */ + +#include <config.h> + +/* Specification.  */ +#include "setlocale_null.h" + +#include <locale.h> + +/* Check that SETLOCALE_NULL_ALL_MAX is a constant expression.  */ +static char buf[SETLOCALE_NULL_ALL_MAX]; + +int +main () +{ +  /* Check that setlocale_null_r_unlocked() can be used without any +     libraries.  */ +  return setlocale_null_r_unlocked (LC_ALL, buf, sizeof (buf)) != 0; +} diff --git a/tests/test-setlocale_null.c b/tests/test-setlocale_null.c index 9b8a663a..72352348 100644 --- a/tests/test-setlocale_null.c +++ b/tests/test-setlocale_null.c @@ -1,5 +1,5 @@  /* Test of setlocale_null_r function. -   Copyright (C) 2019-2022 Free Software Foundation, Inc. +   Copyright (C) 2019-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -27,6 +27,6 @@ static char buf[SETLOCALE_NULL_ALL_MAX];  int  main ()  { -  /* Check that setlocale_null_r() can be used with $(LIB_SETLOCALE_NULL).  */ +  /* Check that setlocale_null_r() can be used with $(SETLOCALE_NULL_LIB).  */    return setlocale_null_r (LC_ALL, buf, sizeof (buf)) != 0;  } diff --git a/tests/test-setsockopt.c b/tests/test-setsockopt.c index 03376848..75493810 100644 --- a/tests/test-setsockopt.c +++ b/tests/test-setsockopt.c @@ -1,5 +1,5 @@  /* Test setsockopt() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-signal-h.c b/tests/test-signal-h.c index 06c97274..c4b32207 100644 --- a/tests/test-signal-h.c +++ b/tests/test-signal-h.c @@ -1,5 +1,5 @@  /* Test of <signal.h> substitute. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-signbit.c b/tests/test-signbit.c index d1305ce0..da5b7981 100644 --- a/tests/test-signbit.c +++ b/tests/test-signbit.c @@ -1,5 +1,5 @@  /* Test of signbit() substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -30,6 +30,8 @@  #include "minus-zero.h"  #include "infinity.h" +#include "signed-nan.h" +#include "signed-snan.h"  #include "macros.h"  float zerof = 0.0f; @@ -56,28 +58,12 @@ test_signbitf ()    ASSERT (!signbit (Infinityf ()));    ASSERT (signbit (- Infinityf ()));    /* Quiet NaN.  */ -  (void) signbit (zerof / zerof); -#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +  ASSERT (!signbit (positive_NaNf ())); +  ASSERT (signbit (negative_NaNf ())); +#if HAVE_SNANF    /* Signalling NaN.  */ -  { -    #define NWORDS \ -      ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -    typedef union { float value; unsigned int word[NWORDS]; } memory_float; -    memory_float m; -    m.value = zerof / zerof; -# if FLT_EXPBIT0_BIT > 0 -    m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); -# else -    m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    if (FLT_EXPBIT0_WORD < NWORDS / 2) -      m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; -    else -      m.word[0] |= (unsigned int) 1; -    (void) signbit (m.value); -    #undef NWORDS -  } +  ASSERT (!signbit (positive_SNaNf ())); +  ASSERT (signbit (negative_SNaNf ()));  #endif  } @@ -101,26 +87,12 @@ test_signbitd ()    ASSERT (!signbit (Infinityd ()));    ASSERT (signbit (- Infinityd ()));    /* Quiet NaN.  */ -  (void) signbit (zerod / zerod); -#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +  ASSERT (!signbit (positive_NaNd ())); +  ASSERT (signbit (negative_NaNd ())); +#if HAVE_SNAND    /* Signalling NaN.  */ -  { -    #define NWORDS \ -      ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -    typedef union { double value; unsigned int word[NWORDS]; } memory_double; -    memory_double m; -    m.value = zerod / zerod; -# if DBL_EXPBIT0_BIT > 0 -    m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); -# else -    m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      |= (unsigned int) 1 << DBL_EXPBIT0_BIT; -    (void) signbit (m.value); -    #undef NWORDS -  } +  ASSERT (!signbit (positive_SNaNd ())); +  ASSERT (signbit (negative_SNaNd ()));  #endif  } @@ -144,36 +116,12 @@ test_signbitl ()    ASSERT (!signbit (Infinityl ()));    ASSERT (signbit (- Infinityl ()));    /* Quiet NaN.  */ -  (void) signbit (zerol / zerol); -#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT +  ASSERT (!signbit (positive_NaNl ())); +  ASSERT (signbit (negative_NaNl ())); +#if HAVE_SNANL    /* Signalling NaN.  */ -  { -    #define NWORDS \ -      ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -    typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; - -#if defined __powerpc__ && LDBL_MANT_DIG == 106 -    /* This is PowerPC "double double", a pair of two doubles.  Inf and Nan are -       represented as the corresponding 64-bit IEEE values in the first double; -       the second is ignored.  Manipulate only the first double.  */ -    #undef NWORDS -    #define NWORDS \ -      ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) -#endif - -    memory_long_double m; -    m.value = zerol / zerol; -# if LDBL_EXPBIT0_BIT > 0 -    m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); -# else -    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); -# endif -    m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] -      |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; -    (void) signbit (m.value); -    #undef NWORDS -  } +  ASSERT (!signbit (positive_SNaNl ())); +  ASSERT (signbit (negative_SNaNl ()));  #endif  } diff --git a/tests/test-sigprocmask.c b/tests/test-sigprocmask.c index 4bab4c1c..c712d77d 100644 --- a/tests/test-sigprocmask.c +++ b/tests/test-sigprocmask.c @@ -1,5 +1,5 @@  /* Test of sigprocmask. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@  SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *));  #include <errno.h> +#include <inttypes.h>  #include <stdio.h>  #include <stdlib.h>  #include <unistd.h> @@ -35,24 +36,18 @@ SIGNATURE_CHECK (sigprocmask, int, (int, const sigset_t *, sigset_t *));  static volatile int sigint_occurred;  static void -sigint_handler (int sig) +sigint_handler (_GL_UNUSED int sig)  {    sigint_occurred++;  }  int -main (int argc, char *argv[]) +main ()  {    sigset_t set; -  pid_t pid = getpid (); +  intmax_t pid = getpid ();    char command[80]; -  if (sizeof (int) < sizeof pid && 0x7fffffff < pid) -    { -      fputs ("Skipping test: pid too large\n", stderr); -      return 77; -    } -    signal (SIGINT, sigint_handler);    sigemptyset (&set); @@ -66,7 +61,7 @@ main (int argc, char *argv[])    ASSERT (sigprocmask (SIG_BLOCK, &set, NULL) == 0);    /* Request a SIGINT signal from outside.  */ -  sprintf (command, "sh -c 'sleep 1; kill -%d %d' &", SIGINT, (int) pid); +  sprintf (command, "sh -c 'sleep 1; kill -INT %"PRIdMAX"' &", pid);    ASSERT (system (command) == 0);    /* Wait.  */ diff --git a/tests/test-sleep.c b/tests/test-sleep.c index 37af3525..b0896f2e 100644 --- a/tests/test-sleep.c +++ b/tests/test-sleep.c @@ -1,5 +1,5 @@  /* Test of sleep() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sockets.c b/tests/test-sockets.c index 714da6c0..5917e4dd 100644 --- a/tests/test-sockets.c +++ b/tests/test-sockets.c @@ -1,5 +1,5 @@  /* - * Copyright (C) 2008-2022 Free Software Foundation, Inc. + * Copyright (C) 2008-2024 Free Software Foundation, Inc.   * Written by Simon Josefsson.   *   * This program is free software: you can redistribute it and/or modify diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 7e961f2f..f28b6c46 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -1,5 +1,5 @@  /* Test of <stat-time.h>. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-stat.c b/tests/test-stat.c index c8a4b984..53ff77d9 100644 --- a/tests/test-stat.c +++ b/tests/test-stat.c @@ -1,5 +1,5 @@  /* Tests of stat. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-stat.h b/tests/test-stat.h index 82f88970..a76f38f9 100644 --- a/tests/test-stat.h +++ b/tests/test-stat.h @@ -1,5 +1,5 @@  /* Tests of stat. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -33,16 +33,16 @@ test_stat_func (int (*func) (char const *, struct stat *), bool print)    ASSERT (func (".", &st1) == 0);    ASSERT (func ("./", &st2) == 0);  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    ASSERT (func (cwd, &st2) == 0);  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    ASSERT (func ("/", &st1) == 0);    ASSERT (func ("///", &st2) == 0);  #if !(defined _WIN32 && !defined __CYGWIN__ && !_GL_WINDOWS_STAT_INODES) -  ASSERT (SAME_INODE (st1, st2)); +  ASSERT (psame_inode (&st1, &st2));  #endif    errno = 0; diff --git a/tests/test-stdbool.c b/tests/test-stdbool.c index 923a2cd3..9322b500 100644 --- a/tests/test-stdbool.c +++ b/tests/test-stdbool.c @@ -1,5 +1,5 @@  /* Test bool. -   Copyright (C) 2002-2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2002-2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -48,7 +48,7 @@     least, not for all compilers and compiler options.  */  #if ((HAVE_C_BOOL || defined __cplusplus \        || HAVE_STDBOOL_H || 3 <= __GNUC__ || 4 <= __clang_major__) \ -     && !defined _MSC_VER) +     && !(defined _MSC_VER || defined __SUNPRO_C))  # define WORKING_BOOL 1  #else  # define WORKING_BOOL 0 diff --git a/tests/test-stdckdint.c b/tests/test-stdckdint.c index c1952551..f0a576f6 100644 --- a/tests/test-stdckdint.c +++ b/tests/test-stdckdint.c @@ -1,5 +1,5 @@  /* Test <stdckdint.h>. -   Copyright 2022 Free Software Foundation, Inc. +   Copyright 2022-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-stddef.c b/tests/test-stddef.c index 470c7a6b..5bceb18a 100644 --- a/tests/test-stddef.c +++ b/tests/test-stddef.c @@ -1,5 +1,5 @@  /* Test of <stddef.h> substitute. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -19,14 +19,12 @@  #include <config.h>  #include <stddef.h> -#include <limits.h> -#include <stdalign.h>  /* Check that appropriate types are defined.  */  wchar_t a = 'c';  ptrdiff_t b = 1;  size_t c = 2; -max_align_t x; +max_align_t mat;  /* Check that NULL can be passed through varargs as a pointer type,     per POSIX 2008.  */ @@ -45,10 +43,6 @@ struct d  static_assert (sizeof (offsetof (struct d, e)) == sizeof (size_t));  static_assert (offsetof (struct d, f) == 1); -/* offsetof promotes to an unsigned integer if and only if sizes do -   not fit in int.  */ -static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); -  /* Check max_align_t's alignment.  */  static_assert (alignof (double) <= alignof (max_align_t));  static_assert (alignof (int) <= alignof (max_align_t)); @@ -69,6 +63,36 @@ static_assert (__alignof__ (wchar_t) <= __alignof__ (max_align_t));  static_assert (__alignof__ (struct d) <= __alignof__ (max_align_t));  #endif +int test_unreachable_optimization (int x); +_Noreturn void test_unreachable_noreturn (void); + +int +test_unreachable_optimization (int x) +{ +  /* Check that the compiler uses 'unreachable' for optimization. +     This function, when compiled with optimization, should have code +     equivalent to +       return x + 3; +     Use 'objdump --disassemble test-stddef.o' to verify this.  */ +  if (x < 4) +    unreachable (); +  return (x > 1 ? x + 3 : 2 * x + 10); +} + +_Noreturn void +test_unreachable_noreturn (void) +{ +  /* Check that the compiler's data-flow analysis recognizes 'unreachable ()'. +     This function should not elicit a warning.  */ +  unreachable (); +} + +#include <limits.h> /* INT_MAX */ + +/* offsetof promotes to an unsigned integer if and only if sizes do +   not fit in int.  */ +static_assert ((offsetof (struct d, e) < -1) == (INT_MAX < (size_t) -1)); +  int  main (void)  { diff --git a/tests/test-stdint.c b/tests/test-stdint.c index 7d71f687..47bedc89 100644 --- a/tests/test-stdint.c +++ b/tests/test-stdint.c @@ -1,5 +1,5 @@  /* Test of <stdint.h> substitute. -   Copyright (C) 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 2006-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -216,22 +216,24 @@ err or;  /* 7.18.1.4. Integer types capable of holding object pointers */  /* 7.18.2.4. Limits of integer types capable of holding object pointers */ +#ifdef INTPTR_MAX  intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX };  verify (sizeof (void *) <= sizeof (intptr_t)); +# ifndef __CHERI_PURE_CAPABILITY__  verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN);  verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); +# endif  verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0);  verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); +#endif +#ifdef UINTPTR_MAX  uintptr_t h[2] = { 17, UINTPTR_MAX };  verify (sizeof (void *) <= sizeof (uintptr_t)); +# ifndef __CHERI_PURE_CAPABILITY__  verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); +# endif  verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); - -#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX -/* ok */ -#else -err or;  #endif  /* 7.18.1.5. Greatest-width integer types */ @@ -408,8 +410,14 @@ verify_width (INT_FAST32_WIDTH, INT_FAST32_MIN, INT_FAST32_MAX);  verify_width (UINT_FAST32_WIDTH, 0, UINT_FAST32_MAX);  verify_width (INT_FAST64_WIDTH, INT_FAST64_MIN, INT_FAST64_MAX);  verify_width (UINT_FAST64_WIDTH, 0, UINT_FAST64_MAX); +#ifndef __CHERI_PURE_CAPABILITY__ +# ifdef INTPTR_WIDTH  verify_width (INTPTR_WIDTH, INTPTR_MIN, INTPTR_MAX); +# endif +# ifdef UINTPTR_WIDTH  verify_width (UINTPTR_WIDTH, 0, UINTPTR_MAX); +# endif +#endif  verify_width (INTMAX_WIDTH, INTMAX_MIN, INTMAX_MAX);  verify_width (UINTMAX_WIDTH, 0, UINTMAX_MAX);  verify_width (PTRDIFF_WIDTH, PTRDIFF_MIN, PTRDIFF_MAX); diff --git a/tests/test-stdio.c b/tests/test-stdio.c index 1908da35..49969520 100644 --- a/tests/test-stdio.c +++ b/tests/test-stdio.c @@ -1,5 +1,5 @@  /* Test of <stdio.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -23,6 +23,9 @@  /* Check that the various SEEK_* macros are defined.  */  int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; +/* Check that the _PRINTF_NAN_LEN_MAX macro is defined.  */ +int pnlm[] = { _PRINTF_NAN_LEN_MAX }; +  /* Check that NULL can be passed through varargs as a pointer type,     per POSIX 2008.  */  static_assert (sizeof NULL == sizeof (void *)); @@ -34,8 +37,57 @@ size_t t3;  ssize_t t4;  va_list t5; +#include <string.h> + +#include "signed-nan.h" +#include "signed-snan.h" +#include "macros.h" +  int  main (void)  { +  { +    double value1; +    char buf[64]; + +    value1 = positive_NaNd(); +    sprintf (buf, "%g", value1); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + +    value1 = negative_NaNd(); +    sprintf (buf, "%g", value1); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); +  } +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +  /* Check the value of _PRINTF_NAN_LEN_MAX.  */ +  { +    double value1; +    memory_double value2; +    char buf[64]; + +    value1 = positive_SNaNd(); +    sprintf (buf, "%g", value1); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + +    value1 = negative_SNaNd(); +    sprintf (buf, "%g", value1); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + +    value2.value = positive_NaNd (); +    #if DBL_EXPBIT0_BIT == 20 +    value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; +    #endif +    sprintf (buf, "%g", value2.value); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); + +    value2.value = negative_NaNd (); +    #if DBL_EXPBIT0_BIT == 20 +    value2.word[DBL_EXPBIT0_WORD] ^= 0x54321; +    #endif +    sprintf (buf, "%g", value2.value); +    ASSERT (strlen (buf) <= _PRINTF_NAN_LEN_MAX); +  } +#endif +    return 0;  } diff --git a/tests/test-stdlib.c b/tests/test-stdlib.c index 4fdafc99..cb6db802 100644 --- a/tests/test-stdlib.c +++ b/tests/test-stdlib.c @@ -1,5 +1,5 @@  /* Test of <stdlib.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -45,8 +45,19 @@ static_assert (sizeof NULL == sizeof (void *));  int  main (void)  { -  if (test_sys_wait_macros ()) +  /* POSIX:2018 says: +     "In the POSIX locale the value of MB_CUR_MAX shall be 1."  */ +  /* On Android ≥ 5.0, the default locale is the "C.UTF-8" locale, not the +     "C" locale.  Furthermore, when you attempt to set the "C" or "POSIX" +     locale via setlocale(), what you get is a "C" locale with UTF-8 encoding, +     that is, effectively the "C.UTF-8" locale.  */ +#ifndef __ANDROID__ +  if (MB_CUR_MAX != 1)      return 1; +#endif + +  if (test_sys_wait_macros ()) +    return 2;    return exitcode;  } diff --git a/tests/test-strerror.c b/tests/test-strerror.c index b9ec040a..3074b5cd 100644 --- a/tests/test-strerror.c +++ b/tests/test-strerror.c @@ -1,5 +1,5 @@  /* Test of strerror() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-strerror_r.c b/tests/test-strerror_r.c index 916ce3fc..4b4e27f4 100644 --- a/tests/test-strerror_r.c +++ b/tests/test-strerror_r.c @@ -1,5 +1,5 @@  /* Test of strerror_r() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software; you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-striconveh.c b/tests/test-striconveh.c index 15627f3d..71dfc3f7 100644 --- a/tests/test-striconveh.c +++ b/tests/test-striconveh.c @@ -1,5 +1,5 @@  /* Test of character set conversion with error handling. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -68,7 +68,7 @@ main ()    iconv_t cd_88592_to_utf8 = iconv_open ("UTF-8", "ISO-8859-2");    iconv_t cd_utf8_to_88592 = iconv_open ("ISO-8859-2", "UTF-8");    iconv_t cd_utf7_to_utf8 = iconv_open ("UTF-8", "UTF-7"); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    iconv_t cd_ascii_to_gb18030 = iconv_open ("GB18030", "ASCII");    iconv_t cd_utf8_to_gb18030 = iconv_open ("GB18030", "UTF-8");    iconv_t cd_88591_to_gb18030 = iconv_open ("GB18030", "ISO-8859-1"); @@ -82,7 +82,7 @@ main ()    iconveh_t cdeh_88591_to_utf8;    iconveh_t cdeh_utf8_to_88591;    iconveh_t cdeh_utf7_to_utf8; -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    iconveh_t cdeh_ascii_to_gb18030;    iconveh_t cdeh_88591_to_gb18030;    iconveh_t cdeh_utf7_to_gb18030; @@ -93,7 +93,7 @@ main ()    ASSERT (cd_utf8_to_88591 != (iconv_t)(-1));    ASSERT (cd_88592_to_utf8 != (iconv_t)(-1));    ASSERT (cd_utf8_to_88592 != (iconv_t)(-1)); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    ASSERT (cd_ascii_to_gb18030 != (iconv_t)(-1));    ASSERT (cd_utf8_to_gb18030 != (iconv_t)(-1));  # endif @@ -130,7 +130,7 @@ main ()    cdeh_utf7_to_utf8.cd1 = cd_utf7_to_utf8;    cdeh_utf7_to_utf8.cd2 = (iconv_t)(-1); -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    cdeh_ascii_to_gb18030.cd = cd_ascii_to_gb18030;    cdeh_ascii_to_gb18030.cd1 = cd_ascii_to_utf8;    cdeh_ascii_to_gb18030.cd2 = cd_utf8_to_gb18030; @@ -330,7 +330,7 @@ main ()          }      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    /* Test conversion from ISO-8859-1 to GB18030 with no errors.  */    for (h = 0; h < SIZEOF (handlers); h++)      { @@ -462,8 +462,10 @@ main ()          }      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) -  /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ).  */ +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) +  /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). +     Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by +     Andreas Schwab on 2012-02-06.  */    for (h = 0; h < SIZEOF (handlers); h++)      {        enum iconv_ilseq_handler handler = handlers[h]; @@ -646,7 +648,7 @@ main ()            free (result);          } -#  if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +#  if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)        /* Test conversion from UTF-7 to GB18030 with EINVAL.  */        for (h = 0; h < SIZEOF (handlers); h++)          { @@ -746,8 +748,10 @@ main ()              }          } -#   if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) -      /* Test conversion from UTF-7 to GB18030 with EILSEQ.  */ +#   if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) +      /* Test conversion from UTF-7 to GB18030 with EILSEQ. +         Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by +         Andreas Schwab on 2012-02-06.  */        for (h = 0; h < SIZEOF (handlers); h++)          {            enum iconv_ilseq_handler handler = handlers[h]; @@ -922,7 +926,7 @@ main ()        free (result);      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    /* Test conversion from ISO-8859-1 to GB18030 with no errors.  */    for (h = 0; h < SIZEOF (handlers); h++)      { @@ -985,8 +989,10 @@ main ()          }      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) -  /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ).  */ +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || ((__GLIBC__ + (__GLIBC_MINOR__ >= 16) > 2) && !defined __UCLIBC__) +  /* Test conversion from ASCII to GB18030 with invalid input (EILSEQ). +     Note: glibc's GB18030 converter was buggy in glibc-2.15; fixed by +     Andreas Schwab on 2012-02-06.  */    for (h = 0; h < SIZEOF (handlers); h++)      {        enum iconv_ilseq_handler handler = handlers[h]; @@ -1201,7 +1207,7 @@ main ()          }      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    /* Test conversion from ISO-8859-1 to GB18030 with no errors.  */    for (h = 0; h < SIZEOF (handlers); h++)      { @@ -1421,7 +1427,7 @@ main ()        free (result);      } -# if defined _LIBICONV_VERSION || (defined __GLIBC__ && !defined __UCLIBC__) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) || (defined __GLIBC__ && !defined __UCLIBC__)    /* Test conversion from ISO-8859-1 to GB18030 with no errors.  */    for (h = 0; h < SIZEOF (handlers); h++)      { diff --git a/tests/test-striconveha.c b/tests/test-striconveha.c index 6f6e8843..376f3cb6 100644 --- a/tests/test-striconveha.c +++ b/tests/test-striconveha.c @@ -1,5 +1,5 @@  /* Test of character set conversion with error handling and autodetection. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -308,7 +308,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-8.  */ @@ -405,7 +406,7 @@ main ()      }  # endif -# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 +# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || (_LIBICONV_VERSION >= 0x0105 && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__))    /* Test conversion from UTF-8 to ISO-8859-1 with transliteration.  */    for (h = 0; h < SIZEOF (handlers); h++)      { @@ -547,7 +548,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-8.  */ @@ -584,7 +586,7 @@ main ()      }  # endif -# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || _LIBICONV_VERSION >= 0x0105 +# if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) && !defined __UCLIBC__) || (_LIBICONV_VERSION >= 0x0105 && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__))    /* Test conversion from UTF-8 to ISO-8859-1 with transliteration.  */    for (h = 0; h < SIZEOF (handlers); h++)      { diff --git a/tests/test-string.c b/tests/test-string.c index 94688726..053c2e4a 100644 --- a/tests/test-string.c +++ b/tests/test-string.c @@ -1,5 +1,5 @@  /* Test of <string.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-strncat.c b/tests/test-strncat.c index c25890cb..c2050513 100644 --- a/tests/test-strncat.c +++ b/tests/test-strncat.c @@ -1,5 +1,5 @@  /* Test of strncat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-strstr.c b/tests/test-strstr.c index f59dda67..5822a2e6 100644 --- a/tests/test-strstr.c +++ b/tests/test-strstr.c @@ -1,5 +1,5 @@  /* - * Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. + * Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc.   * Written by Bruno Haible and Eric Blake   *   * This program is free software: you can redistribute it and/or modify @@ -275,6 +275,14 @@ main (int argc, char *argv[])      free (haystack);    } +  /* Test case from Yves Bastide. +     <https://www.openwall.com/lists/musl/2014/04/18/2>  */ +  { +    const char input[] = "playing play play play always"; +    const char *result = strstr (input, "play play play"); +    ASSERT (result == input + 8); +  } +    /* Test long needles.  */    {      size_t m = 1024; diff --git a/tests/test-symlink.c b/tests/test-symlink.c index 3dbd60a0..04c3e7a8 100644 --- a/tests/test-symlink.c +++ b/tests/test-symlink.c @@ -1,5 +1,5 @@  /* Tests of symlink. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-symlink.h b/tests/test-symlink.h index 0ce5ad4a..a63faed7 100644 --- a/tests/test-symlink.h +++ b/tests/test-symlink.h @@ -1,5 +1,5 @@  /* Tests of symlink. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_ioctl.c b/tests/test-sys_ioctl.c index 72c9d49a..4cecce18 100644 --- a/tests/test-sys_ioctl.c +++ b/tests/test-sys_ioctl.c @@ -1,5 +1,5 @@  /* Test of <sys/ioctl.h> substitute. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_select.c b/tests/test-sys_select.c index c895fe2b..db791de1 100644 --- a/tests/test-sys_select.c +++ b/tests/test-sys_select.c @@ -1,5 +1,5 @@  /* Test of <sys/select.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,6 +20,16 @@  #include <sys/select.h> +/* Check that the 'struct timeval' type is defined.  */ +struct timeval a; + +/* Check that a.tv_sec is wide enough to hold a time_t, ignoring +   signedness issues.  */ +typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; + +/* Check that sigset_t is defined.  */ +sigset_t t2; +  #include "signature.h"  /* The following may be macros without underlying functions, so only @@ -37,16 +47,6 @@ SIGNATURE_CHECK (FD_SET, int, (int, fd_set *));  SIGNATURE_CHECK (FD_ZERO, void, (fd_set *));  #endif -/* Check that the 'struct timeval' type is defined.  */ -struct timeval a; - -/* Check that a.tv_sec is wide enough to hold a time_t, ignoring -   signedness issues.  */ -typedef int verify_tv_sec_type[sizeof (time_t) <= sizeof (a.tv_sec) ? 1 : -1]; - -/* Check that sigset_t is defined.  */ -sigset_t t2; -  int  main (void)  { diff --git a/tests/test-sys_socket.c b/tests/test-sys_socket.c index f230d5b4..4e0f9ad4 100644 --- a/tests/test-sys_socket.c +++ b/tests/test-sys_socket.c @@ -1,5 +1,5 @@  /* Test of <sys/socket.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@  #include <sys/socket.h> -#include <errno.h> -  #if HAVE_SHUTDOWN  /* Check some integer constant expressions.  */  int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR }; @@ -40,6 +38,8 @@ struct iovec io;  /* Check that a minimal set of 'struct msghdr' is defined.  */  struct msghdr msg; +#include <errno.h> +  int  main (void)  { diff --git a/tests/test-sys_stat.c b/tests/test-sys_stat.c index b404d9f2..7c4ec1fe 100644 --- a/tests/test-sys_stat.c +++ b/tests/test-sys_stat.c @@ -1,5 +1,5 @@  /* Test of <sys/stat.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_time.c b/tests/test-sys_time.c index b952243e..5db5c2c0 100644 --- a/tests/test-sys_time.c +++ b/tests/test-sys_time.c @@ -1,5 +1,5 @@  /* Test of <sys/time.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_types.c b/tests/test-sys_types.c index 290bd0d5..f661a921 100644 --- a/tests/test-sys_types.c +++ b/tests/test-sys_types.c @@ -1,5 +1,5 @@  /* Test of <sys/types.h> substitute. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_uio.c b/tests/test-sys_uio.c index f4f7b7ac..d371471f 100644 --- a/tests/test-sys_uio.c +++ b/tests/test-sys_uio.c @@ -1,5 +1,5 @@  /* Test of <sys/uio.h> substitute. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-sys_wait.h b/tests/test-sys_wait.h index 9becf28e..5f2eec54 100644 --- a/tests/test-sys_wait.h +++ b/tests/test-sys_wait.h @@ -1,5 +1,5 @@  /* Test of macros shared between <sys/wait.h> and <stdlib.h>. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-thread_create.c b/tests/test-thread_create.c index 17e6942b..89dc1c9e 100644 --- a/tests/test-thread_create.c +++ b/tests/test-thread_create.c @@ -1,5 +1,5 @@  /* Test of gl_thread_create () macro. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@ static int dummy;  static volatile int work_done;  static void * -worker_thread_func (void *arg) +worker_thread_func (_GL_UNUSED void *arg)  {    work_done = 1;    return &dummy; diff --git a/tests/test-thread_self.c b/tests/test-thread_self.c index 30d46380..e494613b 100644 --- a/tests/test-thread_self.c +++ b/tests/test-thread_self.c @@ -1,5 +1,5 @@  /* Test of gl_thread_self () macro. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-time-h.c b/tests/test-time-h.c new file mode 100644 index 00000000..01f9fff8 --- /dev/null +++ b/tests/test-time-h.c @@ -0,0 +1,43 @@ +/* Test of <time.h> substitute. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */ + +#include <config.h> + +#include <time.h> + +/* Check that the types are all defined.  */ +struct timespec t1; +#if 0 +/* POSIX:2008 does not require pid_t in <time.h> unconditionally, and indeed +   it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw.  */ +pid_t t2; +#endif + +/* Check that NULL can be passed through varargs as a pointer type, +   per POSIX 2008.  */ +static_assert (sizeof NULL == sizeof (void *)); + +/* Check that TIME_UTC is defined and a positive integer.  */ +int t3 = TIME_UTC; +static_assert (TIME_UTC > 0); + +int +main (void) +{ +  return 0; +} diff --git a/tests/test-time.c b/tests/test-time.c index 6b69f3d5..752d4c0f 100644 --- a/tests/test-time.c +++ b/tests/test-time.c @@ -1,5 +1,5 @@ -/* Test of <time.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +/* Test of time() function. +   Copyright (C) 2023-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -14,30 +14,36 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ -/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */ +/* Written by Bruno Haible.  */  #include <config.h>  #include <time.h> -/* Check that the types are all defined.  */ -struct timespec t1; -#if 0 -/* POSIX:2008 does not require pid_t in <time.h> unconditionally, and indeed -   it's missing on Mac OS X 10.5, FreeBSD 6.4, OpenBSD 4.9, mingw.  */ -pid_t t2; -#endif +#include "signature.h" +SIGNATURE_CHECK (time, time_t, (time_t *)); -/* Check that NULL can be passed through varargs as a pointer type, -   per POSIX 2008.  */ -static_assert (sizeof NULL == sizeof (void *)); +#include <sys/time.h> -/* Check that TIME_UTC is defined and a positive integer.  */ -int t3 = TIME_UTC; -static_assert (TIME_UTC > 0); +#include "macros.h"  int  main (void)  { +  /* Check consistency of time() with gettimeofday().tv_sec.  */ +  struct timeval tv1; +  struct timeval tv2; +  time_t tt3; + +  /* Wait until gettimeofday() reports an increase in tv_sec.  */ +  ASSERT (gettimeofday (&tv1, NULL) == 0); +  do +    ASSERT (gettimeofday (&tv2, NULL) == 0); +  while (tv2.tv_sec == tv1.tv_sec); +  /* We are now at the beginning of a second.  Test whether time() reports +     the new second or the previous one.  */ +  tt3 = time (NULL); +  ASSERT (tt3 >= tv2.tv_sec); +    return 0;  } diff --git a/tests/test-uchar.c b/tests/test-uchar.c new file mode 100644 index 00000000..dfb368e0 --- /dev/null +++ b/tests/test-uchar.c @@ -0,0 +1,57 @@ +/* Test of <uchar.h> substitute. +   Copyright (C) 2019-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */ + +#include <config.h> + +#include <uchar.h> + +/* Check that the types are defined.  */ +mbstate_t a = { 0 }; +size_t b = 5; +char8_t c = 'x'; +char16_t d = 'y'; +char32_t e = 'z'; + +/* Check that char8_t, char16_t, and char32_t are unsigned types.  */ +static_assert ((char8_t)(-1) >= 0); +static_assert ((char16_t)(-1) >= 0); +#if !defined __HP_cc +static_assert ((char32_t)(-1) >= 0); +#endif + +/* Check that char8_t is at least 8 bits wide.  */ +static_assert ((char8_t)0xFF != (char8_t)0x7F); + +/* Check that char16_t is at least 16 bits wide.  */ +static_assert ((char16_t)0xFFFF != (char16_t)0x7FFF); + +/* Check that char32_t is at least 31 bits wide.  */ +static_assert ((char32_t)0x7FFFFFFF != (char32_t)0x3FFFFFFF); + +/* Check that _GL_SMALL_WCHAR_T is correctly defined.  */ +#if _GL_SMALL_WCHAR_T +static_assert (sizeof (wchar_t) < sizeof (char32_t)); +#else +static_assert (sizeof (wchar_t) == sizeof (char32_t)); +#endif + +int +main (void) +{ +  return 0; +} diff --git a/tests/test-unistd.c b/tests/test-unistd.c index a59af1e3..931d65e4 100644 --- a/tests/test-unistd.c +++ b/tests/test-unistd.c @@ -1,5 +1,5 @@  /* Test of <unistd.h> substitute. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-unsetenv.c b/tests/test-unsetenv.c index 61dbc81a..4e6a19ad 100644 --- a/tests/test-unsetenv.c +++ b/tests/test-unsetenv.c @@ -1,5 +1,5 @@  /* Tests of unsetenv. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -32,7 +32,8 @@ SIGNATURE_CHECK (unsetenv, int, (char const *));  int  main (void)  { -  char entry[] = "b=2"; +  /* Static to pacify gcc -Wanalyzer-putenv-of-auto-var.  */ +  static char entry[] = "b=2";    /* Test removal when multiple entries present.  */    ASSERT (putenv ((char *) "a=1") == 0); diff --git a/tests/test-usleep.c b/tests/test-usleep.c index e1133dd6..ba82a162 100644 --- a/tests/test-usleep.c +++ b/tests/test-usleep.c @@ -1,5 +1,5 @@  /* Test of usleep() function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-verify-try.c b/tests/test-verify-try.c index 2456133d..d16fb938 100644 --- a/tests/test-verify-try.c +++ b/tests/test-verify-try.c @@ -1,6 +1,6 @@  /* Test the "verify" module. -   Copyright (C) 2017-2022 Free Software Foundation, Inc. +   Copyright (C) 2017-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-verify.c b/tests/test-verify.c index 4ba89c03..1d8f43c7 100644 --- a/tests/test-verify.c +++ b/tests/test-verify.c @@ -1,6 +1,6 @@  /* Test the "verify" module. -   Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2005, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-wchar.c b/tests/test-wchar.c index af7c9486..663a5a4e 100644 --- a/tests/test-wchar.c +++ b/tests/test-wchar.c @@ -1,5 +1,5 @@  /* Test of <wchar.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-wcrtomb-w32-1.sh b/tests/test-wcrtomb-w32-1.sh deleted file mode 100755 index b01c5436..00000000 --- a/tests/test-wcrtomb-w32-1.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# Test a CP1252 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-wcrtomb-w32-2.sh b/tests/test-wcrtomb-w32-2.sh index 5481634d..b01c5436 100755 --- a/tests/test-wcrtomb-w32-2.sh +++ b/tests/test-wcrtomb-w32-2.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP1256 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 +# Test a CP1252 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France 1252 diff --git a/tests/test-wcrtomb-w32-3.sh b/tests/test-wcrtomb-w32-3.sh index f35879da..5481634d 100755 --- a/tests/test-wcrtomb-w32-3.sh +++ b/tests/test-wcrtomb-w32-3.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP932 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 +# Test a CP1256 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} "Arabic_Saudi Arabia" 1256 diff --git a/tests/test-wcrtomb-w32-4.sh b/tests/test-wcrtomb-w32-4.sh index 8eec6cbc..fb04e583 100755 --- a/tests/test-wcrtomb-w32-4.sh +++ b/tests/test-wcrtomb-w32-4.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP950 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 +# Test some UTF-8 locales. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 diff --git a/tests/test-wcrtomb-w32-5.sh b/tests/test-wcrtomb-w32-5.sh index fd47d6fa..f35879da 100755 --- a/tests/test-wcrtomb-w32-5.sh +++ b/tests/test-wcrtomb-w32-5.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a CP936 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 +# Test a CP932 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Japanese_Japan 932 diff --git a/tests/test-wcrtomb-w32-6.sh b/tests/test-wcrtomb-w32-6.sh index 802237d1..8eec6cbc 100755 --- a/tests/test-wcrtomb-w32-6.sh +++ b/tests/test-wcrtomb-w32-6.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test a GB18030 locale. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 +# Test a CP950 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_Taiwan 950 diff --git a/tests/test-wcrtomb-w32-7.sh b/tests/test-wcrtomb-w32-7.sh index fb04e583..fd47d6fa 100755 --- a/tests/test-wcrtomb-w32-7.sh +++ b/tests/test-wcrtomb-w32-7.sh @@ -1,4 +1,4 @@  #!/bin/sh -# Test some UTF-8 locales. -${CHECKER} ./test-wcrtomb-w32${EXEEXT} French_France Japanese_Japan Chinese_Taiwan Chinese_China 65001 +# Test a CP936 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 936 diff --git a/tests/test-wcrtomb-w32-8.sh b/tests/test-wcrtomb-w32-8.sh new file mode 100755 index 00000000..802237d1 --- /dev/null +++ b/tests/test-wcrtomb-w32-8.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Test a GB18030 locale. +${CHECKER} ./test-wcrtomb-w32${EXEEXT} Chinese_China 54936 diff --git a/tests/test-wcrtomb-w32.c b/tests/test-wcrtomb-w32.c index 67fa5a31..4be9a0df 100644 --- a/tests/test-wcrtomb-w32.c +++ b/tests/test-wcrtomb-w32.c @@ -1,5 +1,5 @@  /* Test of conversion of wide character to multibyte character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -184,6 +184,26 @@ test_one_locale (const char *name, int codepage)        }        return 0; +    case 65001: +      /* Locale encoding is CP65001 = UTF-8.  */ +      if (strcmp (locale_charset (), "UTF-8") != 0) +        return 77; +      { +        /* Convert "B\303\274\303\237er": "Büßer" */ +        memset (buf, 'x', 8); +        ret = wcrtomb (buf, 0x00FC, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\303\274", 2) == 0); +        ASSERT (buf[2] == 'x'); + +        memset (buf, 'x', 8); +        ret = wcrtomb (buf, 0x00DF, NULL); +        ASSERT (ret == 2); +        ASSERT (memcmp (buf, "\303\237", 2) == 0); +        ASSERT (buf[2] == 'x'); +      } +      return 0; +      case 932:        /* Locale encoding is CP932, similar to Shift_JIS.  */        { @@ -276,26 +296,6 @@ test_one_locale (const char *name, int codepage)        }        return 0; -    case 65001: -      /* Locale encoding is CP65001 = UTF-8.  */ -      if (strcmp (locale_charset (), "UTF-8") != 0) -        return 77; -      { -        /* Convert "B\303\274\303\237er": "Büßer" */ -        memset (buf, 'x', 8); -        ret = wcrtomb (buf, 0x00FC, NULL); -        ASSERT (ret == 2); -        ASSERT (memcmp (buf, "\303\274", 2) == 0); -        ASSERT (buf[2] == 'x'); - -        memset (buf, 'x', 8); -        ret = wcrtomb (buf, 0x00DF, NULL); -        ASSERT (ret == 2); -        ASSERT (memcmp (buf, "\303\237", 2) == 0); -        ASSERT (buf[2] == 'x'); -      } -      return 0; -      default:        return 1;      } diff --git a/tests/test-wcrtomb.c b/tests/test-wcrtomb.c index 71d0faf3..640d6d9c 100644 --- a/tests/test-wcrtomb.c +++ b/tests/test-wcrtomb.c @@ -1,5 +1,5 @@  /* Test of conversion of wide character to multibyte character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -117,6 +117,10 @@ main (int argc, char *argv[])      switch (argv[1][0])        {        case '1': +        /* C locale; tested above.  */ +        return 0; + +      case '2':          /* Locale encoding is ISO-8859-1 or ISO-8859-15.  */          {            const char input[] = "B\374\337er"; /* "Büßer" */ @@ -126,7 +130,7 @@ main (int argc, char *argv[])          }          return 0; -      case '2': +      case '3':          /* Locale encoding is UTF-8.  */          {            const char input[] = "B\303\274\303\237er"; /* "Büßer" */ @@ -136,7 +140,7 @@ main (int argc, char *argv[])          }          return 0; -      case '3': +      case '4':          /* Locale encoding is EUC-JP.  */          {            const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ @@ -147,7 +151,7 @@ main (int argc, char *argv[])          }          return 0; -      case '4': +      case '5':          /* Locale encoding is GB18030.  */          {            const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ @@ -156,10 +160,6 @@ main (int argc, char *argv[])            check_character (input + 3, 4);          }          return 0; - -      case '5': -        /* C locale; tested above.  */ -        return 0;        }    return 1; diff --git a/tests/test-wcrtomb.sh b/tests/test-wcrtomb.sh index 01d8d53b..b4604612 100755 --- a/tests/test-wcrtomb.sh +++ b/tests/test-wcrtomb.sh @@ -1,10 +1,14 @@  #!/bin/sh +# Test in the POSIX locale. +LC_ALL=C     ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 +LC_ALL=POSIX ${CHECKER} ./test-wcrtomb${EXEEXT} 1 || exit 1 +  # Test in an ISO-8859-1 or ISO-8859-15 locale.  : "${LOCALE_FR=fr_FR}"  if test $LOCALE_FR != none; then    LC_ALL=$LOCALE_FR \ -  ${CHECKER} ./test-wcrtomb${EXEEXT} 1 \ +  ${CHECKER} ./test-wcrtomb${EXEEXT} 2 \    || exit 1  fi @@ -12,7 +16,7 @@ fi  : "${LOCALE_FR_UTF8=fr_FR.UTF-8}"  if test $LOCALE_FR_UTF8 != none; then    LC_ALL=$LOCALE_FR_UTF8 \ -  ${CHECKER} ./test-wcrtomb${EXEEXT} 2 \ +  ${CHECKER} ./test-wcrtomb${EXEEXT} 3 \    || exit 1  fi @@ -20,7 +24,7 @@ fi  : "${LOCALE_JA=ja_JP}"  if test $LOCALE_JA != none; then    LC_ALL=$LOCALE_JA \ -  ${CHECKER} ./test-wcrtomb${EXEEXT} 3 \ +  ${CHECKER} ./test-wcrtomb${EXEEXT} 4 \    || exit 1  fi @@ -28,12 +32,8 @@ fi  : "${LOCALE_ZH_CN=zh_CN.GB18030}"  if test $LOCALE_ZH_CN != none; then    LC_ALL=$LOCALE_ZH_CN \ -  ${CHECKER} ./test-wcrtomb${EXEEXT} 4 \ +  ${CHECKER} ./test-wcrtomb${EXEEXT} 5 \    || exit 1  fi -# Test in the POSIX locale. -LC_ALL=C     ${CHECKER} ./test-wcrtomb${EXEEXT} 5 || exit 1 -LC_ALL=POSIX ${CHECKER} ./test-wcrtomb${EXEEXT} 5 || exit 1 -  exit 0 diff --git a/tests/test-wctype-h.c b/tests/test-wctype-h.c index 08da56b5..016fd8fc 100644 --- a/tests/test-wctype-h.c +++ b/tests/test-wctype-h.c @@ -1,5 +1,5 @@  /* Test of <wctype.h> substitute. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,8 +20,6 @@  #include <wctype.h> -#include "macros.h" -  /* Check that the type wint_t is defined.  */  wint_t a = 'x';  /* Check that WEOF is defined.  */ @@ -33,6 +31,8 @@ wctype_t p;  /* Check that the type wctrans_t is defined.  */  wctrans_t q; +#include "macros.h" +  int  main (void)  { @@ -62,6 +62,43 @@ main (void)    ASSERT (!iswupper (e));    ASSERT (!iswxdigit (e)); +  /* Sanity check for the iswprint function.  */ +  ASSERT (iswprint (L' ')); +  ASSERT (!iswprint (L'\t')); +  ASSERT (!iswprint (L'\n')); + +  /* Sanity check for the iswpunct function. +     These characters are usually expected to be punctuation or symbol +     characters.  */ +  ASSERT (iswpunct (L'!')); +  ASSERT (iswpunct (L'"')); +  ASSERT (iswpunct (L'#')); +  ASSERT (iswpunct (L'%')); +  ASSERT (iswpunct (L'&')); +  ASSERT (iswpunct (L'\'')); +  ASSERT (iswpunct (L'(')); +  ASSERT (iswpunct (L')')); +  ASSERT (iswpunct (L'*')); +  ASSERT (iswpunct (L',')); +  ASSERT (iswpunct (L'-')); +  ASSERT (iswpunct (L'.')); +  ASSERT (iswpunct (L'/')); +  ASSERT (iswpunct (L':')); +  ASSERT (iswpunct (L';')); +  ASSERT (iswpunct (L'?')); +  ASSERT (iswpunct (L'@')); +  ASSERT (iswpunct (L'[')); +  ASSERT (iswpunct (L'\\')); +  ASSERT (iswpunct (L']')); +  ASSERT (iswpunct (L'_')); +  ASSERT (iswpunct (L'{')); +  ASSERT (iswpunct (L'}')); +  ASSERT (!iswpunct (L'5')); +  ASSERT (!iswpunct (L'F')); +  ASSERT (!iswpunct (L' ')); +  ASSERT (!iswpunct (L'\t')); +  ASSERT (!iswpunct (L'\n')); +    /* Check that the tow* functions exist as functions or as macros.  */    (void) towlower (0);    (void) towupper (0); diff --git a/tests/test-wcwidth.c b/tests/test-wcwidth.c index 7e522eec..79556a24 100644 --- a/tests/test-wcwidth.c +++ b/tests/test-wcwidth.c @@ -1,5 +1,5 @@  /* Test of wcwidth() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/test-xalloc-die.c b/tests/test-xalloc-die.c index 78781306..d4565434 100644 --- a/tests/test-xalloc-die.c +++ b/tests/test-xalloc-die.c @@ -1,5 +1,5 @@  /* Test of xalloc_die() function. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@  #include "xalloc.h"  int -main (_GL_UNUSED int argc, char **argv) +main ()  {    xalloc_die ();    return 0; diff --git a/tests/test-xalloc-die.sh b/tests/test-xalloc-die.sh index 2a891110..dedc132c 100755 --- a/tests/test-xalloc-die.sh +++ b/tests/test-xalloc-die.sh @@ -1,6 +1,6 @@  #!/bin/sh  # Test suite for xalloc_die. -# Copyright (C) 2009-2022 Free Software Foundation, Inc. +# Copyright (C) 2009-2024 Free Software Foundation, Inc.  # This file is part of the GNUlib Library.  #  # This program is free software: you can redistribute it and/or modify diff --git a/tests/time.c b/tests/time.c new file mode 100644 index 00000000..573199c2 --- /dev/null +++ b/tests/time.c @@ -0,0 +1,41 @@ +/* Provide time() for systems for which it's broken. +   Copyright (C) 2023-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible.  */ + +#include <config.h> + +/* Specification.  */ +#include <time.h> + +#include <stdlib.h> +#include <sys/time.h> + +time_t +time (time_t *tp) +{ +  struct timeval tv; +  time_t tt; + +  if (gettimeofday (&tv, NULL) < 0) +    abort (); +  tt = tv.tv_sec; + +  if (tp) +    *tp = tt; + +  return tt; +} diff --git a/tests/time.in.h b/tests/time.in.h index 6aa67498..df99c8ab 100644 --- a/tests/time.in.h +++ b/tests/time.in.h @@ -1,6 +1,6 @@  /* A more-standard <time.h>. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,13 @@  #endif  @PRAGMA_COLUMNS@ +/* This file uses #include_next of a system file that defines time_t. +   For the 'year2038' module to work right, <config.h> needs to have been +   included before.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  /* Don't get in the way of glibc when it includes time.h merely to     declare a few standard symbols, rather than to declare all the     symbols.  (However, skip this for MinGW as it treats __need_time_t @@ -45,6 +52,12 @@  # @INCLUDE_NEXT@ @NEXT_TIME_H@ +/* This file uses _GL_ATTRIBUTE_DEPRECATED, GNULIB_POSIXCHECK, +   HAVE_RAW_DECL_*.  */ +# if !_GL_CONFIG_H_INCLUDED +#  error "Please include config.h first." +# endif +  /* NetBSD 5.0 mis-defines NULL.  */  # include <stddef.h> @@ -112,23 +125,79 @@ struct __time_t_must_be_integral {  /* Set *TS to the current time, and return BASE.     Upon failure, return 0.  */  # if @GNULIB_TIMESPEC_GET@ -#  if ! @HAVE_TIMESPEC_GET@ +#  if @REPLACE_TIMESPEC_GET@ +#   if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#    undef timespec_get +#    define timespec_get rpl_timespec_get +#   endif +_GL_FUNCDECL_RPL (timespec_get, int, (struct timespec *ts, int base) +                                     _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_get, int, (struct timespec *ts, int base)); +#  else +#   if !@HAVE_TIMESPEC_GET@  _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base)                                       _GL_ARG_NONNULL ((1))); -#  endif +#   endif  _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); +#  endif +#  if __GLIBC__ >= 2  _GL_CXXALIASWARN (timespec_get); +#  endif +# elif defined GNULIB_POSIXCHECK +#  undef timespec_get +#  if HAVE_RAW_DECL_TIMESPEC_GET +_GL_WARN_ON_USE (timespec_get, "timespec_get is unportable - " +                 "use gnulib module timespec_get for portability"); +#  endif  # endif  /* Set *TS to the current time resolution, and return BASE.     Upon failure, return 0.  */  # if @GNULIB_TIMESPEC_GETRES@ -#  if ! @HAVE_TIMESPEC_GETRES@ +#  if @REPLACE_TIMESPEC_GETRES@ +#   if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#    undef timespec_getres +#    define timespec_getres rpl_timespec_getres +#   endif +_GL_FUNCDECL_RPL (timespec_getres, int, (struct timespec *ts, int base) +                                        _GL_ARG_NONNULL ((1))); +_GL_CXXALIAS_RPL (timespec_getres, int, (struct timespec *ts, int base)); +#  else +#   if !@HAVE_TIMESPEC_GETRES@  _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base)                                          _GL_ARG_NONNULL ((1))); -#  endif +#   endif  _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); +#  endif  _GL_CXXALIASWARN (timespec_getres); +# elif defined GNULIB_POSIXCHECK +#  undef timespec_getres +#  if HAVE_RAW_DECL_TIMESPEC_GETRES +_GL_WARN_ON_USE (timespec_getres, "timespec_getres is unportable - " +                 "use gnulib module timespec_getres for portability"); +#  endif +# endif + +/* Return the number of seconds that have elapsed since the Epoch.  */ +# if @GNULIB_TIME@ +#  if @REPLACE_TIME@ +#   if !(defined __cplusplus && defined GNULIB_NAMESPACE) +#    define time rpl_time +#   endif +_GL_FUNCDECL_RPL (time, time_t, (time_t *__tp)); +_GL_CXXALIAS_RPL (time, time_t, (time_t *__tp)); +#  else +_GL_CXXALIAS_SYS (time, time_t, (time_t *__tp)); +#  endif +#  if __GLIBC__ >= 2 +_GL_CXXALIASWARN (time); +#  endif +# elif defined GNULIB_POSIXCHECK +#  undef time +#  if HAVE_RAW_DECL_TIME +_GL_WARN_ON_USE (time, "time has consistency problems - " +                 "use gnulib module time for portability"); +#  endif  # endif  /* Sleep for at least RQTP seconds unless interrupted,  If interrupted, @@ -154,6 +223,12 @@ _GL_CXXALIAS_SYS (nanosleep, int,                    (struct timespec const *__rqtp, struct timespec *__rmtp));  #  endif  _GL_CXXALIASWARN (nanosleep); +# elif defined GNULIB_POSIXCHECK +#  undef nanosleep +#  if HAVE_RAW_DECL_NANOSLEEP +_GL_WARN_ON_USE (nanosleep, "nanosleep is unportable - " +                 "use gnulib module nanosleep for portability"); +#  endif  # endif  /* Initialize time conversion information.  */ @@ -189,6 +264,12 @@ _GL_CXXALIAS_MDA (tzset, void, (void));  _GL_CXXALIAS_SYS (tzset, void, (void));  #  endif  _GL_CXXALIASWARN (tzset); +# elif defined GNULIB_POSIXCHECK +#  undef tzset +#  if HAVE_RAW_DECL_TZSET +_GL_WARN_ON_USE (tzset, "tzset has portability problems - " +                 "use gnulib module tzset for portability"); +#  endif  # endif  /* Return the 'time_t' representation of TP and normalize TP.  */ @@ -205,6 +286,12 @@ _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp));  #  if __GLIBC__ >= 2  _GL_CXXALIASWARN (mktime);  #  endif +# elif defined GNULIB_POSIXCHECK +#  undef mktime +#  if HAVE_RAW_DECL_MKTIME +_GL_WARN_ON_USE (mktime, "mktime has portability problems - " +                 "use gnulib module mktime for portability"); +#  endif  # endif  /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See @@ -255,6 +342,17 @@ _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer,  #  if @HAVE_DECL_LOCALTIME_R@  _GL_CXXALIASWARN (gmtime_r);  #  endif +# elif defined GNULIB_POSIXCHECK +#  undef localtime_r +#  if HAVE_RAW_DECL_LOCALTIME_R +_GL_WARN_ON_USE (localtime_r, "localtime_r is unportable - " +                 "use gnulib module time_r for portability"); +#  endif +#  undef gmtime_r +#  if HAVE_RAW_DECL_GMTIME_R +_GL_WARN_ON_USE (gmtime_r, "gmtime_r is unportable - " +                 "use gnulib module time_r for portability"); +#  endif  # endif  /* Convert TIMER to RESULT, assuming local time and UTC respectively.  See @@ -275,6 +373,12 @@ _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer));  #  if __GLIBC__ >= 2  _GL_CXXALIASWARN (localtime);  #  endif +# elif defined GNULIB_POSIXCHECK +#  undef localtime +#  if HAVE_RAW_DECL_LOCALTIME +_GL_WARN_ON_USE (localtime, "localtime has portability problems - " +                 "use gnulib module localtime for portability"); +#  endif  # endif  # if 0 || @REPLACE_GMTIME@ @@ -306,6 +410,12 @@ _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf,                                       char const *restrict __format,                                       struct tm *restrict __tm));  _GL_CXXALIASWARN (strptime); +# elif defined GNULIB_POSIXCHECK +#  undef strptime +#  if HAVE_RAW_DECL_STRPTIME +_GL_WARN_ON_USE (strptime, "strptime is unportable - " +                 "use gnulib module strptime for portability"); +#  endif  # endif  /* Convert *TP to a date and time string.  See @@ -315,6 +425,9 @@ _GL_CXXALIASWARN (strptime);  #   if !(defined __cplusplus && defined GNULIB_NAMESPACE)  #    define ctime rpl_ctime  #   endif +#   ifndef __cplusplus +_GL_ATTRIBUTE_DEPRECATED +#   endif  _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp)                                   _GL_ARG_NONNULL ((1)));  _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); @@ -324,6 +437,8 @@ _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp));  #  if __GLIBC__ >= 2  _GL_CXXALIASWARN (ctime);  #  endif +# elif defined GNULIB_POSIXCHECK +/* No need to warn about portability, as a more serious warning is below.  */  # endif  /* Convert *TP to a date and time string.  See @@ -348,6 +463,12 @@ _GL_CXXALIAS_SYS (strftime, size_t,  #  if __GLIBC__ >= 2  _GL_CXXALIASWARN (strftime);  #  endif +# elif defined GNULIB_POSIXCHECK +#  undef strftime +#  if HAVE_RAW_DECL_STRFTIME +_GL_WARN_ON_USE (strftime, "strftime has portability problems - " +                 "use gnulib module strftime-fixes for portability"); +#  endif  # endif  # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ @@ -422,7 +543,15 @@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1)));  #   endif  _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm));  #  endif +#  if __GLIBC__ >= 2  _GL_CXXALIASWARN (timegm); +#  endif +# elif defined GNULIB_POSIXCHECK +#  undef timegm +#  if HAVE_RAW_DECL_TIMEGM +_GL_WARN_ON_USE (timegm, "timegm is unportable - " +                 "use gnulib module timegm for portability"); +#  endif  # endif  /* Encourage applications to avoid unsafe functions that can overrun @@ -430,8 +559,10 @@ _GL_CXXALIASWARN (timegm);     applications should use strftime (or even sprintf) instead.  */  # if defined GNULIB_POSIXCHECK  #  undef asctime +#  if HAVE_RAW_DECL_ASCTIME  _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - "                   "better use strftime (or even sprintf) instead"); +#  endif  # endif  # if defined GNULIB_POSIXCHECK  #  undef asctime_r @@ -442,8 +573,10 @@ _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - "  # endif  # if defined GNULIB_POSIXCHECK  #  undef ctime +#  if HAVE_RAW_DECL_CTIME  _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - "                   "better use strftime (or even sprintf) instead"); +#  endif  # endif  # if defined GNULIB_POSIXCHECK  #  undef ctime_r diff --git a/tests/unicase/test-casecmp.h b/tests/unicase/test-casecmp.h index a2f90aca..a13599ea 100644 --- a/tests/unicase/test-casecmp.h +++ b/tests/unicase/test-casecmp.h @@ -1,5 +1,5 @@  /* Test of case and normalization insensitive comparison of Unicode strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-cased.c b/tests/unicase/test-cased.c index 477cd1c5..712ed14f 100644 --- a/tests/unicase/test-cased.c +++ b/tests/unicase/test-cased.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unicase/test-ignorable.c b/tests/unicase/test-ignorable.c index d4dc8498..b330dd70 100644 --- a/tests/unicase/test-ignorable.c +++ b/tests/unicase/test-ignorable.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unicase/test-is-cased.h b/tests/unicase/test-is-cased.h index db5c07ec..022be134 100644 --- a/tests/unicase/test-is-cased.h +++ b/tests/unicase/test-is-cased.h @@ -1,5 +1,5 @@  /* Test of test whether case matters for a Unicode string. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-casefolded.h b/tests/unicase/test-is-casefolded.h index 37019777..eb45404d 100644 --- a/tests/unicase/test-is-casefolded.h +++ b/tests/unicase/test-is-casefolded.h @@ -1,5 +1,5 @@  /* Test of test whether a Unicode string is already case-folded. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-lowercase.h b/tests/unicase/test-is-lowercase.h index df91eb1e..16853bdc 100644 --- a/tests/unicase/test-is-lowercase.h +++ b/tests/unicase/test-is-lowercase.h @@ -1,5 +1,5 @@  /* Test of test whether a Unicode string is entirely lower case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-titlecase.h b/tests/unicase/test-is-titlecase.h index c96a59d6..abbc3a5f 100644 --- a/tests/unicase/test-is-titlecase.h +++ b/tests/unicase/test-is-titlecase.h @@ -1,5 +1,5 @@  /* Test of test whether a Unicode string is entirely title case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-is-uppercase.h b/tests/unicase/test-is-uppercase.h index c58c545c..1dacd079 100644 --- a/tests/unicase/test-is-uppercase.h +++ b/tests/unicase/test-is-uppercase.h @@ -1,5 +1,5 @@  /* Test of test whether a Unicode string is entirely upper case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-locale-language.c b/tests/unicase/test-locale-language.c index dfc1b39b..ed6adeb8 100644 --- a/tests/unicase/test-locale-language.c +++ b/tests/unicase/test-locale-language.c @@ -1,5 +1,5 @@  /* Test of language code determination. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-mapping-part1.h b/tests/unicase/test-mapping-part1.h index 7bd02d13..562195a5 100644 --- a/tests/unicase/test-mapping-part1.h +++ b/tests/unicase/test-mapping-part1.h @@ -1,5 +1,5 @@  /* Test of single character case mapping functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-mapping-part2.h b/tests/unicase/test-mapping-part2.h index aafe1a56..ed489482 100644 --- a/tests/unicase/test-mapping-part2.h +++ b/tests/unicase/test-mapping-part2.h @@ -1,5 +1,5 @@  /* Test of single character case mapping functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-predicate-part1.h b/tests/unicase/test-predicate-part1.h index c0b9131b..a63f06cb 100644 --- a/tests/unicase/test-predicate-part1.h +++ b/tests/unicase/test-predicate-part1.h @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-predicate-part2.h b/tests/unicase/test-predicate-part2.h index a3e2c0ff..0b58545b 100644 --- a/tests/unicase/test-predicate-part2.h +++ b/tests/unicase/test-predicate-part2.h @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casecmp.c b/tests/unicase/test-u16-casecmp.c index 6bb4cbf6..a85abbbd 100644 --- a/tests/unicase/test-u16-casecmp.c +++ b/tests/unicase/test-u16-casecmp.c @@ -1,5 +1,5 @@  /* Test of case and normalization insensitive comparison of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casecoll.c b/tests/unicase/test-u16-casecoll.c index 2eebdff6..ade96bfb 100644 --- a/tests/unicase/test-u16-casecoll.c +++ b/tests/unicase/test-u16-casecoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, case and normalization insensitive comparison of     UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-casefold.c b/tests/unicase/test-u16-casefold.c index cb61f992..23e94eff 100644 --- a/tests/unicase/test-u16-casefold.c +++ b/tests/unicase/test-u16-casefold.c @@ -1,5 +1,5 @@  /* Test of casefolding mapping for UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-cased.c b/tests/unicase/test-u16-is-cased.c index 9ce5ff3a..dafba78e 100644 --- a/tests/unicase/test-u16-is-cased.c +++ b/tests/unicase/test-u16-is-cased.c @@ -1,5 +1,5 @@  /* Test of test whether case matters for an UTF-16 string. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-casefolded.c b/tests/unicase/test-u16-is-casefolded.c index 33a0724d..6072535a 100644 --- a/tests/unicase/test-u16-is-casefolded.c +++ b/tests/unicase/test-u16-is-casefolded.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-16 string is already case-folded. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-lowercase.c b/tests/unicase/test-u16-is-lowercase.c index e9726e95..5b4e095e 100644 --- a/tests/unicase/test-u16-is-lowercase.c +++ b/tests/unicase/test-u16-is-lowercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-16 string is entirely lower case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-titlecase.c b/tests/unicase/test-u16-is-titlecase.c index 27a4feef..4e60c4ac 100644 --- a/tests/unicase/test-u16-is-titlecase.c +++ b/tests/unicase/test-u16-is-titlecase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-16 string is entirely title case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-is-uppercase.c b/tests/unicase/test-u16-is-uppercase.c index 2c5be2d8..354c9052 100644 --- a/tests/unicase/test-u16-is-uppercase.c +++ b/tests/unicase/test-u16-is-uppercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-16 string is entirely upper case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-tolower.c b/tests/unicase/test-u16-tolower.c index 7c20502d..86ed522f 100644 --- a/tests/unicase/test-u16-tolower.c +++ b/tests/unicase/test-u16-tolower.c @@ -1,5 +1,5 @@  /* Test of lowercase mapping for UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-totitle.c b/tests/unicase/test-u16-totitle.c index 98b489df..be653df1 100644 --- a/tests/unicase/test-u16-totitle.c +++ b/tests/unicase/test-u16-totitle.c @@ -1,5 +1,5 @@  /* Test of titlecase mapping for UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u16-toupper.c b/tests/unicase/test-u16-toupper.c index e4e6ae3c..5bbc10ac 100644 --- a/tests/unicase/test-u16-toupper.c +++ b/tests/unicase/test-u16-toupper.c @@ -1,5 +1,5 @@  /* Test of uppercase mapping for UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casecmp.c b/tests/unicase/test-u32-casecmp.c index 0080ac01..aca59a88 100644 --- a/tests/unicase/test-u32-casecmp.c +++ b/tests/unicase/test-u32-casecmp.c @@ -1,5 +1,5 @@  /* Test of case and normalization insensitive comparison of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casecoll.c b/tests/unicase/test-u32-casecoll.c index 62746c8a..7ad01630 100644 --- a/tests/unicase/test-u32-casecoll.c +++ b/tests/unicase/test-u32-casecoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, case and normalization insensitive comparison of     UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-casefold.c b/tests/unicase/test-u32-casefold.c index 26f8960d..c31245e1 100644 --- a/tests/unicase/test-u32-casefold.c +++ b/tests/unicase/test-u32-casefold.c @@ -1,5 +1,5 @@  /* Test of casefolding mapping for UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-cased.c b/tests/unicase/test-u32-is-cased.c index a92c2671..5f663dd8 100644 --- a/tests/unicase/test-u32-is-cased.c +++ b/tests/unicase/test-u32-is-cased.c @@ -1,5 +1,5 @@  /* Test of test whether case matters for an UTF-32 string. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-casefolded.c b/tests/unicase/test-u32-is-casefolded.c index 701f4533..1798f310 100644 --- a/tests/unicase/test-u32-is-casefolded.c +++ b/tests/unicase/test-u32-is-casefolded.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-32 string is already case-folded. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-lowercase.c b/tests/unicase/test-u32-is-lowercase.c index 2f7c4c20..3c1bf91e 100644 --- a/tests/unicase/test-u32-is-lowercase.c +++ b/tests/unicase/test-u32-is-lowercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-32 string is entirely lower case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-titlecase.c b/tests/unicase/test-u32-is-titlecase.c index a860867c..3aedb6c8 100644 --- a/tests/unicase/test-u32-is-titlecase.c +++ b/tests/unicase/test-u32-is-titlecase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-32 string is entirely title case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-is-uppercase.c b/tests/unicase/test-u32-is-uppercase.c index 0cd34b8d..cf500991 100644 --- a/tests/unicase/test-u32-is-uppercase.c +++ b/tests/unicase/test-u32-is-uppercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-32 string is entirely upper case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-tolower.c b/tests/unicase/test-u32-tolower.c index 5044bc08..47c9e1ee 100644 --- a/tests/unicase/test-u32-tolower.c +++ b/tests/unicase/test-u32-tolower.c @@ -1,5 +1,5 @@  /* Test of lowercase mapping for UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-totitle.c b/tests/unicase/test-u32-totitle.c index 08d2e61a..948f48db 100644 --- a/tests/unicase/test-u32-totitle.c +++ b/tests/unicase/test-u32-totitle.c @@ -1,5 +1,5 @@  /* Test of titlecase mapping for UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u32-toupper.c b/tests/unicase/test-u32-toupper.c index ddc7ca2c..098c56ce 100644 --- a/tests/unicase/test-u32-toupper.c +++ b/tests/unicase/test-u32-toupper.c @@ -1,5 +1,5 @@  /* Test of uppercase mapping for UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casecmp.c b/tests/unicase/test-u8-casecmp.c index d76b8758..904c9284 100644 --- a/tests/unicase/test-u8-casecmp.c +++ b/tests/unicase/test-u8-casecmp.c @@ -1,5 +1,5 @@  /* Test of case and normalization insensitive comparison of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casecoll.c b/tests/unicase/test-u8-casecoll.c index e8a19690..a3e6d95f 100644 --- a/tests/unicase/test-u8-casecoll.c +++ b/tests/unicase/test-u8-casecoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, case and normalization insensitive comparison of     UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-casefold.c b/tests/unicase/test-u8-casefold.c index 5fd42844..d1fc8967 100644 --- a/tests/unicase/test-u8-casefold.c +++ b/tests/unicase/test-u8-casefold.c @@ -1,5 +1,5 @@  /* Test of casefolding mapping for UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-cased.c b/tests/unicase/test-u8-is-cased.c index dc523836..b8f0b2bf 100644 --- a/tests/unicase/test-u8-is-cased.c +++ b/tests/unicase/test-u8-is-cased.c @@ -1,5 +1,5 @@  /* Test of test whether case matters for an UTF-8 string. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-casefolded.c b/tests/unicase/test-u8-is-casefolded.c index 6adf2888..a7cc49be 100644 --- a/tests/unicase/test-u8-is-casefolded.c +++ b/tests/unicase/test-u8-is-casefolded.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-8 string is already case-folded. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-lowercase.c b/tests/unicase/test-u8-is-lowercase.c index 82a4c8d8..c78b9df0 100644 --- a/tests/unicase/test-u8-is-lowercase.c +++ b/tests/unicase/test-u8-is-lowercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-8 string is entirely lower case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-titlecase.c b/tests/unicase/test-u8-is-titlecase.c index e91b878a..5416ab59 100644 --- a/tests/unicase/test-u8-is-titlecase.c +++ b/tests/unicase/test-u8-is-titlecase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-8 string is entirely title case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-is-uppercase.c b/tests/unicase/test-u8-is-uppercase.c index 33294fa9..279f30cc 100644 --- a/tests/unicase/test-u8-is-uppercase.c +++ b/tests/unicase/test-u8-is-uppercase.c @@ -1,5 +1,5 @@  /* Test of test whether an UTF-8 string is entirely upper case. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-tolower.c b/tests/unicase/test-u8-tolower.c index 73d9fca8..1e33148e 100644 --- a/tests/unicase/test-u8-tolower.c +++ b/tests/unicase/test-u8-tolower.c @@ -1,5 +1,5 @@  /* Test of lowercase mapping for UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-totitle.c b/tests/unicase/test-u8-totitle.c index 3a6cc10e..676456e0 100644 --- a/tests/unicase/test-u8-totitle.c +++ b/tests/unicase/test-u8-totitle.c @@ -1,5 +1,5 @@  /* Test of titlecase mapping for UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-u8-toupper.c b/tests/unicase/test-u8-toupper.c index ce0d3529..a954dedd 100644 --- a/tests/unicase/test-u8-toupper.c +++ b/tests/unicase/test-u8-toupper.c @@ -1,5 +1,5 @@  /* Test of uppercase mapping for UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-uc_tolower.c b/tests/unicase/test-uc_tolower.c index 83942037..885476d0 100644 --- a/tests/unicase/test-uc_tolower.c +++ b/tests/unicase/test-uc_tolower.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character mapping functions. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */  #include "test-mapping-part1.h" diff --git a/tests/unicase/test-uc_totitle.c b/tests/unicase/test-uc_totitle.c index 03145bce..b9422ba0 100644 --- a/tests/unicase/test-uc_totitle.c +++ b/tests/unicase/test-uc_totitle.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character mapping functions. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */  #include "test-mapping-part1.h" diff --git a/tests/unicase/test-uc_toupper.c b/tests/unicase/test-uc_toupper.c index c5594053..2aff0758 100644 --- a/tests/unicase/test-uc_toupper.c +++ b/tests/unicase/test-uc_toupper.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character mapping functions. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -15,7 +15,7 @@     You should have received a copy of the GNU General Public License     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */  #include "test-mapping-part1.h" diff --git a/tests/unicase/test-ulc-casecmp.c b/tests/unicase/test-ulc-casecmp.c index 81534f04..4aaf9830 100644 --- a/tests/unicase/test-ulc-casecmp.c +++ b/tests/unicase/test-ulc-casecmp.c @@ -1,5 +1,5 @@  /* Test of case and normalization insensitive comparison of strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unicase/test-ulc-casecoll.c b/tests/unicase/test-ulc-casecoll.c index 07bc2dc4..fa720e04 100644 --- a/tests/unicase/test-ulc-casecoll.c +++ b/tests/unicase/test-ulc-casecoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, case and normalization insensitive comparison of     strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u16-conv-from-enc.c b/tests/uniconv/test-u16-conv-from-enc.c index 82f0091c..48c7fd77 100644 --- a/tests/uniconv/test-u16-conv-from-enc.c +++ b/tests/uniconv/test-u16-conv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-16 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -117,7 +117,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-16.  */ diff --git a/tests/uniconv/test-u16-conv-to-enc.c b/tests/uniconv/test-u16-conv-to-enc.c index b423e10c..eeb51c3d 100644 --- a/tests/uniconv/test-u16-conv-to-enc.c +++ b/tests/uniconv/test-u16-conv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-16 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u16-strconv-from-enc.c b/tests/uniconv/test-u16-strconv-from-enc.c index e34399ad..b1cb1a88 100644 --- a/tests/uniconv/test-u16-strconv-from-enc.c +++ b/tests/uniconv/test-u16-strconv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-16 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -71,7 +71,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-16.  */ diff --git a/tests/uniconv/test-u16-strconv-to-enc.c b/tests/uniconv/test-u16-strconv-to-enc.c index bfdc6623..7d3f596e 100644 --- a/tests/uniconv/test-u16-strconv-to-enc.c +++ b/tests/uniconv/test-u16-strconv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-16 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u32-conv-from-enc.c b/tests/uniconv/test-u32-conv-from-enc.c index 723a56b3..994bfb49 100644 --- a/tests/uniconv/test-u32-conv-from-enc.c +++ b/tests/uniconv/test-u32-conv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-32 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -117,7 +117,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-16.  */ diff --git a/tests/uniconv/test-u32-conv-to-enc.c b/tests/uniconv/test-u32-conv-to-enc.c index ca51aa08..5ce1d610 100644 --- a/tests/uniconv/test-u32-conv-to-enc.c +++ b/tests/uniconv/test-u32-conv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-32 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u32-strconv-from-enc.c b/tests/uniconv/test-u32-strconv-from-enc.c index bdd88347..320bc185 100644 --- a/tests/uniconv/test-u32-strconv-from-enc.c +++ b/tests/uniconv/test-u32-strconv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-32 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -71,7 +71,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-16.  */ diff --git a/tests/uniconv/test-u32-strconv-to-enc.c b/tests/uniconv/test-u32-strconv-to-enc.c index bca05f86..8ce00786 100644 --- a/tests/uniconv/test-u32-strconv-to-enc.c +++ b/tests/uniconv/test-u32-strconv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-32 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u8-conv-from-enc.c b/tests/uniconv/test-u8-conv-from-enc.c index 80a136f6..641200f2 100644 --- a/tests/uniconv/test-u8-conv-from-enc.c +++ b/tests/uniconv/test-u8-conv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-8 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -112,7 +112,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-8.  */ diff --git a/tests/uniconv/test-u8-conv-to-enc.c b/tests/uniconv/test-u8-conv-to-enc.c index 97dc82a6..cd898033 100644 --- a/tests/uniconv/test-u8-conv-to-enc.c +++ b/tests/uniconv/test-u8-conv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-8 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniconv/test-u8-strconv-from-enc.c b/tests/uniconv/test-u8-strconv-from-enc.c index 1ea836ac..61e3230b 100644 --- a/tests/uniconv/test-u8-strconv-from-enc.c +++ b/tests/uniconv/test-u8-strconv-from-enc.c @@ -1,5 +1,5 @@  /* Test of conversion to UTF-8 from legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -62,7 +62,8 @@ main ()      }    /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2.  */ -# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) +# if (defined _LIBICONV_VERSION && !(_LIBICONV_VERSION == 0x10b && defined __APPLE__)) \ +     || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun)    if (iconv_supports_encoding ("ISO-2022-JP-2"))      {        /* Test conversions from autodetect_jp to UTF-8.  */ diff --git a/tests/uniconv/test-u8-strconv-to-enc.c b/tests/uniconv/test-u8-strconv-to-enc.c index e02f2056..68639f9e 100644 --- a/tests/uniconv/test-u8-strconv-to-enc.c +++ b/tests/uniconv/test-u8-strconv-to-enc.c @@ -1,5 +1,5 @@  /* Test of conversion from UTF-8 to legacy encodings. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_byname.c b/tests/unictype/test-bidi_byname.c index 78ca589c..96d9f173 100644 --- a/tests/unictype/test-bidi_byname.c +++ b/tests/unictype/test-bidi_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_longname.c b/tests/unictype/test-bidi_longname.c index a36b81a2..fcd7255f 100644 --- a/tests/unictype/test-bidi_longname.c +++ b/tests/unictype/test-bidi_longname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_name.c b/tests/unictype/test-bidi_name.c index c2dd49eb..4c4024d2 100644 --- a/tests/unictype/test-bidi_name.c +++ b/tests/unictype/test-bidi_name.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_of.c b/tests/unictype/test-bidi_of.c index 786f6e9c..bc158324 100644 --- a/tests/unictype/test-bidi_of.c +++ b/tests/unictype/test-bidi_of.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-bidi_test.c b/tests/unictype/test-bidi_test.c index 34349a88..fd3f2930 100644 --- a/tests/unictype/test-bidi_test.c +++ b/tests/unictype/test-bidi_test.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_list.c b/tests/unictype/test-block_list.c index 623f62e8..267d5456 100644 --- a/tests/unictype/test-block_list.c +++ b/tests/unictype/test-block_list.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_of.c b/tests/unictype/test-block_of.c index aea21e65..60345188 100644 --- a/tests/unictype/test-block_of.c +++ b/tests/unictype/test-block_of.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-block_test.c b/tests/unictype/test-block_test.c index 974bba89..be7e4417 100644 --- a/tests/unictype/test-block_test.c +++ b/tests/unictype/test-block_test.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_C.c b/tests/unictype/test-categ_C.c index 09277e39..e6a0903b 100644 --- a/tests/unictype/test-categ_C.c +++ b/tests/unictype/test-categ_C.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -294,13 +294,12 @@      { 0x2E9A, 0x2E9A },      { 0x2EF4, 0x2EFF },      { 0x2FD6, 0x2FEF }, -    { 0x2FFC, 0x2FFF },      { 0x3040, 0x3040 },      { 0x3097, 0x3098 },      { 0x3100, 0x3104 },      { 0x3130, 0x3130 },      { 0x318F, 0x318F }, -    { 0x31E4, 0x31EF }, +    { 0x31E4, 0x31EE },      { 0x321F, 0x321F },      { 0xA48D, 0xA48F },      { 0xA4C7, 0xA4CF }, @@ -724,7 +723,8 @@      { 0x2B73A, 0x2B73F },      { 0x2B81E, 0x2B81F },      { 0x2CEA2, 0x2CEAF }, -    { 0x2EBE1, 0x2F7FF }, +    { 0x2EBE1, 0x2EBEF }, +    { 0x2EE5E, 0x2F7FF },      { 0x2FA1E, 0x2FFFF },      { 0x3134B, 0x3134F },      { 0x323B0, 0xE00FF }, diff --git a/tests/unictype/test-categ_Cc.c b/tests/unictype/test-categ_Cc.c index cfdbb48d..3051fa97 100644 --- a/tests/unictype/test-categ_Cc.c +++ b/tests/unictype/test-categ_Cc.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cf.c b/tests/unictype/test-categ_Cf.c index e026f091..c1ab10f2 100644 --- a/tests/unictype/test-categ_Cf.c +++ b/tests/unictype/test-categ_Cf.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cn.c b/tests/unictype/test-categ_Cn.c index b173d392..c12c0816 100644 --- a/tests/unictype/test-categ_Cn.c +++ b/tests/unictype/test-categ_Cn.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -286,13 +286,12 @@      { 0x2E9A, 0x2E9A },      { 0x2EF4, 0x2EFF },      { 0x2FD6, 0x2FEF }, -    { 0x2FFC, 0x2FFF },      { 0x3040, 0x3040 },      { 0x3097, 0x3098 },      { 0x3100, 0x3104 },      { 0x3130, 0x3130 },      { 0x318F, 0x318F }, -    { 0x31E4, 0x31EF }, +    { 0x31E4, 0x31EE },      { 0x321F, 0x321F },      { 0xA48D, 0xA48F },      { 0xA4C7, 0xA4CF }, @@ -715,7 +714,8 @@      { 0x2B73A, 0x2B73F },      { 0x2B81E, 0x2B81F },      { 0x2CEA2, 0x2CEAF }, -    { 0x2EBE1, 0x2F7FF }, +    { 0x2EBE1, 0x2EBEF }, +    { 0x2EE5E, 0x2F7FF },      { 0x2FA1E, 0x2FFFF },      { 0x3134B, 0x3134F },      { 0x323B0, 0xE0000 }, diff --git a/tests/unictype/test-categ_Co.c b/tests/unictype/test-categ_Co.c index 0878bab5..ab327d77 100644 --- a/tests/unictype/test-categ_Co.c +++ b/tests/unictype/test-categ_Co.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Cs.c b/tests/unictype/test-categ_Cs.c index 16d90395..76f7dc12 100644 --- a/tests/unictype/test-categ_Cs.c +++ b/tests/unictype/test-categ_Cs.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_L.c b/tests/unictype/test-categ_L.c index a72b6f99..2e9b7be4 100644 --- a/tests/unictype/test-categ_L.c +++ b/tests/unictype/test-categ_L.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -673,6 +673,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-categ_LC.c b/tests/unictype/test-categ_LC.c index 166df6c8..16e61763 100644 --- a/tests/unictype/test-categ_LC.c +++ b/tests/unictype/test-categ_LC.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Ll.c b/tests/unictype/test-categ_Ll.c index 7feba488..c3d12127 100644 --- a/tests/unictype/test-categ_Ll.c +++ b/tests/unictype/test-categ_Ll.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lm.c b/tests/unictype/test-categ_Lm.c index c7a5b595..06464574 100644 --- a/tests/unictype/test-categ_Lm.c +++ b/tests/unictype/test-categ_Lm.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lo.c b/tests/unictype/test-categ_Lo.c index 37009f81..e778c7c6 100644 --- a/tests/unictype/test-categ_Lo.c +++ b/tests/unictype/test-categ_Lo.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -524,6 +524,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-categ_Lt.c b/tests/unictype/test-categ_Lt.c index 96c0cce7..32808303 100644 --- a/tests/unictype/test-categ_Lt.c +++ b/tests/unictype/test-categ_Lt.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Lu.c b/tests/unictype/test-categ_Lu.c index 14c15058..89bb6575 100644 --- a/tests/unictype/test-categ_Lu.c +++ b/tests/unictype/test-categ_Lu.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_M.c b/tests/unictype/test-categ_M.c index e872f50c..4b2c4f85 100644 --- a/tests/unictype/test-categ_M.c +++ b/tests/unictype/test-categ_M.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Mc.c b/tests/unictype/test-categ_Mc.c index 1b2b50cf..bfa9ce15 100644 --- a/tests/unictype/test-categ_Mc.c +++ b/tests/unictype/test-categ_Mc.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Me.c b/tests/unictype/test-categ_Me.c index d0ad5427..c58d2972 100644 --- a/tests/unictype/test-categ_Me.c +++ b/tests/unictype/test-categ_Me.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Mn.c b/tests/unictype/test-categ_Mn.c index cff7fde2..ee067b33 100644 --- a/tests/unictype/test-categ_Mn.c +++ b/tests/unictype/test-categ_Mn.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_N.c b/tests/unictype/test-categ_N.c index ae8945c1..f7ee20ae 100644 --- a/tests/unictype/test-categ_N.c +++ b/tests/unictype/test-categ_N.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Nd.c b/tests/unictype/test-categ_Nd.c index 470c54e4..032ab3eb 100644 --- a/tests/unictype/test-categ_Nd.c +++ b/tests/unictype/test-categ_Nd.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Nl.c b/tests/unictype/test-categ_Nl.c index 55dc61bb..0ce75df2 100644 --- a/tests/unictype/test-categ_Nl.c +++ b/tests/unictype/test-categ_Nl.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_No.c b/tests/unictype/test-categ_No.c index 4d368b91..0c1e8e59 100644 --- a/tests/unictype/test-categ_No.c +++ b/tests/unictype/test-categ_No.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_P.c b/tests/unictype/test-categ_P.c index f2e8532b..c2a2a92f 100644 --- a/tests/unictype/test-categ_P.c +++ b/tests/unictype/test-categ_P.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pc.c b/tests/unictype/test-categ_Pc.c index 9d0ae7dc..98b32745 100644 --- a/tests/unictype/test-categ_Pc.c +++ b/tests/unictype/test-categ_Pc.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pd.c b/tests/unictype/test-categ_Pd.c index d27a409a..28f2b27d 100644 --- a/tests/unictype/test-categ_Pd.c +++ b/tests/unictype/test-categ_Pd.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pe.c b/tests/unictype/test-categ_Pe.c index 7dda519b..d1ae40ea 100644 --- a/tests/unictype/test-categ_Pe.c +++ b/tests/unictype/test-categ_Pe.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pf.c b/tests/unictype/test-categ_Pf.c index 68cdb407..6746b530 100644 --- a/tests/unictype/test-categ_Pf.c +++ b/tests/unictype/test-categ_Pf.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Pi.c b/tests/unictype/test-categ_Pi.c index bd8d5ebe..ee16d684 100644 --- a/tests/unictype/test-categ_Pi.c +++ b/tests/unictype/test-categ_Pi.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Po.c b/tests/unictype/test-categ_Po.c index 53a782f5..27389e40 100644 --- a/tests/unictype/test-categ_Po.c +++ b/tests/unictype/test-categ_Po.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Ps.c b/tests/unictype/test-categ_Ps.c index e423e409..78bebac2 100644 --- a/tests/unictype/test-categ_Ps.c +++ b/tests/unictype/test-categ_Ps.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_S.c b/tests/unictype/test-categ_S.c index d1312da5..48863da0 100644 --- a/tests/unictype/test-categ_S.c +++ b/tests/unictype/test-categ_S.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -124,7 +124,7 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, +    { 0x2FF0, 0x2FFF },      { 0x3004, 0x3004 },      { 0x3012, 0x3013 },      { 0x3020, 0x3020 }, @@ -134,6 +134,7 @@      { 0x3190, 0x3191 },      { 0x3196, 0x319F },      { 0x31C0, 0x31E3 }, +    { 0x31EF, 0x31EF },      { 0x3200, 0x321E },      { 0x322A, 0x3247 },      { 0x3250, 0x3250 }, diff --git a/tests/unictype/test-categ_Sc.c b/tests/unictype/test-categ_Sc.c index 9057fa9f..4c30fbf1 100644 --- a/tests/unictype/test-categ_Sc.c +++ b/tests/unictype/test-categ_Sc.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Sk.c b/tests/unictype/test-categ_Sk.c index cf8f781d..efffb564 100644 --- a/tests/unictype/test-categ_Sk.c +++ b/tests/unictype/test-categ_Sk.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Sm.c b/tests/unictype/test-categ_Sm.c index 02a70194..ae3d01c3 100644 --- a/tests/unictype/test-categ_Sm.c +++ b/tests/unictype/test-categ_Sm.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_So.c b/tests/unictype/test-categ_So.c index 4f9b3eae..98f774f7 100644 --- a/tests/unictype/test-categ_So.c +++ b/tests/unictype/test-categ_So.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -103,7 +103,7 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, +    { 0x2FF0, 0x2FFF },      { 0x3004, 0x3004 },      { 0x3012, 0x3013 },      { 0x3020, 0x3020 }, @@ -112,6 +112,7 @@      { 0x3190, 0x3191 },      { 0x3196, 0x319F },      { 0x31C0, 0x31E3 }, +    { 0x31EF, 0x31EF },      { 0x3200, 0x321E },      { 0x322A, 0x3247 },      { 0x3250, 0x3250 }, diff --git a/tests/unictype/test-categ_Z.c b/tests/unictype/test-categ_Z.c index 3e0ec555..20301158 100644 --- a/tests/unictype/test-categ_Z.c +++ b/tests/unictype/test-categ_Z.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zl.c b/tests/unictype/test-categ_Zl.c index 92725a57..25047987 100644 --- a/tests/unictype/test-categ_Zl.c +++ b/tests/unictype/test-categ_Zl.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zp.c b/tests/unictype/test-categ_Zp.c index 2c69c6cc..520cf39e 100644 --- a/tests/unictype/test-categ_Zp.c +++ b/tests/unictype/test-categ_Zp.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_Zs.c b/tests/unictype/test-categ_Zs.c index da8a54b5..9a218493 100644 --- a/tests/unictype/test-categ_Zs.c +++ b/tests/unictype/test-categ_Zs.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-categ_and.c b/tests/unictype/test-categ_and.c index ace3ccb8..e2ded585 100644 --- a/tests/unictype/test-categ_and.c +++ b/tests/unictype/test-categ_and.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_and_not.c b/tests/unictype/test-categ_and_not.c index 74c75aee..07420d53 100644 --- a/tests/unictype/test-categ_and_not.c +++ b/tests/unictype/test-categ_and_not.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -25,15 +25,36 @@  int  main ()  { -  uc_general_category_t ct = -    uc_general_category_and_not ( -      uc_general_category_or (UC_LETTER, UC_NUMBER), -      uc_general_category_or (UC_UPPERCASE_LETTER, UC_DECIMAL_DIGIT_NUMBER)); - -  ASSERT (!uc_is_general_category ('A', ct)); -  ASSERT (uc_is_general_category ('a', ct)); -  ASSERT (!uc_is_general_category ('7', ct)); -  ASSERT (uc_is_general_category (0x00B2, ct)); +  { /* A case where the result's bit mask is 0.  */ +    uc_general_category_t ct = +      uc_general_category_and_not (UC_UPPERCASE_LETTER, UC_LETTER); + +    ASSERT (!uc_is_general_category ('A', ct)); +    ASSERT (!uc_is_general_category ('a', ct)); +  } +  { /* A case where the result's bit mask is the same as the first argument.  */ +    uc_general_category_t ct = +      uc_general_category_and_not ( +        uc_general_category_or (UC_LETTER, UC_NUMBER), +        UC_CONTROL); + +    ASSERT (uc_is_general_category ('A', ct)); +    ASSERT (uc_is_general_category ('a', ct)); +    ASSERT (uc_is_general_category ('7', ct)); +    ASSERT (uc_is_general_category (0x00B2, ct)); +  } +  { /* The general case, where the result's bit mask is neither 0 nor the first +       argument.  */ +    uc_general_category_t ct = +      uc_general_category_and_not ( +        uc_general_category_or (UC_LETTER, UC_NUMBER), +        uc_general_category_or (UC_UPPERCASE_LETTER, UC_DECIMAL_DIGIT_NUMBER)); + +    ASSERT (!uc_is_general_category ('A', ct)); +    ASSERT (uc_is_general_category ('a', ct)); +    ASSERT (!uc_is_general_category ('7', ct)); +    ASSERT (uc_is_general_category (0x00B2, ct)); +  }    return 0;  } diff --git a/tests/unictype/test-categ_byname.c b/tests/unictype/test-categ_byname.c index 2489caaa..8cf94f4a 100644 --- a/tests/unictype/test-categ_byname.c +++ b/tests/unictype/test-categ_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -206,8 +206,6 @@ main ()    ASSERT (category_equals (uc_general_category_byname ("UNASSIGNED"), UC_CATEGORY_Cn));    ASSERT (category_equals (uc_general_category_byname ("Unassigned"), UC_CATEGORY_Cn)); -  uc_general_category_byname ("Nl"); -    {      uc_general_category_t ct = uc_general_category_byname ("Nd");      unsigned int c; @@ -219,6 +217,16 @@ main ()    }    { +    uc_general_category_t ct = uc_general_category_byname ("Nl"); +    unsigned int c; + +    for (c = 0x2160; c < 0x2180; c++) +      ASSERT (uc_is_general_category (c, ct)); +    ASSERT (!uc_is_general_category (0x0BF1, ct)); +    ASSERT (!uc_is_general_category (0x0D71, ct)); +  } + +  {      uc_general_category_t ct = uc_general_category_byname ("Foo");      unsigned int c; diff --git a/tests/unictype/test-categ_longname.c b/tests/unictype/test-categ_longname.c index d332b280..9c725486 100644 --- a/tests/unictype/test-categ_longname.c +++ b/tests/unictype/test-categ_longname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009, 2011 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_name.c b/tests/unictype/test-categ_name.c index 4e5143bb..f8f4889e 100644 --- a/tests/unictype/test-categ_name.c +++ b/tests/unictype/test-categ_name.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_none.c b/tests/unictype/test-categ_none.c index 913011a5..ae10a439 100644 --- a/tests/unictype/test-categ_none.c +++ b/tests/unictype/test-categ_none.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_of.c b/tests/unictype/test-categ_of.c index d19a510c..276994eb 100644 --- a/tests/unictype/test-categ_of.c +++ b/tests/unictype/test-categ_of.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_or.c b/tests/unictype/test-categ_or.c index 3fd9bd5a..3ed5d2b0 100644 --- a/tests/unictype/test-categ_or.c +++ b/tests/unictype/test-categ_or.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-categ_test_withtable.c b/tests/unictype/test-categ_test_withtable.c index df25cb87..fbd265a5 100644 --- a/tests/unictype/test-categ_test_withtable.c +++ b/tests/unictype/test-categ_test_withtable.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass.c b/tests/unictype/test-combiningclass.c index 92348feb..0e71d022 100644 --- a/tests/unictype/test-combiningclass.c +++ b/tests/unictype/test-combiningclass.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass_byname.c b/tests/unictype/test-combiningclass_byname.c index 0d56ca34..895b2ad1 100644 --- a/tests/unictype/test-combiningclass_byname.c +++ b/tests/unictype/test-combiningclass_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining group functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-combiningclass_longname.c b/tests/unictype/test-combiningclass_longname.c index 29164624..351467b8 100644 --- a/tests/unictype/test-combiningclass_longname.c +++ b/tests/unictype/test-combiningclass_longname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-combiningclass_name.c b/tests/unictype/test-combiningclass_name.c index 6521976a..7ccefbf2 100644 --- a/tests/unictype/test-combiningclass_name.c +++ b/tests/unictype/test-combiningclass_name.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-ctype_alnum.c b/tests/unictype/test-ctype_alnum.c index 7947a92b..f6f9b6b2 100644 --- a/tests/unictype/test-ctype_alnum.c +++ b/tests/unictype/test-ctype_alnum.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -730,6 +730,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-ctype_alpha.c b/tests/unictype/test-ctype_alpha.c index 284d964e..cb52a4c1 100644 --- a/tests/unictype/test-ctype_alpha.c +++ b/tests/unictype/test-ctype_alpha.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -729,6 +729,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-ctype_blank.c b/tests/unictype/test-ctype_blank.c index 4824fe73..a95128bc 100644 --- a/tests/unictype/test-ctype_blank.c +++ b/tests/unictype/test-ctype_blank.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_cntrl.c b/tests/unictype/test-ctype_cntrl.c index d32c701d..9c23169a 100644 --- a/tests/unictype/test-ctype_cntrl.c +++ b/tests/unictype/test-ctype_cntrl.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_digit.c b/tests/unictype/test-ctype_digit.c index ccda557f..53d40121 100644 --- a/tests/unictype/test-ctype_digit.c +++ b/tests/unictype/test-ctype_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_graph.c b/tests/unictype/test-ctype_graph.c index 16ab878a..bdd12a07 100644 --- a/tests/unictype/test-ctype_graph.c +++ b/tests/unictype/test-ctype_graph.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -291,14 +291,14 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, +    { 0x2FF0, 0x2FFF },      { 0x3001, 0x303F },      { 0x3041, 0x3096 },      { 0x3099, 0x30FF },      { 0x3105, 0x312F },      { 0x3131, 0x318E },      { 0x3190, 0x31E3 }, -    { 0x31F0, 0x321E }, +    { 0x31EF, 0x321E },      { 0x3220, 0xA48C },      { 0xA490, 0xA4C6 },      { 0xA4D0, 0xA62B }, @@ -721,6 +721,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-ctype_lower.c b/tests/unictype/test-ctype_lower.c index f8fceb33..5bc56a9b 100644 --- a/tests/unictype/test-ctype_lower.c +++ b/tests/unictype/test-ctype_lower.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_print.c b/tests/unictype/test-ctype_print.c index dad6b07b..a7ae3cd9 100644 --- a/tests/unictype/test-ctype_print.c +++ b/tests/unictype/test-ctype_print.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -288,14 +288,13 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, -    { 0x3000, 0x303F }, +    { 0x2FF0, 0x303F },      { 0x3041, 0x3096 },      { 0x3099, 0x30FF },      { 0x3105, 0x312F },      { 0x3131, 0x318E },      { 0x3190, 0x31E3 }, -    { 0x31F0, 0x321E }, +    { 0x31EF, 0x321E },      { 0x3220, 0xA48C },      { 0xA490, 0xA4C6 },      { 0xA4D0, 0xA62B }, @@ -718,6 +717,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-ctype_punct.c b/tests/unictype/test-ctype_punct.c index 1cd20e2a..1bebda2c 100644 --- a/tests/unictype/test-ctype_punct.c +++ b/tests/unictype/test-ctype_punct.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -265,7 +265,7 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, +    { 0x2FF0, 0x2FFF },      { 0x3001, 0x3004 },      { 0x3008, 0x3020 },      { 0x302A, 0x3030 }, @@ -276,6 +276,7 @@      { 0x30FB, 0x30FB },      { 0x3190, 0x319F },      { 0x31C0, 0x31E3 }, +    { 0x31EF, 0x31EF },      { 0x3200, 0x321E },      { 0x3220, 0x33FF },      { 0x4DC0, 0x4DFF }, diff --git a/tests/unictype/test-ctype_space.c b/tests/unictype/test-ctype_space.c index da37cf74..2029e960 100644 --- a/tests/unictype/test-ctype_space.c +++ b/tests/unictype/test-ctype_space.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_upper.c b/tests/unictype/test-ctype_upper.c index 724d4c7c..c8e45155 100644 --- a/tests/unictype/test-ctype_upper.c +++ b/tests/unictype/test-ctype_upper.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-ctype_xdigit.c b/tests/unictype/test-ctype_xdigit.c index 3de8ce98..cbc618fc 100644 --- a/tests/unictype/test-ctype_xdigit.c +++ b/tests/unictype/test-ctype_xdigit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-decdigit.c b/tests/unictype/test-decdigit.c index 67a3f60c..e3b70470 100644 --- a/tests/unictype/test-decdigit.c +++ b/tests/unictype/test-decdigit.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-decdigit.h b/tests/unictype/test-decdigit.h index f54ff1e1..c0a46e6c 100644 --- a/tests/unictype/test-decdigit.h +++ b/tests/unictype/test-decdigit.h @@ -1,8 +1,8 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Decimal digit values of Unicode characters.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-digit.c b/tests/unictype/test-digit.c index 67258a43..12fa387d 100644 --- a/tests/unictype/test-digit.c +++ b/tests/unictype/test-digit.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-digit.h b/tests/unictype/test-digit.h index 02819012..503b2f41 100644 --- a/tests/unictype/test-digit.h +++ b/tests/unictype/test-digit.h @@ -1,8 +1,8 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Digit values of Unicode characters.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-incb_byname.c b/tests/unictype/test-incb_byname.c new file mode 100644 index 00000000..5031d313 --- /dev/null +++ b/tests/unictype/test-incb_byname.c @@ -0,0 +1,43 @@ +/* Test the Indic_Conjunct_Break value functions. +   Copyright (C) 2011-2024 Free Software Foundation, Inc. +   Written by Bruno Haible <bruno@clisp.org>, 2024. + +   This program is free software: you can redistribute it and/or modify it +   under the terms of the GNU Lesser General Public License as published +   by the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +/* Specification.  */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +int +main () +{ +  ASSERT (uc_indic_conjunct_break_byname ("NONE") == UC_INDIC_CONJUNCT_BREAK_NONE); +  ASSERT (uc_indic_conjunct_break_byname ("None") == UC_INDIC_CONJUNCT_BREAK_NONE); +  ASSERT (uc_indic_conjunct_break_byname ("CONSONANT") == UC_INDIC_CONJUNCT_BREAK_CONSONANT); +  ASSERT (uc_indic_conjunct_break_byname ("Consonant") == UC_INDIC_CONJUNCT_BREAK_CONSONANT); +  ASSERT (uc_indic_conjunct_break_byname ("LINKER") == UC_INDIC_CONJUNCT_BREAK_LINKER); +  ASSERT (uc_indic_conjunct_break_byname ("Linker") == UC_INDIC_CONJUNCT_BREAK_LINKER); +  ASSERT (uc_indic_conjunct_break_byname ("EXTEND") == UC_INDIC_CONJUNCT_BREAK_EXTEND); +  ASSERT (uc_indic_conjunct_break_byname ("Extend") == UC_INDIC_CONJUNCT_BREAK_EXTEND); +  ASSERT (uc_indic_conjunct_break_byname ("VOWEL") < 0); +  ASSERT (uc_indic_conjunct_break_byname ("X") < 0); +  ASSERT (uc_indic_conjunct_break_byname ("") < 0); + +  return 0; +} diff --git a/tests/unictype/test-incb_name.c b/tests/unictype/test-incb_name.c new file mode 100644 index 00000000..25f53c28 --- /dev/null +++ b/tests/unictype/test-incb_name.c @@ -0,0 +1,37 @@ +/* Test the Indic_Conjunct_Break value functions. +   Copyright (C) 2011-2024 Free Software Foundation, Inc. +   Written by Bruno Haible <bruno@clisp.org>, 2024. + +   This program is free software: you can redistribute it and/or modify it +   under the terms of the GNU Lesser General Public License as published +   by the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +/* Specification.  */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +int +main () +{ +  ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_NONE),      "None") == 0); +  ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_CONSONANT), "Consonant") == 0); +  ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_LINKER),    "Linker") == 0); +  ASSERT (strcmp (uc_indic_conjunct_break_name (UC_INDIC_CONJUNCT_BREAK_EXTEND),    "Extend") == 0); +  ASSERT (uc_indic_conjunct_break_name (-1) == NULL); + +  return 0; +} diff --git a/tests/unictype/test-incb_of.c b/tests/unictype/test-incb_of.c new file mode 100644 index 00000000..d2adeb5c --- /dev/null +++ b/tests/unictype/test-incb_of.c @@ -0,0 +1,52 @@ +/* Test the Unicode character Indic_Conjunct_Break attribute functions. +   Copyright (C) 2011-2024 Free Software Foundation, Inc. +   Written by Bruno Haible <bruno@clisp.org>, 2024. + +   This program is free software: you can redistribute it and/or modify it +   under the terms of the GNU Lesser General Public License as published +   by the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include <config.h> + +/* Specification.  */ +#include "unictype.h" + +#include <string.h> + +#include "macros.h" + +typedef struct { ucs4_t ch; int value; } pair_t; + +static const pair_t mapping[] = +  { +#include "test-incb_of.h" +  }; + +int +main () +{ +  unsigned int c; +  size_t i; + +  c = 0; +  for (i = 0; i < SIZEOF (mapping); i++) +    { +      for (; c < mapping[i].ch; c++) +        ASSERT (uc_indic_conjunct_break (c) == UC_INDIC_CONJUNCT_BREAK_NONE); +      ASSERT (uc_indic_conjunct_break (c) == mapping[i].value); +      c++; +    } +  for (; c < 0x110000; c++) +    ASSERT (uc_indic_conjunct_break (c) == UC_INDIC_CONJUNCT_BREAK_NONE); + +  return 0; +} diff --git a/tests/unictype/test-incb_of.h b/tests/unictype/test-incb_of.h new file mode 100644 index 00000000..0eb99aaf --- /dev/null +++ b/tests/unictype/test-incb_of.h @@ -0,0 +1,1149 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Indic_Conjunct_Break attribute of Unicode characters.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ + +/* Copyright (C) 2000-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation, either version 3 of the License, +   or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +    { 0x0300, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0301, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0302, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0303, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0304, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0305, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0306, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0307, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0308, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0309, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x030F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0310, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0311, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0312, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0313, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0314, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0315, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0316, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0317, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0318, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0319, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x031F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0320, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0321, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0322, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0323, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0324, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0325, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0326, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0327, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0328, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0329, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x032F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0330, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0331, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0332, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0333, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0334, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0335, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0336, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0337, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0338, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0339, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x033F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0340, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0341, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0342, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0343, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0344, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0345, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0346, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0347, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0348, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0349, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x034A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x034B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x034C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x034D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x034E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0350, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0351, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0352, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0353, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0354, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0355, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0356, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0357, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0358, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0359, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x035F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0360, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0361, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0362, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0363, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0364, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0365, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0366, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0367, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0368, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0369, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x036F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0483, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0484, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0485, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0486, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0487, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0591, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0592, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0593, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0594, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0595, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0596, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0597, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0598, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0599, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x059F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05A9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05AF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05B9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05BA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05BB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05BC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05BD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05BF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05C1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05C2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05C4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05C5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x05C7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0610, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0611, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0612, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0613, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0614, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0615, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0616, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0617, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0618, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0619, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x061A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x064B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x064C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x064D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x064E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x064F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0650, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0651, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0652, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0653, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0654, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0655, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0656, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0657, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0658, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0659, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x065F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0670, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06DF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x06ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0711, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0730, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0731, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0732, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0733, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0734, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0735, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0736, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0737, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0738, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0739, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x073F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0740, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0741, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0742, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0743, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0744, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0745, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0746, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0747, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0748, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0749, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x074A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07F2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07F3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x07FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0816, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0817, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0818, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0819, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x081B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x081C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x081D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x081E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x081F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0820, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0821, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0822, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0823, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0825, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0826, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0827, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0829, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x082A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x082B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x082C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x082D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0859, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x085A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x085B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0898, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0899, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x089F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08CF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08DF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08F9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x08FF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0915, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0916, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0917, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0918, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0919, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x091F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0920, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0921, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0922, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0923, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0924, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0925, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0926, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0927, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0928, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0929, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x092F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0930, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0931, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0932, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0933, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0934, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0935, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0936, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0937, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0938, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0939, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x093C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x094D, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x0951, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0952, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0953, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0954, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0958, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0959, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x095F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0978, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0979, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x097F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0995, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0996, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0997, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0998, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0999, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x099F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A4, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09A8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AA, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AB, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AE, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09AF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09B9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09BC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x09CD, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x09DC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09DD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09DF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09F0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09F1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x09FE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0A3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0A95, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A96, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A97, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A98, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A99, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0A9F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA1, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA4, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AA8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAA, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAB, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAC, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAD, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAE, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AAF, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB0, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB2, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB3, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB5, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB6, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB7, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB8, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0AB9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0ABC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0ACD, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x0AF9, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0B4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x0B5C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B5D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B5F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0B71, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C31, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C34, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0C4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x0C55, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0C56, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0C58, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C59, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0C5A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0CBC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0D15, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D16, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D17, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D18, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D19, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D1F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D20, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D21, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D22, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D23, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D24, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D25, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D26, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D27, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D28, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D29, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2B, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2C, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2D, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2E, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D2F, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D30, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D31, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D32, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D33, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D34, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D35, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D36, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D37, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D38, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D39, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D3A, UC_INDIC_CONJUNCT_BREAK_CONSONANT }, +    { 0x0D3B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0D3C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0D4D, UC_INDIC_CONJUNCT_BREAK_LINKER }, +    { 0x0E38, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E3A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E48, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E49, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E4A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0E4B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0EB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0EB9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0EBA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0EC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0EC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0ECA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0ECB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F18, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F19, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F35, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F37, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F71, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F72, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F74, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F7A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F7B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F7C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F7D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F80, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F82, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F83, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F84, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F86, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0F87, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x0FC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1037, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1039, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x103A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x108D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x135D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x135E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x135F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1714, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x17D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x17DD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x18A9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1939, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x193A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x193B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A17, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A18, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A60, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A75, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A76, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A77, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A78, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A79, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A7A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A7B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A7C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1A7F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AB9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ABA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ABB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ABC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ABD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ABF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1AC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ACA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ACB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ACC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ACD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1ACE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B6B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B6C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B6D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B6E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B6F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B70, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B71, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B72, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1B73, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1BAB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1BE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1C37, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CD9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CDF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1CF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DC9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DCF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DD9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DDF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DE9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DEA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DEB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DEC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DEE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1DFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x200D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20D9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20DA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20DB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20DC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x20F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2CEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2CF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2CF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2D7F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DE9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DEA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DEB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DEC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DEE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DEF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DF9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x2DFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x302F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x3099, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x309A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA66F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA674, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA675, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA676, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA677, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA678, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA679, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA67A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA67B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA67C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA67D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA69E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA69F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA6F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA6F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA82C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8EB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8F0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA8F1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA92B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA92C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA92D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xA9B3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAB8, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAABE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAABF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAC1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xAAF6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xABED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFB1E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE20, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE21, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE22, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE23, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE24, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE25, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE26, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE27, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE28, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE29, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0xFE2F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x101FD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x102E0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10376, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10377, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10378, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10379, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1037A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A0D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A0F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A38, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A39, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A3A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10A3F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10AE5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10AE6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10D24, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10D25, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10D26, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10D27, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10EAB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10EAC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10EFD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10EFE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10EFF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F46, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F47, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F48, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F49, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F4F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F50, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F82, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F83, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F84, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x10F85, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11070, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1107F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x110BA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11100, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11101, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11102, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11133, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11134, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11173, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x111CA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11236, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x112E9, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x112EA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1133B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1133C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11366, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11367, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11368, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11369, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1136A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1136B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1136C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11370, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11371, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11372, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11373, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11374, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11446, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1145E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x114C3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x115C0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x116B7, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1172B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1183A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1193E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11943, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11A34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11A47, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11A99, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11D42, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11D44, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11D45, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11D97, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x11F42, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16AF0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16AF1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16AF2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16AF3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16AF4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B30, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B31, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B32, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B33, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B34, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B35, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x16B36, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1BC9E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D165, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D167, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D168, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D169, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D16E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D16F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D170, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D171, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D172, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D17B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D17C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D17D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D17E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D17F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D180, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D181, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D182, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D185, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D186, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D187, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D188, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D189, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D18A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D18B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D1AA, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D1AB, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D1AC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D1AD, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D242, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D243, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1D244, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E000, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E001, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E002, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E003, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E004, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E005, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E006, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E008, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E009, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E00F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E010, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E011, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E012, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E013, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E014, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E015, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E016, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E017, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E018, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E01B, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E01C, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E01D, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E01E, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E01F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E020, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E021, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E023, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E024, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E026, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E027, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E028, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E029, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E02A, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E08F, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E130, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E131, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E132, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E133, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E134, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E135, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E136, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E2AE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E2EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E2ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E2EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E2EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E4EC, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E4ED, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E4EE, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E4EF, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D0, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D1, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D2, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D3, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D4, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D5, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E8D6, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E944, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E945, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E946, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E947, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E948, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E949, UC_INDIC_CONJUNCT_BREAK_EXTEND }, +    { 0x1E94A, UC_INDIC_CONJUNCT_BREAK_EXTEND } diff --git a/tests/unictype/test-joininggroup_byname.c b/tests/unictype/test-joininggroup_byname.c index 6329a994..24d5c19d 100644 --- a/tests/unictype/test-joininggroup_byname.c +++ b/tests/unictype/test-joininggroup_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining group functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_name.c b/tests/unictype/test-joininggroup_name.c index 7ff2eb98..9e4ef511 100644 --- a/tests/unictype/test-joininggroup_name.c +++ b/tests/unictype/test-joininggroup_name.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining group functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_of.c b/tests/unictype/test-joininggroup_of.c index 792b5e37..65a70d5f 100644 --- a/tests/unictype/test-joininggroup_of.c +++ b/tests/unictype/test-joininggroup_of.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining group functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joininggroup_of.h b/tests/unictype/test-joininggroup_of.h index cbcad6bc..1ee9c058 100644 --- a/tests/unictype/test-joininggroup_of.h +++ b/tests/unictype/test-joininggroup_of.h @@ -1,8 +1,8 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Arabic joining group of Unicode characters.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-joiningtype_byname.c b/tests/unictype/test-joiningtype_byname.c index 0134bde1..ecde322e 100644 --- a/tests/unictype/test-joiningtype_byname.c +++ b/tests/unictype/test-joiningtype_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_longname.c b/tests/unictype/test-joiningtype_longname.c index 06c737d4..3d18ae2f 100644 --- a/tests/unictype/test-joiningtype_longname.c +++ b/tests/unictype/test-joiningtype_longname.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_name.c b/tests/unictype/test-joiningtype_name.c index f83468cb..0b2ca424 100644 --- a/tests/unictype/test-joiningtype_name.c +++ b/tests/unictype/test-joiningtype_name.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_of.c b/tests/unictype/test-joiningtype_of.c index 6396f0d3..f0760b91 100644 --- a/tests/unictype/test-joiningtype_of.c +++ b/tests/unictype/test-joiningtype_of.c @@ -1,5 +1,5 @@  /* Test the Unicode character Arabic joining type functions. -   Copyright (C) 2011 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This program is free software: you can redistribute it and/or modify it diff --git a/tests/unictype/test-joiningtype_of.h b/tests/unictype/test-joiningtype_of.h index acea2865..7b1e072a 100644 --- a/tests/unictype/test-joiningtype_of.h +++ b/tests/unictype/test-joiningtype_of.h @@ -1,8 +1,8 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Arabic joining type of Unicode characters.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-mirror.c b/tests/unictype/test-mirror.c index b09541cc..5494e197 100644 --- a/tests/unictype/test-mirror.c +++ b/tests/unictype/test-mirror.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-numeric.c b/tests/unictype/test-numeric.c index 5596b561..86718bf2 100644 --- a/tests/unictype/test-numeric.c +++ b/tests/unictype/test-numeric.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-numeric.h b/tests/unictype/test-numeric.h index cb2f3314..b8a7f809 100644 --- a/tests/unictype/test-numeric.h +++ b/tests/unictype/test-numeric.h @@ -1,8 +1,8 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Numeric values of Unicode characters.  */ -/* Generated automatically by gen-uni-tables.c for Unicode 15.0.0.  */ +/* Generated automatically by gen-uni-tables.c for Unicode 15.1.0.  */ -/* Copyright (C) 2000-2022 Free Software Foundation, Inc. +/* Copyright (C) 2000-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_alphabetic.c b/tests/unictype/test-pr_alphabetic.c index 6efcd5bd..027b3a01 100644 --- a/tests/unictype/test-pr_alphabetic.c +++ b/tests/unictype/test-pr_alphabetic.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -746,6 +746,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ascii_hex_digit.c b/tests/unictype/test-pr_ascii_hex_digit.c index 31eb2b79..bc48da86 100644 --- a/tests/unictype/test-pr_ascii_hex_digit.c +++ b/tests/unictype/test-pr_ascii_hex_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_arabic_digit.c b/tests/unictype/test-pr_bidi_arabic_digit.c index fde69de6..10e6bf03 100644 --- a/tests/unictype/test-pr_bidi_arabic_digit.c +++ b/tests/unictype/test-pr_bidi_arabic_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_arabic_right_to_left.c b/tests/unictype/test-pr_bidi_arabic_right_to_left.c index e0cde250..d97eb529 100644 --- a/tests/unictype/test-pr_bidi_arabic_right_to_left.c +++ b/tests/unictype/test-pr_bidi_arabic_right_to_left.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_block_separator.c b/tests/unictype/test-pr_bidi_block_separator.c index b348d689..50eade74 100644 --- a/tests/unictype/test-pr_bidi_block_separator.c +++ b/tests/unictype/test-pr_bidi_block_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_boundary_neutral.c b/tests/unictype/test-pr_bidi_boundary_neutral.c index 778d8247..8925fb22 100644 --- a/tests/unictype/test-pr_bidi_boundary_neutral.c +++ b/tests/unictype/test-pr_bidi_boundary_neutral.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_common_separator.c b/tests/unictype/test-pr_bidi_common_separator.c index 75e54c7f..7f73de79 100644 --- a/tests/unictype/test-pr_bidi_common_separator.c +++ b/tests/unictype/test-pr_bidi_common_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_control.c b/tests/unictype/test-pr_bidi_control.c index 60f1354e..5855b93c 100644 --- a/tests/unictype/test-pr_bidi_control.c +++ b/tests/unictype/test-pr_bidi_control.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_embedding_or_override.c b/tests/unictype/test-pr_bidi_embedding_or_override.c index 3fec8c05..e717b92a 100644 --- a/tests/unictype/test-pr_bidi_embedding_or_override.c +++ b/tests/unictype/test-pr_bidi_embedding_or_override.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_eur_num_separator.c b/tests/unictype/test-pr_bidi_eur_num_separator.c index 2a096694..c7a602f2 100644 --- a/tests/unictype/test-pr_bidi_eur_num_separator.c +++ b/tests/unictype/test-pr_bidi_eur_num_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_eur_num_terminator.c b/tests/unictype/test-pr_bidi_eur_num_terminator.c index 326d6fa0..0ed7ebb0 100644 --- a/tests/unictype/test-pr_bidi_eur_num_terminator.c +++ b/tests/unictype/test-pr_bidi_eur_num_terminator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_european_digit.c b/tests/unictype/test-pr_bidi_european_digit.c index b59bc8cb..3f72d04c 100644 --- a/tests/unictype/test-pr_bidi_european_digit.c +++ b/tests/unictype/test-pr_bidi_european_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_hebrew_right_to_left.c b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c index 90dfa1e6..f6b97339 100644 --- a/tests/unictype/test-pr_bidi_hebrew_right_to_left.c +++ b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_left_to_right.c b/tests/unictype/test-pr_bidi_left_to_right.c index ce6dc5d7..3a81b5ec 100644 --- a/tests/unictype/test-pr_bidi_left_to_right.c +++ b/tests/unictype/test-pr_bidi_left_to_right.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -233,7 +233,6 @@      { 0x2E9A, 0x2E9A },      { 0x2EF4, 0x2EFF },      { 0x2FD6, 0x2FEF }, -    { 0x2FFC, 0x2FFF },      { 0x3005, 0x3007 },      { 0x3021, 0x3029 },      { 0x302E, 0x302F }, @@ -243,7 +242,8 @@      { 0x309D, 0x309F },      { 0x30A1, 0x30FA },      { 0x30FC, 0x31BF }, -    { 0x31E4, 0x321C }, +    { 0x31E4, 0x31EE }, +    { 0x31F0, 0x321C },      { 0x321F, 0x324F },      { 0x3260, 0x327B },      { 0x327F, 0x32B0 }, diff --git a/tests/unictype/test-pr_bidi_non_spacing_mark.c b/tests/unictype/test-pr_bidi_non_spacing_mark.c index 6cc88022..813373ac 100644 --- a/tests/unictype/test-pr_bidi_non_spacing_mark.c +++ b/tests/unictype/test-pr_bidi_non_spacing_mark.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_other_neutral.c b/tests/unictype/test-pr_bidi_other_neutral.c index 5d72a797..0c968235 100644 --- a/tests/unictype/test-pr_bidi_other_neutral.c +++ b/tests/unictype/test-pr_bidi_other_neutral.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -102,7 +102,7 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, +    { 0x2FF0, 0x2FFF },      { 0x3001, 0x3004 },      { 0x3008, 0x3020 },      { 0x3030, 0x3030 }, @@ -112,6 +112,7 @@      { 0x30A0, 0x30A0 },      { 0x30FB, 0x30FB },      { 0x31C0, 0x31E3 }, +    { 0x31EF, 0x31EF },      { 0x321D, 0x321E },      { 0x3250, 0x325F },      { 0x327C, 0x327E }, diff --git a/tests/unictype/test-pr_bidi_pdf.c b/tests/unictype/test-pr_bidi_pdf.c index 60e45477..eabf3f29 100644 --- a/tests/unictype/test-pr_bidi_pdf.c +++ b/tests/unictype/test-pr_bidi_pdf.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_segment_separator.c b/tests/unictype/test-pr_bidi_segment_separator.c index 5f6e1e20..8e4da46a 100644 --- a/tests/unictype/test-pr_bidi_segment_separator.c +++ b/tests/unictype/test-pr_bidi_segment_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_bidi_whitespace.c b/tests/unictype/test-pr_bidi_whitespace.c index 3c165aa3..d4a47fd9 100644 --- a/tests/unictype/test-pr_bidi_whitespace.c +++ b/tests/unictype/test-pr_bidi_whitespace.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_byname.c b/tests/unictype/test-pr_byname.c index 6cdfb9d5..a3435e26 100644 --- a/tests/unictype/test-pr_byname.c +++ b/tests/unictype/test-pr_byname.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-pr_case_ignorable.c b/tests/unictype/test-pr_case_ignorable.c index 558694d0..b0f33ab9 100644 --- a/tests/unictype/test-pr_case_ignorable.c +++ b/tests/unictype/test-pr_case_ignorable.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_cased.c b/tests/unictype/test-pr_cased.c index 1d060fca..d1966ad7 100644 --- a/tests/unictype/test-pr_cased.c +++ b/tests/unictype/test-pr_cased.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_casefolded.c b/tests/unictype/test-pr_changes_when_casefolded.c index f0da0167..7c7c5cea 100644 --- a/tests/unictype/test-pr_changes_when_casefolded.c +++ b/tests/unictype/test-pr_changes_when_casefolded.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_casemapped.c b/tests/unictype/test-pr_changes_when_casemapped.c index 42bfa219..c8e508b2 100644 --- a/tests/unictype/test-pr_changes_when_casemapped.c +++ b/tests/unictype/test-pr_changes_when_casemapped.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_lowercased.c b/tests/unictype/test-pr_changes_when_lowercased.c index 87607ec2..95a4b888 100644 --- a/tests/unictype/test-pr_changes_when_lowercased.c +++ b/tests/unictype/test-pr_changes_when_lowercased.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_titlecased.c b/tests/unictype/test-pr_changes_when_titlecased.c index 55f12684..2ce0e2bb 100644 --- a/tests/unictype/test-pr_changes_when_titlecased.c +++ b/tests/unictype/test-pr_changes_when_titlecased.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_changes_when_uppercased.c b/tests/unictype/test-pr_changes_when_uppercased.c index 4b830f3e..ebbe3cf9 100644 --- a/tests/unictype/test-pr_changes_when_uppercased.c +++ b/tests/unictype/test-pr_changes_when_uppercased.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_combining.c b/tests/unictype/test-pr_combining.c index 31b8df04..bccf27d3 100644 --- a/tests/unictype/test-pr_combining.c +++ b/tests/unictype/test-pr_combining.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_composite.c b/tests/unictype/test-pr_composite.c index 4cccc8e8..054b7fc9 100644 --- a/tests/unictype/test-pr_composite.c +++ b/tests/unictype/test-pr_composite.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_currency_symbol.c b/tests/unictype/test-pr_currency_symbol.c index 4a59165f..7db0104a 100644 --- a/tests/unictype/test-pr_currency_symbol.c +++ b/tests/unictype/test-pr_currency_symbol.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_dash.c b/tests/unictype/test-pr_dash.c index 7ac4b3e8..5788ddbb 100644 --- a/tests/unictype/test-pr_dash.c +++ b/tests/unictype/test-pr_dash.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_decimal_digit.c b/tests/unictype/test-pr_decimal_digit.c index 45d5a6d4..aedacc94 100644 --- a/tests/unictype/test-pr_decimal_digit.c +++ b/tests/unictype/test-pr_decimal_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_default_ignorable_code_point.c b/tests/unictype/test-pr_default_ignorable_code_point.c index e536671b..194dc915 100644 --- a/tests/unictype/test-pr_default_ignorable_code_point.c +++ b/tests/unictype/test-pr_default_ignorable_code_point.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_deprecated.c b/tests/unictype/test-pr_deprecated.c index 1df2bc59..ba1cbd2c 100644 --- a/tests/unictype/test-pr_deprecated.c +++ b/tests/unictype/test-pr_deprecated.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_diacritic.c b/tests/unictype/test-pr_diacritic.c index f5dc0a67..d4c20042 100644 --- a/tests/unictype/test-pr_diacritic.c +++ b/tests/unictype/test-pr_diacritic.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji.c b/tests/unictype/test-pr_emoji.c index 8df689a2..f6b7859d 100644 --- a/tests/unictype/test-pr_emoji.c +++ b/tests/unictype/test-pr_emoji.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_component.c b/tests/unictype/test-pr_emoji_component.c index 38009fe3..af70bf48 100644 --- a/tests/unictype/test-pr_emoji_component.c +++ b/tests/unictype/test-pr_emoji_component.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_modifier.c b/tests/unictype/test-pr_emoji_modifier.c index d298af72..1a60de9e 100644 --- a/tests/unictype/test-pr_emoji_modifier.c +++ b/tests/unictype/test-pr_emoji_modifier.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_modifier_base.c b/tests/unictype/test-pr_emoji_modifier_base.c index 90430d38..e38058bb 100644 --- a/tests/unictype/test-pr_emoji_modifier_base.c +++ b/tests/unictype/test-pr_emoji_modifier_base.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_emoji_presentation.c b/tests/unictype/test-pr_emoji_presentation.c index fd1b3043..fe6b3a20 100644 --- a/tests/unictype/test-pr_emoji_presentation.c +++ b/tests/unictype/test-pr_emoji_presentation.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_extended_pictographic.c b/tests/unictype/test-pr_extended_pictographic.c index 9fa0b3af..add58454 100644 --- a/tests/unictype/test-pr_extended_pictographic.c +++ b/tests/unictype/test-pr_extended_pictographic.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_extender.c b/tests/unictype/test-pr_extender.c index c2ec203b..886710f0 100644 --- a/tests/unictype/test-pr_extender.c +++ b/tests/unictype/test-pr_extender.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_format_control.c b/tests/unictype/test-pr_format_control.c index 0c2045a8..9a734c56 100644 --- a/tests/unictype/test-pr_format_control.c +++ b/tests/unictype/test-pr_format_control.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_grapheme_base.c b/tests/unictype/test-pr_grapheme_base.c index 3d908500..aeb6af9b 100644 --- a/tests/unictype/test-pr_grapheme_base.c +++ b/tests/unictype/test-pr_grapheme_base.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -369,15 +369,14 @@      { 0x2E80, 0x2E99 },      { 0x2E9B, 0x2EF3 },      { 0x2F00, 0x2FD5 }, -    { 0x2FF0, 0x2FFB }, -    { 0x3000, 0x3029 }, +    { 0x2FF0, 0x3029 },      { 0x3030, 0x303F },      { 0x3041, 0x3096 },      { 0x309B, 0x30FF },      { 0x3105, 0x312F },      { 0x3131, 0x318E },      { 0x3190, 0x31E3 }, -    { 0x31F0, 0x321E }, +    { 0x31EF, 0x321E },      { 0x3220, 0xA48C },      { 0xA490, 0xA4C6 },      { 0xA4D0, 0xA62B }, @@ -889,6 +888,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_grapheme_extend.c b/tests/unictype/test-pr_grapheme_extend.c index fb8e068d..d168a4ce 100644 --- a/tests/unictype/test-pr_grapheme_extend.c +++ b/tests/unictype/test-pr_grapheme_extend.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_grapheme_link.c b/tests/unictype/test-pr_grapheme_link.c index ce5c9039..3b741be4 100644 --- a/tests/unictype/test-pr_grapheme_link.c +++ b/tests/unictype/test-pr_grapheme_link.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_hex_digit.c b/tests/unictype/test-pr_hex_digit.c index 4c3d48c7..578b7c97 100644 --- a/tests/unictype/test-pr_hex_digit.c +++ b/tests/unictype/test-pr_hex_digit.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_hyphen.c b/tests/unictype/test-pr_hyphen.c index 351e98a7..b8a3238d 100644 --- a/tests/unictype/test-pr_hyphen.c +++ b/tests/unictype/test-pr_hyphen.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_id_compat_math_continue.c b/tests/unictype/test-pr_id_compat_math_continue.c new file mode 100644 index 00000000..c5ff0f34 --- /dev/null +++ b/tests/unictype/test-pr_id_compat_math_continue.c @@ -0,0 +1,40 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation, either version 3 of the License, +   or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include "test-predicate-part1.h" + +    { 0x00B2, 0x00B3 }, +    { 0x00B9, 0x00B9 }, +    { 0x2070, 0x2070 }, +    { 0x2074, 0x207E }, +    { 0x2080, 0x208E }, +    { 0x2202, 0x2202 }, +    { 0x2207, 0x2207 }, +    { 0x221E, 0x221E }, +    { 0x1D6C1, 0x1D6C1 }, +    { 0x1D6DB, 0x1D6DB }, +    { 0x1D6FB, 0x1D6FB }, +    { 0x1D715, 0x1D715 }, +    { 0x1D735, 0x1D735 }, +    { 0x1D74F, 0x1D74F }, +    { 0x1D76F, 0x1D76F }, +    { 0x1D789, 0x1D789 }, +    { 0x1D7A9, 0x1D7A9 }, +    { 0x1D7C3, 0x1D7C3 } + +#define PREDICATE(c) uc_is_property_id_compat_math_continue (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_compat_math_start.c b/tests/unictype/test-pr_id_compat_math_start.c new file mode 100644 index 00000000..58848243 --- /dev/null +++ b/tests/unictype/test-pr_id_compat_math_start.c @@ -0,0 +1,35 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation, either version 3 of the License, +   or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include "test-predicate-part1.h" + +    { 0x2202, 0x2202 }, +    { 0x2207, 0x2207 }, +    { 0x221E, 0x221E }, +    { 0x1D6C1, 0x1D6C1 }, +    { 0x1D6DB, 0x1D6DB }, +    { 0x1D6FB, 0x1D6FB }, +    { 0x1D715, 0x1D715 }, +    { 0x1D735, 0x1D735 }, +    { 0x1D74F, 0x1D74F }, +    { 0x1D76F, 0x1D76F }, +    { 0x1D789, 0x1D789 }, +    { 0x1D7A9, 0x1D7A9 }, +    { 0x1D7C3, 0x1D7C3 } + +#define PREDICATE(c) uc_is_property_id_compat_math_start (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_continue.c b/tests/unictype/test-pr_id_continue.c index d72084de..39675ef1 100644 --- a/tests/unictype/test-pr_id_continue.c +++ b/tests/unictype/test-pr_id_continue.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -317,6 +317,7 @@      { 0x1FE0, 0x1FEC },      { 0x1FF2, 0x1FF4 },      { 0x1FF6, 0x1FFC }, +    { 0x200C, 0x200D },      { 0x203F, 0x2040 },      { 0x2054, 0x2054 },      { 0x2071, 0x2071 }, @@ -361,8 +362,7 @@      { 0x3038, 0x303C },      { 0x3041, 0x3096 },      { 0x3099, 0x309F }, -    { 0x30A1, 0x30FA }, -    { 0x30FC, 0x30FF }, +    { 0x30A1, 0x30FF },      { 0x3105, 0x312F },      { 0x3131, 0x318E },      { 0x31A0, 0x31BF }, @@ -440,7 +440,7 @@      { 0xFF21, 0xFF3A },      { 0xFF3F, 0xFF3F },      { 0xFF41, 0xFF5A }, -    { 0xFF66, 0xFFBE }, +    { 0xFF65, 0xFFBE },      { 0xFFC2, 0xFFC7 },      { 0xFFCA, 0xFFCF },      { 0xFFD2, 0xFFD7 }, @@ -781,6 +781,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-pr_id_start.c b/tests/unictype/test-pr_id_start.c index e8ccdf56..62bfc045 100644 --- a/tests/unictype/test-pr_id_start.c +++ b/tests/unictype/test-pr_id_start.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -673,6 +673,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ideographic.c b/tests/unictype/test-pr_ideographic.c index 8221e37b..0d71c94c 100644 --- a/tests/unictype/test-pr_ideographic.c +++ b/tests/unictype/test-pr_ideographic.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -34,6 +34,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_ids_binary_operator.c b/tests/unictype/test-pr_ids_binary_operator.c index 50722c30..49383cc0 100644 --- a/tests/unictype/test-pr_ids_binary_operator.c +++ b/tests/unictype/test-pr_ids_binary_operator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -18,7 +18,8 @@  #include "test-predicate-part1.h"      { 0x2FF0, 0x2FF1 }, -    { 0x2FF4, 0x2FFB } +    { 0x2FF4, 0x2FFD }, +    { 0x31EF, 0x31EF }  #define PREDICATE(c) uc_is_property_ids_binary_operator (c)  #include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ids_trinary_operator.c b/tests/unictype/test-pr_ids_trinary_operator.c index bce8bc4a..36e455cb 100644 --- a/tests/unictype/test-pr_ids_trinary_operator.c +++ b/tests/unictype/test-pr_ids_trinary_operator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_ids_unary_operator.c b/tests/unictype/test-pr_ids_unary_operator.c new file mode 100644 index 00000000..ec4b0e32 --- /dev/null +++ b/tests/unictype/test-pr_ids_unary_operator.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation, either version 3 of the License, +   or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include "test-predicate-part1.h" + +    { 0x2FFE, 0x2FFF } + +#define PREDICATE(c) uc_is_property_ids_unary_operator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ignorable_control.c b/tests/unictype/test-pr_ignorable_control.c index f37e657a..1903d5a5 100644 --- a/tests/unictype/test-pr_ignorable_control.c +++ b/tests/unictype/test-pr_ignorable_control.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_iso_control.c b/tests/unictype/test-pr_iso_control.c index 725e220a..c033d15c 100644 --- a/tests/unictype/test-pr_iso_control.c +++ b/tests/unictype/test-pr_iso_control.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_join_control.c b/tests/unictype/test-pr_join_control.c index 71e11fc3..299d3a80 100644 --- a/tests/unictype/test-pr_join_control.c +++ b/tests/unictype/test-pr_join_control.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_left_of_pair.c b/tests/unictype/test-pr_left_of_pair.c index b35a7248..162571ae 100644 --- a/tests/unictype/test-pr_left_of_pair.c +++ b/tests/unictype/test-pr_left_of_pair.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_line_separator.c b/tests/unictype/test-pr_line_separator.c index 80ebf303..76f9291c 100644 --- a/tests/unictype/test-pr_line_separator.c +++ b/tests/unictype/test-pr_line_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_logical_order_exception.c b/tests/unictype/test-pr_logical_order_exception.c index a24f4688..99a11123 100644 --- a/tests/unictype/test-pr_logical_order_exception.c +++ b/tests/unictype/test-pr_logical_order_exception.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_lowercase.c b/tests/unictype/test-pr_lowercase.c index 226f6371..ec16470f 100644 --- a/tests/unictype/test-pr_lowercase.c +++ b/tests/unictype/test-pr_lowercase.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_math.c b/tests/unictype/test-pr_math.c index fb6e4d56..98daf24f 100644 --- a/tests/unictype/test-pr_math.c +++ b/tests/unictype/test-pr_math.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_non_break.c b/tests/unictype/test-pr_non_break.c index 9dd2fccb..9b607060 100644 --- a/tests/unictype/test-pr_non_break.c +++ b/tests/unictype/test-pr_non_break.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_not_a_character.c b/tests/unictype/test-pr_not_a_character.c index 259416dd..477c1837 100644 --- a/tests/unictype/test-pr_not_a_character.c +++ b/tests/unictype/test-pr_not_a_character.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_numeric.c b/tests/unictype/test-pr_numeric.c index c86261cb..746abd28 100644 --- a/tests/unictype/test-pr_numeric.c +++ b/tests/unictype/test-pr_numeric.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_alphabetic.c b/tests/unictype/test-pr_other_alphabetic.c index cf0476e5..d0ff062f 100644 --- a/tests/unictype/test-pr_other_alphabetic.c +++ b/tests/unictype/test-pr_other_alphabetic.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_default_ignorable_code_point.c b/tests/unictype/test-pr_other_default_ignorable_code_point.c index b51db935..3fd52fbd 100644 --- a/tests/unictype/test-pr_other_default_ignorable_code_point.c +++ b/tests/unictype/test-pr_other_default_ignorable_code_point.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_grapheme_extend.c b/tests/unictype/test-pr_other_grapheme_extend.c index 50bc89c2..960fb927 100644 --- a/tests/unictype/test-pr_other_grapheme_extend.c +++ b/tests/unictype/test-pr_other_grapheme_extend.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_id_continue.c b/tests/unictype/test-pr_other_id_continue.c index ce4bcaeb..e1e2fdda 100644 --- a/tests/unictype/test-pr_other_id_continue.c +++ b/tests/unictype/test-pr_other_id_continue.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -20,7 +20,10 @@      { 0x00B7, 0x00B7 },      { 0x0387, 0x0387 },      { 0x1369, 0x1371 }, -    { 0x19DA, 0x19DA } +    { 0x19DA, 0x19DA }, +    { 0x200C, 0x200D }, +    { 0x30FB, 0x30FB }, +    { 0xFF65, 0xFF65 }  #define PREDICATE(c) uc_is_property_other_id_continue (c)  #include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_id_start.c b/tests/unictype/test-pr_other_id_start.c index c9b8efc5..dfbceb84 100644 --- a/tests/unictype/test-pr_other_id_start.c +++ b/tests/unictype/test-pr_other_id_start.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_lowercase.c b/tests/unictype/test-pr_other_lowercase.c index 3d7ba197..09b0dae4 100644 --- a/tests/unictype/test-pr_other_lowercase.c +++ b/tests/unictype/test-pr_other_lowercase.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_math.c b/tests/unictype/test-pr_other_math.c index b0715985..61306135 100644 --- a/tests/unictype/test-pr_other_math.c +++ b/tests/unictype/test-pr_other_math.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_other_uppercase.c b/tests/unictype/test-pr_other_uppercase.c index 6f5063f3..5a4541c3 100644 --- a/tests/unictype/test-pr_other_uppercase.c +++ b/tests/unictype/test-pr_other_uppercase.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_paired_punctuation.c b/tests/unictype/test-pr_paired_punctuation.c index a2f6671f..27565faf 100644 --- a/tests/unictype/test-pr_paired_punctuation.c +++ b/tests/unictype/test-pr_paired_punctuation.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_paragraph_separator.c b/tests/unictype/test-pr_paragraph_separator.c index 7cc3de9e..77d00fbd 100644 --- a/tests/unictype/test-pr_paragraph_separator.c +++ b/tests/unictype/test-pr_paragraph_separator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_pattern_syntax.c b/tests/unictype/test-pr_pattern_syntax.c index d265854b..ccc38488 100644 --- a/tests/unictype/test-pr_pattern_syntax.c +++ b/tests/unictype/test-pr_pattern_syntax.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_pattern_white_space.c b/tests/unictype/test-pr_pattern_white_space.c index b95978dd..e45e9ca9 100644 --- a/tests/unictype/test-pr_pattern_white_space.c +++ b/tests/unictype/test-pr_pattern_white_space.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_prepended_concatenation_mark.c b/tests/unictype/test-pr_prepended_concatenation_mark.c new file mode 100644 index 00000000..5a86b2c5 --- /dev/null +++ b/tests/unictype/test-pr_prepended_concatenation_mark.c @@ -0,0 +1,29 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. +   Copyright (C) 2007-2024 Free Software Foundation, Inc. + +   This file is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published +   by the Free Software Foundation, either version 3 of the License, +   or (at your option) any later version. + +   This file is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +#include "test-predicate-part1.h" + +    { 0x0600, 0x0605 }, +    { 0x06DD, 0x06DD }, +    { 0x070F, 0x070F }, +    { 0x0890, 0x0891 }, +    { 0x08E2, 0x08E2 }, +    { 0x110BD, 0x110BD }, +    { 0x110CD, 0x110CD } + +#define PREDICATE(c) uc_is_property_prepended_concatenation_mark (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_private_use.c b/tests/unictype/test-pr_private_use.c index c5c96c0e..167dd4e0 100644 --- a/tests/unictype/test-pr_private_use.c +++ b/tests/unictype/test-pr_private_use.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_punctuation.c b/tests/unictype/test-pr_punctuation.c index 3d0d45bf..29748f58 100644 --- a/tests/unictype/test-pr_punctuation.c +++ b/tests/unictype/test-pr_punctuation.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_quotation_mark.c b/tests/unictype/test-pr_quotation_mark.c index b0fc20ff..4db6b6f6 100644 --- a/tests/unictype/test-pr_quotation_mark.c +++ b/tests/unictype/test-pr_quotation_mark.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_radical.c b/tests/unictype/test-pr_radical.c index d732588a..c9a2bdd5 100644 --- a/tests/unictype/test-pr_radical.c +++ b/tests/unictype/test-pr_radical.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_regional_indicator.c b/tests/unictype/test-pr_regional_indicator.c index 2f912578..ecee1925 100644 --- a/tests/unictype/test-pr_regional_indicator.c +++ b/tests/unictype/test-pr_regional_indicator.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_sentence_terminal.c b/tests/unictype/test-pr_sentence_terminal.c index e2d1d3fd..100b7650 100644 --- a/tests/unictype/test-pr_sentence_terminal.c +++ b/tests/unictype/test-pr_sentence_terminal.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -34,6 +34,7 @@      { 0x1367, 0x1368 },      { 0x166E, 0x166E },      { 0x1735, 0x1736 }, +    { 0x17D4, 0x17D5 },      { 0x1803, 0x1803 },      { 0x1809, 0x1809 },      { 0x1944, 0x1945 }, diff --git a/tests/unictype/test-pr_soft_dotted.c b/tests/unictype/test-pr_soft_dotted.c index a4b9212c..6a3677da 100644 --- a/tests/unictype/test-pr_soft_dotted.c +++ b/tests/unictype/test-pr_soft_dotted.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_space.c b/tests/unictype/test-pr_space.c index 6530990b..a1795c4e 100644 --- a/tests/unictype/test-pr_space.c +++ b/tests/unictype/test-pr_space.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_terminal_punctuation.c b/tests/unictype/test-pr_terminal_punctuation.c index 65ccbc8e..b41adece 100644 --- a/tests/unictype/test-pr_terminal_punctuation.c +++ b/tests/unictype/test-pr_terminal_punctuation.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_test.c b/tests/unictype/test-pr_test.c index c08c32c8..e479123c 100644 --- a/tests/unictype/test-pr_test.c +++ b/tests/unictype/test-pr_test.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-pr_titlecase.c b/tests/unictype/test-pr_titlecase.c index e9e26b22..779bd919 100644 --- a/tests/unictype/test-pr_titlecase.c +++ b/tests/unictype/test-pr_titlecase.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_unassigned_code_value.c b/tests/unictype/test-pr_unassigned_code_value.c index 607e938d..be826822 100644 --- a/tests/unictype/test-pr_unassigned_code_value.c +++ b/tests/unictype/test-pr_unassigned_code_value.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -286,13 +286,12 @@      { 0x2E9A, 0x2E9A },      { 0x2EF4, 0x2EFF },      { 0x2FD6, 0x2FEF }, -    { 0x2FFC, 0x2FFF },      { 0x3040, 0x3040 },      { 0x3097, 0x3098 },      { 0x3100, 0x3104 },      { 0x3130, 0x3130 },      { 0x318F, 0x318F }, -    { 0x31E4, 0x31EF }, +    { 0x31E4, 0x31EE },      { 0x321F, 0x321F },      { 0xA48D, 0xA48F },      { 0xA4C7, 0xA4CF }, @@ -713,7 +712,8 @@      { 0x2B73A, 0x2B73F },      { 0x2B81E, 0x2B81F },      { 0x2CEA2, 0x2CEAF }, -    { 0x2EBE1, 0x2F7FF }, +    { 0x2EBE1, 0x2EBEF }, +    { 0x2EE5E, 0x2F7FF },      { 0x2FA1E, 0x2FFFD },      { 0x3134B, 0x3134F },      { 0x323B0, 0x3FFFD }, diff --git a/tests/unictype/test-pr_unified_ideograph.c b/tests/unictype/test-pr_unified_ideograph.c index 234014a7..9ecdb7fb 100644 --- a/tests/unictype/test-pr_unified_ideograph.c +++ b/tests/unictype/test-pr_unified_ideograph.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -31,6 +31,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_uppercase.c b/tests/unictype/test-pr_uppercase.c index 03a6b490..826eb210 100644 --- a/tests/unictype/test-pr_uppercase.c +++ b/tests/unictype/test-pr_uppercase.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_variation_selector.c b/tests/unictype/test-pr_variation_selector.c index 98f81fef..0a2e37e5 100644 --- a/tests/unictype/test-pr_variation_selector.c +++ b/tests/unictype/test-pr_variation_selector.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_white_space.c b/tests/unictype/test-pr_white_space.c index 91367da2..c39d3def 100644 --- a/tests/unictype/test-pr_white_space.c +++ b/tests/unictype/test-pr_white_space.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-pr_xid_continue.c b/tests/unictype/test-pr_xid_continue.c index 34d4708b..91371e8f 100644 --- a/tests/unictype/test-pr_xid_continue.c +++ b/tests/unictype/test-pr_xid_continue.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -317,6 +317,7 @@      { 0x1FE0, 0x1FEC },      { 0x1FF2, 0x1FF4 },      { 0x1FF6, 0x1FFC }, +    { 0x200C, 0x200D },      { 0x203F, 0x2040 },      { 0x2054, 0x2054 },      { 0x2071, 0x2071 }, @@ -362,8 +363,7 @@      { 0x3041, 0x3096 },      { 0x3099, 0x309A },      { 0x309D, 0x309F }, -    { 0x30A1, 0x30FA }, -    { 0x30FC, 0x30FF }, +    { 0x30A1, 0x30FF },      { 0x3105, 0x312F },      { 0x3131, 0x318E },      { 0x31A0, 0x31BF }, @@ -447,7 +447,7 @@      { 0xFF21, 0xFF3A },      { 0xFF3F, 0xFF3F },      { 0xFF41, 0xFF5A }, -    { 0xFF66, 0xFFBE }, +    { 0xFF65, 0xFFBE },      { 0xFFC2, 0xFFC7 },      { 0xFFCA, 0xFFCF },      { 0xFFD2, 0xFFD7 }, @@ -788,6 +788,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF }, diff --git a/tests/unictype/test-pr_xid_start.c b/tests/unictype/test-pr_xid_start.c index 0e4f7d31..09ce3db1 100644 --- a/tests/unictype/test-pr_xid_start.c +++ b/tests/unictype/test-pr_xid_start.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published @@ -680,6 +680,7 @@      { 0x2B740, 0x2B81D },      { 0x2B820, 0x2CEA1 },      { 0x2CEB0, 0x2EBE0 }, +    { 0x2EBF0, 0x2EE5D },      { 0x2F800, 0x2FA1D },      { 0x30000, 0x3134A },      { 0x31350, 0x323AF } diff --git a/tests/unictype/test-pr_zero_width.c b/tests/unictype/test-pr_zero_width.c index a8eef5ec..6767de44 100644 --- a/tests/unictype/test-pr_zero_width.c +++ b/tests/unictype/test-pr_zero_width.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-predicate-part1.h b/tests/unictype/test-predicate-part1.h index 76de3a78..10eb668b 100644 --- a/tests/unictype/test-predicate-part1.h +++ b/tests/unictype/test-predicate-part1.h @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-predicate-part2.h b/tests/unictype/test-predicate-part2.h index d42921ab..aecd5f5a 100644 --- a/tests/unictype/test-predicate-part2.h +++ b/tests/unictype/test-predicate-part2.h @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-scripts.c b/tests/unictype/test-scripts.c index 059006e1..6f51b631 100644 --- a/tests/unictype/test-scripts.c +++ b/tests/unictype/test-scripts.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_c_ident.c b/tests/unictype/test-sy_c_ident.c index baf8b106..87022732 100644 --- a/tests/unictype/test-sy_c_ident.c +++ b/tests/unictype/test-sy_c_ident.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_c_whitespace.c b/tests/unictype/test-sy_c_whitespace.c index 1d047752..88daee7a 100644 --- a/tests/unictype/test-sy_c_whitespace.c +++ b/tests/unictype/test-sy_c_whitespace.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unictype/test-sy_java_ident.c b/tests/unictype/test-sy_java_ident.c index 206d3940..d3075b17 100644 --- a/tests/unictype/test-sy_java_ident.c +++ b/tests/unictype/test-sy_java_ident.c @@ -1,5 +1,5 @@  /* Test the Unicode character type functions. -   Copyright (C) 2007-2009 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unictype/test-sy_java_whitespace.c b/tests/unictype/test-sy_java_whitespace.c index 4ce5982a..8c974f07 100644 --- a/tests/unictype/test-sy_java_whitespace.c +++ b/tests/unictype/test-sy_java_whitespace.c @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode character type functions. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unigbrk/GraphemeBreakTest.txt b/tests/unigbrk/GraphemeBreakTest.txt index 3c73f97b..d9c7b066 100644 --- a/tests/unigbrk/GraphemeBreakTest.txt +++ b/tests/unigbrk/GraphemeBreakTest.txt @@ -1,6 +1,46 @@ -# GraphemeBreakTest-15.0.0.txt -# Date: 2022-02-26, 00:38:37 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# GraphemeBreakTest-15.1.0.txt +# Date: 2023-08-07, 15:52:55 GMT +# © 2023 Unicode®, Inc.  # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.  # For terms of use, see https://www.unicode.org/terms_of_use.html  # @@ -36,8 +76,8 @@  ÷ 0020 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 0020 ÷ 0600 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 0020 × 0308 ÷ 0600 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0020 × 0903 ÷	#  ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0020 × 0308 × 0903 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0A03 ÷	#  ÷ [0.2] SPACE (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0020 × 0308 × 0A03 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 0020 ÷ 1100 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0020 × 0308 ÷ 1100 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0020 ÷ 1160 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -48,10 +88,24 @@  ÷ 0020 × 0308 ÷ AC00 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 0020 ÷ AC01 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 0020 × 0308 ÷ AC01 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0020 × 0900 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 × 0900 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0903 ÷	#  ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 × 0903 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0904 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 ÷ 0904 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0D4E ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0020 ÷ 0915 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0020 × 0308 ÷ 0915 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 0020 ÷ 231A ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0020 × 0308 ÷ 231A ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0020 × 0300 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 0020 × 0308 × 0300 ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0020 × 093C ÷	#  ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 093C ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0020 × 094D ÷	#  ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0020 × 0308 × 094D ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 0020 × 200D ÷	#  ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0020 × 0308 × 200D ÷	#  ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0020 ÷ 0378 ÷	#  ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -70,8 +124,8 @@  ÷ 000D ÷ 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 000D ÷ 0600 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 000D ÷ 0308 ÷ 0600 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000D ÷ 0903 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000D ÷ 0308 × 0903 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0A03 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000D ÷ 0308 × 0A03 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 000D ÷ 1100 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 000D ÷ 0308 ÷ 1100 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 000D ÷ 1160 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -82,10 +136,24 @@  ÷ 000D ÷ 0308 ÷ AC00 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 000D ÷ AC01 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 000D ÷ 0308 ÷ AC01 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000D ÷ 0900 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 × 0900 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0903 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 × 0903 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0904 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0904 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0D4E ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0D4E ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000D ÷ 0915 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 000D ÷ 0308 ÷ 0915 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 000D ÷ 231A ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]  ÷ 000D ÷ 0308 ÷ 231A ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 000D ÷ 0300 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 000D ÷ 0308 × 0300 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 093C ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 093C ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 094D ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 000D ÷ 0308 × 094D ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 000D ÷ 200D ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 000D ÷ 0308 × 200D ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 000D ÷ 0378 ÷	#  ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -104,8 +172,8 @@  ÷ 000A ÷ 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 000A ÷ 0600 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 000A ÷ 0308 ÷ 0600 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 000A ÷ 0903 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 000A ÷ 0308 × 0903 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0A03 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 000A ÷ 0308 × 0A03 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 000A ÷ 1100 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 000A ÷ 0308 ÷ 1100 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 000A ÷ 1160 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -116,10 +184,24 @@  ÷ 000A ÷ 0308 ÷ AC00 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 000A ÷ AC01 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 000A ÷ 0308 ÷ AC01 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 000A ÷ 0900 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 × 0900 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0903 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 × 0903 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0904 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0904 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0D4E ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0D4E ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 000A ÷ 0915 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 000A ÷ 0308 ÷ 0915 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 000A ÷ 231A ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]  ÷ 000A ÷ 0308 ÷ 231A ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 000A ÷ 0300 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 000A ÷ 0308 × 0300 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 093C ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 093C ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 094D ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 000A ÷ 0308 × 094D ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 000A ÷ 200D ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 000A ÷ 0308 × 200D ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 000A ÷ 0378 ÷	#  ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -138,8 +220,8 @@  ÷ 0001 ÷ 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 0001 ÷ 0600 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 0001 ÷ 0308 ÷ 0600 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0001 ÷ 0903 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0001 ÷ 0308 × 0903 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0A03 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0001 ÷ 0308 × 0A03 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 0001 ÷ 1100 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0001 ÷ 0308 ÷ 1100 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0001 ÷ 1160 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -150,10 +232,24 @@  ÷ 0001 ÷ 0308 ÷ AC00 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 0001 ÷ AC01 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 0001 ÷ 0308 ÷ AC01 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0001 ÷ 0900 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 × 0900 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0903 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 × 0903 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0904 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0904 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0D4E ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0D4E ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0001 ÷ 0915 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0001 ÷ 0308 ÷ 0915 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 0001 ÷ 231A ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0001 ÷ 0308 ÷ 231A ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0001 ÷ 0300 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 0001 ÷ 0308 × 0300 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 093C ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 093C ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 094D ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0001 ÷ 0308 × 094D ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 0001 ÷ 200D ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0001 ÷ 0308 × 200D ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0001 ÷ 0378 ÷	#  ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3] @@ -172,8 +268,8 @@  ÷ 034F × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 034F ÷ 0600 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 034F × 0308 ÷ 0600 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 034F × 0903 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 034F × 0308 × 0903 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0A03 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 034F × 0308 × 0A03 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 034F ÷ 1100 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 034F × 0308 ÷ 1100 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 034F ÷ 1160 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -184,10 +280,24 @@  ÷ 034F × 0308 ÷ AC00 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 034F ÷ AC01 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 034F × 0308 ÷ AC01 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 034F × 0900 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 × 0900 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0903 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 × 0903 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0904 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 ÷ 0904 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0D4E ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F × 0308 ÷ 0D4E ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 034F ÷ 0915 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 034F × 0308 ÷ 0915 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 034F ÷ 231A ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 034F × 0308 ÷ 231A ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 034F × 0300 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 034F × 0308 × 0300 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 034F × 093C ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 093C ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 034F × 094D ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 034F × 0308 × 094D ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 034F × 200D ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 034F × 0308 × 200D ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 034F ÷ 0378 ÷	#  ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -206,8 +316,8 @@  ÷ 1F1E6 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 1F1E6 ÷ 0600 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 1F1E6 × 0308 ÷ 0600 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1F1E6 × 0903 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1F1E6 × 0308 × 0903 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0A03 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1F1E6 × 0308 × 0A03 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 1F1E6 ÷ 1100 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1F1E6 × 0308 ÷ 1100 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1F1E6 ÷ 1160 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -218,10 +328,24 @@  ÷ 1F1E6 × 0308 ÷ AC00 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 1F1E6 ÷ AC01 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 1F1E6 × 0308 ÷ AC01 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1F1E6 × 0900 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 × 0900 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0903 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 × 0903 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0904 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0904 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0D4E ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1F1E6 ÷ 0915 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1F1E6 × 0308 ÷ 0915 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 1F1E6 ÷ 231A ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1F1E6 × 0308 ÷ 231A ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1F1E6 × 0300 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 1F1E6 × 0308 × 0300 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 093C ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 093C ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 094D ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1F1E6 × 0308 × 094D ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 1F1E6 × 200D ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1F1E6 × 0308 × 200D ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1F1E6 ÷ 0378 ÷	#  ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -240,8 +364,8 @@  ÷ 0600 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 0600 × 0600 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 0600 × 0308 ÷ 0600 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0600 × 0903 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0600 × 0308 × 0903 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0A03 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0600 × 0308 × 0A03 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 0600 × 1100 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0600 × 0308 ÷ 1100 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0600 × 1160 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -252,48 +376,76 @@  ÷ 0600 × 0308 ÷ AC00 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 0600 × AC01 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 0600 × 0308 ÷ AC01 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0600 × 0900 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 × 0900 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0903 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 × 0903 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0904 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 ÷ 0904 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0D4E ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0600 × 0915 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0600 × 0308 ÷ 0915 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 0600 × 231A ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3]  ÷ 0600 × 0308 ÷ 231A ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0600 × 0300 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 0600 × 0308 × 0300 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0600 × 093C ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 093C ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0600 × 094D ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0600 × 0308 × 094D ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 0600 × 200D ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0600 × 0308 × 200D ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0600 × 0378 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] <reserved-0378> (Other) ÷ [0.3]  ÷ 0600 × 0308 ÷ 0378 ÷	#  ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] -÷ 0903 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] -÷ 0903 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] -÷ 0903 × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] -÷ 0903 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] -÷ 0903 × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] -÷ 0903 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] -÷ 0903 × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] -÷ 0903 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] -÷ 0903 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] -÷ 0903 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0903 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0903 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] -÷ 0903 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] -÷ 0903 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] -÷ 0903 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] -÷ 0903 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] -÷ 0903 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] -÷ 0903 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] -÷ 0903 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] -÷ 0903 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] -÷ 0903 × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0A03 ÷ 0020 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0020 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0A03 ÷ 000D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0A03 × 0308 ÷ 000D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0A03 ÷ 000A ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0A03 × 0308 ÷ 000A ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0A03 ÷ 0001 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0001 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0A03 × 034F ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0A03 × 0308 × 034F ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0A03 ÷ 1F1E6 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0A03 ÷ 0600 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0600 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0A03 × 0A03 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0A03 × 0308 × 0A03 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0A03 ÷ 1100 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1100 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0A03 ÷ 1160 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0A03 × 0308 ÷ 1160 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0A03 ÷ 11A8 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0A03 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0A03 ÷ AC00 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0A03 × 0308 ÷ AC00 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0A03 ÷ AC01 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0A03 × 0308 ÷ AC01 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0A03 × 0900 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 × 0900 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0903 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 × 0903 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0904 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0904 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0D4E ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0A03 ÷ 0915 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0915 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0A03 ÷ 231A ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0A03 × 0308 ÷ 231A ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0A03 × 0300 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 0300 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 093C ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 093C ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 094D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 094D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 200D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0A03 × 0308 × 200D ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0A03 ÷ 0378 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0A03 × 0308 ÷ 0378 ÷	#  ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]  ÷ 1100 ÷ 0020 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 1100 × 0308 ÷ 0020 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 1100 ÷ 000D ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -308,8 +460,8 @@  ÷ 1100 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 1100 ÷ 0600 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 1100 × 0308 ÷ 0600 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1100 × 0903 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1100 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0A03 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1100 × 0308 × 0A03 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 1100 × 1100 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1100 × 0308 ÷ 1100 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1100 × 1160 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -320,10 +472,24 @@  ÷ 1100 × 0308 ÷ AC00 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 1100 × AC01 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 1100 × 0308 ÷ AC01 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1100 × 0900 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 × 0900 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0903 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0904 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 ÷ 0904 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1100 ÷ 0915 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1100 × 0308 ÷ 0915 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 1100 ÷ 231A ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1100 × 0308 ÷ 231A ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1100 × 0300 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 1100 × 0308 × 0300 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1100 × 093C ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 093C ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1100 × 094D ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1100 × 0308 × 094D ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 1100 × 200D ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1100 × 0308 × 200D ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1100 ÷ 0378 ÷	#  ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -342,8 +508,8 @@  ÷ 1160 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 1160 ÷ 0600 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 1160 × 0308 ÷ 0600 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 1160 × 0903 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 1160 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0A03 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 1160 × 0308 × 0A03 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 1160 ÷ 1100 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1160 × 0308 ÷ 1100 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 1160 × 1160 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -354,10 +520,24 @@  ÷ 1160 × 0308 ÷ AC00 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 1160 ÷ AC01 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 1160 × 0308 ÷ AC01 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 1160 × 0900 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 × 0900 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0903 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0904 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 ÷ 0904 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 1160 ÷ 0915 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 1160 × 0308 ÷ 0915 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 1160 ÷ 231A ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1160 × 0308 ÷ 231A ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 1160 × 0300 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 1160 × 0308 × 0300 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 1160 × 093C ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 093C ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 1160 × 094D ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 1160 × 0308 × 094D ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 1160 × 200D ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1160 × 0308 × 200D ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 1160 ÷ 0378 ÷	#  ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -376,8 +556,8 @@  ÷ 11A8 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 11A8 ÷ 0600 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 11A8 × 0308 ÷ 0600 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 11A8 × 0903 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 11A8 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0A03 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 11A8 × 0308 × 0A03 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 11A8 ÷ 1100 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 11A8 × 0308 ÷ 1100 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 11A8 ÷ 1160 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -388,10 +568,24 @@  ÷ 11A8 × 0308 ÷ AC00 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 11A8 ÷ AC01 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 11A8 × 0308 ÷ AC01 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 11A8 × 0900 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 × 0900 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0903 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0904 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0904 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 11A8 ÷ 0915 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 11A8 × 0308 ÷ 0915 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 11A8 ÷ 231A ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 11A8 × 0308 ÷ 231A ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 11A8 × 0300 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 11A8 × 0308 × 0300 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 093C ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 093C ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 094D ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 11A8 × 0308 × 094D ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 11A8 × 200D ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 11A8 × 0308 × 200D ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 11A8 ÷ 0378 ÷	#  ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -410,8 +604,8 @@  ÷ AC00 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ AC00 ÷ 0600 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ AC00 × 0308 ÷ 0600 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC00 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC00 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0A03 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC00 × 0308 × 0A03 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ AC00 ÷ 1100 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ AC00 × 0308 ÷ 1100 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ AC00 × 1160 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -422,10 +616,24 @@  ÷ AC00 × 0308 ÷ AC00 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ AC00 ÷ AC01 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ AC00 × 0308 ÷ AC01 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC00 × 0900 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 × 0900 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0904 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 ÷ 0904 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC00 ÷ 0915 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ AC00 × 0308 ÷ 0915 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ AC00 ÷ 231A ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ AC00 × 0308 ÷ 231A ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ AC00 × 0300 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ AC00 × 0308 × 0300 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC00 × 093C ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 093C ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC00 × 094D ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ AC00 × 0308 × 094D ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ AC00 × 200D ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ AC00 × 0308 × 200D ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ AC00 ÷ 0378 ÷	#  ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -444,8 +652,8 @@  ÷ AC01 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ AC01 ÷ 0600 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ AC01 × 0308 ÷ 0600 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ AC01 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ AC01 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0A03 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ AC01 × 0308 × 0A03 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ AC01 ÷ 1100 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ AC01 × 0308 ÷ 1100 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ AC01 ÷ 1160 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -456,14 +664,268 @@  ÷ AC01 × 0308 ÷ AC00 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ AC01 ÷ AC01 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ AC01 × 0308 ÷ AC01 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ AC01 × 0900 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 × 0900 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 × 0903 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0904 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 ÷ 0904 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ AC01 ÷ 0915 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ AC01 × 0308 ÷ 0915 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ AC01 ÷ 231A ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ AC01 × 0308 ÷ 231A ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ AC01 × 0300 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ AC01 × 0308 × 0300 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ AC01 × 093C ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 093C ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ AC01 × 094D ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ AC01 × 0308 × 094D ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ AC01 × 200D ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ AC01 × 0308 × 200D ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ AC01 ÷ 0378 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]  ÷ AC01 × 0308 ÷ 0378 ÷	#  ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0900 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0900 × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0900 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0900 × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0900 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0900 × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0900 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0900 × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0900 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0900 × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0900 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0900 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0900 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0900 × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0900 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0900 × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0900 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0900 × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0900 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0900 × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0900 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0900 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0900 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0900 × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0900 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0900 × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0900 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0900 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0900 × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0900 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0900 × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0900 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0900 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0900 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0900 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0900 × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0900 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0900 × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0903 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0903 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0903 × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0903 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0903 × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0903 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0903 × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0903 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0903 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0903 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0903 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0903 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0903 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0903 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0903 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0903 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0903 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0903 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0903 × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0903 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0903 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0903 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0903 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0903 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0903 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0903 × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0904 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0904 × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0904 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0904 × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0904 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0904 × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0904 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0904 × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0904 × 034F ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0904 × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0904 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0904 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0904 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0904 × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0904 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0904 × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0904 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0904 × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0904 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0904 × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0904 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0904 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0904 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0904 × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0904 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0904 × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0904 × 0900 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0903 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0904 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0904 × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0904 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0904 × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0904 × 0300 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0904 × 093C ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0904 × 094D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0904 × 200D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0904 × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0904 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0904 × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0D4E × 0020 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] SPACE (Other) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0020 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0D4E ÷ 000D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0D4E × 0308 ÷ 000D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0D4E ÷ 000A ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0D4E × 0308 ÷ 000A ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0D4E ÷ 0001 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0001 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0D4E × 034F ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0D4E × 0308 × 034F ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0D4E × 1F1E6 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0D4E × 0600 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0600 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0D4E × 0A03 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0D4E × 0308 × 0A03 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0D4E × 1100 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1100 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0D4E × 1160 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0D4E × 0308 ÷ 1160 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0D4E × 11A8 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0D4E × 0308 ÷ 11A8 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0D4E × AC00 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0D4E × 0308 ÷ AC00 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0D4E × AC01 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0D4E × 0308 ÷ AC01 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0D4E × 0900 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 × 0900 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0903 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 × 0903 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0904 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0904 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0D4E ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0D4E ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0D4E × 0915 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0915 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0D4E × 231A ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] WATCH (ExtPict) ÷ [0.3] +÷ 0D4E × 0308 ÷ 231A ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0D4E × 0300 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 0300 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 093C ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 093C ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 094D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 094D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 200D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0308 × 200D ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0D4E × 0378 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] <reserved-0378> (Other) ÷ [0.3] +÷ 0D4E × 0308 ÷ 0378 ÷	#  ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0915 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0915 × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 0915 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0915 × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 0915 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0915 × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 0915 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0915 × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 0915 × 034F ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0915 × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 0915 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0915 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 0915 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0915 × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 0915 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0915 × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0915 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0915 × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 0915 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0915 × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 0915 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0915 × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 0915 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0915 × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 0915 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0915 × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0915 × 0900 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0903 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0915 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0915 × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 0915 × 0300 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0915 × 093C ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0915 × 094D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0915 × 200D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0915 × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 0915 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 0915 × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]  ÷ 231A ÷ 0020 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 231A × 0308 ÷ 0020 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 231A ÷ 000D ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -478,8 +940,8 @@  ÷ 231A × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 231A ÷ 0600 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 231A × 0308 ÷ 0600 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 231A × 0903 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 231A × 0308 × 0903 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0A03 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 231A × 0308 × 0A03 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 231A ÷ 1100 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 231A × 0308 ÷ 1100 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 231A ÷ 1160 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -490,10 +952,24 @@  ÷ 231A × 0308 ÷ AC00 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 231A ÷ AC01 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 231A × 0308 ÷ AC01 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 231A × 0900 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 × 0900 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0903 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 × 0903 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0904 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 ÷ 0904 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0D4E ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A × 0308 ÷ 0D4E ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 231A ÷ 0915 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 231A × 0308 ÷ 0915 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 231A ÷ 231A ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 231A × 0308 ÷ 231A ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 231A × 0300 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 231A × 0308 × 0300 ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 231A × 093C ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 093C ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 231A × 094D ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 231A × 0308 × 094D ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 231A × 200D ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 231A × 0308 × 200D ÷	#  ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 231A ÷ 0378 ÷	#  ÷ [0.2] WATCH (ExtPict) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -512,8 +988,8 @@  ÷ 0300 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 0300 ÷ 0600 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 0300 × 0308 ÷ 0600 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0300 × 0903 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0300 × 0308 × 0903 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0A03 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0300 × 0308 × 0A03 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 0300 ÷ 1100 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0300 × 0308 ÷ 1100 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0300 ÷ 1160 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -524,14 +1000,124 @@  ÷ 0300 × 0308 ÷ AC00 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 0300 ÷ AC01 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 0300 × 0308 ÷ AC01 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0300 × 0900 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 × 0900 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0903 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 × 0903 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0904 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 ÷ 0904 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0D4E ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0300 ÷ 0915 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0300 × 0308 ÷ 0915 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 0300 ÷ 231A ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0300 × 0308 ÷ 231A ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0300 × 0300 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 0300 × 0308 × 0300 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0300 × 093C ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 093C ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0300 × 094D ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0300 × 0308 × 094D ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 0300 × 200D ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0300 × 0308 × 200D ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0300 ÷ 0378 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]  ÷ 0300 × 0308 ÷ 0378 ÷	#  ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 093C ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 093C × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 093C ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 093C × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 093C ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 093C × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 093C ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 093C × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 093C × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 093C × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 093C ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 093C × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 093C ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 093C × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 093C × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 093C × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 093C ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 093C × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 093C ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 093C × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 093C ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 093C × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 093C ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 093C × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 093C ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 093C × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 093C × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 093C ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 093C × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 093C ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 093C × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 093C × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 093C × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 093C × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 093C × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 093C × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 093C ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 093C × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 094D ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 094D × 0308 ÷ 0020 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3] +÷ 094D ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 094D × 0308 ÷ 000D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] +÷ 094D ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 094D × 0308 ÷ 000A ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3] +÷ 094D ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 094D × 0308 ÷ 0001 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3] +÷ 094D × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 094D × 0308 × 034F ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3] +÷ 094D ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 094D × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3] +÷ 094D ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 094D × 0308 ÷ 0600 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] +÷ 094D × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 094D × 0308 × 0A03 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 094D ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 094D × 0308 ÷ 1100 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3] +÷ 094D ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 094D × 0308 ÷ 1160 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] +÷ 094D ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 094D × 0308 ÷ 11A8 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3] +÷ 094D ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 094D × 0308 ÷ AC00 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3] +÷ 094D ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 094D × 0308 ÷ AC01 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 094D × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 × 0900 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 × 0903 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 ÷ 0904 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D × 0308 ÷ 0D4E ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 094D ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 094D × 0308 ÷ 0915 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 094D ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 094D × 0308 ÷ 231A ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3] +÷ 094D × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 0300 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 094D × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 093C ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 094D × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 094D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 094D × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 094D × 0308 × 200D ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3] +÷ 094D ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] +÷ 094D × 0308 ÷ 0378 ÷	#  ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]  ÷ 200D ÷ 0020 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 200D × 0308 ÷ 0020 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]  ÷ 200D ÷ 000D ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3] @@ -546,8 +1132,8 @@  ÷ 200D × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 200D ÷ 0600 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 200D × 0308 ÷ 0600 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 200D × 0903 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 200D × 0308 × 0903 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0A03 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 200D × 0308 × 0A03 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 200D ÷ 1100 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 200D × 0308 ÷ 1100 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 200D ÷ 1160 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -558,10 +1144,24 @@  ÷ 200D × 0308 ÷ AC00 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 200D ÷ AC01 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 200D × 0308 ÷ AC01 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 200D × 0900 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 × 0900 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0903 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 × 0903 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0904 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 ÷ 0904 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0D4E ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D × 0308 ÷ 0D4E ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 200D ÷ 0915 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 200D × 0308 ÷ 0915 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 200D ÷ 231A ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 200D × 0308 ÷ 231A ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 200D × 0300 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 200D × 0308 × 0300 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 200D × 093C ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 093C ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 200D × 094D ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 200D × 0308 × 094D ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 200D × 200D ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 200D × 0308 × 200D ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 200D ÷ 0378 ÷	#  ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -580,8 +1180,8 @@  ÷ 0378 × 0308 ÷ 1F1E6 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]  ÷ 0378 ÷ 0600 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]  ÷ 0378 × 0308 ÷ 0600 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3] -÷ 0378 × 0903 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] -÷ 0378 × 0308 × 0903 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0A03 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3] +÷ 0378 × 0308 × 0A03 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]  ÷ 0378 ÷ 1100 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0378 × 0308 ÷ 1100 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]  ÷ 0378 ÷ 1160 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3] @@ -592,10 +1192,24 @@  ÷ 0378 × 0308 ÷ AC00 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]  ÷ 0378 ÷ AC01 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]  ÷ 0378 × 0308 ÷ AC01 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3] +÷ 0378 × 0900 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 × 0900 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0903 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 × 0903 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0904 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 ÷ 0904 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0D4E ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 × 0308 ÷ 0D4E ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3] +÷ 0378 ÷ 0915 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0378 × 0308 ÷ 0915 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  ÷ 0378 ÷ 231A ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0378 × 0308 ÷ 231A ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]  ÷ 0378 × 0300 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]  ÷ 0378 × 0308 × 0300 ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3] +÷ 0378 × 093C ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 093C ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3] +÷ 0378 × 094D ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3] +÷ 0378 × 0308 × 094D ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]  ÷ 0378 × 200D ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0378 × 0308 × 200D ÷	#  ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0378 ÷ 0378 ÷	#  ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3] @@ -614,7 +1228,7 @@  ÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]  ÷ 0061 × 200D ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]  ÷ 0061 × 0308 ÷ 0062 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] -÷ 0061 × 0903 ÷ 0062 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3] +÷ 0061 × 0903 ÷ 0062 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]  ÷ 0061 ÷ 0600 × 0062 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3]  ÷ 1F476 × 1F3FF ÷ 1F476 ÷	#  ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]  ÷ 0061 × 1F3FF ÷ 1F476 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3] @@ -624,7 +1238,18 @@  ÷ 0061 × 200D ÷ 1F6D1 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]  ÷ 2701 × 200D × 2701 ÷	#  ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]  ÷ 0061 × 200D ÷ 2701 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3] +÷ 0915 ÷ 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 094D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 200D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 093C × 200D × 094D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 093C × 094D × 200D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 0924 × 094D × 092F ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER YA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D ÷ 0061 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER A (Other) ÷ [0.3] +÷ 0061 × 094D ÷ 0924 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 003F × 094D ÷ 0924 ÷	#  ÷ [0.2] QUESTION MARK (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3] +÷ 0915 × 094D × 094D × 0924 ÷	#  ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]  # -# Lines: 602 +# Lines: 1187  #  # EOF diff --git a/tests/unigbrk/test-u16-grapheme-breaks.c b/tests/unigbrk/test-u16-grapheme-breaks.c index a1cb80da..79360508 100644 --- a/tests/unigbrk/test-u16-grapheme-breaks.c +++ b/tests/unigbrk/test-u16-grapheme-breaks.c @@ -1,5 +1,5 @@  /* Grapheme cluster breaks test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -61,19 +61,20 @@ test_u16_grapheme_breaks (const char *expected, ...)          fprintf (stderr, "   input:");          for (j = 0; j < n; j++) -          fprintf (stderr, " %02x", s[j]); +          fprintf (stderr, " %04X", s[j]);          putc ('\n', stderr);          fprintf (stderr, "expected:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", expected[j] == '#'); +          fprintf (stderr, "    %d", expected[j] == '#');          putc ('\n', stderr);          fprintf (stderr, "  actual:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", breaks[j]); +          fprintf (stderr, "    %d", breaks[j]);          putc ('\n', stderr); +        fflush (stderr);          abort ();        }  } diff --git a/tests/unigbrk/test-u16-grapheme-next.c b/tests/unigbrk/test-u16-grapheme-next.c index bb7aba65..45a7ac0a 100644 --- a/tests/unigbrk/test-u16-grapheme-next.c +++ b/tests/unigbrk/test-u16-grapheme-next.c @@ -1,5 +1,5 @@  /* Next grapheme cluster length test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -57,11 +57,12 @@ test_u16_grapheme_next (size_t len, ...)        if (next == NULL)          fputs ("u16_grapheme_next returned NULL", stderr);        else -        fprintf (stderr, "u16_grapheme_next skipped %zu units", next - s); +        fprintf (stderr, "u16_grapheme_next skipped %tu units", next - s);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %04x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-u16-grapheme-prev.c b/tests/unigbrk/test-u16-grapheme-prev.c index 986b5ddf..8ba01c2e 100644 --- a/tests/unigbrk/test-u16-grapheme-prev.c +++ b/tests/unigbrk/test-u16-grapheme-prev.c @@ -1,5 +1,5 @@  /* Previous grapheme cluster test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -59,11 +59,12 @@ test_u16_grapheme_prev (size_t len, ...)        if (prev == NULL)          fputs ("u16_grapheme_prev returned NULL", stderr);        else -        fprintf (stderr, "u16_grapheme_prev skipped %zu units", end - prev); +        fprintf (stderr, "u16_grapheme_prev skipped %tu units", end - prev);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %04x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-u32-grapheme-breaks.c b/tests/unigbrk/test-u32-grapheme-breaks.c index 7af266e8..996555cc 100644 --- a/tests/unigbrk/test-u32-grapheme-breaks.c +++ b/tests/unigbrk/test-u32-grapheme-breaks.c @@ -1,5 +1,5 @@  /* Grapheme cluster breaks test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -61,19 +61,20 @@ test_u32_grapheme_breaks (const char *expected, ...)          fprintf (stderr, "   input:");          for (j = 0; j < n; j++) -          fprintf (stderr, " %02x", s[j]); +          fprintf (stderr, " %04X", s[j]);          putc ('\n', stderr);          fprintf (stderr, "expected:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", expected[j] == '#'); +          fprintf (stderr, "    %d", expected[j] == '#');          putc ('\n', stderr);          fprintf (stderr, "  actual:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", breaks[j]); +          fprintf (stderr, "    %d", breaks[j]);          putc ('\n', stderr); +        fflush (stderr);          abort ();        }  } diff --git a/tests/unigbrk/test-u32-grapheme-next.c b/tests/unigbrk/test-u32-grapheme-next.c index 1762378c..2681d674 100644 --- a/tests/unigbrk/test-u32-grapheme-next.c +++ b/tests/unigbrk/test-u32-grapheme-next.c @@ -1,5 +1,5 @@  /* Next grapheme cluster length test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -57,11 +57,12 @@ test_u32_grapheme_next (size_t len, ...)        if (next == NULL)          fputs ("u32_grapheme_next returned NULL", stderr);        else -        fprintf (stderr, "u32_grapheme_next skipped %zu units", next - s); +        fprintf (stderr, "u32_grapheme_next skipped %tu units", next - s);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %04x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-u32-grapheme-prev.c b/tests/unigbrk/test-u32-grapheme-prev.c index d3838f52..2c8006ae 100644 --- a/tests/unigbrk/test-u32-grapheme-prev.c +++ b/tests/unigbrk/test-u32-grapheme-prev.c @@ -1,5 +1,5 @@  /* Previous grapheme cluster test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -59,11 +59,12 @@ test_u32_grapheme_prev (size_t len, ...)        if (prev == NULL)          fputs ("u32_grapheme_prev returned NULL", stderr);        else -        fprintf (stderr, "u32_grapheme_prev skipped %zu units", end - prev); +        fprintf (stderr, "u32_grapheme_prev skipped %tu units", end - prev);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %04x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-u8-grapheme-breaks.c b/tests/unigbrk/test-u8-grapheme-breaks.c index fdc0d505..1ccdd601 100644 --- a/tests/unigbrk/test-u8-grapheme-breaks.c +++ b/tests/unigbrk/test-u8-grapheme-breaks.c @@ -1,5 +1,5 @@  /* Grapheme cluster breaks test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -50,7 +50,7 @@ test_u8_grapheme_breaks (const char *input, const char *expected)          fprintf (stderr, "   input:");          for (j = 0; j < n; j++) -          fprintf (stderr, " %02x", s[j]); +          fprintf (stderr, " %02X", s[j]);          putc ('\n', stderr);          fprintf (stderr, "expected:"); @@ -63,6 +63,7 @@ test_u8_grapheme_breaks (const char *input, const char *expected)            fprintf (stderr, "  %d", breaks[j]);          putc ('\n', stderr); +        fflush (stderr);          abort ();        } diff --git a/tests/unigbrk/test-u8-grapheme-next.c b/tests/unigbrk/test-u8-grapheme-next.c index 5c61d847..10dea9d0 100644 --- a/tests/unigbrk/test-u8-grapheme-next.c +++ b/tests/unigbrk/test-u8-grapheme-next.c @@ -1,5 +1,5 @@  /* Next grapheme cluster length test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -38,11 +38,12 @@ test_u8_grapheme_next (const char *input, size_t n, size_t len)        if (next == NULL)          fputs ("u8_grapheme_next returned NULL", stderr);        else -        fprintf (stderr, "u8_grapheme_next skipped %zu bytes", next - s); +        fprintf (stderr, "u8_grapheme_next skipped %tu bytes", next - s);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %02x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-u8-grapheme-prev.c b/tests/unigbrk/test-u8-grapheme-prev.c index a59e264d..e3642367 100644 --- a/tests/unigbrk/test-u8-grapheme-prev.c +++ b/tests/unigbrk/test-u8-grapheme-prev.c @@ -1,5 +1,5 @@  /* Previous grapheme cluster test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -39,11 +39,12 @@ test_u8_grapheme_prev (const char *input, size_t n, size_t len)        if (prev == NULL)          fputs ("u8_grapheme_prev returned NULL", stderr);        else -        fprintf (stderr, "u8_grapheme_prev skipped %zu bytes", end - prev); +        fprintf (stderr, "u8_grapheme_prev skipped %tu bytes", end - prev);        fprintf (stderr, ", expected %zu:\n", len);        for (i = 0; i < n; i++)          fprintf (stderr, " %02x", s[i]);        putc ('\n', stderr); +      fflush (stderr);        abort ();      }  } diff --git a/tests/unigbrk/test-uc-gbrk-prop.c b/tests/unigbrk/test-uc-gbrk-prop.c index 605d83dc..65b91d24 100644 --- a/tests/unigbrk/test-uc-gbrk-prop.c +++ b/tests/unigbrk/test-uc-gbrk-prop.c @@ -1,5 +1,5 @@  /* Test the Unicode grapheme break property function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unigbrk/test-uc-gbrk-prop.h b/tests/unigbrk/test-uc-gbrk-prop.h index d975a1e4..3949a191 100644 --- a/tests/unigbrk/test-uc-gbrk-prop.h +++ b/tests/unigbrk/test-uc-gbrk-prop.h @@ -1,6 +1,6 @@  /* DO NOT EDIT! GENERATED AUTOMATICALLY! */  /* Test the Unicode grapheme break property functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published diff --git a/tests/unigbrk/test-uc-grapheme-breaks.c b/tests/unigbrk/test-uc-grapheme-breaks.c index 1e3b1ee8..afaab06b 100644 --- a/tests/unigbrk/test-uc-grapheme-breaks.c +++ b/tests/unigbrk/test-uc-grapheme-breaks.c @@ -1,5 +1,5 @@  /* Grapheme cluster break function test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -27,7 +27,7 @@  #include "macros.h" -static const char * +_GL_UNUSED static const char *  graphemebreakproperty_to_string (int gbp)  {    printf ("%d\n", gbp); @@ -75,19 +75,20 @@ test_uc_grapheme_breaks (const char *expected, ucs4_t *s, size_t n,          fprintf (stderr, "   input:");          for (j = 0; j < n; j++) -          fprintf (stderr, " %02x", s[j]); +          fprintf (stderr, " %04X", s[j]);          putc ('\n', stderr);          fprintf (stderr, "expected:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", expected[j] == '#'); +          fprintf (stderr, "    %d", expected[j] == '#');          putc ('\n', stderr);          fprintf (stderr, "  actual:");          for (j = 0; j < n; j++) -          fprintf (stderr, "  %d", breaks[j]); +          fprintf (stderr, "    %d", breaks[j]);          putc ('\n', stderr); +        fflush (stderr);          abort ();        }  } diff --git a/tests/unigbrk/test-uc-is-grapheme-break.c b/tests/unigbrk/test-uc-is-grapheme-break.c index 433ba686..92674a07 100644 --- a/tests/unigbrk/test-uc-is-grapheme-break.c +++ b/tests/unigbrk/test-uc-is-grapheme-break.c @@ -1,5 +1,5 @@  /* Grapheme cluster break function test. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -30,7 +30,6 @@  const char *  graphemebreakproperty_to_string (int gbp)  { -  printf ("%d\n", gbp);    switch (gbp)      {  #define CASE(VALUE) case GBP_##VALUE: return #VALUE; @@ -89,6 +88,9 @@ main (int argc, char *argv[])        const char *p;        ucs4_t prev;        int last_char_prop; +      bool incb_consonant_extended; +      bool incb_consonant_extended_linker; +      bool incb_consonant_extended_linker_extended;        bool emoji_modifier_sequence;        bool emoji_modifier_sequence_before_last_char;        size_t ri_count; @@ -102,6 +104,9 @@ main (int argc, char *argv[])          continue;        last_char_prop = -1; +      incb_consonant_extended = false; +      incb_consonant_extended_linker = false; +      incb_consonant_extended_linker_extended = false;        emoji_modifier_sequence = false;        emoji_modifier_sequence_before_last_char = false;        ri_count = 0; @@ -150,10 +155,17 @@ main (int argc, char *argv[])                next = next_int;              } +          int incb = uc_indic_conjunct_break (next); +            /* Skip unsupported rules involving 3 or more characters.  */ -          if (last_char_prop == GBP_ZWJ -              && emoji_modifier_sequence_before_last_char -              && uc_is_property_extended_pictographic (next)) +          if (incb_consonant_extended_linker_extended +              && incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT) +            fprintf (stderr, "%s:%d: skipping GB9c: should join U+%04X " +                     "and U+%04X\n", +                     filename, lineno, prev, next); +          else if (last_char_prop == GBP_ZWJ +                   && emoji_modifier_sequence_before_last_char +                   && uc_is_property_extended_pictographic (next))              {                int prev_gbp = uc_graphemeclusterbreak_property (prev);                int next_gbp = uc_graphemeclusterbreak_property (next); @@ -190,6 +202,17 @@ main (int argc, char *argv[])            p += strspn (p, " \t\r\n");            prev = next; +          incb_consonant_extended_linker = +            incb_consonant_extended && incb == UC_INDIC_CONJUNCT_BREAK_LINKER; +          incb_consonant_extended_linker_extended = +            (incb_consonant_extended_linker +             || (incb_consonant_extended_linker_extended +                 && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); +          incb_consonant_extended = +            (incb == UC_INDIC_CONJUNCT_BREAK_CONSONANT +             || (incb_consonant_extended +                 && incb >= UC_INDIC_CONJUNCT_BREAK_LINKER)); +            emoji_modifier_sequence_before_last_char = emoji_modifier_sequence;            emoji_modifier_sequence =              (emoji_modifier_sequence diff --git a/tests/unigbrk/test-ulc-grapheme-breaks.c b/tests/unigbrk/test-ulc-grapheme-breaks.c index 8ef608fe..519be6fe 100644 --- a/tests/unigbrk/test-ulc-grapheme-breaks.c +++ b/tests/unigbrk/test-ulc-grapheme-breaks.c @@ -1,5 +1,5 @@  /* Grapheme cluster breaks test. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -64,7 +64,7 @@ main ()            fprintf (stderr, "   input:");            for (j = 0; j < LENGTH; j++) -            fprintf (stderr, " %02x", (unsigned char) s[j]); +            fprintf (stderr, " %02X", (unsigned char) s[j]);            putc ('\n', stderr);            fprintf (stderr, "expected:"); @@ -77,6 +77,7 @@ main ()              fprintf (stderr, "  %d", p[j]);            putc ('\n', stderr); +          fflush (stderr);            abort ();          }    } diff --git a/tests/unilbrk/test-u16-possible-linebreaks.c b/tests/unilbrk/test-u16-possible-linebreaks.c index 0156d455..877367e7 100644 --- a/tests/unilbrk/test-u16-possible-linebreaks.c +++ b/tests/unilbrk/test-u16-possible-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-16 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -255,8 +255,10 @@ int  main ()  {    test_function (u16_possible_linebreaks, 2); -#undef u16_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u16_possible_linebreaks    test_function (u16_possible_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-u16-width-linebreaks.c b/tests/unilbrk/test-u16-width-linebreaks.c index c9605447..fb337873 100644 --- a/tests/unilbrk/test-u16-width-linebreaks.c +++ b/tests/unilbrk/test-u16-width-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-16 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -76,8 +76,10 @@ int  main ()  {    test_function (u16_width_linebreaks, 2); -#undef u16_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u16_width_linebreaks    test_function (u16_width_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-u32-possible-linebreaks.c b/tests/unilbrk/test-u32-possible-linebreaks.c index 5c08c974..84b0e3c0 100644 --- a/tests/unilbrk/test-u32-possible-linebreaks.c +++ b/tests/unilbrk/test-u32-possible-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-32 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -255,8 +255,10 @@ int  main ()  {    test_function (u32_possible_linebreaks, 2); -#undef u32_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u32_possible_linebreaks    test_function (u32_possible_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-u32-width-linebreaks.c b/tests/unilbrk/test-u32-width-linebreaks.c index fa9c09b6..b59405cd 100644 --- a/tests/unilbrk/test-u32-width-linebreaks.c +++ b/tests/unilbrk/test-u32-width-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-32 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -76,8 +76,10 @@ int  main ()  {    test_function (u32_width_linebreaks, 2); -#undef u32_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u32_width_linebreaks    test_function (u32_width_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-u8-possible-linebreaks.c b/tests/unilbrk/test-u8-possible-linebreaks.c index 37f27067..90768d20 100644 --- a/tests/unilbrk/test-u8-possible-linebreaks.c +++ b/tests/unilbrk/test-u8-possible-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-8 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -238,8 +238,10 @@ int  main ()  {    test_function (u8_possible_linebreaks, 2); -#undef u8_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u8_possible_linebreaks    test_function (u8_possible_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-u8-width-linebreaks.c b/tests/unilbrk/test-u8-width-linebreaks.c index e9552350..a84ee0db 100644 --- a/tests/unilbrk/test-u8-width-linebreaks.c +++ b/tests/unilbrk/test-u8-width-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of UTF-8 strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -70,8 +70,10 @@ int  main ()  {    test_function (u8_width_linebreaks, 2); -#undef u8_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef u8_width_linebreaks    test_function (u8_width_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-ulc-possible-linebreaks.c b/tests/unilbrk/test-ulc-possible-linebreaks.c index e6859277..21ec0b5e 100644 --- a/tests/unilbrk/test-ulc-possible-linebreaks.c +++ b/tests/unilbrk/test-ulc-possible-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -71,8 +71,10 @@ int  main ()  {    test_function (ulc_possible_linebreaks, 2); -#undef ulc_possible_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef ulc_possible_linebreaks    test_function (ulc_possible_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unilbrk/test-ulc-width-linebreaks.c b/tests/unilbrk/test-ulc-width-linebreaks.c index 0fffe3ae..65e125e5 100644 --- a/tests/unilbrk/test-ulc-width-linebreaks.c +++ b/tests/unilbrk/test-ulc-width-linebreaks.c @@ -1,5 +1,5 @@  /* Test of line breaking of strings. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -55,8 +55,10 @@ int  main ()  {    test_function (ulc_width_linebreaks, 2); -#undef ulc_width_linebreaks +#ifdef IN_LIBUNISTRING_GNULIB_TESTS +# undef ulc_width_linebreaks    test_function (ulc_width_linebreaks, 1); +#endif    return 0;  } diff --git a/tests/unimetadata/test-u-version.c b/tests/unimetadata/test-u-version.c new file mode 100644 index 00000000..6dc48ad3 --- /dev/null +++ b/tests/unimetadata/test-u-version.c @@ -0,0 +1,39 @@ +/* Test of supported Unicode version. +   Copyright (C) 2009-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2024.  */ + +#include <config.h> + +#include "unimetadata.h" + +#include "macros.h" + +#if !(((defined _WIN32 || defined __CYGWIN__) && (HAVE_LIBUNISTRING || WOE32DLL)) || defined __ANDROID__) +/* Check that _libunistring_unicode_version is defined and links.  */ +int const *vp = &_libunistring_unicode_version; +#endif + +int +main () +{ +  /* Check that _libunistring_unicode_version is defined and links.  */ +  volatile int v = _libunistring_unicode_version; +  ASSERT (v >= (15 << 8)); +  ASSERT (v < (100 << 8)); + +  return 0; +} diff --git a/tests/uniname/HangulSyllableNames.txt b/tests/uniname/HangulSyllableNames.txt index 341c178d..5491f661 100644 --- a/tests/uniname/HangulSyllableNames.txt +++ b/tests/uniname/HangulSyllableNames.txt @@ -1,5 +1,7 @@  # Auxiliary tables for Hangul syllable names, see the Unicode 3.0 book, -# sections 3.11 and 4.4. +# sections 3.11 and 4.4.  This table was automatically generated. + +# This file is in the public domain.  AC00;HANGUL SYLLABLE GA;Lo;0;L;;;;;N;;;;;  AC01;HANGUL SYLLABLE GAG;Lo;0;L;;;;;N;;;;; diff --git a/tests/uniname/NameAliases.txt b/tests/uniname/NameAliases.txt index db3a863a..487cdb8c 100644 --- a/tests/uniname/NameAliases.txt +++ b/tests/uniname/NameAliases.txt @@ -1,6 +1,46 @@ -# NameAliases-15.0.0.txt -# Date: 2022-07-26, 20:13:00 GMT [KW] -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# NameAliases-15.1.0.txt +# Date: 2023-01-05 +# © 2023 Unicode®, Inc.  # For terms of use, see https://www.unicode.org/terms_of_use.html  #  # Unicode Character Database diff --git a/tests/uniname/UnicodeData.txt b/tests/uniname/UnicodeData.txt index ea963a71..152ebe66 100644 --- a/tests/uniname/UnicodeData.txt +++ b/tests/uniname/UnicodeData.txt @@ -1,3 +1,43 @@ +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. +  0000;<control>;Cc;0;BN;;;;;N;NULL;;;;  0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;  0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;; @@ -11231,6 +11271,10 @@  2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;  2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;  2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +2FFC;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM RIGHT;So;0;ON;;;;;N;;;;; +2FFD;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER RIGHT;So;0;ON;;;;;N;;;;; +2FFE;IDEOGRAPHIC DESCRIPTION CHARACTER HORIZONTAL REFLECTION;So;0;ON;;;;;N;;;;; +2FFF;IDEOGRAPHIC DESCRIPTION CHARACTER ROTATION;So;0;ON;;;;;N;;;;;  3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;  3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;  3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; @@ -11705,6 +11749,7 @@  31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;;  31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;;  31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31EF;IDEOGRAPHIC DESCRIPTION CHARACTER SUBTRACTION;So;0;ON;;;;;N;;;;;  31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;  31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;  31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -34035,6 +34080,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;  2CEA1;<CJK Ideograph Extension E, Last>;Lo;0;L;;;;;N;;;;;  2CEB0;<CJK Ideograph Extension F, First>;Lo;0;L;;;;;N;;;;;  2EBE0;<CJK Ideograph Extension F, Last>;Lo;0;L;;;;;N;;;;; +2EBF0;<CJK Ideograph Extension I, First>;Lo;0;L;;;;;N;;;;; +2EE5D;<CJK Ideograph Extension I, Last>;Lo;0;L;;;;;N;;;;;  2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;  2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;  2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; diff --git a/tests/uniname/test-uninames.c b/tests/uniname/test-uninames.c index c85c9af6..72e198ed 100644 --- a/tests/uniname/test-uninames.c +++ b/tests/uniname/test-uninames.c @@ -1,5 +1,5 @@  /* Test the Unicode character name functions. -   Copyright (C) 2000-2003, 2005, 2007, 2009-2022 Free Software Foundation, +   Copyright (C) 2000-2003, 2005, 2007, 2009-2024 Free Software Foundation,     Inc.     This program is free software: you can redistribute it and/or modify diff --git a/tests/uninorm/NormalizationTest.txt b/tests/uninorm/NormalizationTest.txt index e75b4801..e1644a61 100644 --- a/tests/uninorm/NormalizationTest.txt +++ b/tests/uninorm/NormalizationTest.txt @@ -1,6 +1,46 @@ -# NormalizationTest-15.0.0.txt -# Date: 2022-04-02, 01:29:09 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# NormalizationTest-15.1.0.txt +# Date: 2023-01-05, 20:34:44 GMT +# © 2023 Unicode®, Inc.  # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.  # For terms of use, see https://www.unicode.org/terms_of_use.html  # diff --git a/tests/uninorm/test-canonical-decomposition.c b/tests/uninorm/test-canonical-decomposition.c index 0e3fdbf4..6ebac8e5 100644 --- a/tests/uninorm/test-canonical-decomposition.c +++ b/tests/uninorm/test-canonical-decomposition.c @@ -1,5 +1,5 @@  /* Test of canonical decomposition of Unicode characters. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-compat-decomposition.c b/tests/uninorm/test-compat-decomposition.c index c0221310..d4252cbc 100644 --- a/tests/uninorm/test-compat-decomposition.c +++ b/tests/uninorm/test-compat-decomposition.c @@ -1,5 +1,5 @@  /* Test of compatibility decomposition of Unicode characters. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-composition.c b/tests/uninorm/test-composition.c index e6bdc970..4f90cfcb 100644 --- a/tests/uninorm/test-composition.c +++ b/tests/uninorm/test-composition.c @@ -1,5 +1,5 @@  /* Test of canonical composition of Unicode characters. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-decomposing-form.c b/tests/uninorm/test-decomposing-form.c index 17ad3bdb..d56cd28c 100644 --- a/tests/uninorm/test-decomposing-form.c +++ b/tests/uninorm/test-decomposing-form.c @@ -1,5 +1,5 @@  /* Test of decomposing variant of a normalization form. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-decomposition.c b/tests/uninorm/test-decomposition.c index d0e53e54..7da46143 100644 --- a/tests/uninorm/test-decomposition.c +++ b/tests/uninorm/test-decomposition.c @@ -1,5 +1,5 @@  /* Test of decomposition of Unicode characters. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfc.c b/tests/uninorm/test-nfc.c index db5b45d8..f1459ed3 100644 --- a/tests/uninorm/test-nfc.c +++ b/tests/uninorm/test-nfc.c @@ -1,5 +1,5 @@  /* Test of canonical normalization of Unicode strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfd.c b/tests/uninorm/test-nfd.c index 7d562e72..17df0f0e 100644 --- a/tests/uninorm/test-nfd.c +++ b/tests/uninorm/test-nfd.c @@ -1,5 +1,5 @@  /* Test of canonical decomposition of Unicode strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfkc.c b/tests/uninorm/test-nfkc.c index 56a43e76..640066c3 100644 --- a/tests/uninorm/test-nfkc.c +++ b/tests/uninorm/test-nfkc.c @@ -1,5 +1,5 @@  /* Test of compatibility normalization of Unicode strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-nfkd.c b/tests/uninorm/test-nfkd.c index 88ca6b50..8d5ff836 100644 --- a/tests/uninorm/test-nfkd.c +++ b/tests/uninorm/test-nfkd.c @@ -1,5 +1,5 @@  /* Test of compatibility decomposition of Unicode strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfc.c b/tests/uninorm/test-u16-nfc.c index fa3ebfcd..36cbf979 100644 --- a/tests/uninorm/test-u16-nfc.c +++ b/tests/uninorm/test-u16-nfc.c @@ -1,5 +1,5 @@  /* Test of canonical normalization of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfd.c b/tests/uninorm/test-u16-nfd.c index 08b5c004..0be54c21 100644 --- a/tests/uninorm/test-u16-nfd.c +++ b/tests/uninorm/test-u16-nfd.c @@ -1,5 +1,5 @@  /* Test of canonical decomposition of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfkc.c b/tests/uninorm/test-u16-nfkc.c index 7924d822..c6bedaf8 100644 --- a/tests/uninorm/test-u16-nfkc.c +++ b/tests/uninorm/test-u16-nfkc.c @@ -1,5 +1,5 @@  /* Test of compatibility normalization of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-nfkd.c b/tests/uninorm/test-u16-nfkd.c index 1d78701d..f9a198c4 100644 --- a/tests/uninorm/test-u16-nfkd.c +++ b/tests/uninorm/test-u16-nfkd.c @@ -1,5 +1,5 @@  /* Test of compatibility decomposition of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcmp.c b/tests/uninorm/test-u16-normcmp.c index 9ebb94b2..96ca0716 100644 --- a/tests/uninorm/test-u16-normcmp.c +++ b/tests/uninorm/test-u16-normcmp.c @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcmp.h b/tests/uninorm/test-u16-normcmp.h index 0c7ce100..09d5ba41 100644 --- a/tests/uninorm/test-u16-normcmp.h +++ b/tests/uninorm/test-u16-normcmp.h @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u16-normcoll.c b/tests/uninorm/test-u16-normcoll.c index e0689a30..fe08a15d 100644 --- a/tests/uninorm/test-u16-normcoll.c +++ b/tests/uninorm/test-u16-normcoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, normalization insensitive comparison of     UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfc-big.c b/tests/uninorm/test-u32-nfc-big.c index b9f35e56..317607a1 100644 --- a/tests/uninorm/test-u32-nfc-big.c +++ b/tests/uninorm/test-u32-nfc-big.c @@ -1,5 +1,5 @@  /* Test of Unicode compliance of canonical normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfc.c b/tests/uninorm/test-u32-nfc.c index 57b6a194..d6589c51 100644 --- a/tests/uninorm/test-u32-nfc.c +++ b/tests/uninorm/test-u32-nfc.c @@ -1,5 +1,5 @@  /* Test of canonical normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfd-big.c b/tests/uninorm/test-u32-nfd-big.c index 683c768b..8a35cd03 100644 --- a/tests/uninorm/test-u32-nfd-big.c +++ b/tests/uninorm/test-u32-nfd-big.c @@ -1,5 +1,5 @@  /* Test of Unicode compliance of canonical decomposition of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfd.c b/tests/uninorm/test-u32-nfd.c index 33f2c97d..6b787724 100644 --- a/tests/uninorm/test-u32-nfd.c +++ b/tests/uninorm/test-u32-nfd.c @@ -1,5 +1,5 @@  /* Test of canonical decomposition of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkc-big.c b/tests/uninorm/test-u32-nfkc-big.c index 84491129..4195b97e 100644 --- a/tests/uninorm/test-u32-nfkc-big.c +++ b/tests/uninorm/test-u32-nfkc-big.c @@ -1,5 +1,5 @@  /* Test of Unicode compliance of compatibility normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkc.c b/tests/uninorm/test-u32-nfkc.c index 7f8d472a..2b310def 100644 --- a/tests/uninorm/test-u32-nfkc.c +++ b/tests/uninorm/test-u32-nfkc.c @@ -1,5 +1,5 @@  /* Test of compatibility normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkd-big.c b/tests/uninorm/test-u32-nfkd-big.c index a2ca4673..f9c264d3 100644 --- a/tests/uninorm/test-u32-nfkd-big.c +++ b/tests/uninorm/test-u32-nfkd-big.c @@ -1,5 +1,5 @@  /* Test of Unicode compliance of compatibility decomposition of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-nfkd.c b/tests/uninorm/test-u32-nfkd.c index 3cbb5f7b..5093127c 100644 --- a/tests/uninorm/test-u32-nfkd.c +++ b/tests/uninorm/test-u32-nfkd.c @@ -1,5 +1,5 @@  /* Test of compatibility decomposition of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normalize-big.c b/tests/uninorm/test-u32-normalize-big.c index 40ef55cc..20282cab 100644 --- a/tests/uninorm/test-u32-normalize-big.c +++ b/tests/uninorm/test-u32-normalize-big.c @@ -1,5 +1,5 @@  /* Test of Unicode compliance of normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normalize-big.h b/tests/uninorm/test-u32-normalize-big.h index 79b16264..ae4a16bd 100644 --- a/tests/uninorm/test-u32-normalize-big.h +++ b/tests/uninorm/test-u32-normalize-big.h @@ -1,5 +1,5 @@  /* Test of Unicode compliance of normalization of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcmp.c b/tests/uninorm/test-u32-normcmp.c index 577edf6b..5052a237 100644 --- a/tests/uninorm/test-u32-normcmp.c +++ b/tests/uninorm/test-u32-normcmp.c @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcmp.h b/tests/uninorm/test-u32-normcmp.h index 1597c88e..f5979f1e 100644 --- a/tests/uninorm/test-u32-normcmp.h +++ b/tests/uninorm/test-u32-normcmp.h @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u32-normcoll.c b/tests/uninorm/test-u32-normcoll.c index 492475cc..e5cce080 100644 --- a/tests/uninorm/test-u32-normcoll.c +++ b/tests/uninorm/test-u32-normcoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, normalization insensitive comparison of     UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfc.c b/tests/uninorm/test-u8-nfc.c index bfc56240..1aedcd85 100644 --- a/tests/uninorm/test-u8-nfc.c +++ b/tests/uninorm/test-u8-nfc.c @@ -1,5 +1,5 @@  /* Test of canonical normalization of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfd.c b/tests/uninorm/test-u8-nfd.c index e5e3ac69..a6a5686b 100644 --- a/tests/uninorm/test-u8-nfd.c +++ b/tests/uninorm/test-u8-nfd.c @@ -1,5 +1,5 @@  /* Test of canonical decomposition of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfkc.c b/tests/uninorm/test-u8-nfkc.c index f59bc036..c2a17839 100644 --- a/tests/uninorm/test-u8-nfkc.c +++ b/tests/uninorm/test-u8-nfkc.c @@ -1,5 +1,5 @@  /* Test of compatibility normalization of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-nfkd.c b/tests/uninorm/test-u8-nfkd.c index 4fb89a5b..0a70a477 100644 --- a/tests/uninorm/test-u8-nfkd.c +++ b/tests/uninorm/test-u8-nfkd.c @@ -1,5 +1,5 @@  /* Test of compatibility decomposition of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcmp.c b/tests/uninorm/test-u8-normcmp.c index 9d665e63..6b9f68d4 100644 --- a/tests/uninorm/test-u8-normcmp.c +++ b/tests/uninorm/test-u8-normcmp.c @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcmp.h b/tests/uninorm/test-u8-normcmp.h index c853c4a9..867cd2ce 100644 --- a/tests/uninorm/test-u8-normcmp.h +++ b/tests/uninorm/test-u8-normcmp.h @@ -1,5 +1,5 @@  /* Test of normalization insensitive comparison of UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-u8-normcoll.c b/tests/uninorm/test-u8-normcoll.c index a113b4f5..e8d30949 100644 --- a/tests/uninorm/test-u8-normcoll.c +++ b/tests/uninorm/test-u8-normcoll.c @@ -1,6 +1,6 @@  /* Test of locale dependent, normalization insensitive comparison of     UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uninorm/test-uninorm-filter-nfc.c b/tests/uninorm/test-uninorm-filter-nfc.c index ea9cdc0a..2e2ca2aa 100644 --- a/tests/uninorm/test-uninorm-filter-nfc.c +++ b/tests/uninorm/test-uninorm-filter-nfc.c @@ -1,5 +1,5 @@  /* Test of canonical normalization of streams. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-asnprintf1.c b/tests/unistdio/test-u16-asnprintf1.c index a95e6bfc..67ce490a 100644 --- a/tests/unistdio/test-u16-asnprintf1.c +++ b/tests/unistdio/test-u16-asnprintf1.c @@ -1,5 +1,5 @@  /* Test of u16_asnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-asnprintf1.h b/tests/unistdio/test-u16-asnprintf1.h index 4145ae87..4ec31a43 100644 --- a/tests/unistdio/test-u16-asnprintf1.h +++ b/tests/unistdio/test-u16-asnprintf1.h @@ -1,5 +1,5 @@  /* Test of u16_[v]asnprintf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-printf1.h b/tests/unistdio/test-u16-printf1.h index 7690978d..e501c9e4 100644 --- a/tests/unistdio/test-u16-printf1.h +++ b/tests/unistdio/test-u16-printf1.h @@ -1,5 +1,5 @@  /* Test of u16_v[a]s[n]printf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -83,6 +83,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -123,6 +141,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -163,6 +199,24 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -211,6 +265,32 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); +    static const uint16_t expected[] = +      { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', +        ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', +        'a', 'g', 'a', 'n', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); +    static const uint16_t expected[] = +      { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', +        ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', +        ' ', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* FLAG_LEFT.  */      uint16_t *result =        my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -278,6 +358,44 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); +    static const uint16_t expected1[] = +      { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; +    static const uint16_t expected2[] = +      { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; +    static const uint16_t expected3[] = +      { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; +    static const uint16_t expected4[] = +      { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0 +            || u16_strcmp (result, expected3) == 0 +            || u16_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); +    static const uint16_t expected1[] = +      { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected2[] = +      { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected3[] = +      { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected4[] = +      { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0 +            || u16_strcmp (result, expected3) == 0 +            || u16_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint16_t *result =        my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -402,6 +520,44 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); +    static const uint16_t expected1[] = +      { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; +    static const uint16_t expected2[] = +      { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; +    static const uint16_t expected3[] = +      { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; +    static const uint16_t expected4[] = +      { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0 +            || u16_strcmp (result, expected3) == 0 +            || u16_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); +    static const uint16_t expected1[] = +      { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected2[] = +      { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected3[] = +      { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint16_t expected4[] = +      { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0 +            || u16_strcmp (result, expected3) == 0 +            || u16_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint16_t *result =        my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -502,6 +658,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); +    static const uint16_t expected[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); +    static const uint16_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -532,6 +708,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -620,6 +816,40 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); +    static const uint16_t expected1[] = +      { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', +        '0', 'e', '+', '0', '0', ' ', '3', '3', 0 +      }; +    static const uint16_t expected2[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', +        'e', '+', '0', '0', '0', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); +    static const uint16_t expected1[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    static const uint16_t expected2[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected1) == 0 +            || u16_strcmp (result, expected2) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -657,6 +887,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', +        '0', 'e', '+', '0', '0', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -689,6 +943,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); +    static const uint16_t expected[] = +      { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); +    static const uint16_t expected[] = +      { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -722,6 +996,26 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint16_t *result = +      my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint16_t *result = +      my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); +    static const uint16_t expected[] = +      { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u16_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint16_t *result =        my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -738,12 +1032,16 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))      int count = -1;      uint16_t *result =        my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE      static const uint16_t expected[] =        { '1', '2', '3', ' ', 0 };      ASSERT (result != NULL);      ASSERT (u16_strcmp (result, expected) == 0);      ASSERT (count == 4);      free (result); +#else +    ASSERT (result == NULL); +#endif    }    /* Test the support of the POSIX/XSI format strings with positions.  */ @@ -795,6 +1093,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -850,6 +1172,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -905,6 +1251,30 @@ test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...))        ASSERT (u16_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint16_t *result = +        my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint16_t *result = +        my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); +      static const uint16_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u16_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint16_t *result =          my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u16-vasnprintf1.c b/tests/unistdio/test-u16-vasnprintf1.c index de705ae6..e39495c9 100644 --- a/tests/unistdio/test-u16-vasnprintf1.c +++ b/tests/unistdio/test-u16-vasnprintf1.c @@ -1,5 +1,5 @@  /* Test of u16_vasnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasnprintf2.c b/tests/unistdio/test-u16-vasnprintf2.c index ec5d790e..aee67584 100644 --- a/tests/unistdio/test-u16-vasnprintf2.c +++ b/tests/unistdio/test-u16-vasnprintf2.c @@ -1,5 +1,5 @@  /* Test of u16_vasnprintf() function in an ISO-8859-1 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasnprintf3.c b/tests/unistdio/test-u16-vasnprintf3.c index 97f3c69d..0efe1984 100644 --- a/tests/unistdio/test-u16-vasnprintf3.c +++ b/tests/unistdio/test-u16-vasnprintf3.c @@ -1,5 +1,5 @@  /* Test of u16_vasnprintf() function in an UTF-8 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vasprintf1.c b/tests/unistdio/test-u16-vasprintf1.c index 1d00ec93..203d2edf 100644 --- a/tests/unistdio/test-u16-vasprintf1.c +++ b/tests/unistdio/test-u16-vasprintf1.c @@ -1,5 +1,5 @@  /* Test of u16_vasprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vsnprintf1.c b/tests/unistdio/test-u16-vsnprintf1.c index 27f3871a..6859468a 100644 --- a/tests/unistdio/test-u16-vsnprintf1.c +++ b/tests/unistdio/test-u16-vsnprintf1.c @@ -1,5 +1,5 @@  /* Test of u16_vsnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u16-vsprintf1.c b/tests/unistdio/test-u16-vsprintf1.c index ab4d9d57..b39a3056 100644 --- a/tests/unistdio/test-u16-vsprintf1.c +++ b/tests/unistdio/test-u16-vsprintf1.c @@ -1,5 +1,5 @@  /* Test of u16_vsprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-asnprintf1.c b/tests/unistdio/test-u32-asnprintf1.c index aebc798e..5a16094b 100644 --- a/tests/unistdio/test-u32-asnprintf1.c +++ b/tests/unistdio/test-u32-asnprintf1.c @@ -1,5 +1,5 @@  /* Test of u32_asnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-asnprintf1.h b/tests/unistdio/test-u32-asnprintf1.h index b654c59a..85fa2cf0 100644 --- a/tests/unistdio/test-u32-asnprintf1.h +++ b/tests/unistdio/test-u32-asnprintf1.h @@ -1,5 +1,5 @@  /* Test of u32_[v]asnprintf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-printf1.h b/tests/unistdio/test-u32-printf1.h index d3e10e92..ae0edc6a 100644 --- a/tests/unistdio/test-u32-printf1.h +++ b/tests/unistdio/test-u32-printf1.h @@ -1,5 +1,5 @@  /* Test of u32_v[a]s[n]printf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -83,6 +83,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -123,6 +141,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -163,6 +199,24 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -211,6 +265,32 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); +    static const uint32_t expected[] = +      { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', +        ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', +        'a', 'g', 'a', 'n', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); +    static const uint32_t expected[] = +      { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', +        ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', +        ' ', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* FLAG_LEFT.  */      uint32_t *result =        my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -278,6 +358,44 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); +    static const uint32_t expected1[] = +      { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; +    static const uint32_t expected2[] = +      { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; +    static const uint32_t expected3[] = +      { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; +    static const uint32_t expected4[] = +      { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0 +            || u32_strcmp (result, expected3) == 0 +            || u32_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); +    static const uint32_t expected1[] = +      { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected2[] = +      { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected3[] = +      { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected4[] = +      { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0 +            || u32_strcmp (result, expected3) == 0 +            || u32_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint32_t *result =        my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -402,6 +520,44 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); +    static const uint32_t expected1[] = +      { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; +    static const uint32_t expected2[] = +      { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; +    static const uint32_t expected3[] = +      { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; +    static const uint32_t expected4[] = +      { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0 +            || u32_strcmp (result, expected3) == 0 +            || u32_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); +    static const uint32_t expected1[] = +      { '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected2[] = +      { '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected3[] = +      { '0', 'x', '7', 'p', '-', '2', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    static const uint32_t expected4[] = +      { '0', 'x', 'e', 'p', '-', '3', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0 +            || u32_strcmp (result, expected3) == 0 +            || u32_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint32_t *result =        my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -502,6 +658,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); +    static const uint32_t expected[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); +    static const uint32_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -532,6 +708,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -620,6 +816,40 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); +    static const uint32_t expected1[] = +      { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', +        '0', 'e', '+', '0', '0', ' ', '3', '3', 0 +      }; +    static const uint32_t expected2[] = +      { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', +        'e', '+', '0', '0', '0', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); +    static const uint32_t expected1[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    static const uint32_t expected2[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', '0', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected1) == 0 +            || u32_strcmp (result, expected2) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -657,6 +887,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', +        '0', 'e', '+', '0', '0', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { '1', '.', '7', '5', '0', '0', '0', '0', 'e', '+', +        '0', '0', ' ', ' ', ' ', ' ', '3', '3', 0 +      }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -689,6 +943,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); +    static const uint32_t expected[] = +      { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); +    static const uint32_t expected[] = +      { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -722,6 +996,26 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint32_t *result = +      my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint32_t *result = +      my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); +    static const uint32_t expected[] = +      { '1', '.', '7', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; +    ASSERT (result != NULL); +    ASSERT (u32_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint32_t *result =        my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -738,12 +1032,16 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))      int count = -1;      uint32_t *result =        my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE      static const uint32_t expected[] =        { '1', '2', '3', ' ', 0 };      ASSERT (result != NULL);      ASSERT (u32_strcmp (result, expected) == 0);      ASSERT (count == 4);      free (result); +#else +    ASSERT (result == NULL); +#endif    }    /* Test the support of the POSIX/XSI format strings with positions.  */ @@ -795,6 +1093,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -850,6 +1172,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -905,6 +1251,30 @@ test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...))        ASSERT (u32_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint32_t *result = +        my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', +          'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint32_t *result = +        my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); +      static const uint32_t expected[] = +        { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', +          'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', +          ' ', '3', '3', 0 +        }; +      ASSERT (result != NULL); +      ASSERT (u32_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint32_t *result =          my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u32-vasnprintf1.c b/tests/unistdio/test-u32-vasnprintf1.c index 553ee2d5..43c115cf 100644 --- a/tests/unistdio/test-u32-vasnprintf1.c +++ b/tests/unistdio/test-u32-vasnprintf1.c @@ -1,5 +1,5 @@  /* Test of u32_vasnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasnprintf2.c b/tests/unistdio/test-u32-vasnprintf2.c index 7d82cfc6..1ddab53f 100644 --- a/tests/unistdio/test-u32-vasnprintf2.c +++ b/tests/unistdio/test-u32-vasnprintf2.c @@ -1,5 +1,5 @@  /* Test of u32_vasnprintf() function in an ISO-8859-1 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasnprintf3.c b/tests/unistdio/test-u32-vasnprintf3.c index 3509f6ff..cfc4674c 100644 --- a/tests/unistdio/test-u32-vasnprintf3.c +++ b/tests/unistdio/test-u32-vasnprintf3.c @@ -1,5 +1,5 @@  /* Test of u32_vasnprintf() function in an UTF-8 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vasprintf1.c b/tests/unistdio/test-u32-vasprintf1.c index 41084b6d..3ab5e89c 100644 --- a/tests/unistdio/test-u32-vasprintf1.c +++ b/tests/unistdio/test-u32-vasprintf1.c @@ -1,5 +1,5 @@  /* Test of u32_vasprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vsnprintf1.c b/tests/unistdio/test-u32-vsnprintf1.c index bae3adca..fa38f8db 100644 --- a/tests/unistdio/test-u32-vsnprintf1.c +++ b/tests/unistdio/test-u32-vsnprintf1.c @@ -1,5 +1,5 @@  /* Test of u32_vsnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u32-vsprintf1.c b/tests/unistdio/test-u32-vsprintf1.c index 27b0065c..c857ca71 100644 --- a/tests/unistdio/test-u32-vsprintf1.c +++ b/tests/unistdio/test-u32-vsprintf1.c @@ -1,5 +1,5 @@  /* Test of u32_vsprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-asnprintf1.c b/tests/unistdio/test-u8-asnprintf1.c index 058b7714..d5d256aa 100644 --- a/tests/unistdio/test-u8-asnprintf1.c +++ b/tests/unistdio/test-u8-asnprintf1.c @@ -1,5 +1,5 @@  /* Test of u8_asnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-asnprintf1.h b/tests/unistdio/test-u8-asnprintf1.h index 6aeeae31..f48e2365 100644 --- a/tests/unistdio/test-u8-asnprintf1.h +++ b/tests/unistdio/test-u8-asnprintf1.h @@ -1,5 +1,5 @@  /* Test of u8_[v]asnprintf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-printf1.h b/tests/unistdio/test-u8-printf1.h index 5a820148..3e8999b6 100644 --- a/tests/unistdio/test-u8-printf1.h +++ b/tests/unistdio/test-u8-printf1.h @@ -1,5 +1,5 @@  /* Test of u8_v[a]s[n]printf() function. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -77,6 +77,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "     Hello 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Hello      33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -113,6 +129,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "     Hello 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Hello      33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -149,6 +181,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "     Hello 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Hello      33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -187,6 +235,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); +    static const uint8_t expected[] = "Mr.        Ronald Reagan 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); +    static const uint8_t expected[] = "Mr. Ronald Reagan        33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* FLAG_LEFT.  */      uint8_t *result =        my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -238,6 +304,36 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); +    static const uint8_t expected1[] = "  0x1.cp+0 33"; +    static const uint8_t expected2[] = "  0x3.8p-1 33"; +    static const uint8_t expected3[] = "    0x7p-2 33"; +    static const uint8_t expected4[] = "    0xep-3 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0 +            || u8_strcmp (result, expected3) == 0 +            || u8_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); +    static const uint8_t expected1[] = "0x1.cp+0   33"; +    static const uint8_t expected2[] = "0x3.8p-1   33"; +    static const uint8_t expected3[] = "0x7p-2     33"; +    static const uint8_t expected4[] = "0xep-3     33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0 +            || u8_strcmp (result, expected3) == 0 +            || u8_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint8_t *result =        my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -298,6 +394,36 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); +    static const uint8_t expected1[] = "  0x1.cp+0 33"; +    static const uint8_t expected2[] = "  0x3.8p-1 33"; +    static const uint8_t expected3[] = "    0x7p-2 33"; +    static const uint8_t expected4[] = "    0xep-3 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0 +            || u8_strcmp (result, expected3) == 0 +            || u8_strcmp (result, expected4) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); +    static const uint8_t expected1[] = "0x1.cp+0   33"; +    static const uint8_t expected2[] = "0x3.8p-1   33"; +    static const uint8_t expected3[] = "0x7p-2     33"; +    static const uint8_t expected4[] = "0xep-3     33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0 +            || u8_strcmp (result, expected3) == 0 +            || u8_strcmp (result, expected4) == 0); +    free (result); +  } +    { /* Small precision.  */      uint8_t *result =        my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -348,6 +474,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); +    static const uint8_t expected[] = "  1.750000 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); +    static const uint8_t expected[] = "1.750000   33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -375,6 +519,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "  1.750000 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "1.750000   33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -446,6 +608,28 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); +    static const uint8_t expected1[] = "   1.750000e+00 33"; +    static const uint8_t expected2[] = "  1.750000e+000 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); +    static const uint8_t expected1[] = "1.750000e+00    33"; +    static const uint8_t expected2[] = "1.750000e+000   33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected1) == 0 +            || u8_strcmp (result, expected2) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -475,6 +659,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "   1.750000e+00 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "1.750000e+00    33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -504,6 +706,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); +    static const uint8_t expected[] = "      1.75 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); +    static const uint8_t expected[] = "1.75       33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -533,6 +753,24 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    uint8_t *result = +      my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "      1.75 33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    uint8_t *result = +      my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); +    static const uint8_t expected[] = "1.75       33"; +    ASSERT (result != NULL); +    ASSERT (u8_strcmp (result, expected) == 0); +    free (result); +  } +    { /* Precision.  */      uint8_t *result =        my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -548,11 +786,15 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))      int count = -1;      uint8_t *result =        my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE      static const uint8_t expected[] = "123 ";      ASSERT (result != NULL);      ASSERT (u8_strcmp (result, expected) == 0);      ASSERT (count == 4);      free (result); +#else +    ASSERT (result == NULL); +#endif    }    /* Test the support of the POSIX/XSI format strings with positions.  */ @@ -596,6 +838,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*U %d", 20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "    Rafa\305\202 Maszkowski 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*U %d", -20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Rafa\305\202 Maszkowski     33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); @@ -636,6 +894,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*lU %d", 20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "    Rafa\305\202 Maszkowski 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*lU %d", -20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Rafa\305\202 Maszkowski     33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); @@ -676,6 +950,22 @@ test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...))        ASSERT (u8_strcmp (result, expected) == 0);        free (result);      } +    { /* Width given as argument.  */ +      uint8_t *result = +        my_xasprintf ("%*llU %d", 20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "    Rafa\305\202 Maszkowski 33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      uint8_t *result = +        my_xasprintf ("%*llU %d", -20, unicode_string, 33, 44, 55); +      static const uint8_t expected[] = "Rafa\305\202 Maszkowski     33"; +      ASSERT (result != NULL); +      ASSERT (u8_strcmp (result, expected) == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        uint8_t *result =          my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); diff --git a/tests/unistdio/test-u8-vasnprintf1.c b/tests/unistdio/test-u8-vasnprintf1.c index 94b9c8d7..895faa93 100644 --- a/tests/unistdio/test-u8-vasnprintf1.c +++ b/tests/unistdio/test-u8-vasnprintf1.c @@ -1,5 +1,5 @@  /* Test of u8_vasnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasnprintf2.c b/tests/unistdio/test-u8-vasnprintf2.c index 745550b1..30289688 100644 --- a/tests/unistdio/test-u8-vasnprintf2.c +++ b/tests/unistdio/test-u8-vasnprintf2.c @@ -1,5 +1,5 @@  /* Test of u8_vasnprintf() function in an ISO-8859-1 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasnprintf3.c b/tests/unistdio/test-u8-vasnprintf3.c index 5f601abd..b5dc9ab6 100644 --- a/tests/unistdio/test-u8-vasnprintf3.c +++ b/tests/unistdio/test-u8-vasnprintf3.c @@ -1,5 +1,5 @@  /* Test of u8_vasnprintf() function in an UTF-8 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vasprintf1.c b/tests/unistdio/test-u8-vasprintf1.c index ec7e773f..611f1395 100644 --- a/tests/unistdio/test-u8-vasprintf1.c +++ b/tests/unistdio/test-u8-vasprintf1.c @@ -1,5 +1,5 @@  /* Test of u8_vasprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vsnprintf1.c b/tests/unistdio/test-u8-vsnprintf1.c index 89274aa0..5de57fb1 100644 --- a/tests/unistdio/test-u8-vsnprintf1.c +++ b/tests/unistdio/test-u8-vsnprintf1.c @@ -1,5 +1,5 @@  /* Test of u8_vsnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-u8-vsprintf1.c b/tests/unistdio/test-u8-vsprintf1.c index 821880be..542cce32 100644 --- a/tests/unistdio/test-u8-vsprintf1.c +++ b/tests/unistdio/test-u8-vsprintf1.c @@ -1,5 +1,5 @@  /* Test of u8_vsprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-asnprintf1.c b/tests/unistdio/test-ulc-asnprintf1.c index 4cad53d5..236cd3b2 100644 --- a/tests/unistdio/test-ulc-asnprintf1.c +++ b/tests/unistdio/test-ulc-asnprintf1.c @@ -1,5 +1,5 @@  /* Test of ulc_asnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-asnprintf1.h b/tests/unistdio/test-ulc-asnprintf1.h index 3631c26e..9e11f314 100644 --- a/tests/unistdio/test-ulc-asnprintf1.h +++ b/tests/unistdio/test-ulc-asnprintf1.h @@ -1,5 +1,5 @@  /* Test of ulc_[v]asnprintf() functions. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-printf1.h b/tests/unistdio/test-ulc-printf1.h index a15effbb..49089c1b 100644 --- a/tests/unistdio/test-ulc-printf1.h +++ b/tests/unistdio/test-ulc-printf1.h @@ -1,5 +1,5 @@  /* Test of ulc_v[a]s[n]printf() functions. -   Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2007, 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -71,6 +71,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))        ASSERT (strcmp (result, "     Hello 33") == 0);        free (result);      } +    { /* Width given as argument.  */ +      char *result = +        my_xasprintf ("%*U %d", 10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "     Hello 33") == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      char *result = +        my_xasprintf ("%*U %d", -10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "Hello      33") == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        char *result =          my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); @@ -103,6 +117,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))        ASSERT (strcmp (result, "     Hello 33") == 0);        free (result);      } +    { /* Width given as argument.  */ +      char *result = +        my_xasprintf ("%*lU %d", 10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "     Hello 33") == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      char *result = +        my_xasprintf ("%*lU %d", -10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "Hello      33") == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        char *result =          my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); @@ -135,6 +163,20 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))        ASSERT (strcmp (result, "     Hello 33") == 0);        free (result);      } +    { /* Width given as argument.  */ +      char *result = +        my_xasprintf ("%*llU %d", 10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "     Hello 33") == 0); +      free (result); +    } +    { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +      char *result = +        my_xasprintf ("%*llU %d", -10, unicode_string, 33, 44, 55); +      ASSERT (result != NULL); +      ASSERT (strcmp (result, "Hello      33") == 0); +      free (result); +    }      { /* FLAG_LEFT.  */        char *result =          my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); @@ -169,6 +211,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("Mr. %*s %d", 20, "Ronald Reagan", 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "Mr.        Ronald Reagan 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("Mr. %*s %d", -20, "Ronald Reagan", 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "Mr. Ronald Reagan        33") == 0); +    free (result); +  } +    { /* FLAG_LEFT.  */      char *result =        my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); @@ -210,6 +268,28 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*a %d", 10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "  0x1.cp+0 33") == 0 +            || strcmp (result, "  0x3.8p-1 33") == 0 +            || strcmp (result, "    0x7p-2 33") == 0 +            || strcmp (result, "    0xep-3 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*a %d", -10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "0x1.cp+0   33") == 0 +            || strcmp (result, "0x3.8p-1   33") == 0 +            || strcmp (result, "0x7p-2     33") == 0 +            || strcmp (result, "0xep-3     33") == 0); +    free (result); +  } +    { /* Small precision.  */      char *result =        my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); @@ -254,6 +334,28 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*La %d", 10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "  0x1.cp+0 33") == 0 +            || strcmp (result, "  0x3.8p-1 33") == 0 +            || strcmp (result, "    0x7p-2 33") == 0 +            || strcmp (result, "    0xep-3 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*La %d", -10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "0x1.cp+0   33") == 0 +            || strcmp (result, "0x3.8p-1   33") == 0 +            || strcmp (result, "0x7p-2     33") == 0 +            || strcmp (result, "0xep-3     33") == 0); +    free (result); +  } +    { /* Small precision.  */      char *result =        my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); @@ -294,6 +396,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*f %d", 10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "  1.750000 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*f %d", -10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.750000   33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); @@ -318,6 +436,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*Lf %d", 10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "  1.750000 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*Lf %d", -10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.750000   33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); @@ -380,6 +514,24 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*e %d", 15, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "   1.750000e+00 33") == 0 +            || strcmp (result, "  1.750000e+000 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*e %d", -15, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.750000e+00    33") == 0 +            || strcmp (result, "1.750000e+000   33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); @@ -405,6 +557,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*Le %d", 15, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "   1.750000e+00 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*Le %d", -15, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.750000e+00    33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); @@ -431,6 +599,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*g %d", 10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "      1.75 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*g %d", -10, 1.75, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.75       33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); @@ -456,6 +640,22 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      free (result);    } +  { /* Width given as argument.  */ +    char *result = +      my_xasprintf ("%*Lg %d", 10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "      1.75 33") == 0); +    free (result); +  } + +  { /* Negative width given as argument (cf. FLAG_LEFT below).  */ +    char *result = +      my_xasprintf ("%*Lg %d", -10, 1.75L, 33, 44, 55); +    ASSERT (result != NULL); +    ASSERT (strcmp (result, "1.75       33") == 0); +    free (result); +  } +    { /* Precision.  */      char *result =        my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); @@ -470,10 +670,14 @@ test_xfunction (char * (*my_xasprintf) (const char *, ...))      int count = -1;      char *result =        my_xasprintf ("%d %n", 123, &count, 33, 44, 55); +#if NEED_PRINTF_WITH_N_DIRECTIVE      ASSERT (result != NULL);      ASSERT (strcmp (result, "123 ") == 0);      ASSERT (count == 4);      free (result); +#else +    ASSERT (result == NULL); +#endif    }    /* Test the support of the POSIX/XSI format strings with positions.  */ diff --git a/tests/unistdio/test-ulc-vasnprintf1.c b/tests/unistdio/test-ulc-vasnprintf1.c index d6ea67dd..d0d6f858 100644 --- a/tests/unistdio/test-ulc-vasnprintf1.c +++ b/tests/unistdio/test-ulc-vasnprintf1.c @@ -1,5 +1,5 @@  /* Test of ulc_vasnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasnprintf2.c b/tests/unistdio/test-ulc-vasnprintf2.c index f53ff50f..458ce4aa 100644 --- a/tests/unistdio/test-ulc-vasnprintf2.c +++ b/tests/unistdio/test-ulc-vasnprintf2.c @@ -1,5 +1,5 @@  /* Test of ulc_vasnprintf() function in an ISO-8859-1 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasnprintf3.c b/tests/unistdio/test-ulc-vasnprintf3.c index 6bc2c9b5..717e9850 100644 --- a/tests/unistdio/test-ulc-vasnprintf3.c +++ b/tests/unistdio/test-ulc-vasnprintf3.c @@ -1,5 +1,5 @@  /* Test of ulc_vasnprintf() function in an UTF-8 locale. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vasprintf1.c b/tests/unistdio/test-ulc-vasprintf1.c index ec523ff4..c97909cc 100644 --- a/tests/unistdio/test-ulc-vasprintf1.c +++ b/tests/unistdio/test-ulc-vasprintf1.c @@ -1,5 +1,5 @@  /* Test of ulc_vasprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vsnprintf1.c b/tests/unistdio/test-ulc-vsnprintf1.c index c282ff99..899ad10b 100644 --- a/tests/unistdio/test-ulc-vsnprintf1.c +++ b/tests/unistdio/test-ulc-vsnprintf1.c @@ -1,5 +1,5 @@  /* Test of ulc_vsnprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistdio/test-ulc-vsprintf1.c b/tests/unistdio/test-ulc-vsprintf1.c index 9e9af160..123397d7 100644 --- a/tests/unistdio/test-ulc-vsprintf1.c +++ b/tests/unistdio/test-ulc-vsprintf1.c @@ -1,5 +1,5 @@  /* Test of ulc_vsprintf() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-chr.h b/tests/unistr/test-chr.h index f8f87015..f7bfc2ba 100644 --- a/tests/unistr/test-chr.h +++ b/tests/unistr/test-chr.h @@ -1,5 +1,5 @@  /* Test of uN_chr() functions. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ int  main (void)  {    size_t size = 0x100000; -  size_t i;    size_t length;    UNIT *input;    uint32_t *input32 = (uint32_t *) malloc (size * sizeof (uint32_t)); @@ -29,7 +28,7 @@ main (void)    input32[0] = 'a';    input32[1] = 'b';    u32_set (input32 + 2, 'c', 1024); -  for (i = 1026; i < size - 2; i += 63) +  for (size_t i = 1026; i < size - 2; i += 63)      {        size_t last = i + 63 < size - 2 ? i + 63 : size - 2;        ucs4_t uc = 'd' | (i - 1026); @@ -48,9 +47,11 @@ main (void)    ASSERT (U_CHR (input, length, 'a') == input);    ASSERT (U_CHR (input, 0, 'a') == NULL); -  void *page_boundary = zerosize_ptr (); -  if (page_boundary) -    ASSERT (U_CHR (page_boundary, 0, 'a') == NULL); +  { +    void *page_boundary = zerosize_ptr (); +    if (page_boundary != NULL) +      ASSERT (U_CHR (page_boundary, 0, 'a') == NULL); +  }    ASSERT (U_CHR (input, length, 'b') == input + 1);    ASSERT (U_CHR (input, length, 'c') == input + 2); @@ -59,7 +60,7 @@ main (void)    {      UNIT *exp = input + 1026;      UNIT *prev = input + 1; -    for (i = 1026; i < size - 2; i += 63) +    for (size_t i = 1026; i < size - 2; i += 63)        {          UNIT c[6];          size_t n; @@ -108,14 +109,14 @@ main (void)    /* Check that uN_chr() does not read past the first occurrence of the       byte being searched.  */    { -    char *page_boundary = (char *) zerosize_ptr (); +    UNIT *page_boundary = zerosize_ptr ();      size_t n;      if (page_boundary != NULL)        {          for (n = 1; n <= 500 / sizeof (UNIT); n++)            { -            UNIT *mem = (UNIT *) (page_boundary - n * sizeof (UNIT)); +            UNIT *mem = page_boundary - n;              U_SET (mem, 'X', n);              ASSERT (U_CHR (mem, n, 'U') == NULL); diff --git a/tests/unistr/test-cmp.h b/tests/unistr/test-cmp.h index c7c92434..3eb1be32 100644 --- a/tests/unistr/test-cmp.h +++ b/tests/unistr/test-cmp.h @@ -1,5 +1,5 @@  /* Test of uN_cmp() functions. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cmp2.h b/tests/unistr/test-cmp2.h index 8fe88c54..3b9f7568 100644 --- a/tests/unistr/test-cmp2.h +++ b/tests/unistr/test-cmp2.h @@ -1,5 +1,5 @@  /* Test of uN_cmp2() functions. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cpy-alloc.h b/tests/unistr/test-cpy-alloc.h index 5fa46a74..37b07350 100644 --- a/tests/unistr/test-cpy-alloc.h +++ b/tests/unistr/test-cpy-alloc.h @@ -1,5 +1,5 @@  /* Test of uN_cpy_alloc() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-cpy.h b/tests/unistr/test-cpy.h index 12379bb2..05f1f5a8 100644 --- a/tests/unistr/test-cpy.h +++ b/tests/unistr/test-cpy.h @@ -1,5 +1,5 @@  /* Test of uN_cpy() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-move.h b/tests/unistr/test-move.h index fd13b4cc..80784937 100644 --- a/tests/unistr/test-move.h +++ b/tests/unistr/test-move.h @@ -1,5 +1,5 @@  /* Test of uN_move() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-pcpy.h b/tests/unistr/test-pcpy.h new file mode 100644 index 00000000..92ae0d0e --- /dev/null +++ b/tests/unistr/test-pcpy.h @@ -0,0 +1,44 @@ +/* Test of uN_pcpy() functions. +   Copyright (C) 2010-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +int +main () +{ +  /* Test small copying operations.  */ +  { +    static const UNIT src[] = { 'c', 'l', 'i', 'm', 'a', 't', 'e' }; +    size_t n; + +    for (n = 0; n <= SIZEOF (src); n++) +      { +        UNIT dest[1 + SIZEOF (src) + 1] = +          { MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC, MAGIC }; +        UNIT *ret; +        size_t i; + +        ret = U_PCPY (dest + 1, src, n); +        ASSERT (ret == dest + 1 + n); +        ASSERT (dest[0] == MAGIC); +        for (i = 0; i < n; i++) +          ASSERT (dest[1 + i] == src[i]); +        ASSERT (dest[1 + n] == MAGIC); +      } +  } + +  return 0; +} diff --git a/tests/unistr/test-set.h b/tests/unistr/test-set.h index 24330260..c1966675 100644 --- a/tests/unistr/test-set.h +++ b/tests/unistr/test-set.h @@ -1,5 +1,5 @@  /* Test of uN_set() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-stpcpy.h b/tests/unistr/test-stpcpy.h index 5b1d6615..e3fe8e5b 100644 --- a/tests/unistr/test-stpcpy.h +++ b/tests/unistr/test-stpcpy.h @@ -1,5 +1,5 @@  /* Test of uN_stpcpy() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-stpncpy.h b/tests/unistr/test-stpncpy.h index 34503bd2..3fc03d51 100644 --- a/tests/unistr/test-stpncpy.h +++ b/tests/unistr/test-stpncpy.h @@ -1,5 +1,5 @@  /* Test of uN_stpncpy() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strcat.h b/tests/unistr/test-strcat.h index 906528ff..12440c43 100644 --- a/tests/unistr/test-strcat.h +++ b/tests/unistr/test-strcat.h @@ -1,5 +1,5 @@  /* Test of uN_strcat() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strchr.h b/tests/unistr/test-strchr.h index 52768a4b..ad102c2e 100644 --- a/tests/unistr/test-strchr.h +++ b/tests/unistr/test-strchr.h @@ -1,5 +1,5 @@  /* Test of uN_strchr() functions. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -22,7 +22,6 @@ test_strchr (void)  {    size_t size = 0x100000;    size_t length; -  size_t i;    UNIT *input;    uint32_t *input32 = (uint32_t *) malloc ((size + 1) * sizeof (uint32_t));    ASSERT (input32); @@ -30,7 +29,7 @@ test_strchr (void)    input32[0] = 'a';    input32[1] = 'b';    u32_set (input32 + 2, 'c', 1024); -  for (i = 1026; i < size - 2; i += 63) +  for (size_t i = 1026; i < size - 2; i += 63)      {        size_t last = i + 63 < size - 2 ? i + 63 : size - 2;        ucs4_t uc = 'd' | (i - 1026); @@ -54,7 +53,7 @@ test_strchr (void)      UNIT *exp = input + 1026;      UNIT *prev = input + 2; -    for (i = 1026; i < size - 2; i += 63) +    for (size_t i = 1026; i < size - 2; i += 63)        {          UNIT c[6];          size_t n; diff --git a/tests/unistr/test-strcmp.h b/tests/unistr/test-strcmp.h index aeba3549..ea8c1321 100644 --- a/tests/unistr/test-strcmp.h +++ b/tests/unistr/test-strcmp.h @@ -1,5 +1,5 @@  /* Test of uN_strcmp() and uN_strcoll() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strcpy.h b/tests/unistr/test-strcpy.h index 1f145032..9ff1f992 100644 --- a/tests/unistr/test-strcpy.h +++ b/tests/unistr/test-strcpy.h @@ -1,5 +1,5 @@  /* Test of uN_strcpy() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strdup.h b/tests/unistr/test-strdup.h index 298a0459..af19c4d6 100644 --- a/tests/unistr/test-strdup.h +++ b/tests/unistr/test-strdup.h @@ -1,5 +1,5 @@  /* Test of uN_strdup() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncat.h b/tests/unistr/test-strncat.h index c66583ec..c505fc26 100644 --- a/tests/unistr/test-strncat.h +++ b/tests/unistr/test-strncat.h @@ -1,5 +1,5 @@  /* Test of uN_strncat() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncmp.h b/tests/unistr/test-strncmp.h index 8fdc4d99..64fecebb 100644 --- a/tests/unistr/test-strncmp.h +++ b/tests/unistr/test-strncmp.h @@ -1,5 +1,5 @@  /* Test of uN_strncmp() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strncpy.h b/tests/unistr/test-strncpy.h index f2774fb0..c3ad19c6 100644 --- a/tests/unistr/test-strncpy.h +++ b/tests/unistr/test-strncpy.h @@ -1,5 +1,5 @@  /* Test of uN_strncpy() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-strnlen.h b/tests/unistr/test-strnlen.h index ba3c0cfd..abc83fb9 100644 --- a/tests/unistr/test-strnlen.h +++ b/tests/unistr/test-strnlen.h @@ -1,5 +1,5 @@  /* Test of uN_strnlen() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u-strstr.h b/tests/unistr/test-u-strstr.h index d53183e1..36783cdf 100644 --- a/tests/unistr/test-u-strstr.h +++ b/tests/unistr/test-u-strstr.h @@ -1,5 +1,5 @@  /* Test of uN_strstr() functions. -   Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2004, 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -207,4 +207,42 @@ test_u_strstr (void)      free (needle);      free (haystack);    } + +  /* Test case from Yves Bastide. +     <https://www.openwall.com/lists/musl/2014/04/18/2>  */ +  { +    const UNIT input[] = +      { 'p', 'l', 'a', 'y', 'i', 'n', 'g', ' ', 'p', 'l', 'a', 'y', ' ', 'p', +        'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', ' ', 'a', 'l', 'w', 'a', 'y', +        's', 0 +      }; +    const UNIT needle[] = +      { 'p', 'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', ' ', 'p', 'l', 'a', 'y', +        0 +      }; +    const UNIT *result = U_STRSTR (input, needle); +    ASSERT (result == input + 8); +  } + +  /* Test long needles.  */ +  { +    size_t m = 1024; +    UNIT *haystack = (UNIT *) malloc ((2 * m + 1) * sizeof (UNIT)); +    UNIT *needle = (UNIT *) malloc ((m + 1) * sizeof (UNIT)); +    if (haystack != NULL && needle != NULL) +      { +        const UNIT *p; +        haystack[0] = 'x'; +        U_SET (haystack + 1, ' ', m - 1); +        U_SET (haystack + m, 'x', m); +        haystack[2 * m] = '\0'; +        U_SET (needle, 'x', m); +        needle[m] = '\0'; +        p = U_STRSTR (haystack, needle); +        ASSERT (p); +        ASSERT (p - haystack == m); +      } +    free (needle); +    free (haystack); +  }  } diff --git a/tests/unistr/test-u-strtok.h b/tests/unistr/test-u-strtok.h index 15389ac1..74272d3b 100644 --- a/tests/unistr/test-u-strtok.h +++ b/tests/unistr/test-u-strtok.h @@ -1,5 +1,5 @@  /* Test of uN_strtok() functions. -   Copyright (C) 2015-2022 Free Software Foundation, Inc. +   Copyright (C) 2015-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -50,10 +50,12 @@ test_u_strtok (void)          'A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'A', 'B', 'D', 'E', 0        };      ucs4_t u_delim[] = { 0x3000, 0x3001, 0 }; -    size_t input_len = 6 * SIZEOF (u_input); -    UNIT *input = (UNIT *) malloc (input_len); -    size_t delim_len = 6 * SIZEOF (u_delim); -    UNIT *delim = (UNIT *) malloc (delim_len); +    /* Convert ucs4_t[] to UNIT[]. +       Every ucs4_t yields at most 4 / sizeof (UNIT) units.  */ +    size_t input_len = SIZEOF (u_input) * (4 / sizeof (UNIT)); +    UNIT *input = (UNIT *) malloc (input_len * sizeof (UNIT)); +    size_t delim_len = SIZEOF (u_delim) * (4 / sizeof (UNIT)); +    UNIT *delim = (UNIT *) malloc (delim_len * sizeof (UNIT));      UNIT *state;      const UNIT *result;      UNIT *ptr, *first_ptr, *second_ptr; diff --git a/tests/unistr/test-u16-check.c b/tests/unistr/test-u16-check.c index eb7b9988..0d83d6ac 100644 --- a/tests/unistr/test-u16-check.c +++ b/tests/unistr/test-u16-check.c @@ -1,5 +1,5 @@  /* Test of u16_check() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-chr.c b/tests/unistr/test-u16-chr.c index 6e6e1069..5f0b16e5 100644 --- a/tests/unistr/test-u16-chr.c +++ b/tests/unistr/test-u16-chr.c @@ -1,5 +1,5 @@  /* Test of u16_chr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cmp.c b/tests/unistr/test-u16-cmp.c index 393fa9d7..03d6b4cd 100644 --- a/tests/unistr/test-u16-cmp.c +++ b/tests/unistr/test-u16-cmp.c @@ -1,5 +1,5 @@  /* Test of u16_cmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cmp2.c b/tests/unistr/test-u16-cmp2.c index e25fe1a6..2eb0dbd0 100644 --- a/tests/unistr/test-u16-cmp2.c +++ b/tests/unistr/test-u16-cmp2.c @@ -1,5 +1,5 @@  /* Test of u16_cmp2() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cpy-alloc.c b/tests/unistr/test-u16-cpy-alloc.c index 80e8999d..bbc16456 100644 --- a/tests/unistr/test-u16-cpy-alloc.c +++ b/tests/unistr/test-u16-cpy-alloc.c @@ -1,5 +1,5 @@  /* Test of u16_cpy_alloc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-cpy.c b/tests/unistr/test-u16-cpy.c index be7f11aa..cf9993fa 100644 --- a/tests/unistr/test-u16-cpy.c +++ b/tests/unistr/test-u16-cpy.c @@ -1,5 +1,5 @@  /* Test of u16_cpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mblen.c b/tests/unistr/test-u16-mblen.c index 603cfe1f..a81a79a3 100644 --- a/tests/unistr/test-u16-mblen.c +++ b/tests/unistr/test-u16-mblen.c @@ -1,5 +1,5 @@  /* Test of u16_mblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbsnlen.c b/tests/unistr/test-u16-mbsnlen.c index 02bf2030..f3a249f9 100644 --- a/tests/unistr/test-u16-mbsnlen.c +++ b/tests/unistr/test-u16-mbsnlen.c @@ -1,5 +1,5 @@  /* Test of u16_mbsnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc-unsafe.c b/tests/unistr/test-u16-mbtouc-unsafe.c index 06d4e428..7fd02f27 100644 --- a/tests/unistr/test-u16-mbtouc-unsafe.c +++ b/tests/unistr/test-u16-mbtouc-unsafe.c @@ -1,5 +1,5 @@  /* Test of u16_mbtouc_unsafe() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc.c b/tests/unistr/test-u16-mbtouc.c index 57a2b663..b7a3e47c 100644 --- a/tests/unistr/test-u16-mbtouc.c +++ b/tests/unistr/test-u16-mbtouc.c @@ -1,5 +1,5 @@  /* Test of u16_mbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtouc.h b/tests/unistr/test-u16-mbtouc.h index a44a998d..5c33948a 100644 --- a/tests/unistr/test-u16-mbtouc.h +++ b/tests/unistr/test-u16-mbtouc.h @@ -1,5 +1,5 @@  /* Test of u16_mbtouc() and u16_mbtouc_unsafe() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-mbtoucr.c b/tests/unistr/test-u16-mbtoucr.c index dfdab67d..167a77e0 100644 --- a/tests/unistr/test-u16-mbtoucr.c +++ b/tests/unistr/test-u16-mbtoucr.c @@ -1,5 +1,5 @@  /* Test of u16_mbtoucr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-move.c b/tests/unistr/test-u16-move.c index 8e050d44..887912b3 100644 --- a/tests/unistr/test-u16-move.c +++ b/tests/unistr/test-u16-move.c @@ -1,5 +1,5 @@  /* Test of u16_move() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-next.c b/tests/unistr/test-u16-next.c index e2022898..4d116e25 100644 --- a/tests/unistr/test-u16-next.c +++ b/tests/unistr/test-u16-next.c @@ -1,5 +1,5 @@  /* Test of u16_next() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-pcpy.c b/tests/unistr/test-u16-pcpy.c new file mode 100644 index 00000000..b20741e2 --- /dev/null +++ b/tests/unistr/test-u16-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u16_pcpy() function. +   Copyright (C) 2010-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint16_t +#define U_PCPY u16_pcpy +#define MAGIC 0xBADE +#include "test-pcpy.h" diff --git a/tests/unistr/test-u16-prev.c b/tests/unistr/test-u16-prev.c index c7400dc5..bf05ea05 100644 --- a/tests/unistr/test-u16-prev.c +++ b/tests/unistr/test-u16-prev.c @@ -1,5 +1,5 @@  /* Test of u16_prev() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-set.c b/tests/unistr/test-u16-set.c index a5270d10..7a6597dd 100644 --- a/tests/unistr/test-u16-set.c +++ b/tests/unistr/test-u16-set.c @@ -1,5 +1,5 @@  /* Test of u16_set() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-stpcpy.c b/tests/unistr/test-u16-stpcpy.c index 5f18e011..616041d2 100644 --- a/tests/unistr/test-u16-stpcpy.c +++ b/tests/unistr/test-u16-stpcpy.c @@ -1,5 +1,5 @@  /* Test of u16_stpcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-stpncpy.c b/tests/unistr/test-u16-stpncpy.c index 104ea16c..35dd20d5 100644 --- a/tests/unistr/test-u16-stpncpy.c +++ b/tests/unistr/test-u16-stpncpy.c @@ -1,5 +1,5 @@  /* Test of u16_stpncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcat.c b/tests/unistr/test-u16-strcat.c index de5448b2..8ec36d4c 100644 --- a/tests/unistr/test-u16-strcat.c +++ b/tests/unistr/test-u16-strcat.c @@ -1,5 +1,5 @@  /* Test of u16_strcat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strchr.c b/tests/unistr/test-u16-strchr.c index f4ec6881..e23df8c2 100644 --- a/tests/unistr/test-u16-strchr.c +++ b/tests/unistr/test-u16-strchr.c @@ -1,5 +1,5 @@  /* Test of u16_strchr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcmp.c b/tests/unistr/test-u16-strcmp.c index 7ab3e831..4ee85078 100644 --- a/tests/unistr/test-u16-strcmp.c +++ b/tests/unistr/test-u16-strcmp.c @@ -1,5 +1,5 @@  /* Test of u16_strcmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcmp.h b/tests/unistr/test-u16-strcmp.h index 84b8d511..3a0f3b18 100644 --- a/tests/unistr/test-u16-strcmp.h +++ b/tests/unistr/test-u16-strcmp.h @@ -1,5 +1,5 @@  /* Test of u16_strcmp() and u16_strcoll() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcoll.c b/tests/unistr/test-u16-strcoll.c index 9ea43bca..b49f4b66 100644 --- a/tests/unistr/test-u16-strcoll.c +++ b/tests/unistr/test-u16-strcoll.c @@ -1,5 +1,5 @@  /* Test of u16_strcoll() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strcpy.c b/tests/unistr/test-u16-strcpy.c index 7f0e01e6..9d2f475d 100644 --- a/tests/unistr/test-u16-strcpy.c +++ b/tests/unistr/test-u16-strcpy.c @@ -1,5 +1,5 @@  /* Test of u16_strcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strdup.c b/tests/unistr/test-u16-strdup.c index 798831e1..936bddcb 100644 --- a/tests/unistr/test-u16-strdup.c +++ b/tests/unistr/test-u16-strdup.c @@ -1,5 +1,5 @@  /* Test of u16_strdup() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strlen.c b/tests/unistr/test-u16-strlen.c index 68198a41..e9348b81 100644 --- a/tests/unistr/test-u16-strlen.c +++ b/tests/unistr/test-u16-strlen.c @@ -1,5 +1,5 @@  /* Test of u16_strlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strmblen.c b/tests/unistr/test-u16-strmblen.c index f31d824c..88dd0f27 100644 --- a/tests/unistr/test-u16-strmblen.c +++ b/tests/unistr/test-u16-strmblen.c @@ -1,5 +1,5 @@  /* Test of u16_strmblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strmbtouc.c b/tests/unistr/test-u16-strmbtouc.c index bb7a5ca9..c4c76ca5 100644 --- a/tests/unistr/test-u16-strmbtouc.c +++ b/tests/unistr/test-u16-strmbtouc.c @@ -1,5 +1,5 @@  /* Test of u16_strmbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncat.c b/tests/unistr/test-u16-strncat.c index 9eda6e15..6079cb71 100644 --- a/tests/unistr/test-u16-strncat.c +++ b/tests/unistr/test-u16-strncat.c @@ -1,5 +1,5 @@  /* Test of u16_strncat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncmp.c b/tests/unistr/test-u16-strncmp.c index 3d03a7a2..45bc9fab 100644 --- a/tests/unistr/test-u16-strncmp.c +++ b/tests/unistr/test-u16-strncmp.c @@ -1,5 +1,5 @@  /* Test of u16_strncmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strncpy.c b/tests/unistr/test-u16-strncpy.c index 184c6311..837dac9c 100644 --- a/tests/unistr/test-u16-strncpy.c +++ b/tests/unistr/test-u16-strncpy.c @@ -1,5 +1,5 @@  /* Test of u16_strncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strnlen.c b/tests/unistr/test-u16-strnlen.c index 9258b965..48604fee 100644 --- a/tests/unistr/test-u16-strnlen.c +++ b/tests/unistr/test-u16-strnlen.c @@ -1,5 +1,5 @@  /* Test of u16_strnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-strstr.c b/tests/unistr/test-u16-strstr.c index bbad6c61..4906a96f 100644 --- a/tests/unistr/test-u16-strstr.c +++ b/tests/unistr/test-u16-strstr.c @@ -1,5 +1,5 @@  /* Test of u16_strstr() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@  #define UNIT uint16_t  #define U_STRSTR u16_strstr +#define U_SET u16_set  #include "test-u-strstr.h"  int diff --git a/tests/unistr/test-u16-strtok.c b/tests/unistr/test-u16-strtok.c index e226393d..ef9ffbb5 100644 --- a/tests/unistr/test-u16-strtok.c +++ b/tests/unistr/test-u16-strtok.c @@ -1,5 +1,5 @@  /* Test of u16_strtok() function. -   Copyright (C) 2015-2022 Free Software Foundation, Inc. +   Copyright (C) 2015-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-to-u32.c b/tests/unistr/test-u16-to-u32.c index de19d5a6..5b340451 100644 --- a/tests/unistr/test-u16-to-u32.c +++ b/tests/unistr/test-u16-to-u32.c @@ -1,5 +1,5 @@  /* Test of u16_to_u32() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-to-u8.c b/tests/unistr/test-u16-to-u8.c index acbad8ac..71b9a02e 100644 --- a/tests/unistr/test-u16-to-u8.c +++ b/tests/unistr/test-u16-to-u8.c @@ -1,5 +1,5 @@  /* Test of u16_to_u8() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u16-uctomb.c b/tests/unistr/test-u16-uctomb.c index 3408cba3..14338d63 100644 --- a/tests/unistr/test-u16-uctomb.c +++ b/tests/unistr/test-u16-uctomb.c @@ -1,5 +1,5 @@  /* Test of u16_uctomb() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-check.c b/tests/unistr/test-u32-check.c index 9b43b03e..fab64b23 100644 --- a/tests/unistr/test-u32-check.c +++ b/tests/unistr/test-u32-check.c @@ -1,5 +1,5 @@  /* Test of u32_check() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-chr.c b/tests/unistr/test-u32-chr.c index 7cd3912d..474681ff 100644 --- a/tests/unistr/test-u32-chr.c +++ b/tests/unistr/test-u32-chr.c @@ -1,5 +1,5 @@  /* Test of u32_chr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cmp.c b/tests/unistr/test-u32-cmp.c index d76024a2..57579eda 100644 --- a/tests/unistr/test-u32-cmp.c +++ b/tests/unistr/test-u32-cmp.c @@ -1,5 +1,5 @@  /* Test of u32_cmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cmp2.c b/tests/unistr/test-u32-cmp2.c index b3d249da..0fbb8c0a 100644 --- a/tests/unistr/test-u32-cmp2.c +++ b/tests/unistr/test-u32-cmp2.c @@ -1,5 +1,5 @@  /* Test of u32_cmp2() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cpy-alloc.c b/tests/unistr/test-u32-cpy-alloc.c index f9123115..f3f9d106 100644 --- a/tests/unistr/test-u32-cpy-alloc.c +++ b/tests/unistr/test-u32-cpy-alloc.c @@ -1,5 +1,5 @@  /* Test of u32_cpy_alloc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-cpy.c b/tests/unistr/test-u32-cpy.c index b4f8f90a..0ba5f8b4 100644 --- a/tests/unistr/test-u32-cpy.c +++ b/tests/unistr/test-u32-cpy.c @@ -1,5 +1,5 @@  /* Test of u32_cpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mblen.c b/tests/unistr/test-u32-mblen.c index 6cfb22a2..5e8e0e29 100644 --- a/tests/unistr/test-u32-mblen.c +++ b/tests/unistr/test-u32-mblen.c @@ -1,5 +1,5 @@  /* Test of u32_mblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbsnlen.c b/tests/unistr/test-u32-mbsnlen.c index 4ef6e316..e8f5c5da 100644 --- a/tests/unistr/test-u32-mbsnlen.c +++ b/tests/unistr/test-u32-mbsnlen.c @@ -1,5 +1,5 @@  /* Test of u32_mbsnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc-unsafe.c b/tests/unistr/test-u32-mbtouc-unsafe.c index cfe0c4ca..111768db 100644 --- a/tests/unistr/test-u32-mbtouc-unsafe.c +++ b/tests/unistr/test-u32-mbtouc-unsafe.c @@ -1,5 +1,5 @@  /* Test of u32_mbtouc_unsafe() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc.c b/tests/unistr/test-u32-mbtouc.c index b45e61e2..0804d8e4 100644 --- a/tests/unistr/test-u32-mbtouc.c +++ b/tests/unistr/test-u32-mbtouc.c @@ -1,5 +1,5 @@  /* Test of u32_mbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtouc.h b/tests/unistr/test-u32-mbtouc.h index 1b226a16..37e6342f 100644 --- a/tests/unistr/test-u32-mbtouc.h +++ b/tests/unistr/test-u32-mbtouc.h @@ -1,5 +1,5 @@  /* Test of u32_mbtouc() and u32_mbtouc_unsafe() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-mbtoucr.c b/tests/unistr/test-u32-mbtoucr.c index 30c3ca29..7d74a87a 100644 --- a/tests/unistr/test-u32-mbtoucr.c +++ b/tests/unistr/test-u32-mbtoucr.c @@ -1,5 +1,5 @@  /* Test of u32_mbtoucr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-move.c b/tests/unistr/test-u32-move.c index 26b730bd..82c9a379 100644 --- a/tests/unistr/test-u32-move.c +++ b/tests/unistr/test-u32-move.c @@ -1,5 +1,5 @@  /* Test of u32_move() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-next.c b/tests/unistr/test-u32-next.c index 42103347..320d520e 100644 --- a/tests/unistr/test-u32-next.c +++ b/tests/unistr/test-u32-next.c @@ -1,5 +1,5 @@  /* Test of u32_next() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-pcpy.c b/tests/unistr/test-u32-pcpy.c new file mode 100644 index 00000000..af77cc25 --- /dev/null +++ b/tests/unistr/test-u32-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u32_pcpy() function. +   Copyright (C) 2010-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint32_t +#define U_PCPY u32_pcpy +#define MAGIC 0xBADFACE +#include "test-pcpy.h" diff --git a/tests/unistr/test-u32-prev.c b/tests/unistr/test-u32-prev.c index 5dd61f27..7e648dd1 100644 --- a/tests/unistr/test-u32-prev.c +++ b/tests/unistr/test-u32-prev.c @@ -1,5 +1,5 @@  /* Test of u32_prev() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-set.c b/tests/unistr/test-u32-set.c index 6551c9d5..99e644dc 100644 --- a/tests/unistr/test-u32-set.c +++ b/tests/unistr/test-u32-set.c @@ -1,5 +1,5 @@  /* Test of u32_set() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-stpcpy.c b/tests/unistr/test-u32-stpcpy.c index 9bb5adfc..c6ac1751 100644 --- a/tests/unistr/test-u32-stpcpy.c +++ b/tests/unistr/test-u32-stpcpy.c @@ -1,5 +1,5 @@  /* Test of u32_stpcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-stpncpy.c b/tests/unistr/test-u32-stpncpy.c index 667fb221..a417fe0c 100644 --- a/tests/unistr/test-u32-stpncpy.c +++ b/tests/unistr/test-u32-stpncpy.c @@ -1,5 +1,5 @@  /* Test of u32_stpncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcat.c b/tests/unistr/test-u32-strcat.c index cf6ed7fe..64e1b5cc 100644 --- a/tests/unistr/test-u32-strcat.c +++ b/tests/unistr/test-u32-strcat.c @@ -1,5 +1,5 @@  /* Test of u32_strcat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strchr.c b/tests/unistr/test-u32-strchr.c index 1359e1a4..075d1d66 100644 --- a/tests/unistr/test-u32-strchr.c +++ b/tests/unistr/test-u32-strchr.c @@ -1,5 +1,5 @@  /* Test of u32_strchr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcmp.c b/tests/unistr/test-u32-strcmp.c index e59bb93e..71fd0b1e 100644 --- a/tests/unistr/test-u32-strcmp.c +++ b/tests/unistr/test-u32-strcmp.c @@ -1,5 +1,5 @@  /* Test of u32_strcmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcmp.h b/tests/unistr/test-u32-strcmp.h index d32b8e04..4b149103 100644 --- a/tests/unistr/test-u32-strcmp.h +++ b/tests/unistr/test-u32-strcmp.h @@ -1,5 +1,5 @@  /* Test of u32_strcmp() and u32_strcoll() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcoll.c b/tests/unistr/test-u32-strcoll.c index 73fa65ae..bd3180e1 100644 --- a/tests/unistr/test-u32-strcoll.c +++ b/tests/unistr/test-u32-strcoll.c @@ -1,5 +1,5 @@  /* Test of u32_strcoll() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strcpy.c b/tests/unistr/test-u32-strcpy.c index caf5d4af..22a6e70e 100644 --- a/tests/unistr/test-u32-strcpy.c +++ b/tests/unistr/test-u32-strcpy.c @@ -1,5 +1,5 @@  /* Test of u32_strcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strdup.c b/tests/unistr/test-u32-strdup.c index 753e50c1..f81701fe 100644 --- a/tests/unistr/test-u32-strdup.c +++ b/tests/unistr/test-u32-strdup.c @@ -1,5 +1,5 @@  /* Test of u32_strdup() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strlen.c b/tests/unistr/test-u32-strlen.c index 6eeb00c0..6186fbdb 100644 --- a/tests/unistr/test-u32-strlen.c +++ b/tests/unistr/test-u32-strlen.c @@ -1,5 +1,5 @@  /* Test of u32_strlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strmblen.c b/tests/unistr/test-u32-strmblen.c index e1ced4e1..62a5a0b0 100644 --- a/tests/unistr/test-u32-strmblen.c +++ b/tests/unistr/test-u32-strmblen.c @@ -1,5 +1,5 @@  /* Test of u32_strmblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strmbtouc.c b/tests/unistr/test-u32-strmbtouc.c index 29f18316..19003098 100644 --- a/tests/unistr/test-u32-strmbtouc.c +++ b/tests/unistr/test-u32-strmbtouc.c @@ -1,5 +1,5 @@  /* Test of u32_strmbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncat.c b/tests/unistr/test-u32-strncat.c index eac5119c..10b736d3 100644 --- a/tests/unistr/test-u32-strncat.c +++ b/tests/unistr/test-u32-strncat.c @@ -1,5 +1,5 @@  /* Test of u32_strncat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncmp.c b/tests/unistr/test-u32-strncmp.c index 33b8d69e..e304a595 100644 --- a/tests/unistr/test-u32-strncmp.c +++ b/tests/unistr/test-u32-strncmp.c @@ -1,5 +1,5 @@  /* Test of u32_strncmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strncpy.c b/tests/unistr/test-u32-strncpy.c index d65074dd..e78f0b25 100644 --- a/tests/unistr/test-u32-strncpy.c +++ b/tests/unistr/test-u32-strncpy.c @@ -1,5 +1,5 @@  /* Test of u32_strncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strnlen.c b/tests/unistr/test-u32-strnlen.c index 8138efe6..31b69409 100644 --- a/tests/unistr/test-u32-strnlen.c +++ b/tests/unistr/test-u32-strnlen.c @@ -1,5 +1,5 @@  /* Test of u32_strnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-strstr.c b/tests/unistr/test-u32-strstr.c index 6d29a69d..21caa784 100644 --- a/tests/unistr/test-u32-strstr.c +++ b/tests/unistr/test-u32-strstr.c @@ -1,5 +1,5 @@  /* Test of u32_strstr() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@  #define UNIT uint32_t  #define U_STRSTR u32_strstr +#define U_SET u32_set  #include "test-u-strstr.h"  int diff --git a/tests/unistr/test-u32-strtok.c b/tests/unistr/test-u32-strtok.c index 442bc1a2..90aed3d6 100644 --- a/tests/unistr/test-u32-strtok.c +++ b/tests/unistr/test-u32-strtok.c @@ -1,5 +1,5 @@  /* Test of u32_strtok() function. -   Copyright (C) 2015-2022 Free Software Foundation, Inc. +   Copyright (C) 2015-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-to-u16.c b/tests/unistr/test-u32-to-u16.c index ac850089..fbf1a03a 100644 --- a/tests/unistr/test-u32-to-u16.c +++ b/tests/unistr/test-u32-to-u16.c @@ -1,5 +1,5 @@  /* Test of u32_to_u16() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-to-u8.c b/tests/unistr/test-u32-to-u8.c index 1a02f795..83144921 100644 --- a/tests/unistr/test-u32-to-u8.c +++ b/tests/unistr/test-u32-to-u8.c @@ -1,5 +1,5 @@  /* Test of u32_to_u8() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u32-uctomb.c b/tests/unistr/test-u32-uctomb.c index d3b1bb65..913398c8 100644 --- a/tests/unistr/test-u32-uctomb.c +++ b/tests/unistr/test-u32-uctomb.c @@ -1,5 +1,5 @@  /* Test of u32_uctomb() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-check.c b/tests/unistr/test-u8-check.c index 8e361cc8..d05c0fcb 100644 --- a/tests/unistr/test-u8-check.c +++ b/tests/unistr/test-u8-check.c @@ -1,5 +1,5 @@  /* Test of u8_check() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-chr.c b/tests/unistr/test-u8-chr.c index a0a46d95..c0827063 100644 --- a/tests/unistr/test-u8-chr.c +++ b/tests/unistr/test-u8-chr.c @@ -1,5 +1,5 @@  /* Test of u8_chr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cmp.c b/tests/unistr/test-u8-cmp.c index 528e691e..47b0f215 100644 --- a/tests/unistr/test-u8-cmp.c +++ b/tests/unistr/test-u8-cmp.c @@ -1,5 +1,5 @@  /* Test of u8_cmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cmp2.c b/tests/unistr/test-u8-cmp2.c index 9a3b99cf..b5063784 100644 --- a/tests/unistr/test-u8-cmp2.c +++ b/tests/unistr/test-u8-cmp2.c @@ -1,5 +1,5 @@  /* Test of u8_cmp2() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cpy-alloc.c b/tests/unistr/test-u8-cpy-alloc.c index 726148e8..d0e11542 100644 --- a/tests/unistr/test-u8-cpy-alloc.c +++ b/tests/unistr/test-u8-cpy-alloc.c @@ -1,5 +1,5 @@  /* Test of u8_cpy_alloc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-cpy.c b/tests/unistr/test-u8-cpy.c index 58cc5f81..33987177 100644 --- a/tests/unistr/test-u8-cpy.c +++ b/tests/unistr/test-u8-cpy.c @@ -1,5 +1,5 @@  /* Test of u8_cpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mblen.c b/tests/unistr/test-u8-mblen.c index 54dbd4b5..69ac7e55 100644 --- a/tests/unistr/test-u8-mblen.c +++ b/tests/unistr/test-u8-mblen.c @@ -1,5 +1,5 @@  /* Test of u8_mblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbsnlen.c b/tests/unistr/test-u8-mbsnlen.c index 7b8f0292..ca31d856 100644 --- a/tests/unistr/test-u8-mbsnlen.c +++ b/tests/unistr/test-u8-mbsnlen.c @@ -1,5 +1,5 @@  /* Test of u8_mbsnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -61,9 +61,18 @@ main ()       that a "malformed sequence" is interpreted in the same way as       "a character that is outside the adopted subset".       Reference: +       ISO 10646-1 amendment 2 +       <https://www.cl.cam.ac.uk/~mgk25/ucs/ISO-10646-UTF-8.html>         Markus Kuhn: UTF-8 decoder capability and stress test         <https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt>         <https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html> +     These old specifications (from ca. 2000) were a bit ambiguous, and the +     definition of UTF-8 has changed a bit as well.  The newer specification +     we obey is the Unicode Standard, version 15. +     Reference: +       Unicode Standard 15.0.0, section 3.9 +       <https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf> +       pages 124..129, especially table 3-7.     */    /* 3.1. Test that each unexpected continuation byte is signalled as a       malformed sequence of its own.  */ @@ -97,9 +106,14 @@ main ()    }    /* 3.3.2. 3-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; +    static const uint8_t input[] = { '"', 0xE0, 0xA0, '"' };      ASSERT (u8_mbsnlen (input, 4) == 3);    } +  { +    /* Outdated example: 0xE0 0x80 is an ill-formed sequence.  */ +    static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; +    ASSERT (u8_mbsnlen (input, 4) == 4); +  }    /* 3.3.7. 3-byte sequence with last byte missing.  */    {      static const uint8_t input[] = { '"', 0xEF, 0xBF, '"' }; @@ -107,14 +121,24 @@ main ()    }    /* 3.3.3. 4-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; +    static const uint8_t input[] = { '"', 0xF0, 0x90, 0x80, '"' };      ASSERT (u8_mbsnlen (input, 5) == 3);    } +  { +    /* Outdated example: 0xF0 0x80 is an ill-formed sequence.  */ +    static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; +    ASSERT (u8_mbsnlen (input, 5) == 5); +  }    /* 3.3.8. 4-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; +    static const uint8_t input[] = { '"', 0xF3, 0xBF, 0xBF, '"' };      ASSERT (u8_mbsnlen (input, 5) == 3);    } +  { +    /* Outdated example: 0xF7 is an invalid first byte.  */ +    static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; +    ASSERT (u8_mbsnlen (input, 5) == 5); +  }    return 0;  } diff --git a/tests/unistr/test-u8-mbtouc-unsafe.c b/tests/unistr/test-u8-mbtouc-unsafe.c index 1e29f8bc..8b471ea4 100644 --- a/tests/unistr/test-u8-mbtouc-unsafe.c +++ b/tests/unistr/test-u8-mbtouc-unsafe.c @@ -1,5 +1,5 @@  /* Test of u8_mbtouc_unsafe() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbtouc.c b/tests/unistr/test-u8-mbtouc.c index 39bcaef9..c063c9ab 100644 --- a/tests/unistr/test-u8-mbtouc.c +++ b/tests/unistr/test-u8-mbtouc.c @@ -1,5 +1,5 @@  /* Test of u8_mbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -34,9 +34,18 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))       that a "malformed sequence" is interpreted in the same way as       "a character that is outside the adopted subset".       Reference: +       ISO 10646-1 amendment 2 +       <https://www.cl.cam.ac.uk/~mgk25/ucs/ISO-10646-UTF-8.html>         Markus Kuhn: UTF-8 decoder capability and stress test         <https://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt>         <https://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html> +     These old specifications (from ca. 2000) were a bit ambiguous, and the +     definition of UTF-8 has changed a bit as well.  The newer specification +     we obey is the Unicode Standard, version 15. +     Reference: +       Unicode Standard 15.0.0, section 3.9 +       <https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf> +       pages 124..129, especially table 3-7.     */    /* 3.1. Test that each unexpected continuation byte is signalled as a       malformed sequence of its own.  */ @@ -118,7 +127,7 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))    }    /* 3.3.2. 3-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; +    static const uint8_t input[] = { '"', 0xE0, 0xA0, '"' };      uc = 0xBADFACE;      ret = my_u8_mbtouc (&uc, input, 4);      ASSERT (ret == 1); @@ -132,6 +141,26 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))      ASSERT (ret == 1);      ASSERT (uc == 0x0022);    } +  { +    /* Outdated example: 0xE0 0x80 is an ill-formed sequence.  */ +    static const uint8_t input[] = { '"', 0xE0, 0x80, '"' }; +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input, 4); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 1, 3); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 2, 2); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 3, 1); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +  }    /* 3.3.7. 3-byte sequence with last byte missing.  */    {      static const uint8_t input[] = { '"', 0xEF, 0xBF, '"' }; @@ -150,7 +179,7 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))    }    /* 3.3.3. 4-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; +    static const uint8_t input[] = { '"', 0xF0, 0x90, 0x80, '"' };      uc = 0xBADFACE;      ret = my_u8_mbtouc (&uc, input, 5);      ASSERT (ret == 1); @@ -164,9 +193,33 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))      ASSERT (ret == 1);      ASSERT (uc == 0x0022);    } +  { +    /* Outdated example: 0xF0 0x80 is an ill-formed sequence.  */ +    static const uint8_t input[] = { '"', 0xF0, 0x80, 0x80, '"' }; +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input, 5); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 1, 4); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 2, 3); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 3, 2); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 4, 1); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +  }    /* 3.3.8. 4-byte sequence with last byte missing.  */    { -    static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; +    static const uint8_t input[] = { '"', 0xF3, 0xBF, 0xBF, '"' };      uc = 0xBADFACE;      ret = my_u8_mbtouc (&uc, input, 5);      ASSERT (ret == 1); @@ -180,6 +233,30 @@ test_safe_function (int (*my_u8_mbtouc) (ucs4_t *, const uint8_t *, size_t))      ASSERT (ret == 1);      ASSERT (uc == 0x0022);    } +  { +    /* Outdated example: 0xF7 is an invalid first byte.  */ +    static const uint8_t input[] = { '"', 0xF7, 0xBF, 0xBF, '"' }; +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input, 5); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 1, 4); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 2, 3); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 3, 2); +    ASSERT (ret == 1); +    ASSERT (uc == 0xFFFD); +    uc = 0xBADFACE; +    ret = my_u8_mbtouc (&uc, input + 4, 1); +    ASSERT (ret == 1); +    ASSERT (uc == 0x0022); +  }  }  int diff --git a/tests/unistr/test-u8-mbtouc.h b/tests/unistr/test-u8-mbtouc.h index fcfe3df8..dfe70be3 100644 --- a/tests/unistr/test-u8-mbtouc.h +++ b/tests/unistr/test-u8-mbtouc.h @@ -1,5 +1,5 @@  /* Test of u8_mbtouc() and u8_mbtouc_unsafe() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-mbtoucr.c b/tests/unistr/test-u8-mbtoucr.c index e6102603..6a4a74a2 100644 --- a/tests/unistr/test-u8-mbtoucr.c +++ b/tests/unistr/test-u8-mbtoucr.c @@ -1,5 +1,5 @@  /* Test of u8_mbtoucr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-move.c b/tests/unistr/test-u8-move.c index baf074ec..a0c7ad79 100644 --- a/tests/unistr/test-u8-move.c +++ b/tests/unistr/test-u8-move.c @@ -1,5 +1,5 @@  /* Test of u8_move() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-next.c b/tests/unistr/test-u8-next.c index e3e43121..cdc1f763 100644 --- a/tests/unistr/test-u8-next.c +++ b/tests/unistr/test-u8-next.c @@ -1,5 +1,5 @@  /* Test of u8_next() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-pcpy.c b/tests/unistr/test-u8-pcpy.c new file mode 100644 index 00000000..dbd83ad5 --- /dev/null +++ b/tests/unistr/test-u8-pcpy.c @@ -0,0 +1,28 @@ +/* Test of u8_pcpy() function. +   Copyright (C) 2010-2024 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU General Public License as published by +   the Free Software Foundation, either version 3 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU General Public License for more details. + +   You should have received a copy of the GNU General Public License +   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2023.  */ + +#include <config.h> + +#include "unistr.h" + +#include "macros.h" + +#define UNIT uint8_t +#define U_PCPY u8_pcpy +#define MAGIC 0xBA +#include "test-pcpy.h" diff --git a/tests/unistr/test-u8-prev.c b/tests/unistr/test-u8-prev.c index 8b21ce29..5bbb5ce1 100644 --- a/tests/unistr/test-u8-prev.c +++ b/tests/unistr/test-u8-prev.c @@ -1,5 +1,5 @@  /* Test of u8_prev() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-set.c b/tests/unistr/test-u8-set.c index 223a5127..d06e0e0b 100644 --- a/tests/unistr/test-u8-set.c +++ b/tests/unistr/test-u8-set.c @@ -1,5 +1,5 @@  /* Test of u8_set() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-stpcpy.c b/tests/unistr/test-u8-stpcpy.c index daeb6ae9..6cdb850c 100644 --- a/tests/unistr/test-u8-stpcpy.c +++ b/tests/unistr/test-u8-stpcpy.c @@ -1,5 +1,5 @@  /* Test of u8_stpcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-stpncpy.c b/tests/unistr/test-u8-stpncpy.c index a7987c31..873b1abd 100644 --- a/tests/unistr/test-u8-stpncpy.c +++ b/tests/unistr/test-u8-stpncpy.c @@ -1,5 +1,5 @@  /* Test of u8_stpncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcat.c b/tests/unistr/test-u8-strcat.c index 9dde531d..2a999f66 100644 --- a/tests/unistr/test-u8-strcat.c +++ b/tests/unistr/test-u8-strcat.c @@ -1,5 +1,5 @@  /* Test of u8_strcat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strchr.c b/tests/unistr/test-u8-strchr.c index cfd40779..69e21a66 100644 --- a/tests/unistr/test-u8-strchr.c +++ b/tests/unistr/test-u8-strchr.c @@ -1,5 +1,5 @@  /* Test of u8_strchr() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcmp.c b/tests/unistr/test-u8-strcmp.c index 447c6162..a0d3d7fc 100644 --- a/tests/unistr/test-u8-strcmp.c +++ b/tests/unistr/test-u8-strcmp.c @@ -1,5 +1,5 @@  /* Test of u8_strcmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcmp.h b/tests/unistr/test-u8-strcmp.h index 7eaf2887..177d4bfc 100644 --- a/tests/unistr/test-u8-strcmp.h +++ b/tests/unistr/test-u8-strcmp.h @@ -1,5 +1,5 @@  /* Test of u8_strcmp() and u8_strcoll() functions. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcoll.c b/tests/unistr/test-u8-strcoll.c index 7949e1a6..b86ea403 100644 --- a/tests/unistr/test-u8-strcoll.c +++ b/tests/unistr/test-u8-strcoll.c @@ -1,5 +1,5 @@  /* Test of u8_strcoll() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strcpy.c b/tests/unistr/test-u8-strcpy.c index dd9b40bf..9cf181b1 100644 --- a/tests/unistr/test-u8-strcpy.c +++ b/tests/unistr/test-u8-strcpy.c @@ -1,5 +1,5 @@  /* Test of u8_strcpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strdup.c b/tests/unistr/test-u8-strdup.c index 84a35053..fdb76026 100644 --- a/tests/unistr/test-u8-strdup.c +++ b/tests/unistr/test-u8-strdup.c @@ -1,5 +1,5 @@  /* Test of u8_strdup() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strlen.c b/tests/unistr/test-u8-strlen.c index 91a59663..a13a24fd 100644 --- a/tests/unistr/test-u8-strlen.c +++ b/tests/unistr/test-u8-strlen.c @@ -1,5 +1,5 @@  /* Test of u8_strlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strmblen.c b/tests/unistr/test-u8-strmblen.c index 735dd905..2fdef5cf 100644 --- a/tests/unistr/test-u8-strmblen.c +++ b/tests/unistr/test-u8-strmblen.c @@ -1,5 +1,5 @@  /* Test of u8_strmblen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strmbtouc.c b/tests/unistr/test-u8-strmbtouc.c index 74a96c1b..a9db79fa 100644 --- a/tests/unistr/test-u8-strmbtouc.c +++ b/tests/unistr/test-u8-strmbtouc.c @@ -1,5 +1,5 @@  /* Test of u8_strmbtouc() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncat.c b/tests/unistr/test-u8-strncat.c index d0c854c4..166952a2 100644 --- a/tests/unistr/test-u8-strncat.c +++ b/tests/unistr/test-u8-strncat.c @@ -1,5 +1,5 @@  /* Test of u8_strncat() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncmp.c b/tests/unistr/test-u8-strncmp.c index ada859ef..78aac0c9 100644 --- a/tests/unistr/test-u8-strncmp.c +++ b/tests/unistr/test-u8-strncmp.c @@ -1,5 +1,5 @@  /* Test of u8_strncmp() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strncpy.c b/tests/unistr/test-u8-strncpy.c index 824b85df..22bb35a4 100644 --- a/tests/unistr/test-u8-strncpy.c +++ b/tests/unistr/test-u8-strncpy.c @@ -1,5 +1,5 @@  /* Test of u8_strncpy() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strnlen.c b/tests/unistr/test-u8-strnlen.c index 1a740d0d..c409fc90 100644 --- a/tests/unistr/test-u8-strnlen.c +++ b/tests/unistr/test-u8-strnlen.c @@ -1,5 +1,5 @@  /* Test of u8_strnlen() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-strstr.c b/tests/unistr/test-u8-strstr.c index b3610e46..791e1c97 100644 --- a/tests/unistr/test-u8-strstr.c +++ b/tests/unistr/test-u8-strstr.c @@ -1,5 +1,5 @@  /* Test of u8_strstr() function. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -29,6 +29,7 @@  #define UNIT uint8_t  #define U_STRSTR u8_strstr +#define U_SET u8_set  #include "test-u-strstr.h"  int diff --git a/tests/unistr/test-u8-strtok.c b/tests/unistr/test-u8-strtok.c index 11c364e8..8d425c40 100644 --- a/tests/unistr/test-u8-strtok.c +++ b/tests/unistr/test-u8-strtok.c @@ -1,5 +1,5 @@  /* Test of u8_strtok() function. -   Copyright (C) 2015-2022 Free Software Foundation, Inc. +   Copyright (C) 2015-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-to-u16.c b/tests/unistr/test-u8-to-u16.c index 377cf38d..ec104ace 100644 --- a/tests/unistr/test-u8-to-u16.c +++ b/tests/unistr/test-u8-to-u16.c @@ -1,5 +1,5 @@  /* Test of u8_to_u16() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-to-u32.c b/tests/unistr/test-u8-to-u32.c index 384c9dc9..5ab9752c 100644 --- a/tests/unistr/test-u8-to-u32.c +++ b/tests/unistr/test-u8-to-u32.c @@ -1,5 +1,5 @@  /* Test of u8_to_u32() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/unistr/test-u8-uctomb.c b/tests/unistr/test-u8-uctomb.c index cf37cb9b..2948eb09 100644 --- a/tests/unistr/test-u8-uctomb.c +++ b/tests/unistr/test-u8-uctomb.c @@ -1,5 +1,5 @@  /* Test of u8_uctomb() function. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/WordBreakTest.txt b/tests/uniwbrk/WordBreakTest.txt index 27f64bfe..e4a41120 100644 --- a/tests/uniwbrk/WordBreakTest.txt +++ b/tests/uniwbrk/WordBreakTest.txt @@ -1,6 +1,46 @@ -# WordBreakTest-15.0.0.txt -# Date: 2022-02-26, 00:39:00 GMT -# © 2022 Unicode®, Inc. +# UNICODE LICENSE V3 +# +# COPYRIGHT AND PERMISSION NOTICE +# +# Copyright © 1991-2024 Unicode, Inc. +# +# NOTICE TO USER: Carefully read the following legal agreement. BY +# DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR +# SOFTWARE, YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE +# TERMS AND CONDITIONS OF THIS AGREEMENT. IF YOU DO NOT AGREE, DO NOT +# DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE THE DATA FILES OR SOFTWARE. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of data files and any associated documentation (the "Data Files") or +# software and any associated documentation (the "Software") to deal in the +# Data Files or Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, and/or sell +# copies of the Data Files or Software, and to permit persons to whom the +# Data Files or Software are furnished to do so, provided that either (a) +# this copyright and permission notice appear with all copies of the Data +# Files or Software, or (b) this copyright and permission notice appear in +# associated Documentation. +# +# THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +# THIRD PARTY RIGHTS. +# +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE +# BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, +# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA +# FILES OR SOFTWARE. +# +# Except as contained in this notice, the name of a copyright holder shall +# not be used in advertising or otherwise to promote the sale, use or other +# dealings in these Data Files or Software without prior written +# authorization of the copyright holder. + +# WordBreakTest-15.1.0.txt +# Date: 2023-03-31, 14:30:32 GMT +# © 2023 Unicode®, Inc.  # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.  # For terms of use, see https://www.unicode.org/terms_of_use.html  # @@ -1708,6 +1748,9 @@  ÷ 0061 × 0308 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]  ÷ 0020 × 200D ÷ 0646 ÷	#  ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]  ÷ 0646 × 200D ÷ 0020 ÷	#  ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3] +÷ 0671 × 0644 × 0631 × 064E × 0651 × 062D × 0650 × 064A × 0645 × 0650 ÷ 0020 ÷ 06DD × 0661 ÷	#  ÷ [0.2] ARABIC LETTER ALEF WASLA (ALetter) × [5.0] ARABIC LETTER LAM (ALetter) × [5.0] ARABIC LETTER REH (ALetter) × [4.0] ARABIC FATHA (Extend_FE) × [4.0] ARABIC SHADDA (Extend_FE) × [5.0] ARABIC LETTER HAH (ALetter) × [4.0] ARABIC KASRA (Extend_FE) × [5.0] ARABIC LETTER YEH (ALetter) × [5.0] ARABIC LETTER MEEM (ALetter) × [4.0] ARABIC KASRA (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] ARABIC END OF AYAH (Numeric) × [8.0] ARABIC-INDIC DIGIT ONE (Numeric) ÷ [0.3] +÷ 0721 × 0719 × 0721 × 0718 × 072A × 0710 ÷ 0020 ÷ 070F × 071D × 0717 ÷	#  ÷ [0.2] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER ZAIN (ALetter) × [5.0] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) × [5.0] SYRIAC LETTER RISH (ALetter) × [5.0] SYRIAC LETTER ALAPH (ALetter) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER YUDH (ALetter) × [5.0] SYRIAC LETTER HE (ALetter) ÷ [0.3] +÷ 072C × 070F × 072B × 0712 × 0718 ÷	#  ÷ [0.2] SYRIAC LETTER TAW (ALetter) × [5.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER SHIN (ALetter) × [5.0] SYRIAC LETTER BETH (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) ÷ [0.3]  ÷ 0041 × 0041 × 0041 ÷	#  ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]  ÷ 0041 × 003A × 0041 ÷	#  ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]  ÷ 0041 ÷ 003A ÷ 003A ÷ 0041 ÷	#  ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3] @@ -1846,6 +1889,6 @@  ÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]  ÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷	#  ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]  # -# Lines: 1823 +# Lines: 1826  #  # EOF diff --git a/tests/uniwbrk/test-u16-wordbreaks.c b/tests/uniwbrk/test-u16-wordbreaks.c index 8ee67f6d..002668c3 100644 --- a/tests/uniwbrk/test-u16-wordbreaks.c +++ b/tests/uniwbrk/test-u16-wordbreaks.c @@ -1,5 +1,5 @@  /* Test of word breaks in UTF-16 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-u32-wordbreaks.c b/tests/uniwbrk/test-u32-wordbreaks.c index 57c37639..ac9c1e36 100644 --- a/tests/uniwbrk/test-u32-wordbreaks.c +++ b/tests/uniwbrk/test-u32-wordbreaks.c @@ -1,5 +1,5 @@  /* Test of word breaks in UTF-32 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-u8-wordbreaks.c b/tests/uniwbrk/test-u8-wordbreaks.c index 74c546b0..2aaa0e92 100644 --- a/tests/uniwbrk/test-u8-wordbreaks.c +++ b/tests/uniwbrk/test-u8-wordbreaks.c @@ -1,5 +1,5 @@  /* Test of word breaks in UTF-8 strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwbrk/test-uc-wordbreaks.c b/tests/uniwbrk/test-uc-wordbreaks.c index 3bf1ff58..8213446f 100644 --- a/tests/uniwbrk/test-uc-wordbreaks.c +++ b/tests/uniwbrk/test-uc-wordbreaks.c @@ -1,5 +1,5 @@  /* Word break function test, using test data from UCD. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published diff --git a/tests/uniwbrk/test-ulc-wordbreaks.c b/tests/uniwbrk/test-ulc-wordbreaks.c index 6f3203fe..bb4b3343 100644 --- a/tests/uniwbrk/test-ulc-wordbreaks.c +++ b/tests/uniwbrk/test-ulc-wordbreaks.c @@ -1,5 +1,5 @@  /* Test of word breaks in strings. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u16-strwidth.c b/tests/uniwidth/test-u16-strwidth.c index a41d47c0..ecf7f178 100644 --- a/tests/uniwidth/test-u16-strwidth.c +++ b/tests/uniwidth/test-u16-strwidth.c @@ -1,5 +1,5 @@  /* Test of u16_strwidth() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u16-width.c b/tests/uniwidth/test-u16-width.c index c8dc1ad9..8b25ccf8 100644 --- a/tests/uniwidth/test-u16-width.c +++ b/tests/uniwidth/test-u16-width.c @@ -1,5 +1,5 @@  /* Test of u16_width() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u32-strwidth.c b/tests/uniwidth/test-u32-strwidth.c index 6e627a4b..e3f2d027 100644 --- a/tests/uniwidth/test-u32-strwidth.c +++ b/tests/uniwidth/test-u32-strwidth.c @@ -1,5 +1,5 @@  /* Test of u32_strwidth() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u32-width.c b/tests/uniwidth/test-u32-width.c index 4c92c852..caa35ca9 100644 --- a/tests/uniwidth/test-u32-width.c +++ b/tests/uniwidth/test-u32-width.c @@ -1,5 +1,5 @@  /* Test of u32_width() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u8-strwidth.c b/tests/uniwidth/test-u8-strwidth.c index 90fa4369..8f54953f 100644 --- a/tests/uniwidth/test-u8-strwidth.c +++ b/tests/uniwidth/test-u8-strwidth.c @@ -1,5 +1,5 @@  /* Test of u8_strwidth() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-u8-width.c b/tests/uniwidth/test-u8-width.c index eb56bc00..75ce8e82 100644 --- a/tests/uniwidth/test-u8-width.c +++ b/tests/uniwidth/test-u8-width.c @@ -1,5 +1,5 @@  /* Test of u8_width() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width.c b/tests/uniwidth/test-uc_width.c index 86389b26..5f0e793f 100644 --- a/tests/uniwidth/test-uc_width.c +++ b/tests/uniwidth/test-uc_width.c @@ -1,5 +1,5 @@  /* Test of uc_width() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width2.c b/tests/uniwidth/test-uc_width2.c index d088cf39..a07a11f8 100644 --- a/tests/uniwidth/test-uc_width2.c +++ b/tests/uniwidth/test-uc_width2.c @@ -1,5 +1,5 @@  /* Test of uc_width() function. -   Copyright (C) 2007-2022 Free Software Foundation, Inc. +   Copyright (C) 2007-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/uniwidth/test-uc_width2.sh b/tests/uniwidth/test-uc_width2.sh index 2833aef1..c46b3d07 100755 --- a/tests/uniwidth/test-uc_width2.sh +++ b/tests/uniwidth/test-uc_width2.sh @@ -1,7 +1,7 @@  #!/bin/sh  tmpfiles="" -trap 'rm -fr $tmpfiles' 1 2 3 15 +trap 'rm -fr $tmpfiles' HUP INT QUIT TERM  tmpfiles="$tmpfiles uc_width.out"  ${CHECKER} ./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out @@ -27,9 +27,7 @@ cat > uc_width.ok <<\EOF  05C4..05C5	0  05C6		A  05C7		0 -05C8..05FF	A -0600..0605	0 -0606..060F	A +05C8..060F	A  0610..061A	0  061B		A  061C		0 @@ -38,16 +36,14 @@ cat > uc_width.ok <<\EOF  0660..066F	A  0670		0  0671..06D5	A -06D6..06DD	0 -06DE		A +06D6..06DC	0 +06DD..06DE	A  06DF..06E4	0  06E5..06E6	A  06E7..06E8	0  06E9		A  06EA..06ED	0 -06EE..070E	A -070F		0 -0710		A +06EE..0710	A  0711		0  0712..072F	A  0730..074A	0 @@ -67,12 +63,12 @@ cat > uc_width.ok <<\EOF  0829..082D	0  082E..0858	A  0859..085B	0 -085C..088F	A -0890..0891	0 -0892..0897	A +085C..0897	A  0898..089F	0  08A0..08C9	A -08CA..0902	0 +08CA..08E1	0 +08E2		A +08E3..0902	0  0903..0939	A  093A		0  093B		A @@ -580,13 +576,9 @@ FFFC..101FC	1  110B3..110B6	0  110B7..110B8	1  110B9..110BA	0 -110BB..110BC	1 -110BD		0 -110BE..110C1	1 +110BB..110C1	1  110C2		0 -110C3..110CC	1 -110CD		0 -110CE..110FF	1 +110C3..110FF	1  11100..11102	0  11103..11126	1  11127..1112B	0 diff --git a/tests/unsetenv.c b/tests/unsetenv.c index 07eac6fd..d8ada2aa 100644 --- a/tests/unsetenv.c +++ b/tests/unsetenv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1995-2002, 2005-2022 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995-2002, 2005-2024 Free Software Foundation, Inc.     This file is part of the GNU C Library.     This file is free software: you can redistribute it and/or modify diff --git a/tests/usleep.c b/tests/usleep.c index e4289c4a..4d325016 100644 --- a/tests/usleep.c +++ b/tests/usleep.c @@ -1,5 +1,5 @@  /* Pausing execution of the current thread. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     Written by Eric Blake <ebb9@byu.net>, 2009.     This file is free software: you can redistribute it and/or modify diff --git a/tests/verify.h b/tests/verify.h index 99af8029..08268c24 100644 --- a/tests/verify.h +++ b/tests/verify.h @@ -1,6 +1,6 @@  /* Compile-time assert-like macros. -   Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2006, 2009-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -37,7 +37,7 @@            && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 5 <= __clang_major__)))  #  define _GL_HAVE__STATIC_ASSERT 1  # endif -# if (202000 <= __STDC_VERSION__ \ +# if (202311 <= __STDC_VERSION__ \        || (!defined __STRICT_ANSI__ && 9 <= __GNUC__))  #  define _GL_HAVE__STATIC_ASSERT1 1  # endif @@ -188,9 +188,9 @@ template <int w>      _gl_verify_type<(R) ? 1 : -1>  #elif defined _GL_HAVE__STATIC_ASSERT  # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ -    struct {                                   \ -      _Static_assert (R, DIAGNOSTIC);          \ -      int _gl_dummy;                          \ +    struct { \ +      _Static_assert (R, DIAGNOSTIC); \ +      int _gl_dummy; \      }  #else  # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ @@ -212,8 +212,8 @@ template <int w>  #elif defined _GL_HAVE__STATIC_ASSERT  # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC)  #else -# define _GL_VERIFY(R, DIAGNOSTIC, ...)                                \ -    extern int (*_GL_GENSYM (_gl_verify_function) (void))	       \ +# define _GL_VERIFY(R, DIAGNOSTIC, ...) \ +    extern int (*_GL_GENSYM (_gl_verify_function) (void)) \        [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]  # if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)  #  pragma GCC diagnostic ignored "-Wnested-externs" @@ -222,28 +222,57 @@ template <int w>  /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */  #ifdef _GL_STATIC_ASSERT_H -# if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert -#  define _Static_assert(R, ...) \ -     _GL_VERIFY ((R), "static assertion failed", -) +/* Define _Static_assert if needed.  */ +/* With clang ≥ 3.8.0 in C++ mode, _Static_assert already works and accepts +   1 or 2 arguments.  We better don't override it, because clang's standard +   C++ library uses static_assert inside classes in several places, and our +   replacement via _GL_VERIFY does not work in these contexts.  */ +# if (defined __cplusplus && defined __clang__ \ +      && (4 <= __clang_major__ + (8 <= __clang_minor__))) +#  if 5 <= __clang_major__ +/* Avoid "warning: 'static_assert' with no message is a C++17 extension".  */ +#   pragma clang diagnostic ignored "-Wc++17-extensions" +#  else +/* Avoid "warning: static_assert with no message is a C++1z extension".  */ +#   pragma clang diagnostic ignored "-Wc++1z-extensions" +#  endif +# elif !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert +#  if !defined _MSC_VER || defined __clang__ +#   define _Static_assert(...) \ +      _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) +#  else +#   if defined __cplusplus && _MSC_VER >= 1910 +     /* In MSVC 14.1 or newer, static_assert accepts one or two arguments, +        but _Static_assert is not defined.  */ +#    define _Static_assert static_assert +#   else +     /* Work around MSVC preprocessor incompatibility with ISO C; see +        <https://stackoverflow.com/questions/5134523/>.  */ +#    define _Static_assert(R, ...) \ +       _GL_VERIFY ((R), "static assertion failed", -) +#   endif +#  endif  # endif +/* Define static_assert if needed.  */  # if (!defined static_assert \        && __STDC_VERSION__ < 202311 \        && (!defined __cplusplus \            || (__cpp_static_assert < 201411 \ -              && __GNUG__ < 6 && __clang_major__ < 6))) +              && __GNUG__ < 6 && __clang_major__ < 6 && _MSC_VER < 1910)))  #  if defined __cplusplus && _MSC_VER >= 1900 && !defined __clang__  /* MSVC 14 in C++ mode supports the two-arguments static_assert but not     the one-argument static_assert, and it does not support _Static_assert.     We have to play preprocessor tricks to distinguish the two cases. -   Since the MSVC preprocessor is not ISO C compliant (cf. -   <https://stackoverflow.com/questions/5134523/>), the solution is specific -   to MSVC.  */ +   Since the MSVC preprocessor is not ISO C compliant (see above),. +   the solution is specific to MSVC.  */  #   define _GL_EXPAND(x) x  #   define _GL_SA1(a1) static_assert ((a1), "static assertion failed")  #   define _GL_SA2 static_assert  #   define _GL_SA3 static_assert  #   define _GL_SA_PICK(x1,x2,x3,x4,...) x4  #   define static_assert(...) _GL_EXPAND(_GL_SA_PICK(__VA_ARGS__,_GL_SA3,_GL_SA2,_GL_SA1)) (__VA_ARGS__) +/* Avoid "fatal error C1189: #error:  The C++ Standard Library forbids macroizing keywords."  */ +#   define _ALLOW_KEYWORD_MACROS 1  #  else  #   define static_assert _Static_assert /* C11 requires this #define. */  #  endif @@ -252,7 +281,9 @@ template <int w>  /* @assert.h omit start@  */ -#if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) +#if defined __clang_major__ && __clang_major__ < 5 +# define _GL_HAS_BUILTIN_TRAP 0 +#elif 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))  # define _GL_HAS_BUILTIN_TRAP 1  #elif defined __has_builtin  # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) @@ -260,12 +291,16 @@ template <int w>  # define _GL_HAS_BUILTIN_TRAP 0  #endif -#if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) -# define _GL_HAS_BUILTIN_UNREACHABLE 1 -#elif defined __has_builtin -# define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) -#else -# define _GL_HAS_BUILTIN_UNREACHABLE 0 +#ifndef _GL_HAS_BUILTIN_UNREACHABLE +# if defined __clang_major__ && __clang_major__ < 5 +#  define _GL_HAS_BUILTIN_UNREACHABLE 0 +# elif 4 < __GNUC__ + (5 <= __GNUC_MINOR__) +#  define _GL_HAS_BUILTIN_UNREACHABLE 1 +# elif defined __has_builtin +#  define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) +# else +#  define _GL_HAS_BUILTIN_UNREACHABLE 0 +# endif  #endif  /* Each of these macros verifies that its argument R is nonzero.  To diff --git a/tests/w32sock.h b/tests/w32sock.h index 17db3f12..166a5f77 100644 --- a/tests/w32sock.h +++ b/tests/w32sock.h @@ -1,6 +1,6 @@  /* w32sock.h --- internal auxiliary functions for Windows socket functions -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/warn-on-use.h b/tests/warn-on-use.h index 94f5b920..701013a0 100644 --- a/tests/warn-on-use.h +++ b/tests/warn-on-use.h @@ -1,5 +1,5 @@  /* A C macro for emitting warnings if a function is used. -   Copyright (C) 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2010-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify it     under the terms of the GNU Lesser General Public License as published @@ -32,6 +32,10 @@     _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'     linkage. +   _GL_WARN_ON_USE should not be used more than once for a given function +   in a given compilation unit (because this may generate a warning even +   if the function is never called). +     However, one of the reasons that a function is a portability trap is     if it has the wrong signature.  Declaring FUNCTION with a different     signature in C is a compilation error, so this macro must use the diff --git a/tests/wcrtomb.c b/tests/wcrtomb.c index e14d8022..197b020e 100644 --- a/tests/wcrtomb.c +++ b/tests/wcrtomb.c @@ -1,5 +1,5 @@  /* Convert wide character to multibyte character. -   Copyright (C) 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 2008-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2008.     This file is free software: you can redistribute it and/or modify @@ -29,7 +29,7 @@ wcrtomb (char *s, wchar_t wc, mbstate_t *ps)  #undef wcrtomb  {    /* This implementation of wcrtomb supports only stateless encodings. -     ps must be in the initial state.  */ +     ps must be in an initial state.  */    if (ps != NULL && !mbsinit (ps))      {        errno = EINVAL; diff --git a/tests/wctob.c b/tests/wctob.c index 806d0fca..e1f27404 100644 --- a/tests/wctob.c +++ b/tests/wctob.c @@ -1,5 +1,5 @@  /* Convert wide character to unibyte character. -   Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. +   Copyright (C) 2008, 2010-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2008.     This file is free software: you can redistribute it and/or modify diff --git a/tests/wctomb-impl.h b/tests/wctomb-impl.h index 7a0995a0..ccec9ce0 100644 --- a/tests/wctomb-impl.h +++ b/tests/wctomb-impl.h @@ -1,5 +1,5 @@  /* Convert wide character to multibyte character. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This file is free software: you can redistribute it and/or modify @@ -25,7 +25,7 @@ wctomb (char *s, wchar_t wc)        mbstate_t state;        size_t result; -      memset (&state, 0, sizeof (mbstate_t)); +      mbszero (&state);        result = wcrtomb (s, wc, &state);        if (result == (size_t)-1)          return -1; diff --git a/tests/wctomb.c b/tests/wctomb.c index bbaf2e0e..694c95ca 100644 --- a/tests/wctomb.c +++ b/tests/wctomb.c @@ -1,5 +1,5 @@  /* Convert wide character to multibyte character. -   Copyright (C) 2011-2022 Free Software Foundation, Inc. +   Copyright (C) 2011-2024 Free Software Foundation, Inc.     Written by Bruno Haible <bruno@clisp.org>, 2011.     This file is free software: you can redistribute it and/or modify diff --git a/tests/windows-thread.c b/tests/windows-thread.c index 5ae1e144..6a47a31f 100644 --- a/tests/windows-thread.c +++ b/tests/windows-thread.c @@ -1,5 +1,5 @@  /* Creating and controlling threads (native Windows implementation). -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/windows-thread.h b/tests/windows-thread.h index 76069771..154bdfae 100644 --- a/tests/windows-thread.h +++ b/tests/windows-thread.h @@ -1,5 +1,5 @@  /* Creating and controlling threads (native Windows implementation). -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as @@ -20,6 +20,11 @@  #ifndef _WINDOWS_THREAD_H  #define _WINDOWS_THREAD_H +/* This file uses _Noreturn.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #define WIN32_LEAN_AND_MEAN  /* avoid including junk */  #include <windows.h> diff --git a/tests/windows-tls.c b/tests/windows-tls.c index b24a7d55..6b73074d 100644 --- a/tests/windows-tls.c +++ b/tests/windows-tls.c @@ -1,5 +1,5 @@  /* Thread-local storage (native Windows implementation). -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/windows-tls.h b/tests/windows-tls.h index 0d2de560..d9393fe9 100644 --- a/tests/windows-tls.h +++ b/tests/windows-tls.h @@ -1,5 +1,5 @@  /* Thread-local storage (native Windows implementation). -   Copyright (C) 2005-2022 Free Software Foundation, Inc. +   Copyright (C) 2005-2024 Free Software Foundation, Inc.     This file is free software: you can redistribute it and/or modify     it under the terms of the GNU Lesser General Public License as diff --git a/tests/xalloc-die.c b/tests/xalloc-die.c index 5b947f10..c053c7a8 100644 --- a/tests/xalloc-die.c +++ b/tests/xalloc-die.c @@ -1,6 +1,6 @@  /* Report a memory allocation failure and exit. -   Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2022 Free Software +   Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2024 Free Software     Foundation, Inc.     This program is free software: you can redistribute it and/or modify @@ -22,7 +22,7 @@  #include <stdlib.h> -#include "error.h" +#include <error.h>  #include "exitfail.h"  #include "gettext.h" diff --git a/tests/xalloc.h b/tests/xalloc.h index 01a9eec8..75a5db30 100644 --- a/tests/xalloc.h +++ b/tests/xalloc.h @@ -1,6 +1,6 @@  /* xalloc.h -- malloc with out-of-memory checking -   Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc. +   Copyright (C) 1990-2000, 2003-2004, 2006-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by @@ -18,6 +18,13 @@  #ifndef XALLOC_H_  #define XALLOC_H_ +/* This file uses _GL_INLINE_HEADER_BEGIN, _GL_INLINE, _Noreturn, +   _GL_ATTRIBUTE_ALLOC_SIZE, _GL_ATTRIBUTE_MALLOC, +   _GL_ATTRIBUTE_RETURNS_NONNULL.  */ +#if !_GL_CONFIG_H_INCLUDED + #error "Please include config.h first." +#endif +  #include <stddef.h>  #include <stdlib.h> @@ -25,9 +32,6 @@  # include "idx.h"  #endif -#ifndef _GL_INLINE_HEADER_BEGIN - #error "Please include config.h first." -#endif  _GL_INLINE_HEADER_BEGIN  #ifndef XALLOC_INLINE  # define XALLOC_INLINE _GL_INLINE @@ -46,7 +50,7 @@ extern "C" {     or by using gnulib's xalloc-die module.  This is the     function to call when one wants the program to die because of a     memory allocation failure.  */ -/*extern*/ _Noreturn void xalloc_die (void); +_Noreturn void xalloc_die (void);  #endif /* GNULIB_XALLOC_DIE */ diff --git a/tests/xmalloc.c b/tests/xmalloc.c index 84cdf1f2..82e54ef1 100644 --- a/tests/xmalloc.c +++ b/tests/xmalloc.c @@ -1,6 +1,6 @@  /* xmalloc.c -- malloc with out of memory checking -   Copyright (C) 1990-2000, 2002-2006, 2008-2022 Free Software Foundation, Inc. +   Copyright (C) 1990-2000, 2002-2006, 2008-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by diff --git a/tests/zerosize-ptr.h b/tests/zerosize-ptr.h index 990b51cf..90ab26f9 100644 --- a/tests/zerosize-ptr.h +++ b/tests/zerosize-ptr.h @@ -1,5 +1,5 @@  /* Return a pointer to a zero-size object in memory. -   Copyright (C) 2009-2022 Free Software Foundation, Inc. +   Copyright (C) 2009-2024 Free Software Foundation, Inc.     This program is free software: you can redistribute it and/or modify     it under the terms of the GNU General Public License as published by  | 
