Add gnulib-tool unit tests.

* bootstrap: Re-add --with-tests, now that gnulib-tool
arranges to use separate libraries for lib/ and tests/.
* configure.in (AC_OUTPUT): Add gnulib/tests/Makefile.in.
* Makefile.am (SUBDIRS): Add gnulib/tests.
* gnulib/tests/Makefile.am: New file.
* gnulib/lib/.cvsignore: Sort.
* gnulib/lib/Makefile.am, gnulib/m4/getdelim.m4, gnulib/m4/getline.m4:
* gnulib/m4/gnulib-cache.m4, gnulib/m4/gnulib-comp.m4: Regenerate.
* gnulib/tests/test-alloca-opt.c: New file, from gnulib.
* gnulib/tests/test-arpa_inet.c: Likewise.
* gnulib/tests/test-fseeko.c: Likewise.
* gnulib/tests/test-fseeko.sh: Likewise.
* gnulib/tests/test-getaddrinfo.c: Likewise.
* gnulib/tests/test-getdelim.c: Likewise.
* gnulib/tests/test-getline.c: Likewise.
* gnulib/tests/test-lseek.c: Likewise.
* gnulib/tests/test-lseek.sh: Likewise.
* gnulib/tests/test-netinet_in.c: Likewise.
* gnulib/tests/test-snprintf.c: Likewise.
* gnulib/tests/test-stdbool.c: Likewise.
* gnulib/tests/test-stdint.c: Likewise.
* gnulib/tests/test-stdio.c: Likewise.
* gnulib/tests/test-stdlib.c: Likewise.
* gnulib/tests/test-string.c: Likewise.
* gnulib/tests/test-sys_select.c: Likewise.
* gnulib/tests/test-sys_socket.c: Likewise.
* gnulib/tests/test-sys_stat.c: Likewise.
* gnulib/tests/test-sys_time.c: Likewise.
* gnulib/tests/test-unistd.c: Likewise.
* gnulib/tests/test-vasnprintf.c: Likewise.
* gnulib/tests/test-vasprintf.c: Likewise.
* gnulib/tests/test-wchar.c: Likewise.
* gnulib/tests/dummy.c: Likewise.
* gnulib/tests/intprops.h: Likewise.
* gnulib/tests/verify.h: Likewise.
This commit is contained in:
Jim Meyering 2007-12-10 18:26:56 +00:00
parent fd6ce1e637
commit ac6bb7e131
38 changed files with 2525 additions and 11 deletions

View File

@ -1,3 +1,42 @@
Mon Dec 10 19:25:22 CET 2007 Jim Meyering <meyering@redhat.com>
Add gnulib-tool unit tests.
* bootstrap: Re-add --with-tests, now that gnulib-tool
arranges to use separate libraries for lib/ and tests/.
* configure.in (AC_OUTPUT): Add gnulib/tests/Makefile.in.
* Makefile.am (SUBDIRS): Add gnulib/tests.
* gnulib/tests/Makefile.am: New file.
* gnulib/lib/.cvsignore: Sort.
* gnulib/lib/Makefile.am, gnulib/m4/getdelim.m4, gnulib/m4/getline.m4:
* gnulib/m4/gnulib-cache.m4, gnulib/m4/gnulib-comp.m4: Regenerate.
* gnulib/tests/test-alloca-opt.c: New file, from gnulib.
* gnulib/tests/test-arpa_inet.c: Likewise.
* gnulib/tests/test-fseeko.c: Likewise.
* gnulib/tests/test-fseeko.sh: Likewise.
* gnulib/tests/test-getaddrinfo.c: Likewise.
* gnulib/tests/test-getdelim.c: Likewise.
* gnulib/tests/test-getline.c: Likewise.
* gnulib/tests/test-lseek.c: Likewise.
* gnulib/tests/test-lseek.sh: Likewise.
* gnulib/tests/test-netinet_in.c: Likewise.
* gnulib/tests/test-snprintf.c: Likewise.
* gnulib/tests/test-stdbool.c: Likewise.
* gnulib/tests/test-stdint.c: Likewise.
* gnulib/tests/test-stdio.c: Likewise.
* gnulib/tests/test-stdlib.c: Likewise.
* gnulib/tests/test-string.c: Likewise.
* gnulib/tests/test-sys_select.c: Likewise.
* gnulib/tests/test-sys_socket.c: Likewise.
* gnulib/tests/test-sys_stat.c: Likewise.
* gnulib/tests/test-sys_time.c: Likewise.
* gnulib/tests/test-unistd.c: Likewise.
* gnulib/tests/test-vasnprintf.c: Likewise.
* gnulib/tests/test-vasprintf.c: Likewise.
* gnulib/tests/test-wchar.c: Likewise.
* gnulib/tests/dummy.c: Likewise.
* gnulib/tests/intprops.h: Likewise.
* gnulib/tests/verify.h: Likewise.
Sat Dec 8 18:06:00 EST 2007 Daniel P. Berrange <berrange@redhat.com>
* gnulib/lib/arpa/inet.h: Remove autogenerated file

View File

@ -1,6 +1,6 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = gnulib/lib include src qemud proxy docs \
SUBDIRS = gnulib/lib include src qemud proxy docs gnulib/tests \
@PYTHON_SUBDIR@ tests po scripts
ACLOCAL_AMFLAGS = -I m4 -I gnulib/m4

View File

@ -71,6 +71,7 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
$gnulib_tool \
--lgpl=2 \
--with-tests \
--m4-base=gnulib/m4 \
--source-base=gnulib/lib \
--tests-base=gnulib/tests \

View File

@ -678,6 +678,7 @@ AC_OUTPUT(Makefile src/Makefile include/Makefile docs/Makefile \
docs/examples/Makefile docs/devhelp/Makefile \
docs/examples/python/Makefile \
gnulib/lib/Makefile \
gnulib/tests/Makefile \
libvirt.pc libvirt.spec \
po/Makefile.in scripts/Makefile \
include/libvirt/Makefile include/libvirt/libvirt.h \

View File

@ -1,11 +1,11 @@
alloca.h
.deps
float.h
*.la
.libs
*.lo
.deps
.libs
Makefile
Makefile.in
alloca.h
float.h
netinet_in.h
poll.h
stdbool.h

View File

@ -9,7 +9,7 @@
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --lgpl=2 --libtool --macro-prefix=gl getaddrinfo getpass gettext physmem poll strndup strsep sys_stat vasprintf
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --with-tests --lgpl=2 --libtool --macro-prefix=gl getaddrinfo getpass gettext physmem poll strndup strsep sys_stat vasprintf
AUTOMAKE_OPTIONS = 1.5 gnits

View File

@ -1,4 +1,4 @@
# getdelim.m4 serial 4
# getdelim.m4 serial 5
dnl Copyright (C) 2005, 2006, 2007 Free Software dnl Foundation, Inc.
dnl
@ -6,6 +6,8 @@ dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_PREREQ([2.59])
AC_DEFUN([gl_FUNC_GETDELIM],
[
AC_REQUIRE([gl_STDIO_H_DEFAULTS])

View File

@ -1,4 +1,4 @@
# getline.m4 serial 17
# getline.m4 serial 18
dnl Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 Free
dnl Software Foundation, Inc.
@ -7,6 +7,8 @@ dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_PREREQ([2.59])
dnl See if there's a working, system-supplied version of the getline function.
dnl We can't just do AC_REPLACE_FUNCS(getline) because some systems
dnl have a function by that name in -linet that doesn't have anything

View File

@ -15,7 +15,7 @@
# Specification in the form of a command-line invocation:
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --lgpl=2 --libtool --macro-prefix=gl getaddrinfo getpass gettext physmem poll strndup strsep sys_stat vasprintf
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gnulib/lib --m4-base=gnulib/m4 --doc-base=doc --aux-dir=build-aux --with-tests --lgpl=2 --libtool --macro-prefix=gl getaddrinfo getpass gettext physmem poll strndup strsep sys_stat vasprintf
# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
@ -26,6 +26,7 @@ gl_M4_BASE([gnulib/m4])
gl_PO_BASE([])
gl_DOC_BASE([doc])
gl_TESTS_BASE([gnulib/tests])
gl_WITH_TESTS
gl_LIB([libgnu])
gl_LGPL([2])
gl_MAKEFILE_NAME([])

View File

@ -34,11 +34,11 @@ AC_DEFUN([gl_EARLY],
# "Check for header files, types and library functions".
AC_DEFUN([gl_INIT],
[
AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
gl_cond_libtool=true
m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
AM_CONDITIONAL([GL_COND_LIBTOOL], [true])
gl_cond_libtool=true
gl_source_base='gnulib/lib'
gl_FUNC_ALLOCA
gl_HEADER_ARPA_INET
@ -120,6 +120,34 @@ AC_DEFUN([gl_INIT],
AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
])
gltests_libdeps=
gltests_ltlibdeps=
m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
gl_source_base='gnulib/tests'
gt_TYPE_WCHAR_T
gt_TYPE_WINT_T
AC_CHECK_FUNCS([shutdown])
m4_popdef([AC_LIBSOURCES])
m4_popdef([AC_REPLACE_FUNCS])
m4_popdef([AC_LIBOBJ])
AC_CONFIG_COMMANDS_PRE([
gltests_libobjs=
gltests_ltlibobjs=
if test -n "$gltests_LIBOBJS"; then
# Remove the extension.
sed_drop_objext='s/\.o$//;s/\.obj$//'
for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do
gltests_libobjs="$gltests_libobjs $i.$ac_objext"
gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
done
fi
AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
])
LIBTESTS_LIBDEPS="$gltests_libdeps"
AC_SUBST([LIBTESTS_LIBDEPS])
])
# Like AC_LIBOBJ, except that the module name goes
@ -150,6 +178,34 @@ AC_DEFUN([gl_LIBSOURCES], [
])
])
# Like AC_LIBOBJ, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_LIBOBJ], [
AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
])
# Like AC_REPLACE_FUNCS, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_REPLACE_FUNCS], [
m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
])
# Like AC_LIBSOURCES, except the directory where the source file is
# expected is derived from the gnulib-tool parametrization,
# and alloca is special cased (for the alloca-opt module).
# We could also entirely rely on EXTRA_lib..._SOURCES.
AC_DEFUN([gltests_LIBSOURCES], [
m4_foreach([_gl_NAME], [$1], [
m4_if(_gl_NAME, [alloca.c], [], [
m4_syscmd([test -r gnulib/tests/]_gl_NAME[ || test ! -d gnulib/tests])dnl
m4_if(m4_sysval, [0], [],
[AC_FATAL([missing gnulib/tests/]_gl_NAME)])
])
])
])
# This macro records the list of files which have been installed by
# gnulib-tool and may be removed by future gnulib-tool invocations.
AC_DEFUN([gl_FILE_LIST], [
@ -278,4 +334,31 @@ AC_DEFUN([gl_FILE_LIST], [
m4/wchar_t.m4
m4/wint_t.m4
m4/xsize.m4
tests/test-alloca-opt.c
tests/test-arpa_inet.c
tests/test-fseeko.c
tests/test-fseeko.sh
tests/test-getaddrinfo.c
tests/test-getdelim.c
tests/test-getline.c
tests/test-lseek.c
tests/test-lseek.sh
tests/test-netinet_in.c
tests/test-snprintf.c
tests/test-stdbool.c
tests/test-stdint.c
tests/test-stdio.c
tests/test-stdlib.c
tests/test-string.c
tests/test-sys_select.c
tests/test-sys_socket.c
tests/test-sys_stat.c
tests/test-sys_time.c
tests/test-unistd.c
tests/test-vasnprintf.c
tests/test-vasprintf.c
tests/test-wchar.c
tests=lib/dummy.c
tests=lib/intprops.h
tests=lib/verify.h
])

271
gnulib/tests/Makefile.am Normal file
View File

@ -0,0 +1,271 @@
## DO NOT EDIT! GENERATED AUTOMATICALLY!
## Process this file with automake to produce Makefile.in.
# Copyright (C) 2004-2007 Free Software Foundation, Inc.
#
# This file is free software, distributed under the terms of the GNU
# General Public License. As a special exception to the GNU General
# Public License, this file may be distributed as part of a program
# that contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
AUTOMAKE_OPTIONS = 1.5 foreign
SUBDIRS =
TESTS =
TESTS_ENVIRONMENT =
noinst_PROGRAMS =
check_PROGRAMS =
noinst_HEADERS =
noinst_LIBRARIES =
check_LIBRARIES = libtests.a
EXTRA_DIST =
BUILT_SOURCES =
SUFFIXES =
MOSTLYCLEANFILES = core *.stackdump
MOSTLYCLEANDIRS =
CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
AM_CPPFLAGS = \
-I. -I$(srcdir) \
-I../.. -I$(srcdir)/../.. \
-I../../gnulib/lib -I$(srcdir)/../../gnulib/lib
LDADD = libtests.a $(LIBTESTS_LIBDEPS) ../../gnulib/lib/libgnu.la
libtests_a_SOURCES =
libtests_a_LIBADD = $(gltests_LIBOBJS)
libtests_a_DEPENDENCIES = $(gltests_LIBOBJS)
EXTRA_libtests_a_SOURCES =
## begin gnulib module alloca-opt-tests
TESTS += test-alloca-opt
check_PROGRAMS += test-alloca-opt
EXTRA_DIST += test-alloca-opt.c
## end gnulib module alloca-opt-tests
## begin gnulib module arpa_inet-tests
TESTS += test-arpa_inet
check_PROGRAMS += test-arpa_inet
EXTRA_DIST += test-arpa_inet.c
## end gnulib module arpa_inet-tests
## begin gnulib module fseeko-tests
TESTS += test-fseeko.sh
TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)'
check_PROGRAMS += test-fseeko
EXTRA_DIST += test-fseeko.c test-fseeko.sh
## end gnulib module fseeko-tests
## begin gnulib module getaddrinfo-tests
TESTS += test-getaddrinfo
check_PROGRAMS += test-getaddrinfo
EXTRA_DIST += test-getaddrinfo.c
## end gnulib module getaddrinfo-tests
## begin gnulib module getdelim-tests
TESTS += test-getdelim
check_PROGRAMS += test-getdelim
MOSTLYCLEANFILES += test-getdelim.txt
EXTRA_DIST += test-getdelim.c
## end gnulib module getdelim-tests
## begin gnulib module getline-tests
TESTS += test-getline
check_PROGRAMS += test-getline
MOSTLYCLEANFILES += test-getline.txt
EXTRA_DIST += test-getline.c
## end gnulib module getline-tests
## begin gnulib module intprops
EXTRA_DIST += intprops.h
## end gnulib module intprops
## begin gnulib module lseek-tests
TESTS += test-lseek.sh
TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)'
check_PROGRAMS += test-lseek
EXTRA_DIST += test-lseek.c test-lseek.sh
## end gnulib module lseek-tests
## begin gnulib module netinet_in-tests
TESTS += test-netinet_in
check_PROGRAMS += test-netinet_in
EXTRA_DIST += test-netinet_in.c
## end gnulib module netinet_in-tests
## begin gnulib module snprintf-tests
TESTS += test-snprintf
check_PROGRAMS += test-snprintf
EXTRA_DIST += test-snprintf.c
## end gnulib module snprintf-tests
## begin gnulib module stdbool-tests
TESTS += test-stdbool
check_PROGRAMS += test-stdbool
EXTRA_DIST += test-stdbool.c
## end gnulib module stdbool-tests
## begin gnulib module stdint-tests
TESTS += test-stdint
check_PROGRAMS += test-stdint
EXTRA_DIST += test-stdint.c
## end gnulib module stdint-tests
## begin gnulib module stdio-tests
TESTS += test-stdio
check_PROGRAMS += test-stdio
EXTRA_DIST += test-stdio.c
## end gnulib module stdio-tests
## begin gnulib module stdlib-tests
TESTS += test-stdlib
check_PROGRAMS += test-stdlib
EXTRA_DIST += test-stdlib.c
## end gnulib module stdlib-tests
## begin gnulib module string-tests
TESTS += test-string
check_PROGRAMS += test-string
EXTRA_DIST += test-string.c
## end gnulib module string-tests
## begin gnulib module sys_select-tests
TESTS += test-sys_select
check_PROGRAMS += test-sys_select
EXTRA_DIST += test-sys_select.c
## end gnulib module sys_select-tests
## begin gnulib module sys_socket-tests
TESTS += test-sys_socket
check_PROGRAMS += test-sys_socket
EXTRA_DIST += test-sys_socket.c
## end gnulib module sys_socket-tests
## begin gnulib module sys_stat-tests
TESTS += test-sys_stat
check_PROGRAMS += test-sys_stat
EXTRA_DIST += test-sys_stat.c
## end gnulib module sys_stat-tests
## begin gnulib module sys_time-tests
TESTS += test-sys_time
check_PROGRAMS += test-sys_time
EXTRA_DIST += test-sys_time.c
## end gnulib module sys_time-tests
## begin gnulib module unistd-tests
TESTS += test-unistd
check_PROGRAMS += test-unistd
EXTRA_DIST += test-unistd.c
## end gnulib module unistd-tests
## begin gnulib module vasnprintf-tests
TESTS += test-vasnprintf
check_PROGRAMS += test-vasnprintf
EXTRA_DIST += test-vasnprintf.c
## end gnulib module vasnprintf-tests
## begin gnulib module vasprintf-tests
TESTS += test-vasprintf
check_PROGRAMS += test-vasprintf
EXTRA_DIST += test-vasprintf.c
## end gnulib module vasprintf-tests
## begin gnulib module verify
libtests_a_SOURCES += verify.h
## end gnulib module verify
## begin gnulib module wchar-tests
TESTS += test-wchar
check_PROGRAMS += test-wchar
EXTRA_DIST += test-wchar.c
## end gnulib module wchar-tests
## begin gnulib module dummy
libtests_a_SOURCES += dummy.c
## end gnulib module dummy
# Clean up after Solaris cc.
clean-local:
rm -rf SunWS_cache
mostlyclean-local: mostlyclean-generic
@for dir in '' $(MOSTLYCLEANDIRS); do \
if test -n "$$dir" && test -d $$dir; then \
echo "rmdir $$dir"; rmdir $$dir; \
fi; \
done; \
:

42
gnulib/tests/dummy.c Normal file
View File

@ -0,0 +1,42 @@
/* A dummy file, to prevent empty libraries from breaking builds.
Copyright (C) 2004, 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Some systems, reportedly OpenBSD and Mac OS X, refuse to create
libraries without any object files. You might get an error like:
> ar cru .libs/libgl.a
> ar: no archive members specified
Compiling this file, and adding its object file to the library, will
prevent the library from being empty. */
/* Some systems, such as Solaris with cc 5.0, refuse to work with libraries
that don't export any symbol. You might get an error like:
> cc ... libgnu.a
> ild: (bad file) garbled symbol table in archive ../gllib/libgnu.a
Compiling this file, and adding its object file to the library, will
prevent the library from exporting no symbols. */
#ifdef __sun
/* This declaration ensures that the library will export at least 1 symbol. */
int gl_dummy_symbol;
#else
/* This declaration is solely to ensure that after preprocessing
this file is never empty. */
typedef int dummy;
#endif

77
gnulib/tests/intprops.h Normal file
View File

@ -0,0 +1,77 @@
/* intprops.h -- properties of integer types
Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Paul Eggert. */
#include <limits.h>
/* The extra casts in the following macros work around compiler bugs,
e.g., in Cray C 5.0.3.0. */
/* True if the arithmetic type T is an integer type. bool counts as
an integer. */
#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
/* True if negative values of the signed integer type T use two's
complement, ones' complement, or signed magnitude representation,
respectively. Much GNU code assumes two's complement, but some
people like to be portable to all possible C hosts. */
#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
/* True if the arithmetic type T is signed. */
#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
/* The maximum and minimum values for the integer type T. These
macros have undefined behavior if T is signed and has padding bits.
If this is a problem for you, please let us know how to fix it for
your host. */
#define TYPE_MINIMUM(t) \
((t) (! TYPE_SIGNED (t) \
? (t) 0 \
: TYPE_SIGNED_MAGNITUDE (t) \
? ~ (t) 0 \
: ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
#define TYPE_MAXIMUM(t) \
((t) (! TYPE_SIGNED (t) \
? (t) -1 \
: ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
/* Return zero if T can be determined to be an unsigned type.
Otherwise, return 1.
When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a
tighter bound. Otherwise, it overestimates the true bound by one byte
when applied to unsigned types of size 2, 4, 16, ... bytes.
The symbol signed_type_or_expr__ is private to this header file. */
#if __GNUC__ >= 2
# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t))
#else
# define signed_type_or_expr__(t) 1
#endif
/* Bound on length of the string representing an integer type or expression T.
Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485;
add 1 for integer division truncation; add 1 more for a minus sign
if needed. */
#define INT_STRLEN_BOUND(t) \
((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \
+ signed_type_or_expr__ (t) + 1)
/* Bound on buffer size needed to represent an integer type or expression T,
including the terminating null. */
#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)

View File

@ -0,0 +1,62 @@
/* Test of optional automatic memory allocation.
Copyright (C) 2005, 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <alloca.h>
#if HAVE_ALLOCA
static void
do_allocation (int n)
{
void *ptr = alloca (n);
(void) ptr;
}
void (*func) (int) = do_allocation;
#endif
int
main ()
{
#if HAVE_ALLOCA
int i;
/* Repeat a lot of times, to make sure there's no memory leak. */
for (i = 0; i < 100000; i++)
{
/* Try various values.
n = 0 gave a crash on Alpha with gcc-2.5.8.
Some versions of MacOS X have a stack size limit of 512 KB. */
func (34);
func (134);
func (399);
func (510823);
func (129321);
func (0);
func (4070);
func (4095);
func (1);
func (16582);
}
#endif
return 0;
}

View File

@ -0,0 +1,27 @@
/* Test of <arpa/inet.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <arpa/inet.h>
int
main ()
{
return 0;
}

View File

@ -0,0 +1,35 @@
/* Test of fseeko() function.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdio.h>
/* Get off_t. */
#include <sys/types.h>
int
main (int argc, char **argv)
{
/* Assume stdin is seekable iff argc > 1. */
int expected = argc > 1 ? 0 : -1;
/* Exit with success only if fseek/fseeko agree. */
int r1 = fseeko (stdin, (off_t)0, SEEK_CUR);
int r2 = fseek (stdin, (long)0, SEEK_CUR);
return ! (r1 == r2 && r1 == expected);
}

5
gnulib/tests/test-fseeko.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/sh
./test-fseeko${EXEEXT} 1 < "$srcdir/test-fseeko.sh" || exit 1
echo hi | ./test-fseeko${EXEEXT} || exit 1
exit 0

View File

@ -0,0 +1,137 @@
/* Test the getaddrinfo module.
Copyright (C) 2006-2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Simon Josefsson. */
#include "config.h"
#include "getaddrinfo.h"
#include "inet_ntop.h"
#include <stdio.h>
#include <string.h>
/* BeOS does not have AF_UNSPEC. */
#ifndef AF_UNSPEC
# define AF_UNSPEC 0
#endif
#ifndef EAI_SERVICE
# define EAI_SERVICE 0
#endif
int simple (char *host, char *service)
{
char buf[BUFSIZ];
struct addrinfo hints;
struct addrinfo *ai0, *ai;
int res;
printf ("Finding %s service %s...\n", host, service);
/* This initializes "hints" but does not use it. Is there a reason
for this? If so, please fix this comment. */
memset (&hints, 0, sizeof (hints));
hints.ai_flags = AI_CANONNAME;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
res = getaddrinfo (host, service, 0, &ai0);
printf ("res %d: %s\n", res, gai_strerror (res));
if (res != 0)
{
/* Solaris reports EAI_SERVICE for "http" and "https". Don't
fail the test merely because of this. */
if (res == EAI_SERVICE)
return 0;
return 1;
}
for (ai = ai0; ai; ai = ai->ai_next)
{
printf ("\tflags %x\n", ai->ai_flags);
printf ("\tfamily %x\n", ai->ai_family);
printf ("\tsocktype %x\n", ai->ai_socktype);
printf ("\tprotocol %x\n", ai->ai_protocol);
printf ("\taddrlen %ld: ", (unsigned long) ai->ai_addrlen);
printf ("\tFound %s\n",
inet_ntop (ai->ai_family,
&((struct sockaddr_in *)
ai->ai_addr)->sin_addr,
buf, sizeof (buf) - 1));
if (ai->ai_canonname)
printf ("\tFound %s...\n", ai->ai_canonname);
{
char ipbuf[BUFSIZ];
char portbuf[BUFSIZ];
res = getnameinfo (ai->ai_addr, ai->ai_addrlen,
ipbuf, sizeof (ipbuf) - 1,
portbuf, sizeof (portbuf) - 1,
NI_NUMERICHOST|NI_NUMERICSERV);
printf ("\t\tgetnameinfo %d: %s\n", res, gai_strerror (res));
if (res == 0)
{
printf ("\t\tip %s\n", ipbuf);
printf ("\t\tport %s\n", portbuf);
}
}
}
freeaddrinfo (ai0);
return 0;
}
#define HOST1 "www.gnu.org"
#define SERV1 "http"
#define HOST2 "www.ibm.com"
#define SERV2 "https"
#define HOST3 "microsoft.com"
#define SERV3 "http"
#define HOST4 "google.org"
#define SERV4 "ldap"
int main (void)
{
#if _WIN32
{
WORD requested;
WSADATA data;
int err;
requested = MAKEWORD (1, 1);
err = WSAStartup (requested, &data);
if (err != 0)
return 1;
if (data.wVersion < requested)
{
WSACleanup ();
return 2;
}
}
#endif
return simple (HOST1, SERV1)
+ simple (HOST2, SERV2)
+ simple (HOST3, SERV3)
+ simple (HOST4, SERV4);
}

View File

@ -0,0 +1,89 @@
/* Test of getdelim() function.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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, 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, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
/* Written by Eric Blake <ebb9@byu.net>, 2007. */
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
int
main (int argc, char **argv)
{
FILE *f;
char *line = NULL;
size_t len = 0;
ssize_t result;
/* Create test file. */
f = fopen ("test-getdelim.txt", "wb");
if (!f || fwrite ("anbcnd\0f", 1, 8, f) != 8 || fclose (f) != 0)
{
fputs ("Failed to create sample file.\n", stderr);
remove ("test-getdelim.txt");
return 1;
}
f = fopen ("test-getdelim.txt", "rb");
if (!f)
{
fputs ("Failed to reopen sample file.\n", stderr);
remove ("test-getdelim.txt");
return 1;
}
/* Test initial allocation, which must include trailing NUL. */
result = getdelim (&line, &len, 'n', f);
ASSERT (result == 2);
ASSERT (strcmp (line, "an") == 0);
ASSERT (2 < len);
/* Test growth of buffer. */
free (line);
line = malloc (1);
len = 1;
result = getdelim (&line, &len, 'n', f);
ASSERT (result == 3);
ASSERT (strcmp (line, "bcn") == 0);
ASSERT (3 < len);
/* Test embedded NULs and EOF behavior. */
result = getdelim (&line, &len, 'n', f);
ASSERT (result == 3);
ASSERT (memcmp (line, "d\0f", 4) == 0);
ASSERT (3 < len);
result = getdelim (&line, &len, 'n', f);
ASSERT (result == -1);
free (line);
fclose (f);
remove ("test-getdelim.txt");
return 0;
}

View File

@ -0,0 +1,89 @@
/* Test of getline() function.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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, 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, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
/* Written by Eric Blake <ebb9@byu.net>, 2007. */
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
int
main (int argc, char **argv)
{
FILE *f;
char *line = NULL;
size_t len = 0;
ssize_t result;
/* Create test file. */
f = fopen ("test-getline.txt", "wb");
if (!f || fwrite ("a\nbc\nd\0f", 1, 8, f) != 8 || fclose (f) != 0)
{
fputs ("Failed to create sample file.\n", stderr);
remove ("test-getline.txt");
return 1;
}
f = fopen ("test-getline.txt", "rb");
if (!f)
{
fputs ("Failed to reopen sample file.\n", stderr);
remove ("test-getline.txt");
return 1;
}
/* Test initial allocation, which must include trailing NUL. */
result = getline (&line, &len, f);
ASSERT (result == 2);
ASSERT (strcmp (line, "a\n") == 0);
ASSERT (2 < len);
/* Test growth of buffer, must not leak. */
free (line);
line = malloc (1);
len = 0;
result = getline (&line, &len, f);
ASSERT (result == 3);
ASSERT (strcmp (line, "bc\n") == 0);
ASSERT (3 < len);
/* Test embedded NULs and EOF behavior. */
result = getline (&line, &len, f);
ASSERT (result == 3);
ASSERT (memcmp (line, "d\0f", 4) == 0);
ASSERT (3 < len);
result = getline (&line, &len, f);
ASSERT (result == -1);
free (line);
fclose (f);
remove ("test-getline.txt");
return 0;
}

102
gnulib/tests/test-lseek.c Normal file
View File

@ -0,0 +1,102 @@
/* Test of lseek() function.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Eric Blake, 2007. */
#include <config.h>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
/* ARGC must be 2; *ARGV[1] is '0' if stdin and stdout are files, '1'
if they are pipes, and '2' if they are closed. Check for proper
semantics of lseek. */
int
main (int argc, char **argv)
{
if (argc != 2)
return 2;
switch (*argv[1])
{
case '0': /* regular files */
ASSERT (lseek (0, (off_t)2, SEEK_SET) == 2);
ASSERT (lseek (0, (off_t)-4, SEEK_CUR) == -1);
ASSERT (errno == EINVAL);
errno = 0;
#if ! defined __BEOS__
/* POSIX says that the last lseek call, when failing, does not change
the current offset. But BeOS sets it to 0. */
ASSERT (lseek (0, (off_t)0, SEEK_CUR) == 2);
#endif
#if 0 /* leads to SIGSYS on IRIX 6.5 */
ASSERT (lseek (0, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1);
ASSERT (errno == EINVAL);
#endif
ASSERT (lseek (1, (off_t)2, SEEK_SET) == 2);
errno = 0;
ASSERT (lseek (1, (off_t)-4, SEEK_CUR) == -1);
ASSERT (errno == EINVAL);
errno = 0;
#if ! defined __BEOS__
/* POSIX says that the last lseek call, when failing, does not change
the current offset. But BeOS sets it to 0. */
ASSERT (lseek (1, (off_t)0, SEEK_CUR) == 2);
#endif
#if 0 /* leads to SIGSYS on IRIX 6.5 */
ASSERT (lseek (1, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1);
ASSERT (errno == EINVAL);
#endif
break;
case '1': /* pipes */
errno = 0;
ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1);
ASSERT (errno == ESPIPE);
errno = 0;
ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1);
ASSERT (errno == ESPIPE);
break;
case '2': /* closed */
/* Explicitly close file descriptors 0 and 1. The <&- and >&- in the
invoking shell are not enough on HP-UX. */
close (0);
close (1);
errno = 0;
ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1);
ASSERT (errno == EBADF);
errno = 0;
ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1);
ASSERT (errno == EBADF);
break;
default:
return 1;
}
return 0;
}

17
gnulib/tests/test-lseek.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/sh
tmpfiles=
trap 'rm -fr $tmpfiles' 1 2 3 15
tmpfiles=t-lseek.tmp
# seekable files
./test-lseek${EXEEXT} 0 < "$srcdir/test-lseek.sh" > t-lseek.tmp || exit 1
# pipes
echo hi | ./test-lseek${EXEEXT} 1 | cat || exit 1
# closed descriptors
./test-lseek${EXEEXT} 2 <&- >&- || exit 1
rm -rf $tmpfiles
exit 0

View File

@ -0,0 +1,27 @@
/* Test of <netinet/in.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <netinet/in.h>
int
main ()
{
return 0;
}

View File

@ -0,0 +1,71 @@
/* Test of snprintf() function.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
int
main (int argc, char *argv[])
{
char buf[8];
int size;
int retval;
for (size = 0; size <= 8; size++)
{
memcpy (buf, "DEADBEEF", 8);
retval = snprintf (buf, size, "%d", 12345);
if (size < 6)
{
#if CHECK_SNPRINTF_POSIX
ASSERT (retval < 0 || retval >= size);
#endif
if (size > 0)
{
ASSERT (memcmp (buf, "12345", size - 1) == 0);
ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size);
}
#if !CHECK_SNPRINTF_POSIX
if (size > 0)
#endif
ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
}
else
{
ASSERT (retval == 5);
ASSERT (memcmp (buf, "12345\0EF", 8) == 0);
}
}
return 0;
}

View File

@ -0,0 +1,95 @@
/* Test of <stdbool.h> substitute.
Copyright (C) 2002-2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdbool.h>
#ifndef bool
"error: bool is not defined"
#endif
#ifndef false
"error: false is not defined"
#endif
#if false
"error: false is not 0"
#endif
#ifndef true
"error: true is not defined"
#endif
#if true != 1
"error: true is not 1"
#endif
#ifndef __bool_true_false_are_defined
"error: __bool_true_false_are_defined is not defined"
#endif
#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */
struct s { _Bool s: 1; _Bool t; } s;
#endif
char a[true == 1 ? 1 : -1];
char b[false == 0 ? 1 : -1];
char c[__bool_true_false_are_defined == 1 ? 1 : -1];
#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */
char d[(bool) 0.5 == true ? 1 : -1];
bool e = &s;
#endif
char f[(_Bool) 0.0 == false ? 1 : -1];
char g[true];
char h[sizeof (_Bool)];
#if 0 /* See above. */
char i[sizeof s.t];
#endif
enum { j = false, k = true, l = false * true, m = true * 256 };
_Bool n[m];
char o[sizeof n == m * sizeof n[0] ? 1 : -1];
char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
#if 0 /* Cannot be guaranteed with gnulib's <stdbool.h>. */
#if defined __xlc__ || defined __GNUC__
/* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
reported by James Lemley on 2005-10-05; see
http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
This test is not quite right, since xlc is allowed to
reject this program, as the initializer for xlcbug is
not one of the forms that C requires support for.
However, doing the test right would require a run-time
test, and that would make cross-compilation harder.
Let us hope that IBM fixes the xlc bug, and also adds
support for this kind of constant expression. In the
meantime, this test will reject xlc, which is OK, since
our stdbool.h substitute should suffice. We also test
this with GCC, where it should work, to detect more
quickly whether someone messes up the test in the
future. */
char digs[] = "0123456789";
int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
#endif
#endif
/* Catch a bug in an HP-UX C compiler. See
http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
*/
_Bool q = true;
_Bool *pq = &q;
int
main ()
{
return 0;
}

356
gnulib/tests/test-stdint.c Normal file
View File

@ -0,0 +1,356 @@
/* Test of <stdint.h> substitute.
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2006. */
#include <config.h>
/* Whether to enable pedantic checks. */
#define DO_PEDANTIC 0
#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */
#include <stdint.h>
#include "verify.h"
#include "intprops.h"
#if __GNUC__ >= 2 && DO_PEDANTIC
# define verify_same_types(expr1,expr2) \
extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \
extern void _verify_func(__LINE__) (__typeof__ (expr2) *);
# define _verify_func(line) _verify_func2(line)
# define _verify_func2(line) verify_func_ ## line
#else
# define verify_same_types(expr1,expr2) extern void verify_func (int)
#endif
/* 7.18.1.1. Exact-width integer types */
/* 7.18.2.1. Limits of exact-width integer types */
int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX };
verify (TYPE_MINIMUM (int8_t) == INT8_MIN);
verify (TYPE_MAXIMUM (int8_t) == INT8_MAX);
verify_same_types (INT8_MIN, (int8_t) 0 + 0);
verify_same_types (INT8_MAX, (int8_t) 0 + 0);
int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX };
verify (TYPE_MINIMUM (int16_t) == INT16_MIN);
verify (TYPE_MAXIMUM (int16_t) == INT16_MAX);
verify_same_types (INT16_MIN, (int16_t) 0 + 0);
verify_same_types (INT16_MAX, (int16_t) 0 + 0);
int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX };
verify (TYPE_MINIMUM (int32_t) == INT32_MIN);
verify (TYPE_MAXIMUM (int32_t) == INT32_MAX);
verify_same_types (INT32_MIN, (int32_t) 0 + 0);
verify_same_types (INT32_MAX, (int32_t) 0 + 0);
#ifdef INT64_MAX
int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX };
verify (TYPE_MINIMUM (int64_t) == INT64_MIN);
verify (TYPE_MAXIMUM (int64_t) == INT64_MAX);
verify_same_types (INT64_MIN, (int64_t) 0 + 0);
verify_same_types (INT64_MAX, (int64_t) 0 + 0);
#endif
uint8_t b1[2] = { UINT8_C (17), UINT8_MAX };
verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX);
verify_same_types (UINT8_MAX, (uint8_t) 0 + 0);
uint16_t b2[2] = { UINT16_C (17), UINT16_MAX };
verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX);
verify_same_types (UINT16_MAX, (uint16_t) 0 + 0);
uint32_t b3[2] = { UINT32_C (17), UINT32_MAX };
verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX);
verify_same_types (UINT32_MAX, (uint32_t) 0 + 0);
#ifdef UINT64_MAX
uint64_t b4[2] = { UINT64_C (17), UINT64_MAX };
verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX);
verify_same_types (UINT64_MAX, (uint64_t) 0 + 0);
#endif
#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX
/* ok */
#else
err or;
#endif
#if UINT8_MAX && UINT16_MAX && UINT32_MAX
/* ok */
#else
err or;
#endif
/* 7.18.1.2. Minimum-width integer types */
/* 7.18.2.2. Limits of minimum-width integer types */
int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX };
verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN);
verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX);
verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0);
verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0);
int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX };
verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN);
verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX);
verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0);
verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0);
int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX };
verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN);
verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX);
verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0);
verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0);
#ifdef INT_LEAST64_MAX
int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX };
verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN);
verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX);
verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0);
verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0);
#endif
uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX };
verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX);
verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0);
uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX };
verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX);
verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0);
uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX };
verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX);
verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0);
#ifdef UINT_LEAST64_MAX
uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX };
verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX);
verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0);
#endif
#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX
/* ok */
#else
err or;
#endif
#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX
/* ok */
#else
err or;
#endif
/* 7.18.1.3. Fastest minimum-width integer types */
/* 7.18.2.3. Limits of fastest minimum-width integer types */
int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX };
verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN);
verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX);
verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0);
verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0);
int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX };
verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN);
verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX);
verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0);
verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0);
int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX };
verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN);
verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX);
verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0);
verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0);
#ifdef INT_FAST64_MAX
int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX };
verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN);
verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX);
verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0);
verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0);
#endif
uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX };
verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX);
verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0);
uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX };
verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX);
verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0);
uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX };
verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX);
verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0);
#ifdef UINT_FAST64_MAX
uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX };
verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX);
verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0);
#endif
#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX
/* ok */
#else
err or;
#endif
#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX
/* ok */
#else
err or;
#endif
/* 7.18.1.4. Integer types capable of holding object pointers */
/* 7.18.2.4. Limits of integer types capable of holding object pointers */
intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX };
verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN);
verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX);
verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0);
verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0);
uintptr_t h[2] = { 17, UINTPTR_MAX };
verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX);
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 */
/* 7.18.2.5. Limits of greatest-width integer types */
intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX };
verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN);
verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX);
verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0);
verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0);
uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX };
verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX);
verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0);
#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX
/* ok */
#else
err or;
#endif
/* 7.18.3. Limits of other integer types */
#include <stddef.h>
verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN);
verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX);
verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0);
verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0);
#if PTRDIFF_MIN && PTRDIFF_MAX
/* ok */
#else
err or;
#endif
#include <signal.h>
verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN);
verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX);
verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0);
verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0);
#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX
/* ok */
#else
err or;
#endif
verify (TYPE_MAXIMUM (size_t) == SIZE_MAX);
verify_same_types (SIZE_MAX, (size_t) 0 + 0);
#if SIZE_MAX
/* ok */
#else
err or;
#endif
#if HAVE_WCHAR_T
verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN);
verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX);
verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0);
verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0);
# if WCHAR_MIN != 17 && WCHAR_MAX
/* ok */
# else
err or;
# endif
#endif
#if HAVE_WINT_T
# include <wchar.h>
verify (TYPE_MINIMUM (wint_t) == WINT_MIN);
verify (TYPE_MAXIMUM (wint_t) == WINT_MAX);
verify_same_types (WINT_MIN, (wint_t) 0 + 0);
verify_same_types (WINT_MAX, (wint_t) 0 + 0);
# if WINT_MIN != 17 && WINT_MAX
/* ok */
# else
err or;
# endif
#endif
/* 7.18.4. Macros for integer constants */
verify (INT8_C (17) == 17);
verify_same_types (INT8_C (17), (int_least8_t)0 + 0);
verify (UINT8_C (17) == 17);
verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0);
verify (INT16_C (17) == 17);
verify_same_types (INT16_C (17), (int_least16_t)0 + 0);
verify (UINT16_C (17) == 17);
verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0);
verify (INT32_C (17) == 17);
verify_same_types (INT32_C (17), (int_least32_t)0 + 0);
verify (UINT32_C (17) == 17);
verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0);
#ifdef INT64_C
verify (INT64_C (17) == 17);
verify_same_types (INT64_C (17), (int_least64_t)0 + 0);
#endif
#ifdef UINT64_C
verify (UINT64_C (17) == 17);
verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0);
#endif
verify (INTMAX_C (17) == 17);
verify_same_types (INTMAX_C (17), (intmax_t)0 + 0);
verify (UINTMAX_C (17) == 17);
verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0);
int
main ()
{
return 0;
}

30
gnulib/tests/test-stdio.c Normal file
View File

@ -0,0 +1,30 @@
/* Test of <stdio.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdio.h>
/* Check that the various SEEK_* macros are defined. */
int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET };
int
main ()
{
return 0;
}

View File

@ -0,0 +1,37 @@
/* Test of <stdlib.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdlib.h>
int exitcode;
int
main ()
{
/* Check that some macros are defined and different integer constants. */
switch (exitcode)
{
case EXIT_SUCCESS:
case EXIT_FAILURE:
break;
}
return 0;
}

View File

@ -0,0 +1,27 @@
/* Test of <string.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <string.h>
int
main ()
{
return 0;
}

View File

@ -0,0 +1,27 @@
/* Test of <sys/select.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <sys/select.h>
int
main ()
{
return 0;
}

View File

@ -0,0 +1,47 @@
/* Test of <sys/socket.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <sys/socket.h>
#include <errno.h>
#if HAVE_SHUTDOWN
/* Check some integer constant expressions. */
int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };
#endif
int
main ()
{
/* Check some errno values. */
switch (0)
{
case ENOTSOCK:
case EADDRINUSE:
case ENETRESET:
case ECONNABORTED:
case ECONNRESET:
case ENOTCONN:
case ESHUTDOWN:
break;
}
return 0;
}

View File

@ -0,0 +1,260 @@
/* Test of <sys/stat.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <sys/stat.h>
#include "verify.h"
/* Check the existence of some macros. */
int a[] =
{
S_IFMT,
S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG,
#ifdef S_IFLNK /* missing on mingw and djgpp */
S_IFLNK,
#endif
#ifdef S_IFSOCK /* missing on mingw and djgpp */
S_IFSOCK,
#endif
S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR,
S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP,
S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH,
S_ISUID, S_ISGID, S_ISVTX,
S_ISBLK (S_IFREG),
S_ISCHR (S_IFREG),
S_ISDIR (S_IFREG),
S_ISFIFO (S_IFREG),
S_ISREG (S_IFREG),
S_ISLNK (S_IFREG),
S_ISSOCK (S_IFREG),
S_ISDOOR (S_IFREG),
S_ISMPB (S_IFREG),
S_ISNAM (S_IFREG),
S_ISNWK (S_IFREG),
S_ISPORT (S_IFREG),
S_ISCTG (S_IFREG),
S_ISOFD (S_IFREG),
S_ISOFL (S_IFREG),
S_ISWHT (S_IFREG)
};
/* Sanity checks. */
verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR));
verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP));
verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH));
verify (S_ISBLK (S_IFBLK));
verify (!S_ISBLK (S_IFCHR));
verify (!S_ISBLK (S_IFDIR));
verify (!S_ISBLK (S_IFIFO));
verify (!S_ISBLK (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISBLK (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISBLK (S_IFSOCK));
#endif
verify (!S_ISCHR (S_IFBLK));
verify (S_ISCHR (S_IFCHR));
verify (!S_ISCHR (S_IFDIR));
verify (!S_ISCHR (S_IFIFO));
verify (!S_ISCHR (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISCHR (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISCHR (S_IFSOCK));
#endif
verify (!S_ISDIR (S_IFBLK));
verify (!S_ISDIR (S_IFCHR));
verify (S_ISDIR (S_IFDIR));
verify (!S_ISDIR (S_IFIFO));
verify (!S_ISDIR (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISDIR (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISDIR (S_IFSOCK));
#endif
verify (!S_ISFIFO (S_IFBLK));
verify (!S_ISFIFO (S_IFCHR));
verify (!S_ISFIFO (S_IFDIR));
verify (S_ISFIFO (S_IFIFO));
verify (!S_ISFIFO (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISFIFO (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISFIFO (S_IFSOCK));
#endif
verify (!S_ISREG (S_IFBLK));
verify (!S_ISREG (S_IFCHR));
verify (!S_ISREG (S_IFDIR));
verify (!S_ISREG (S_IFIFO));
verify (S_ISREG (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISREG (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISREG (S_IFSOCK));
#endif
verify (!S_ISLNK (S_IFBLK));
verify (!S_ISLNK (S_IFCHR));
verify (!S_ISLNK (S_IFDIR));
verify (!S_ISLNK (S_IFIFO));
verify (!S_ISLNK (S_IFREG));
#ifdef S_IFLNK
verify (S_ISLNK (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISLNK (S_IFSOCK));
#endif
verify (!S_ISSOCK (S_IFBLK));
verify (!S_ISSOCK (S_IFCHR));
verify (!S_ISSOCK (S_IFDIR));
verify (!S_ISSOCK (S_IFIFO));
verify (!S_ISSOCK (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISSOCK (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (S_ISSOCK (S_IFSOCK));
#endif
verify (!S_ISDOOR (S_IFBLK));
verify (!S_ISDOOR (S_IFCHR));
verify (!S_ISDOOR (S_IFDIR));
verify (!S_ISDOOR (S_IFIFO));
verify (!S_ISDOOR (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISDOOR (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISDOOR (S_IFSOCK));
#endif
verify (!S_ISMPB (S_IFBLK));
verify (!S_ISMPB (S_IFCHR));
verify (!S_ISMPB (S_IFDIR));
verify (!S_ISMPB (S_IFIFO));
verify (!S_ISMPB (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISMPB (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISMPB (S_IFSOCK));
#endif
verify (!S_ISNAM (S_IFBLK));
verify (!S_ISNAM (S_IFCHR));
verify (!S_ISNAM (S_IFDIR));
verify (!S_ISNAM (S_IFIFO));
verify (!S_ISNAM (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISNAM (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISNAM (S_IFSOCK));
#endif
verify (!S_ISNWK (S_IFBLK));
verify (!S_ISNWK (S_IFCHR));
verify (!S_ISNWK (S_IFDIR));
verify (!S_ISNWK (S_IFIFO));
verify (!S_ISNWK (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISNWK (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISNWK (S_IFSOCK));
#endif
verify (!S_ISPORT (S_IFBLK));
verify (!S_ISPORT (S_IFCHR));
verify (!S_ISPORT (S_IFDIR));
verify (!S_ISPORT (S_IFIFO));
verify (!S_ISPORT (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISPORT (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISPORT (S_IFSOCK));
#endif
verify (!S_ISCTG (S_IFBLK));
verify (!S_ISCTG (S_IFCHR));
verify (!S_ISCTG (S_IFDIR));
verify (!S_ISCTG (S_IFIFO));
verify (!S_ISCTG (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISCTG (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISCTG (S_IFSOCK));
#endif
verify (!S_ISOFD (S_IFBLK));
verify (!S_ISOFD (S_IFCHR));
verify (!S_ISOFD (S_IFDIR));
verify (!S_ISOFD (S_IFIFO));
verify (!S_ISOFD (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISOFD (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISOFD (S_IFSOCK));
#endif
verify (!S_ISOFL (S_IFBLK));
verify (!S_ISOFL (S_IFCHR));
verify (!S_ISOFL (S_IFDIR));
verify (!S_ISOFL (S_IFIFO));
verify (!S_ISOFL (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISOFL (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISOFL (S_IFSOCK));
#endif
verify (!S_ISWHT (S_IFBLK));
verify (!S_ISWHT (S_IFCHR));
verify (!S_ISWHT (S_IFDIR));
verify (!S_ISWHT (S_IFIFO));
verify (!S_ISWHT (S_IFREG));
#ifdef S_IFLNK
verify (!S_ISWHT (S_IFLNK));
#endif
#ifdef S_IFSOCK
verify (!S_ISWHT (S_IFSOCK));
#endif
int
main ()
{
return 0;
}

View File

@ -0,0 +1,29 @@
/* Test of <sys/time.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <sys/time.h>
struct timeval a;
int
main ()
{
return 0;
}

View File

@ -0,0 +1,44 @@
/* Test of <unistd.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <unistd.h>
/* Check that the various SEEK_* macros are defined. */
int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET };
/* Check that the types are all defined. */
size_t t1;
ssize_t t2;
#ifdef TODO /* Not implemented in gnulib yet */
uid_t t3;
gid_t t4;
#endif
off_t t5;
pid_t t6;
#ifdef TODO
useconds_t t7;
intptr_t t8;
#endif
int
main ()
{
return 0;
}

View File

@ -0,0 +1,127 @@
/* Test of vasnprintf() and asnprintf() functions.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include "vasnprintf.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
static char *
my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
{
va_list args;
char *ret;
va_start (args, format);
ret = vasnprintf (resultbuf, lengthp, format, args);
va_end (args);
return ret;
}
static void
test_vasnprintf ()
{
char buf[8];
int size;
for (size = 0; size <= 8; size++)
{
size_t length = size;
char *result = my_asnprintf (NULL, &length, "%d", 12345);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
ASSERT (length == 5);
free (result);
}
for (size = 0; size <= 8; size++)
{
size_t length;
char *result;
memcpy (buf, "DEADBEEF", 8);
length = size;
result = my_asnprintf (buf, &length, "%d", 12345);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
ASSERT (length == 5);
if (size < 6)
ASSERT (result != buf);
ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
if (result != buf)
free (result);
}
}
static void
test_asnprintf ()
{
char buf[8];
int size;
for (size = 0; size <= 8; size++)
{
size_t length = size;
char *result = asnprintf (NULL, &length, "%d", 12345);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
ASSERT (length == 5);
free (result);
}
for (size = 0; size <= 8; size++)
{
size_t length;
char *result;
memcpy (buf, "DEADBEEF", 8);
length = size;
result = asnprintf (buf, &length, "%d", 12345);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
ASSERT (length == 5);
if (size < 6)
ASSERT (result != buf);
ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0);
if (result != buf)
free (result);
}
}
int
main (int argc, char *argv[])
{
test_vasnprintf ();
test_asnprintf ();
return 0;
}

View File

@ -0,0 +1,88 @@
/* Test of vasprintf() and asprintf() functions.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#define ASSERT(expr) \
do \
{ \
if (!(expr)) \
{ \
fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
abort (); \
} \
} \
while (0)
static int
my_asprintf (char **result, const char *format, ...)
{
va_list args;
int ret;
va_start (args, format);
ret = vasprintf (result, format, args);
va_end (args);
return ret;
}
static void
test_vasprintf ()
{
int repeat;
for (repeat = 0; repeat <= 8; repeat++)
{
char *result;
int retval = my_asprintf (&result, "%d", 12345);
ASSERT (retval == 5);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
free (result);
}
}
static void
test_asprintf ()
{
int repeat;
for (repeat = 0; repeat <= 8; repeat++)
{
char *result;
int retval = asprintf (&result, "%d", 12345);
ASSERT (retval == 5);
ASSERT (result != NULL);
ASSERT (strcmp (result, "12345") == 0);
free (result);
}
}
int
main (int argc, char *argv[])
{
test_vasprintf ();
test_asprintf ();
return 0;
}

27
gnulib/tests/test-wchar.c Normal file
View File

@ -0,0 +1,27 @@
/* Test of <wchar.h> substitute.
Copyright (C) 2007 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Bruno Haible <bruno@clisp.org>, 2007. */
#include <config.h>
#include <wchar.h>
int
main ()
{
return 0;
}

140
gnulib/tests/verify.h Normal file
View File

@ -0,0 +1,140 @@
/* Compile-time assert-like macros.
Copyright (C) 2005, 2006 Free Software Foundation, Inc.
This 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 <http://www.gnu.org/licenses/>. */
/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */
#ifndef VERIFY_H
# define VERIFY_H 1
/* Each of these macros verifies that its argument R is nonzero. To
be portable, R should be an integer constant expression. Unlike
assert (R), there is no run-time overhead.
There are two macros, since no single macro can be used in all
contexts in C. verify_true (R) is for scalar contexts, including
integer constant expression contexts. verify (R) is for declaration
contexts, e.g., the top level.
Symbols ending in "__" are private to this header.
The code below uses several ideas.
* The first step is ((R) ? 1 : -1). Given an expression R, of
integral or boolean or floating-point type, this yields an
expression of integral type, whose value is later verified to be
constant and nonnegative.
* Next this expression W is wrapped in a type
struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }.
If W is negative, this yields a compile-time error. No compiler can
deal with a bit-field of negative size.
One might think that an array size check would have the same
effect, that is, that the type struct { unsigned int dummy[W]; }
would work as well. However, inside a function, some compilers
(such as C++ compilers and GNU C) allow local parameters and
variables inside array size expressions. With these compilers,
an array size check would not properly diagnose this misuse of
the verify macro:
void function (int n) { verify (n < 0); }
* For the verify macro, the struct verify_type__ will need to
somehow be embedded into a declaration. To be portable, this
declaration must declare an object, a constant, a function, or a
typedef name. If the declared entity uses the type directly,
such as in
struct dummy {...};
typedef struct {...} dummy;
extern struct {...} *dummy;
extern void dummy (struct {...} *);
extern struct {...} *dummy (void);
two uses of the verify macro would yield colliding declarations
if the entity names are not disambiguated. A workaround is to
attach the current line number to the entity name:
#define GL_CONCAT0(x, y) x##y
#define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
extern struct {...} * GL_CONCAT(dummy,__LINE__);
But this has the problem that two invocations of verify from
within the same macro would collide, since the __LINE__ value
would be the same for both invocations.
A solution is to use the sizeof operator. It yields a number,
getting rid of the identity of the type. Declarations like
extern int dummy [sizeof (struct {...})];
extern void dummy (int [sizeof (struct {...})]);
extern int (*dummy (void)) [sizeof (struct {...})];
can be repeated.
* Should the implementation use a named struct or an unnamed struct?
Which of the following alternatives can be used?
extern int dummy [sizeof (struct {...})];
extern int dummy [sizeof (struct verify_type__ {...})];
extern void dummy (int [sizeof (struct {...})]);
extern void dummy (int [sizeof (struct verify_type__ {...})]);
extern int (*dummy (void)) [sizeof (struct {...})];
extern int (*dummy (void)) [sizeof (struct verify_type__ {...})];
In the second and sixth case, the struct type is exported to the
outer scope; two such declarations therefore collide. GCC warns
about the first, third, and fourth cases. So the only remaining
possibility is the fifth case:
extern int (*dummy (void)) [sizeof (struct {...})];
* This implementation exploits the fact that GCC does not warn about
the last declaration mentioned above. If a future version of GCC
introduces a warning for this, the problem could be worked around
by using code specialized to GCC, e.g.,:
#if 4 <= __GNUC__
# define verify(R) \
extern int (* verify_function__ (void)) \
[__builtin_constant_p (R) && (R) ? 1 : -1]
#endif
* In C++, any struct definition inside sizeof is invalid.
Use a template type to work around the problem. */
/* Verify requirement R at compile-time, as an integer constant expression.
Return 1. */
# ifdef __cplusplus
template <int w>
struct verify_type__ { unsigned int verify_error_if_negative_size__: w; };
# define verify_true(R) \
(!!sizeof (verify_type__<(R) ? 1 : -1>))
# else
# define verify_true(R) \
(!!sizeof \
(struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; }))
# endif
/* Verify requirement R at compile-time, as a declaration without a
trailing ';'. */
# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)]
#endif