diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-12-25 15:59:16 +0000 |
---|---|---|
committer | <> | 2015-02-03 11:29:43 +0000 |
commit | 5919c67c0cc46fea1ad0f884c04d7ea8a463fce7 (patch) | |
tree | 860f08eda66df9272df23fe4ba0f79e26560ea88 /tests | |
download | gdbm-tarball-e5faeaaf75ecfb705a9b643b3e4cb881ebb69f48.tar.gz |
Diffstat (limited to 'tests')
44 files changed, 6801 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..42335e8 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,135 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +EXTRA_DIST = \ + $(TESTSUITE_AT)\ + testsuite\ + package.m4 + +DISTCLEANFILES = atconfig +MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) + + +## ------------ ## +## package.m4. ## +## ------------ ## + +$(srcdir)/package.m4: $(top_srcdir)/configure.ac $(srcdir)/Makefile.am + $(AM_V_GEN){ \ + echo '# Signature of the current package.'; \ + echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ + echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_MAJOR], [@GDBM_VERSION_MAJOR@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_MINOR], [@GDBM_VERSION_MINOR@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_PATCH], [@GDBM_VERSION_PATCH@])'; \ + echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ + echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ + } >$(srcdir)/package.m4 + +# + +## ------------ ## +## Test suite. ## +## ------------ ## + +TESTSUITE_AT = \ + testsuite.at\ + cloexec00.at\ + cloexec01.at\ + cloexec02.at\ + cloexec03.at\ + dbmcreate00.at\ + dbmdel00.at\ + dbmdel01.at\ + dbmdel02.at\ + dbmcvt.at\ + dbmfetch00.at\ + dbmfetch01.at\ + dbmfetch02.at\ + dbmfetch03.at\ + create00.at\ + delete00.at\ + delete01.at\ + delete02.at\ + fetch00.at\ + fetch01.at\ + setopt00.at\ + setopt01.at\ + version.at + +TESTSUITE = $(srcdir)/testsuite +M4=m4 + +AUTOTEST = $(AUTOM4TE) --language=autotest +$(TESTSUITE): package.m4 $(TESTSUITE_AT) + $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp + mv $@.tmp $@ + +atconfig: $(top_builddir)/config.status + cd $(top_builddir) && ./config.status tests/$@ + +clean-local: + test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean + +check-local: atconfig atlocal $(TESTSUITE) + $(SHELL) $(TESTSUITE) + +# Run the test suite on the *installed* tree. +#installcheck-local: +# $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin + +## --------------- ## +## num2word et al. ## +## --------------- ## + +if COMPAT_OPT + DBMINCLUDES = -I$(top_srcdir)/compat + DBMPROGS = dtload dtdump dtfetch dtdel d_creat_ce +endif + +check_PROGRAMS = \ + fdop\ + g_open_ce\ + g_reorg_ce\ + gtdel\ + gtdump\ + gtfetch\ + gtload\ + gtopt\ + gtver\ + num2word\ + $(DBMPROGS) + +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src $(DBMINCLUDES) +noinst_HEADERS=progname.h +gtdel_LDADD = ../src/libgdbm.la +gtload_LDADD = ../src/libgdbm.la +gtdump_LDADD = ../src/libgdbm.la +gtfetch_LDADD = ../src/libgdbm.la +gtver_LDADD = ../src/libgdbm.la +gtopt_LDADD = ../src/libgdbm.la + +g_open_ce_LDADD = ../src/libgdbm.la +g_reorg_ce_LDADD = ../src/libgdbm.la + +dtload_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtdump_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtfetch_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtdel_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +d_creat_ce_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la + + diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..18e7b48 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,832 @@ +# Makefile.in generated by automake 1.14 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = fdop$(EXEEXT) g_open_ce$(EXEEXT) g_reorg_ce$(EXEEXT) \ + gtdel$(EXEEXT) gtdump$(EXEEXT) gtfetch$(EXEEXT) \ + gtload$(EXEEXT) gtopt$(EXEEXT) gtver$(EXEEXT) \ + num2word$(EXEEXT) $(am__EXEEXT_1) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/atlocal.in $(top_srcdir)/build-aux/depcomp \ + $(noinst_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/autoconf.h +CONFIG_CLEAN_FILES = atlocal +CONFIG_CLEAN_VPATH_FILES = +@COMPAT_OPT_TRUE@am__EXEEXT_1 = dtload$(EXEEXT) dtdump$(EXEEXT) \ +@COMPAT_OPT_TRUE@ dtfetch$(EXEEXT) dtdel$(EXEEXT) \ +@COMPAT_OPT_TRUE@ d_creat_ce$(EXEEXT) +d_creat_ce_SOURCES = d_creat_ce.c +d_creat_ce_OBJECTS = d_creat_ce.$(OBJEXT) +d_creat_ce_DEPENDENCIES = ../src/libgdbm.la \ + ../compat/libgdbm_compat.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +dtdel_SOURCES = dtdel.c +dtdel_OBJECTS = dtdel.$(OBJEXT) +dtdel_DEPENDENCIES = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtdump_SOURCES = dtdump.c +dtdump_OBJECTS = dtdump.$(OBJEXT) +dtdump_DEPENDENCIES = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtfetch_SOURCES = dtfetch.c +dtfetch_OBJECTS = dtfetch.$(OBJEXT) +dtfetch_DEPENDENCIES = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtload_SOURCES = dtload.c +dtload_OBJECTS = dtload.$(OBJEXT) +dtload_DEPENDENCIES = ../src/libgdbm.la ../compat/libgdbm_compat.la +fdop_SOURCES = fdop.c +fdop_OBJECTS = fdop.$(OBJEXT) +fdop_LDADD = $(LDADD) +g_open_ce_SOURCES = g_open_ce.c +g_open_ce_OBJECTS = g_open_ce.$(OBJEXT) +g_open_ce_DEPENDENCIES = ../src/libgdbm.la +g_reorg_ce_SOURCES = g_reorg_ce.c +g_reorg_ce_OBJECTS = g_reorg_ce.$(OBJEXT) +g_reorg_ce_DEPENDENCIES = ../src/libgdbm.la +gtdel_SOURCES = gtdel.c +gtdel_OBJECTS = gtdel.$(OBJEXT) +gtdel_DEPENDENCIES = ../src/libgdbm.la +gtdump_SOURCES = gtdump.c +gtdump_OBJECTS = gtdump.$(OBJEXT) +gtdump_DEPENDENCIES = ../src/libgdbm.la +gtfetch_SOURCES = gtfetch.c +gtfetch_OBJECTS = gtfetch.$(OBJEXT) +gtfetch_DEPENDENCIES = ../src/libgdbm.la +gtload_SOURCES = gtload.c +gtload_OBJECTS = gtload.$(OBJEXT) +gtload_DEPENDENCIES = ../src/libgdbm.la +gtopt_SOURCES = gtopt.c +gtopt_OBJECTS = gtopt.$(OBJEXT) +gtopt_DEPENDENCIES = ../src/libgdbm.la +gtver_SOURCES = gtver.c +gtver_OBJECTS = gtver.$(OBJEXT) +gtver_DEPENDENCIES = ../src/libgdbm.la +num2word_SOURCES = num2word.c +num2word_OBJECTS = num2word.$(OBJEXT) +num2word_LDADD = $(LDADD) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = d_creat_ce.c dtdel.c dtdump.c dtfetch.c dtload.c fdop.c \ + g_open_ce.c g_reorg_ce.c gtdel.c gtdump.c gtfetch.c gtload.c \ + gtopt.c gtver.c num2word.c +DIST_SOURCES = d_creat_ce.c dtdel.c dtdump.c dtfetch.c dtload.c fdop.c \ + g_open_ce.c g_reorg_ce.c gtdel.c gtdump.c gtfetch.c gtload.c \ + gtopt.c gtver.c num2word.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOM4TE = @AUTOM4TE@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GDBM183_INCLUDEDIR = @GDBM183_INCLUDEDIR@ +GDBM183_LIBDIR = @GDBM183_LIBDIR@ +GDBM183_LIBRARY = @GDBM183_LIBRARY@ +GDBM_COUNT_T = @GDBM_COUNT_T@ +GDBM_VERSION_MAJOR = @GDBM_VERSION_MAJOR@ +GDBM_VERSION_MINOR = @GDBM_VERSION_MINOR@ +GDBM_VERSION_PATCH = @GDBM_VERSION_PATCH@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + $(TESTSUITE_AT)\ + testsuite\ + package.m4 + +DISTCLEANFILES = atconfig +MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) + +# +TESTSUITE_AT = \ + testsuite.at\ + cloexec00.at\ + cloexec01.at\ + cloexec02.at\ + cloexec03.at\ + dbmcreate00.at\ + dbmdel00.at\ + dbmdel01.at\ + dbmdel02.at\ + dbmcvt.at\ + dbmfetch00.at\ + dbmfetch01.at\ + dbmfetch02.at\ + dbmfetch03.at\ + create00.at\ + delete00.at\ + delete01.at\ + delete02.at\ + fetch00.at\ + fetch01.at\ + setopt00.at\ + setopt01.at\ + version.at + +TESTSUITE = $(srcdir)/testsuite +M4 = m4 +AUTOTEST = $(AUTOM4TE) --language=autotest + +# Run the test suite on the *installed* tree. +#installcheck-local: +# $(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin +@COMPAT_OPT_TRUE@DBMINCLUDES = -I$(top_srcdir)/compat +@COMPAT_OPT_TRUE@DBMPROGS = dtload dtdump dtfetch dtdel d_creat_ce +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src $(DBMINCLUDES) +noinst_HEADERS = progname.h +gtdel_LDADD = ../src/libgdbm.la +gtload_LDADD = ../src/libgdbm.la +gtdump_LDADD = ../src/libgdbm.la +gtfetch_LDADD = ../src/libgdbm.la +gtver_LDADD = ../src/libgdbm.la +gtopt_LDADD = ../src/libgdbm.la +g_open_ce_LDADD = ../src/libgdbm.la +g_reorg_ce_LDADD = ../src/libgdbm.la +dtload_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtdump_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtfetch_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +dtdel_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +d_creat_ce_LDADD = ../src/libgdbm.la ../compat/libgdbm_compat.la +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +atlocal: $(top_builddir)/config.status $(srcdir)/atlocal.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +d_creat_ce$(EXEEXT): $(d_creat_ce_OBJECTS) $(d_creat_ce_DEPENDENCIES) $(EXTRA_d_creat_ce_DEPENDENCIES) + @rm -f d_creat_ce$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(d_creat_ce_OBJECTS) $(d_creat_ce_LDADD) $(LIBS) + +dtdel$(EXEEXT): $(dtdel_OBJECTS) $(dtdel_DEPENDENCIES) $(EXTRA_dtdel_DEPENDENCIES) + @rm -f dtdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dtdel_OBJECTS) $(dtdel_LDADD) $(LIBS) + +dtdump$(EXEEXT): $(dtdump_OBJECTS) $(dtdump_DEPENDENCIES) $(EXTRA_dtdump_DEPENDENCIES) + @rm -f dtdump$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dtdump_OBJECTS) $(dtdump_LDADD) $(LIBS) + +dtfetch$(EXEEXT): $(dtfetch_OBJECTS) $(dtfetch_DEPENDENCIES) $(EXTRA_dtfetch_DEPENDENCIES) + @rm -f dtfetch$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dtfetch_OBJECTS) $(dtfetch_LDADD) $(LIBS) + +dtload$(EXEEXT): $(dtload_OBJECTS) $(dtload_DEPENDENCIES) $(EXTRA_dtload_DEPENDENCIES) + @rm -f dtload$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(dtload_OBJECTS) $(dtload_LDADD) $(LIBS) + +fdop$(EXEEXT): $(fdop_OBJECTS) $(fdop_DEPENDENCIES) $(EXTRA_fdop_DEPENDENCIES) + @rm -f fdop$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(fdop_OBJECTS) $(fdop_LDADD) $(LIBS) + +g_open_ce$(EXEEXT): $(g_open_ce_OBJECTS) $(g_open_ce_DEPENDENCIES) $(EXTRA_g_open_ce_DEPENDENCIES) + @rm -f g_open_ce$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(g_open_ce_OBJECTS) $(g_open_ce_LDADD) $(LIBS) + +g_reorg_ce$(EXEEXT): $(g_reorg_ce_OBJECTS) $(g_reorg_ce_DEPENDENCIES) $(EXTRA_g_reorg_ce_DEPENDENCIES) + @rm -f g_reorg_ce$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(g_reorg_ce_OBJECTS) $(g_reorg_ce_LDADD) $(LIBS) + +gtdel$(EXEEXT): $(gtdel_OBJECTS) $(gtdel_DEPENDENCIES) $(EXTRA_gtdel_DEPENDENCIES) + @rm -f gtdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtdel_OBJECTS) $(gtdel_LDADD) $(LIBS) + +gtdump$(EXEEXT): $(gtdump_OBJECTS) $(gtdump_DEPENDENCIES) $(EXTRA_gtdump_DEPENDENCIES) + @rm -f gtdump$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtdump_OBJECTS) $(gtdump_LDADD) $(LIBS) + +gtfetch$(EXEEXT): $(gtfetch_OBJECTS) $(gtfetch_DEPENDENCIES) $(EXTRA_gtfetch_DEPENDENCIES) + @rm -f gtfetch$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtfetch_OBJECTS) $(gtfetch_LDADD) $(LIBS) + +gtload$(EXEEXT): $(gtload_OBJECTS) $(gtload_DEPENDENCIES) $(EXTRA_gtload_DEPENDENCIES) + @rm -f gtload$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtload_OBJECTS) $(gtload_LDADD) $(LIBS) + +gtopt$(EXEEXT): $(gtopt_OBJECTS) $(gtopt_DEPENDENCIES) $(EXTRA_gtopt_DEPENDENCIES) + @rm -f gtopt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtopt_OBJECTS) $(gtopt_LDADD) $(LIBS) + +gtver$(EXEEXT): $(gtver_OBJECTS) $(gtver_DEPENDENCIES) $(EXTRA_gtver_DEPENDENCIES) + @rm -f gtver$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gtver_OBJECTS) $(gtver_LDADD) $(LIBS) + +num2word$(EXEEXT): $(num2word_OBJECTS) $(num2word_DEPENDENCIES) $(EXTRA_num2word_DEPENDENCIES) + @rm -f num2word$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(num2word_OBJECTS) $(num2word_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/d_creat_ce.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtfetch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dtload.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_open_ce.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_reorg_ce.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtfetch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtload.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtver.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/num2word.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ + clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + + +$(srcdir)/package.m4: $(top_srcdir)/configure.ac $(srcdir)/Makefile.am + $(AM_V_GEN){ \ + echo '# Signature of the current package.'; \ + echo 'm4_define([AT_PACKAGE_NAME], [@PACKAGE_NAME@])'; \ + echo 'm4_define([AT_PACKAGE_TARNAME], [@PACKAGE_TARNAME@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION], [@PACKAGE_VERSION@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_MAJOR], [@GDBM_VERSION_MAJOR@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_MINOR], [@GDBM_VERSION_MINOR@])'; \ + echo 'm4_define([AT_PACKAGE_VERSION_PATCH], [@GDBM_VERSION_PATCH@])'; \ + echo 'm4_define([AT_PACKAGE_STRING], [@PACKAGE_STRING@])'; \ + echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \ + } >$(srcdir)/package.m4 +$(TESTSUITE): package.m4 $(TESTSUITE_AT) + $(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp + mv $@.tmp $@ + +atconfig: $(top_builddir)/config.status + cd $(top_builddir) && ./config.status tests/$@ + +clean-local: + test ! -f $(TESTSUITE) || $(SHELL) $(TESTSUITE) --clean + +check-local: atconfig atlocal $(TESTSUITE) + $(SHELL) $(TESTSUITE) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/atlocal.in b/tests/atlocal.in new file mode 100644 index 0000000..8dc31d1 --- /dev/null +++ b/tests/atlocal.in @@ -0,0 +1,24 @@ +# @configure_input@ -*- shell-script -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +PATH=@abs_top_builddir@/src:$PATH + +@COMPAT_OPT_TRUE@COMPAT=1 +@COMPAT_OPT_FALSE@COMPAT=0 + + + + diff --git a/tests/cloexec00.at b/tests/cloexec00.at new file mode 100644 index 0000000..022b12f --- /dev/null +++ b/tests/cloexec00.at @@ -0,0 +1,25 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([cloexec: gdbm_open]) +AT_KEYWORDS([gdbm gdbm_open cloexec cloexec00]) + +AT_CHECK([ +g_open_ce "$abs_builddir/fdop" +], +0) + +AT_CLEANUP diff --git a/tests/cloexec01.at b/tests/cloexec01.at new file mode 100644 index 0000000..21baac6 --- /dev/null +++ b/tests/cloexec01.at @@ -0,0 +1,25 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([cloexec: gdbm_reorganize]) +AT_KEYWORDS([gdbm gdbm_reorganize cloexec cloexec01]) + +AT_CHECK([ +g_reorg_ce "$abs_builddir/fdop" +], +0) + +AT_CLEANUP diff --git a/tests/cloexec02.at b/tests/cloexec02.at new file mode 100644 index 0000000..9d1b7e3 --- /dev/null +++ b/tests/cloexec02.at @@ -0,0 +1,27 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([cloexec: dbm_open]) +AT_KEYWORDS([ndbm dbm_open cloexec cloexec02]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10 | dtload file +d_creat_ce "$abs_builddir/fdop" +], +0) + +AT_CLEANUP diff --git a/tests/cloexec03.at b/tests/cloexec03.at new file mode 100644 index 0000000..5fa1c0f --- /dev/null +++ b/tests/cloexec03.at @@ -0,0 +1,26 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([cloexec: dbm_open -creat]) +AT_KEYWORDS([ndbm dbm_open cloexec cloexec03]) + +AT_CHECK([ +AT_COMPAT_PREREQ +d_creat_ce "$abs_builddir/fdop" -creat +], +0) + +AT_CLEANUP diff --git a/tests/create00.at b/tests/create00.at new file mode 100644 index 0000000..c428fdc --- /dev/null +++ b/tests/create00.at @@ -0,0 +1,29 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([create database]) +AT_KEYWORDS([gdbm create create00]) + +AT_CHECK([ +AT_SORT_PREREQ +num2word 1:1000 > input +gtload test.db < input +gtdump test.db | sort -k1,2 -n > output +cmp -s input output || diff -u input output +]) + +AT_CLEANUP + diff --git a/tests/d_creat_ce.c b/tests/d_creat_ce.c new file mode 100644 index 0000000..6a6cff2 --- /dev/null +++ b/tests/d_creat_ce.c @@ -0,0 +1,90 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <ndbm.h> + +char * +ntos (int n, char *buf, size_t size) +{ + char *p = buf + size; + *--p = 0; + do + { + int x = n % 10; + *--p = '0' + x; + n /= 10; + } + while (n); + return p; +} + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +int +main (int argc, char *argv[]) +{ + DBM *d; + char fdbuf[2][80]; + int i; + int flags = O_RDONLY; + + if (argc < 2) + { + fprintf (stderr, "usage: %s PATH-TO-FDOP [-creat] [-write]\n", argv[0]); + return 2; + } + + for (i = 2; i < argc; i++) + { + if (strcmp (argv[i], "-creat") == 0) + flags = O_RDWR|O_CREAT; + else if (strcmp (argv[i], "-write") == 0) + flags = O_RDWR; + else + { + fprintf (stderr, "%s: unknown option: %s\n", + argv[0], argv[i]); + return 2; + } + + } + + if (!O_CLOEXEC) + return 77; + + d = dbm_open ("file", flags|O_CLOEXEC, 0600); + if (!d) + { + perror ("dbm_open"); + return 3; + } + + execl (argv[1], "fdop", + ntos (dbm_pagfno (d), fdbuf[0], sizeof (fdbuf[0])), + ntos (dbm_dirfno (d), fdbuf[1], sizeof (fdbuf[1])), + NULL); + return 127; +} + diff --git a/tests/dbmcreate00.at b/tests/dbmcreate00.at new file mode 100644 index 0000000..fbfed52 --- /dev/null +++ b/tests/dbmcreate00.at @@ -0,0 +1,30 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([create database]) +AT_KEYWORDS([dbm create create00 dbmcreate00]) + +AT_CHECK([ +AT_COMPAT_PREREQ +AT_SORT_PREREQ +num2word 1:1000 > input +dtload test < input +dtdump test | sort -k1,2 -n > output +cmp -s input output || diff -u input output +]) + +AT_CLEANUP + diff --git a/tests/dbmcvt.at b/tests/dbmcvt.at new file mode 100644 index 0000000..c314c8e --- /dev/null +++ b/tests/dbmcvt.at @@ -0,0 +1,34 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([converting a 1.8-style database]) +AT_KEYWORDS([dbm fetch cvt]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +dtfetch test 6 +cmp test.pag test.dir >/dev/null 2>&1 && exit 1 +exit 0 +], +[0], +[six +]) + +AT_CLEANUP + diff --git a/tests/dbmdel00.at b/tests/dbmdel00.at new file mode 100644 index 0000000..8f76648 --- /dev/null +++ b/tests/dbmdel00.at @@ -0,0 +1,40 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete a record]) +AT_KEYWORDS([dbm delete delete00 dbmdel00]) + +AT_CHECK([ +AT_COMPAT_PREREQ +AT_SORT_PREREQ +num2word 1:10 | dtload test +dtdel test 8 +dtdump test | sort -k1,2 -n +], +[0], +[1 one +2 two +3 three +4 four +5 five +6 six +7 seven +9 nine +10 ten +]) + +AT_CLEANUP + diff --git a/tests/dbmdel01.at b/tests/dbmdel01.at new file mode 100644 index 0000000..e0b8f20 --- /dev/null +++ b/tests/dbmdel01.at @@ -0,0 +1,32 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete: non existing record]) +AT_KEYWORDS([dbm delete delete01 dbmdel01]) + +AT_CHECK([ +AT_COMPAT_PREREQ +AT_SORT_PREREQ +num2word 1:10 | dtload test +dtdel test 11 +], +[2], +[], +[dtdel: cannot delete 11: Item not found +]) + +AT_CLEANUP + diff --git a/tests/dbmdel02.at b/tests/dbmdel02.at new file mode 100644 index 0000000..79e5ef6 --- /dev/null +++ b/tests/dbmdel02.at @@ -0,0 +1,29 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete: all records]) +AT_KEYWORDS([dbm delete delete02 dbmdel02]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10 | dtload test +dtdel test 1 2 3 4 5 6 7 8 9 10 +dtdump test +], +[0]) + +AT_CLEANUP + diff --git a/tests/dbmfetch00.at b/tests/dbmfetch00.at new file mode 100644 index 0000000..2eb3279 --- /dev/null +++ b/tests/dbmfetch00.at @@ -0,0 +1,32 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch a record]) +AT_KEYWORDS([dbm fetch fetch00 dbmfetch00]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10000 | dtload test +dtfetch test 1 2745 9999 +], +[0], +[one +two thousand seven hundred and fourty-five +nine thousand nine hundred and ninety-nine +]) + +AT_CLEANUP + diff --git a/tests/dbmfetch01.at b/tests/dbmfetch01.at new file mode 100644 index 0000000..ce74a16 --- /dev/null +++ b/tests/dbmfetch01.at @@ -0,0 +1,31 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch: nonexisting record]) +AT_KEYWORDS([dbm fetch fetch01 dbmfetch01]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10000 | dtload test +dtfetch test 0 +], +[2], +[], +[dtfetch: 0: not found +]) + +AT_CLEANUP + diff --git a/tests/dbmfetch02.at b/tests/dbmfetch02.at new file mode 100644 index 0000000..c581a22 --- /dev/null +++ b/tests/dbmfetch02.at @@ -0,0 +1,32 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch from a read-only database]) +AT_KEYWORDS([dbm fetch fetch02 dbmfetch02]) + +AT_CHECK([ +AT_COMPAT_PREREQ +num2word 1:10 | dtload test +chmod -w test.dir test.pag +dtfetch test 6 10 +], +[0], +[six +ten +]) + +AT_CLEANUP + diff --git a/tests/dbmfetch03.at b/tests/dbmfetch03.at new file mode 100644 index 0000000..b1e149b --- /dev/null +++ b/tests/dbmfetch03.at @@ -0,0 +1,36 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch from a read-only 1.8-style database]) +AT_KEYWORDS([dbm fetch fetch03 dbmfetch03]) + +AT_CHECK([ +AT_COMPAT_PREREQ +mkdir dir +cd dir +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +chmod -w test.dir test.pag . +dtfetch test 6 10 +], +[0], +[six +ten +]) + +AT_CLEANUP + diff --git a/tests/delete00.at b/tests/delete00.at new file mode 100644 index 0000000..ad98034 --- /dev/null +++ b/tests/delete00.at @@ -0,0 +1,39 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete a record]) +AT_KEYWORDS([gdbm delete delete00]) + +AT_CHECK([ +AT_SORT_PREREQ +num2word 1:10 | gtload test.db +gtdel test.db 8 +gtdump test.db | sort -k1,2 -n +], +[0], +[1 one +2 two +3 three +4 four +5 five +6 six +7 seven +9 nine +10 ten +]) + +AT_CLEANUP + diff --git a/tests/delete01.at b/tests/delete01.at new file mode 100644 index 0000000..ab7fe4b --- /dev/null +++ b/tests/delete01.at @@ -0,0 +1,31 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete: non existing record]) +AT_KEYWORDS([gdbm delete delete01]) + +AT_CHECK([ +AT_SORT_PREREQ +num2word 1:10 | gtload test.db +gtdel test.db 11 +], +[2], +[], +[gtdel: cannot delete 11: Item not found +]) + +AT_CLEANUP + diff --git a/tests/delete02.at b/tests/delete02.at new file mode 100644 index 0000000..6162c0b --- /dev/null +++ b/tests/delete02.at @@ -0,0 +1,28 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([delete: all records]) +AT_KEYWORDS([gdbm delete delete02]) + +AT_CHECK([ +num2word 1:10 | gtload test.db +gtdel test.db 1 2 3 4 5 6 7 8 9 10 +gtdump test.db +], +[0]) + +AT_CLEANUP + diff --git a/tests/dtdel.c b/tests/dtdel.c new file mode 100644 index 0000000..b7d0112 --- /dev/null +++ b/tests/dtdel.c @@ -0,0 +1,96 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "dbm.h" +#include "progname.h" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + char *dbname; + datum key; + int flags = 0; + int data_z = 0; + int rc = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-null] [-nolock] [-nommap] [-sync] DBFILE KEY [KEY...]\n", + progname); + exit (0); + } + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-nommap") == 0) + flags |= GDBM_NOMMAP; + else if (strcmp (arg, "-sync") == 0) + flags |= GDBM_SYNC; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc < 2) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + if (dbminit (dbname)) + { + fprintf (stderr, "dbminit failed\n"); + exit (1); + } + + while (--argc) + { + char *arg = *++argv; + + key.dptr = arg; + key.dsize = strlen (arg) + !!data_z; + + if (delete(key)) + { + fprintf (stderr, "%s: cannot delete %s: %s\n", + progname, arg, gdbm_strerror (gdbm_errno)); + rc = 2; + } + } + dbmclose (); + exit (rc); +} diff --git a/tests/dtdump.c b/tests/dtdump.c new file mode 100644 index 0000000..4e0aa3e --- /dev/null +++ b/tests/dtdump.c @@ -0,0 +1,97 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "dbm.h" +#include "progname.h" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + char *dbname; + datum key; + datum data; + int delim = '\t'; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-delim=CHR] DBFILE\n", progname); + exit (0); + } + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc != 1) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + if (dbminit (dbname)) + { + fprintf (stderr, "dbminit failed\n"); + exit (1); + } + + for (key = firstkey (); key.dptr; key = nextkey (key)) + { + int i; + + for (i = 0; i < key.dsize && key.dptr[i]; i++) + { + if (key.dptr[i] == delim || key.dptr[i] == '\\') + fputc ('\\', stdout); + fputc (key.dptr[i], stdout); + } + + fputc (delim, stdout); + + data = fetch (key); + i = data.dsize; + if (data.dptr[i-1] == 0) + i--; + + fwrite (data.dptr, i, 1, stdout); + + fputc ('\n', stdout); + } + + dbmclose (); + exit (0); +} diff --git a/tests/dtfetch.c b/tests/dtfetch.c new file mode 100644 index 0000000..8a2686f --- /dev/null +++ b/tests/dtfetch.c @@ -0,0 +1,119 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "dbm.h" +#include "progname.h" + +void +print_key (FILE *fp, datum key, int delim) +{ + size_t i; + + for (i = 0; i < key.dsize && key.dptr[i]; i++) + { + if (key.dptr[i] == delim || key.dptr[i] == '\\') + fputc ('\\', fp); + fputc (key.dptr[i], fp); + } +} + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + char *dbname; + datum key; + datum data; + int data_z = 0; + int delim = 0; + int rc = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-null] [-delim=CHR] DBFILE KEY [KEY...]\n", + progname); + exit (0); + } + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc < 2) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + if (dbminit (dbname)) + { + fprintf (stderr, "dbminit failed\n"); + exit (1); + } + + while (--argc) + { + char *arg = *++argv; + + key.dptr = arg; + key.dsize = strlen (arg) + !!data_z; + + data = fetch (key); + if (data.dptr == NULL) + { + rc = 2; + fprintf (stderr, "%s: ", progname); + print_key (stderr, key, delim); + fprintf (stderr, ": not found\n"); + continue; + } + if (delim) + { + print_key (stdout, key, delim); + fputc (delim, stdout); + } + + fwrite (data.dptr, data.dsize - !!data_z, 1, stdout); + + fputc ('\n', stdout); + } + + dbmclose (); + exit (rc); +} diff --git a/tests/dtload.c b/tests/dtload.c new file mode 100644 index 0000000..a02b36c --- /dev/null +++ b/tests/dtload.c @@ -0,0 +1,152 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include "dbm.h" +#include "progname.h" + +#define PAGSUF ".pag" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + char *dbname; + int line = 0; + char buf[1024]; + datum key; + datum data; + int delim = '\t'; + int data_z = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-null] [-delim=CHR] DBFILE\n", progname); + exit (0); + } + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc != 1) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + + /* Check if .pag file exists. Create it if it doesn't, as DBM + cannot do it itself. */ + + dbname = malloc (strlen (*argv) + sizeof (PAGSUF)); + if (!dbname) + abort (); + + strcat (strcpy (dbname, *argv), PAGSUF); + + if (access (dbname, F_OK)) + { + int fd = creat (dbname, 0644); + if (fd < 0) + { + fprintf (stderr, "%s: ", progname); + perror (dbname); + exit (1); + } + close (fd); + } + free (dbname); + + if (dbminit (*argv)) + { + fprintf (stderr, "dbminit failed\n"); + exit (1); + } + + while (fgets (buf, sizeof buf, stdin)) + { + size_t i, j; + size_t len = strlen (buf); + + if (buf[len - 1] != '\n') + { + fprintf (stderr, "%s: %d: line too long\n", + progname, line); + continue; + } + + buf[--len] = 0; + + line++; + + for (i = j = 0; i < len; i++) + { + if (buf[i] == '\\') + i++; + else if (buf[i] == delim) + break; + else + buf[j++] = buf[i]; + } + + if (buf[i] != delim) + { + fprintf (stderr, "%s: %d: malformed line\n", + progname, line); + continue; + } + buf[j] = 0; + + key.dptr = buf; + key.dsize = j + data_z; + data.dptr = buf + i + 1; + data.dsize = strlen (data.dptr) + data_z; + if (store (key, data) != 0) + { + fprintf (stderr, "%s: %d: item not inserted\n", + progname, line); + exit (1); + } + } + dbmclose (); + exit (0); +} diff --git a/tests/fdop.c b/tests/fdop.c new file mode 100644 index 0000000..1729323 --- /dev/null +++ b/tests/fdop.c @@ -0,0 +1,36 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <unistd.h> + +/* usage: fdop FD [FD...] + Return: false if any of the FDs is open, true otherwise. +*/ +int +main (int argc, char **argv) +{ + int fd = dup (0); + + while (--argc) + { + int n = atoi (*++argv); + if (n < fd) + return 1; + } + return 0; +} diff --git a/tests/fetch00.at b/tests/fetch00.at new file mode 100644 index 0000000..0b2f48b --- /dev/null +++ b/tests/fetch00.at @@ -0,0 +1,31 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch a record]) +AT_KEYWORDS([gdbm fetch fetch00]) + +AT_CHECK([ +num2word 1:10000 | gtload test.db +gtfetch test.db 1 2745 9999 +], +[0], +[one +two thousand seven hundred and fourty-five +nine thousand nine hundred and ninety-nine +]) + +AT_CLEANUP + diff --git a/tests/fetch01.at b/tests/fetch01.at new file mode 100644 index 0000000..8618b66 --- /dev/null +++ b/tests/fetch01.at @@ -0,0 +1,30 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([fetch: nonexisting record]) +AT_KEYWORDS([gdbm fetch fetch01]) + +AT_CHECK([ +num2word 1:10000 | gtload test.db +gtfetch test.db 0 +], +[2], +[], +[gtfetch: 0: not found +]) + +AT_CLEANUP + diff --git a/tests/g_open_ce.c b/tests/g_open_ce.c new file mode 100644 index 0000000..4f1fcd4 --- /dev/null +++ b/tests/g_open_ce.c @@ -0,0 +1,66 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <gdbm.h> + +char * +ntos (int n, char *buf, size_t size) +{ + char *p = buf + size; + *--p = 0; + do + { + int x = n % 10; + *--p = '0' + x; + n /= 10; + } + while (n); + return p; +} + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +int +main (int argc, char *argv[]) +{ + GDBM_FILE d; + char fdbuf[80]; + + if (argc != 2) + { + fprintf (stderr, "usage: %s PATH-TO-FDOP\n", argv[0]); + return 2; + } + if (!O_CLOEXEC) + return 77; + d = gdbm_open ("file.db", 0, GDBM_NEWDB|GDBM_CLOEXEC, 0600, NULL); + if (!d) + { + fprintf (stderr, "gdbm_open: %s\n", gdbm_strerror (gdbm_errno)); + return 3; + } + execl (argv[1], "fdop", + ntos (gdbm_fdesc (d), fdbuf, sizeof (fdbuf)), NULL); + return 127; +} + diff --git a/tests/g_reorg_ce.c b/tests/g_reorg_ce.c new file mode 100644 index 0000000..f72afa2 --- /dev/null +++ b/tests/g_reorg_ce.c @@ -0,0 +1,72 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <gdbm.h> + +char * +ntos (int n, char *buf, size_t size) +{ + char *p = buf + size; + *--p = 0; + do + { + int x = n % 10; + *--p = '0' + x; + n /= 10; + } + while (n); + return p; +} + +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + +int +main (int argc, char *argv[]) +{ + GDBM_FILE d; + char fdbuf[80]; + + if (argc != 2) + { + fprintf (stderr, "usage: %s PATH-TO-FDOP\n", argv[0]); + return 2; + } + if (!O_CLOEXEC) + return 77; + d = gdbm_open ("file.db", 0, GDBM_NEWDB|GDBM_CLOEXEC, 0600, NULL); + if (!d) + { + fprintf (stderr, "gdbm_open: %s\n", gdbm_strerror (gdbm_errno)); + return 3; + } + if (gdbm_reorganize (d)) + { + fprintf (stderr, "gdbm_reorganize: %s\n", + gdbm_strerror (gdbm_errno)); + return 3; + } + execl (argv[1], "fdop", + ntos (gdbm_fdesc (d), fdbuf, sizeof (fdbuf)), NULL); + return 127; +} + diff --git a/tests/gtdel.c b/tests/gtdel.c new file mode 100644 index 0000000..ff9cdb9 --- /dev/null +++ b/tests/gtdel.c @@ -0,0 +1,98 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "gdbm.h" +#include "progname.h" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + const char *dbname; + datum key; + int flags = 0; + GDBM_FILE dbf; + int data_z = 0; + int rc = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-null] [-nolock] [-nommap] [-sync] DBFILE KEY [KEY...]\n", + progname); + exit (0); + } + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-nommap") == 0) + flags |= GDBM_NOMMAP; + else if (strcmp (arg, "-sync") == 0) + flags |= GDBM_SYNC; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc < 2) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + dbf = gdbm_open (dbname, 0, GDBM_WRITER|flags, 0, NULL); + if (!dbf) + { + fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); + exit (1); + } + + while (--argc) + { + char *arg = *++argv; + + key.dptr = arg; + key.dsize = strlen (arg) + !!data_z; + + if (gdbm_delete(dbf, key)) + { + fprintf (stderr, "%s: cannot delete %s: %s\n", + progname, arg, gdbm_strerror (gdbm_errno)); + rc = 2; + } + } + gdbm_close (dbf); + exit (rc); +} diff --git a/tests/gtdump.c b/tests/gtdump.c new file mode 100644 index 0000000..927a47c --- /dev/null +++ b/tests/gtdump.c @@ -0,0 +1,113 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "gdbm.h" +#include "progname.h" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + const char *dbname; + datum key; + datum data; + int flags = 0; + GDBM_FILE dbf; + int delim = '\t'; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-nolock] [-nommap] [-delim=CHR] DBFILE\n", + progname); + exit (0); + } + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-nommap") == 0) + flags |= GDBM_NOMMAP; + else if (strcmp (arg, "-sync") == 0) + flags |= GDBM_SYNC; + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc != 1) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + dbf = gdbm_open (dbname, 0, GDBM_READER|flags, 00664, NULL); + if (!dbf) + { + fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); + exit (1); + } + + key = gdbm_firstkey (dbf); + while (key.dptr) + { + size_t i; + datum nextkey = gdbm_nextkey (dbf, key); + + for (i = 0; i < key.dsize && key.dptr[i]; i++) + { + if (key.dptr[i] == delim || key.dptr[i] == '\\') + fputc ('\\', stdout); + fputc (key.dptr[i], stdout); + } + + fputc (delim, stdout); + + data = gdbm_fetch (dbf, key); + i = data.dsize; + if (data.dptr[i-1] == 0) + i--; + + fwrite (data.dptr, i, 1, stdout); + free (data.dptr); + + fputc ('\n', stdout); + + free (key.dptr); + key = nextkey; + } + + gdbm_close (dbf); + exit (0); +} diff --git a/tests/gtfetch.c b/tests/gtfetch.c new file mode 100644 index 0000000..0c254b7 --- /dev/null +++ b/tests/gtfetch.c @@ -0,0 +1,127 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "gdbm.h" +#include "progname.h" + +void +print_key (FILE *fp, datum key, int delim) +{ + size_t i; + + for (i = 0; i < key.dsize && key.dptr[i]; i++) + { + if (key.dptr[i] == delim || key.dptr[i] == '\\') + fputc ('\\', fp); + fputc (key.dptr[i], fp); + } +} + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + const char *dbname; + datum key; + datum data; + int flags = 0; + GDBM_FILE dbf; + int data_z = 0; + int delim = 0; + int rc = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-nolock] [-nommap] [-null] [-delim=CHR] DBFILE KEY [KEY...]\n", + progname); + exit (0); + } + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-nommap") == 0) + flags |= GDBM_NOMMAP; + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc < 2) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + dbf = gdbm_open (dbname, 0, GDBM_READER|flags, 00664, NULL); + if (!dbf) + { + fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); + exit (1); + } + + while (--argc) + { + char *arg = *++argv; + + key.dptr = arg; + key.dsize = strlen (arg) + !!data_z; + + data = gdbm_fetch (dbf, key); + if (data.dptr == NULL) + { + rc = 2; + fprintf (stderr, "%s: ", progname); + print_key (stderr, key, delim); + fprintf (stderr, ": not found\n"); + continue; + } + if (delim) + { + print_key (stdout, key, delim); + fputc (delim, stdout); + } + + fwrite (data.dptr, data.dsize - !!data_z, 1, stdout); + free (data.dptr); + + fputc ('\n', stdout); + } + + gdbm_close (dbf); + exit (rc); +} diff --git a/tests/gtload.c b/tests/gtload.c new file mode 100644 index 0000000..2920463 --- /dev/null +++ b/tests/gtload.c @@ -0,0 +1,175 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include "gdbm.h" +#include "progname.h" + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + const char *dbname; + int line = 0; + char buf[1024]; + datum key; + datum data; + int replace = 0; + int flags = 0; + int mode = GDBM_WRCREAT; + int block_size = 0; + GDBM_FILE dbf; + int delim = '\t'; + int data_z = 0; + size_t mapped_size_max = 0; + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-replace] [-clear] [-blocksize=N] [-null] [-nolock] [-nommap] [-maxmap=N] [-sync] [-delim=CHR] DBFILE\n", progname); + exit (0); + } + else if (strcmp (arg, "-replace") == 0) + replace |= GDBM_REPLACE; + else if (strcmp (arg, "-clear") == 0) + mode = GDBM_NEWDB; + else if (strcmp (arg, "-null") == 0) + data_z = 1; + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-nommap") == 0) + flags |= GDBM_NOMMAP; + else if (strcmp (arg, "-sync") == 0) + flags |= GDBM_SYNC; + else if (strncmp (arg, "-blocksize=", 11) == 0) + block_size = atoi (arg + 11); + else if (strncmp (arg, "-maxmap=", 8) == 0) + { + char *p; + + errno = 0; + mapped_size_max = strtoul (arg + 8, &p, 10); + + if (errno) + { + fprintf (stderr, "%s: ", progname); + perror ("maxmap"); + exit (1); + } + + if (*p) + { + fprintf (stderr, "%s: bad maxmap\n", progname); + exit (1); + } + } + else if (strncmp (arg, "-delim=", 7) == 0) + delim = arg[7]; + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc != 1) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + + dbf = gdbm_open (dbname, block_size, mode|flags, 00664, NULL); + if (!dbf) + { + fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); + exit (1); + } + + if (mapped_size_max) + { + if (gdbm_setopt (dbf, GDBM_SETMAXMAPSIZE, &mapped_size_max, + sizeof (mapped_size_max))) + { + fprintf (stderr, "gdbm_setopt failed: %s\n", + gdbm_strerror (gdbm_errno)); + exit (1); + } + } + + while (fgets (buf, sizeof buf, stdin)) + { + size_t i, j; + size_t len = strlen (buf); + + if (buf[len - 1] != '\n') + { + fprintf (stderr, "%s: %d: line too long\n", + progname, line); + continue; + } + + buf[--len] = 0; + + line++; + + for (i = j = 0; i < len; i++) + { + if (buf[i] == '\\') + i++; + else if (buf[i] == delim) + break; + else + buf[j++] = buf[i]; + } + + if (buf[i] != delim) + { + fprintf (stderr, "%s: %d: malformed line\n", + progname, line); + continue; + } + buf[j] = 0; + + key.dptr = buf; + key.dsize = j + data_z; + data.dptr = buf + i + 1; + data.dsize = strlen (data.dptr) + data_z; + if (gdbm_store (dbf, key, data, replace) != 0) + { + fprintf (stderr, "%s: %d: item not inserted\n", + progname, line); + exit (1); + } + } + gdbm_close (dbf); + exit (0); +} diff --git a/tests/gtopt.c b/tests/gtopt.c new file mode 100644 index 0000000..13ad8cc --- /dev/null +++ b/tests/gtopt.c @@ -0,0 +1,414 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <assert.h> +#include "gdbmdefs.h" +#include "progname.h" + +const char *progname; +const char *dbname; +int flags = 0; /* gdbm_open flags */ +int mode = GDBM_WRCREAT; /* gdbm_open mode */ +int block_size = 0; /* block size for the db. 0 means default */ +size_t mapped_size_max = 32768; /* size of the memory mapped region */ +size_t cache_size = 32; /* cache size */ + +static size_t +get_max_mmap_size (const char *arg) +{ + char *p; + size_t size; + + errno = 0; + size = strtoul (arg, &p, 10); + + if (errno) + { + fprintf (stderr, "%s: ", progname); + perror ("maxmap"); + exit (1); + } + + if (*p) + { + fprintf (stderr, "%s: bad maxmap\n", progname); + exit (1); + } + return size; +} + +/* Test results */ +#define RES_PASS 0 +#define RES_FAIL 1 +#define RES_XFAIL 2 +#define RES_SKIP 3 + +const char *resstr[] = { "PASS", "FAIL", "XFAIL", "SKIP" }; +static int _res_max = sizeof(resstr) / sizeof(resstr[0]); + +/* A single setopt testcase */ +struct optest +{ + char *group; /* Group this testcase belongs to */ + char *name; /* Testcase name */ + /* gdbm_setopt arguments: */ + int code; /* option code */ + void *valptr; /* points to the value */ + int valsize; /* size of the value */ + /* end of arguments */ + int xfail; /* if !0, expected value of gdbm_errno */ + int (*test) (void *valptr); /* Test function (can be NULL) */ + void (*init) (void *valptr, int valsize); /* Initialization function + (can be NULL) */ +}; + +/* Storage for the test value */ +char *string; +size_t size; +int intval; +int retbool; + +/* Individual test and initialization functions */ + +int +test_getflags (void *valptr) +{ + int expected = mode | flags; +#ifndef HAVE_MMAP + expected |= GDBM_NOMMAP; +#endif + return (*(int*) valptr == expected) ? RES_PASS : RES_FAIL; +} + +int +test_dbname (void *valptr) +{ + char *s = *(char**)valptr; + int rc = strcmp (string, dbname) == 0 ? RES_PASS : RES_FAIL; + if (rc != RES_PASS) + printf ("[got %s instead of %s] ", s, dbname); + free (s); + return rc; +} + +void +init_cachesize (void *valptr, int valsize) +{ + *(size_t*) valptr = cache_size; +} + +int +test_getcachesize (void *valptr) +{ + return *(size_t*) valptr == cache_size ? RES_PASS : RES_FAIL; +} + +void +init_true (void *valptr, int valsize) +{ + *(int*) valptr = 1; +} + +void +init_false (void *valptr, int valsize) +{ + *(int*) valptr = 0; +} + +void +init_negate_bool (void *valptr, int valsize) +{ + *(int*) valptr = !retbool; +} + +int +test_true (void *valptr) +{ + return *(int*) valptr == 1 ? RES_PASS : RES_FAIL; +} + +int +test_false (void *valptr) +{ + return *(int*) valptr == 0 ? RES_PASS : RES_FAIL; +} + +int +test_negate_bool (void *valptr) +{ + return *(int*) valptr == !retbool ? RES_PASS : RES_FAIL; +} + +int +test_bool (void *valptr) +{ + return *(int*) valptr == retbool ? RES_PASS : RES_FAIL; +} + +int +test_initial_maxmapsize(void *valptr) +{ + return *(size_t*) valptr == SIZE_T_MAX ? RES_PASS : RES_FAIL; +} + +void +init_maxmapsize (void *valptr, int valsize) +{ + *(size_t*)valptr = mapped_size_max; +} + +int +test_maxmapsize (void *valptr) +{ + size_t page_size = sysconf (_SC_PAGESIZE); + size_t expected_size = ((mapped_size_max + page_size - 1) / page_size) * + page_size; + return (*(size_t*) valptr == expected_size) ? RES_PASS : RES_FAIL; +} + +int +test_mmap_group (void *valptr) +{ +#ifdef HAVE_MMAP + return RES_PASS; +#else + return RES_SKIP; +#endif +} + +/* Create a group of testcases for testing a boolean option. + Arguments: + + grp - group name + set - GDBM_SETxxx option + get - GDBM_GETxxx option +*/ +#define TEST_BOOL_OPTION(grp, set,get) \ + { #grp, }, \ + { #grp, "initial " #get, get, &retbool, sizeof (retbool), \ + 0, NULL, NULL }, \ + { #grp, #set, set, &intval, sizeof (intval), \ + 0, NULL, init_negate_bool }, \ + { #grp, #get, get, &intval, sizeof (intval), \ + 0, test_negate_bool, NULL }, \ + { #grp, #set " true", set, &intval, sizeof (intval), \ + 0, NULL, init_true }, \ + { #grp, #get, get, &intval, sizeof (intval), \ + 0, test_true, NULL }, \ + { #grp, #set " false", set, &intval, sizeof (intval), \ + 0, NULL, init_false }, \ + { #grp, #get, get, &intval, sizeof (intval), \ + 0, test_false, NULL } + + +/* Table of testcases: */ +struct optest optest_tab[] = { + { "GETFLAGS", "GDBM_GETFLAGS", GDBM_GETFLAGS, &intval, sizeof (intval), + 0, test_getflags }, + + { "CACHESIZE" }, + { "CACHESIZE", "initial GDBM_SETCACHESIZE", GDBM_SETCACHESIZE, + &size, sizeof (size), 0, + NULL, init_cachesize }, + { "CACHESIZE", "GDBM_GETCACHESIZE", GDBM_GETCACHESIZE, + &size, sizeof (size), 0, + test_getcachesize }, + { "CACHESIZE", "second GDBM_SETCACHESIZE", GDBM_SETCACHESIZE, + &size, sizeof (size), + GDBM_OPT_ALREADY_SET, NULL, init_cachesize }, + + TEST_BOOL_OPTION (SYNCMODE, GDBM_SETSYNCMODE, GDBM_GETSYNCMODE), + TEST_BOOL_OPTION (CENTFREE, GDBM_SETCENTFREE, GDBM_GETCENTFREE), + TEST_BOOL_OPTION (COALESCEBLKS, GDBM_SETCOALESCEBLKS, GDBM_GETCOALESCEBLKS), + + /* MMAP group */ + { "MMAP", NULL, 0, NULL, 0, 0, test_mmap_group }, + + { "MMAP", "initial GDBM_GETMMAP", GDBM_GETMMAP, + &intval, sizeof (intval), 0, + test_true }, + { "MMAP", "GDBM_SETMMAP false", GDBM_SETMMAP, + &intval, sizeof (intval), 0, + NULL, init_false }, + { "MMAP", "GDBM_GETMMAP", GDBM_GETMMAP, + &intval, sizeof (intval), 0, + test_false }, + + { "MMAP", "initial GDBM_GETMAXMAPSIZE", GDBM_GETMAXMAPSIZE, + &size, sizeof (size), 0, + test_initial_maxmapsize, NULL }, + { "MMAP", "GDBM_SETMAXMAPSIZE", GDBM_SETMAXMAPSIZE, + &size, sizeof (size), 0, + NULL, init_maxmapsize }, + { "MMAP", "GDBM_GETMAXMAPSIZE", GDBM_GETMAXMAPSIZE, + &size, sizeof (size), 0, + test_maxmapsize, NULL }, + + + { "GETDBNAME", "GDBM_GETDBNAME", GDBM_GETDBNAME, + &string, sizeof (string), 0, + test_dbname, NULL }, + { NULL } +}; + +/* Use ARGV to determine whether to run the given GROUP of + testcases. + + ARGV is a NULL-terminated array of allowed group names. A "!" + prefix can be used to denote negation. */ +int +groupok (char **argv, const char *group) +{ + int retval = 1; + + if (*argv) + { + char *arg; + + while ((arg = *argv++)) + { + if (*arg == '!') + { + if (strcasecmp (arg + 1, group) == 0) + return 0; + retval = 1; + } + else + { + if (strcasecmp (arg, group) == 0) + return 1; + retval = 0; + } + } + } + + return retval; +} + +int +main (int argc, char **argv) +{ + GDBM_FILE dbf; + struct optest *op; + + progname = canonical_progname (argv[0]); + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-h") == 0) + { + printf ("usage: %s [-blocksize=N] [-nolock] [-sync] [-maxmap=N] DBFILE [GROUP [GROUP...]\n", + progname); + exit (0); + } + else if (strcmp (arg, "-nolock") == 0) + flags |= GDBM_NOLOCK; + else if (strcmp (arg, "-sync") == 0) + flags |= GDBM_SYNC; + else if (strncmp (arg, "-blocksize=", 11) == 0) + block_size = atoi (arg + 11); + else if (strncmp (arg, "-maxmap=", 8) == 0) + mapped_size_max = get_max_mmap_size (arg + 8); + else if (strcmp (arg, "--") == 0) + { + --argc; + ++argv; + break; + } + else if (arg[0] == '-') + { + fprintf (stderr, "%s: unknown option %s\n", progname, arg); + exit (1); + } + else + break; + } + + if (argc == 0) + { + fprintf (stderr, "%s: wrong arguments\n", progname); + exit (1); + } + dbname = *argv; + ++argv; + --argc; + + dbf = gdbm_open (dbname, block_size, mode|flags, 00664, NULL); + if (!dbf) + { + fprintf (stderr, "gdbm_open failed: %s\n", gdbm_strerror (gdbm_errno)); + exit (1); + } + + for (op = optest_tab; op->group; op++) + { + int rc; + + if (!groupok (argv, op->group)) + continue; + + if (!op->name) + { + /* Group header */ + const char *grp = op->group; + + printf ("* %s:", grp); + if (op->test && (rc = op->test (NULL)) != RES_PASS) + { + printf (" %s", resstr[rc]); + for (op++; op->name && strcmp (op->group, grp) == 0; op++) + ; + op--; + } + putchar ('\n'); + continue; + } + + printf ("%s: ", op->name); + if (op->init) + op->init (op->valptr, op->valsize); + + rc = gdbm_setopt (dbf, op->code, op->valptr, op->valsize); + if (rc) + { + if (gdbm_errno == op->xfail) + puts (resstr[RES_XFAIL]); + else + printf ("%s: %s\n", resstr[RES_FAIL], + gdbm_strerror (gdbm_errno)); + } + else if (!op->test) + puts (resstr[RES_PASS]); + else + { + rc = op->test (op->valptr); + assert (rc >= 0 && rc < _res_max); + puts (resstr[rc]); + } + } + + gdbm_close (dbf); + exit (0); +} + + + diff --git a/tests/gtver.c b/tests/gtver.c new file mode 100644 index 0000000..27fc0b9 --- /dev/null +++ b/tests/gtver.c @@ -0,0 +1,74 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include "gdbm.h" +#include "progname.h" + +#define major_number(lib) ((lib) ? gdbm_version_number[0] : GDBM_VERSION_MAJOR) +#define minor_number(lib) ((lib) ? gdbm_version_number[1] : GDBM_VERSION_MINOR) +#define patch_number(lib) ((lib) ? gdbm_version_number[2] : GDBM_VERSION_PATCH) + +int +main (int argc, char **argv) +{ + const char *progname = canonical_progname (argv[0]); + int library = 0; + + if (argc == 1) + { + printf ("%s\n", gdbm_version); + exit (0); + } + + while (--argc) + { + char *arg = *++argv; + + if (strcmp (arg, "-help") == 0) + { + printf ("usage: %s [-string] [-lib] [-header] [-major] [-minor] [-patch] [-full]\n", progname); + exit (0); + } + else if (strcmp (arg, "-string") == 0) + printf ("%s\n", gdbm_version); + else if (strcmp (arg, "-lib") == 0) + library = 1; + else if (strcmp (arg, "-header") == 0) + library = 0; + else if (strcmp (arg, "-major") == 0) + printf ("%d\n", major_number (library)); + else if (strcmp (arg, "-minor") == 0) + printf ("%d\n", minor_number (library)); + else if (strcmp (arg, "-patch") == 0) + printf ("%d\n", patch_number (library)); + else if (strcmp (arg, "-full") == 0) + printf ("%d.%d.%d\n", + major_number (library), + minor_number (library), + patch_number (library)); + else + { + fprintf (stderr, "%s: unknown option %s\n", + progname, arg); + exit (1); + } + } + exit (0); +} diff --git a/tests/num2word.c b/tests/num2word.c new file mode 100644 index 0000000..4b55a35 --- /dev/null +++ b/tests/num2word.c @@ -0,0 +1,255 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ +#include "autoconf.h" +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +const char *progname; + +const char *nstr[][10] = { + { "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine" + }, + { "ten", + "eleven", + "twelve", + "thirteen", + "fourteen", + "fifteen", + "sixteen", + "seventeen", + "eighteen", + "nineteen" + }, + { NULL, + NULL, + "twenty", + "thirty", + "fourty", + "fifty", + "sixty", + "seventy", + "eighty", + "ninety" + } +}; + +const char *short_scale[] = { + "one", + "thousand", + "million", + "billion" + /* End of range for 32-bit unsigned long */ +}; +size_t short_scale_max = sizeof (short_scale) / sizeof (short_scale[0]); + +char buffer[1024]; +size_t bufsize = sizeof(buffer); +size_t bufoff; +int delim = 0; + +void +copy (const char *str, int dch) +{ + size_t len = strlen (str); + if (len + !!dch > bufoff) + abort (); + if (dch) + buffer[--bufoff] = dch; + bufoff -= len; + memcpy (buffer + bufoff, str, len); + delim = ' '; +} + +void +format_100 (unsigned long num) +{ + if (num == 0) + ; + else if (num < 10) + copy (nstr[0][num], delim); + else if (num < 20) + copy (nstr[1][num-10], delim); + else + { + unsigned long tens = num / 10; + num %= 10; + if (num) + { + copy (nstr[0][num], delim); + copy ("-", 0); + copy (nstr[2][tens], 0); + } + else + copy (nstr[2][tens], delim); + } +} + +void +format_1000 (unsigned long num, int more) +{ + size_t n = num % 100; + num /= 100; + format_100 (n); + more |= num != 0; + if (n && more) + copy ("and", delim); + if (num) + { + copy ("hundred", delim); + copy (nstr[0][num], delim); + } +} + + +void +format_number (unsigned long num) +{ + int s = 0; + size_t off; + + bufoff = bufsize; + buffer[--bufoff] = 0; + off = bufoff; + delim = 0; + + do + { + unsigned long n = num % 1000; + + num /= 1000; + + if (s > 0 && ((n && off > bufoff) || num == 0)) + copy (short_scale[s], delim); + s++; + + if (s > short_scale_max) + abort (); + + format_1000 (n, num != 0); + } + while (num); + + if (bufoff + 1 == bufsize) + copy (nstr[0][0], 0); +} + + +void +print_number (unsigned long num) +{ + format_number (num); + printf ("%lu\t%s\n", num, buffer + bufoff); +} + +void +print_range (unsigned long num, unsigned long to) +{ + for (; num <= to; num++) + print_number (num); +} + +unsigned long +xstrtoul (char *arg, char **endp) +{ + unsigned long num; + char *p; + + errno = 0; + num = strtoul (arg, &p, 10); + if (errno) + { + fprintf (stderr, "%s: invalid number: ", progname); + perror (arg); + exit (2); + } + if (endp) + *endp = p; + else if (*p) + { + fprintf (stderr, "%s: invalid number (near %s)\n", + progname, p); + exit (2); + } + + return num; +} + +int +main (int argc, char **argv) +{ + progname = argv[0]; + + if (argc == 1 || strcmp (argv[1], "-h") == 0) + { + printf ("usage: %s NUM [NUM...]\n", progname); + printf ("where NUM is a decimal number, NUM:COUNT or NUM-NUM\n"); + exit (0); + } + + while (--argc) + { + char *arg = *++argv; + unsigned long num, num2; + char *p; + + num = xstrtoul (arg, &p); + if (*p == 0) + print_number (num); + else if (*p == ':') + { + *p++ = 0; + num2 = xstrtoul (p, NULL); + if (num2 == 0) + { + fprintf (stderr, "%s: invalid count\n", progname); + exit (2); + } + print_range (num, num + num2 - 1); + } + else if (*p == '-') + { + *p++ = 0; + num2 = xstrtoul (p, NULL); + if (num2 < num) + { + fprintf (stderr, "%s: invalid range: %lu-%lu\n", + progname, num, num2); + exit (2); + } + + print_range (num, num2); + } + else + { + fprintf (stderr, "%s: invalid argument\n", progname); + exit (2); + } + } + exit (0); +} diff --git a/tests/package.m4 b/tests/package.m4 new file mode 100644 index 0000000..a871201 --- /dev/null +++ b/tests/package.m4 @@ -0,0 +1,9 @@ +# Signature of the current package. +m4_define([AT_PACKAGE_NAME], [gdbm]) +m4_define([AT_PACKAGE_TARNAME], [gdbm]) +m4_define([AT_PACKAGE_VERSION], [1.11]) +m4_define([AT_PACKAGE_VERSION_MAJOR], [1]) +m4_define([AT_PACKAGE_VERSION_MINOR], [11]) +m4_define([AT_PACKAGE_VERSION_PATCH], [0]) +m4_define([AT_PACKAGE_STRING], [gdbm 1.11]) +m4_define([AT_PACKAGE_BUGREPORT], [bug-gdbm@gnu.org]) diff --git a/tests/progname.h b/tests/progname.h new file mode 100644 index 0000000..47dea1e --- /dev/null +++ b/tests/progname.h @@ -0,0 +1,32 @@ +/* This file is part of GDBM test suite. + Copyright (C) 2011 Free Software Foundation, Inc. + + GDBM 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 2, or (at your option) + any later version. + + GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. +*/ + +const char * +canonical_progname (const char *str) +{ + const char *p; + + p = strrchr (str, '/'); + if (p) + p++; + else + p = str; + if (strncmp (p, "lt-", 3) == 0) + p += 3; + return p; +} + diff --git a/tests/setopt00.at b/tests/setopt00.at new file mode 100644 index 0000000..6fe3f41 --- /dev/null +++ b/tests/setopt00.at @@ -0,0 +1,61 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([setopt]) +AT_KEYWORDS([setopt setopt00]) + +AT_CHECK([ +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db '!MMAP' +], +[0], +[GDBM_GETFLAGS: PASS +* CACHESIZE: +initial GDBM_SETCACHESIZE: PASS +GDBM_GETCACHESIZE: PASS +second GDBM_SETCACHESIZE: XFAIL +* SYNCMODE: +initial GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE: PASS +GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE true: PASS +GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE false: PASS +GDBM_GETSYNCMODE: PASS +* CENTFREE: +initial GDBM_GETCENTFREE: PASS +GDBM_SETCENTFREE: PASS +GDBM_GETCENTFREE: FAIL +GDBM_SETCENTFREE true: PASS +GDBM_GETCENTFREE: FAIL +GDBM_SETCENTFREE false: PASS +GDBM_GETCENTFREE: FAIL +* COALESCEBLKS: +initial GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS true: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS false: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_GETDBNAME: PASS +]) + +AT_CLEANUP + + + + diff --git a/tests/setopt01.at b/tests/setopt01.at new file mode 100644 index 0000000..fbe9c71 --- /dev/null +++ b/tests/setopt01.at @@ -0,0 +1,37 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([setopt: mmap options]) +AT_KEYWORDS([setopt setopt01 mmap]) + +AT_CHECK([ +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db 'MMAP' > out +grep 'MMAP: SKIP' out >/dev/null && AT_SKIP_TEST +cat out +], +[0], +[* MMAP: +initial GDBM_GETMMAP: PASS +GDBM_SETMMAP false: PASS +GDBM_GETMMAP: PASS +initial GDBM_GETMAXMAPSIZE: PASS +GDBM_SETMAXMAPSIZE: PASS +GDBM_GETMAXMAPSIZE: PASS +]) + +AT_CLEANUP + diff --git a/tests/testsuite b/tests/testsuite new file mode 100755 index 0000000..11117ab --- /dev/null +++ b/tests/testsuite @@ -0,0 +1,3002 @@ +#! /bin/sh +# Generated from testsuite.at by GNU Autoconf 2.69. +# +# Copyright (C) 2009-2012 Free Software Foundation, Inc. +# +# This test suite is free software; the Free Software Foundation gives +# unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + + +SHELL=${CONFIG_SHELL-/bin/sh} + +# How were we run? +at_cli_args="$@" + + +# Not all shells have the 'times' builtin; the subshell is needed to make +# sure we discard the 'times: not found' message from the shell. +at_times_p=false +(times) >/dev/null 2>&1 && at_times_p=: + +# CLI Arguments to pass to the debugging scripts. +at_debug_args= +# -e sets to true +at_errexit_p=false +# Shall we be verbose? ':' means no, empty means yes. +at_verbose=: +at_quiet= +# Running several jobs in parallel, 0 means as many as test groups. +at_jobs=1 +at_traceon=: +at_trace_echo=: +at_check_filter_trace=: + +# Shall we keep the debug scripts? Must be `:' when the suite is +# run by a debug script, so that the script doesn't remove itself. +at_debug_p=false +# Display help message? +at_help_p=false +# Display the version message? +at_version_p=false +# List test groups? +at_list_p=false +# --clean +at_clean=false +# Test groups to run +at_groups= +# Whether to rerun failed tests. +at_recheck= +# Whether a write failure occurred +at_write_fail=0 + +# The directory we run the suite in. Default to . if no -C option. +at_dir=`pwd` +# An absolute reference to this testsuite script. +case $as_myself in + [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;; + * ) at_myself=$at_dir/$as_myself ;; +esac +# Whether -C is in effect. +at_change_dir=false + +# Whether to enable colored test results. +at_color=no +# List of the tested programs. +at_tested='' +# As many question marks as there are digits in the last test group number. +# Used to normalize the test group numbers so that `ls' lists them in +# numerical order. +at_format='??' +# Description of all the test groups. +at_help_all="1;version.at:17;gdbm version;; +2;create00.at:17;create database;gdbm create create00; +3;fetch00.at:17;fetch a record;gdbm fetch fetch00; +4;fetch01.at:17;fetch: nonexisting record;gdbm fetch fetch01; +5;delete00.at:17;delete a record;gdbm delete delete00; +6;delete01.at:17;delete: non existing record;gdbm delete delete01; +7;delete02.at:17;delete: all records;gdbm delete delete02; +8;dbmcreate00.at:17;create database;dbm create create00 dbmcreate00; +9;dbmcvt.at:17;converting a 1.8-style database;dbm fetch cvt; +10;dbmfetch00.at:17;fetch a record;dbm fetch fetch00 dbmfetch00; +11;dbmfetch01.at:17;fetch: nonexisting record;dbm fetch fetch01 dbmfetch01; +12;dbmfetch02.at:17;fetch from a read-only database;dbm fetch fetch02 dbmfetch02; +13;dbmfetch03.at:17;fetch from a read-only 1.8-style database;dbm fetch fetch03 dbmfetch03; +14;dbmdel00.at:17;delete a record;dbm delete delete00 dbmdel00; +15;dbmdel01.at:17;delete: non existing record;dbm delete delete01 dbmdel01; +16;dbmdel02.at:17;delete: all records;dbm delete delete02 dbmdel02; +17;setopt00.at:17;setopt;setopt setopt00; +18;setopt01.at:17;setopt: mmap options;setopt setopt01 mmap; +19;cloexec00.at:17;cloexec: gdbm_open;gdbm gdbm_open cloexec cloexec00; +20;cloexec01.at:17;cloexec: gdbm_reorganize;gdbm gdbm_reorganize cloexec cloexec01; +21;cloexec02.at:17;cloexec: dbm_open;ndbm dbm_open cloexec cloexec02; +22;cloexec03.at:17;cloexec: dbm_open -creat;ndbm dbm_open cloexec cloexec03; +" +# List of the all the test groups. +at_groups_all=`$as_echo "$at_help_all" | sed 's/;.*//'` + +# at_fn_validate_ranges NAME... +# ----------------------------- +# Validate and normalize the test group number contained in each variable +# NAME. Leading zeroes are treated as decimal. +at_fn_validate_ranges () +{ + for at_grp + do + eval at_value=\$$at_grp + if test $at_value -lt 1 || test $at_value -gt 22; then + $as_echo "invalid test group: $at_value" >&2 + exit 1 + fi + case $at_value in + 0*) # We want to treat leading 0 as decimal, like expr and test, but + # AS_VAR_ARITH treats it as octal if it uses $(( )). + # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the + # expr fork, but it is not worth the effort to determine if the + # shell supports XSI when the user can just avoid leading 0. + eval $at_grp='`expr $at_value + 0`' ;; + esac + done +} + +at_prev= +for at_option +do + # If the previous option needs an argument, assign it. + if test -n "$at_prev"; then + at_option=$at_prev=$at_option + at_prev= + fi + + case $at_option in + *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;; + *) at_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $at_option in + --help | -h ) + at_help_p=: + ;; + + --list | -l ) + at_list_p=: + ;; + + --version | -V ) + at_version_p=: + ;; + + --clean | -c ) + at_clean=: + ;; + + --color ) + at_color=always + ;; + --color=* ) + case $at_optarg in + no | never | none) at_color=never ;; + auto | tty | if-tty) at_color=auto ;; + always | yes | force) at_color=always ;; + *) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'` + as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;; + esac + ;; + + --debug | -d ) + at_debug_p=: + ;; + + --errexit | -e ) + at_debug_p=: + at_errexit_p=: + ;; + + --verbose | -v ) + at_verbose=; at_quiet=: + ;; + + --trace | -x ) + at_traceon='set -x' + at_trace_echo=echo + at_check_filter_trace=at_fn_filter_trace + ;; + + [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) + at_fn_validate_ranges at_option + as_fn_append at_groups "$at_option$as_nl" + ;; + + # Ranges + [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-) + at_range_start=`echo $at_option |tr -d X-` + at_fn_validate_ranges at_range_start + at_range=`$as_echo "$at_groups_all" | \ + sed -ne '/^'$at_range_start'$/,$p'` + as_fn_append at_groups "$at_range$as_nl" + ;; + + -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9]) + at_range_end=`echo $at_option |tr -d X-` + at_fn_validate_ranges at_range_end + at_range=`$as_echo "$at_groups_all" | \ + sed -ne '1,/^'$at_range_end'$/p'` + as_fn_append at_groups "$at_range$as_nl" + ;; + + [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \ + [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \ + [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \ + [0-9][0-9][0-9]-[0-9][0-9][0-9] | \ + [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \ + [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] ) + at_range_start=`expr $at_option : '\(.*\)-'` + at_range_end=`expr $at_option : '.*-\(.*\)'` + if test $at_range_start -gt $at_range_end; then + at_tmp=$at_range_end + at_range_end=$at_range_start + at_range_start=$at_tmp + fi + at_fn_validate_ranges at_range_start at_range_end + at_range=`$as_echo "$at_groups_all" | \ + sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'` + as_fn_append at_groups "$at_range$as_nl" + ;; + + # Directory selection. + --directory | -C ) + at_prev=--directory + ;; + --directory=* ) + at_change_dir=: + at_dir=$at_optarg + if test x- = "x$at_dir" ; then + at_dir=./- + fi + ;; + + # Parallel execution. + --jobs | -j ) + at_jobs=0 + ;; + --jobs=* | -j[0-9]* ) + if test -n "$at_optarg"; then + at_jobs=$at_optarg + else + at_jobs=`expr X$at_option : 'X-j\(.*\)'` + fi + case $at_jobs in *[!0-9]*) + at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'` + as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;; + esac + ;; + + # Keywords. + --keywords | -k ) + at_prev=--keywords + ;; + --keywords=* ) + at_groups_selected=$at_help_all + at_save_IFS=$IFS + IFS=, + set X $at_optarg + shift + IFS=$at_save_IFS + for at_keyword + do + at_invert= + case $at_keyword in + '!'*) + at_invert="-v" + at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'` + ;; + esac + # It is on purpose that we match the test group titles too. + at_groups_selected=`$as_echo "$at_groups_selected" | + grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"` + done + # Smash the keywords. + at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//'` + as_fn_append at_groups "$at_groups_selected$as_nl" + ;; + --recheck) + at_recheck=: + ;; + + *=*) + at_envvar=`expr "x$at_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $at_envvar in + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$at_envvar'" ;; + esac + at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"` + # Export now, but save eval for later and for debug scripts. + export $at_envvar + as_fn_append at_debug_args " $at_envvar='$at_value'" + ;; + + *) $as_echo "$as_me: invalid option: $at_option" >&2 + $as_echo "Try \`$0 --help' for more information." >&2 + exit 1 + ;; + esac +done + +# Verify our last option didn't require an argument +if test -n "$at_prev"; then : + as_fn_error $? "\`$at_prev' requires an argument" +fi + +# The file containing the suite. +at_suite_log=$at_dir/$as_me.log + +# Selected test groups. +if test -z "$at_groups$at_recheck"; then + at_groups=$at_groups_all +else + if test -n "$at_recheck" && test -r "$at_suite_log"; then + at_oldfails=`sed -n ' + /^Failed tests:$/,/^Skipped tests:$/{ + s/^[ ]*\([1-9][0-9]*\):.*/\1/p + } + /^Unexpected passes:$/,/^## Detailed failed tests/{ + s/^[ ]*\([1-9][0-9]*\):.*/\1/p + } + /^## Detailed failed tests/q + ' "$at_suite_log"` + as_fn_append at_groups "$at_oldfails$as_nl" + fi + # Sort the tests, removing duplicates. + at_groups=`$as_echo "$at_groups" | sort -nu | sed '/^$/d'` +fi + +if test x"$at_color" = xalways \ + || { test x"$at_color" = xauto && test -t 1; }; then + at_red=`printf '\033[0;31m'` + at_grn=`printf '\033[0;32m'` + at_lgn=`printf '\033[1;32m'` + at_blu=`printf '\033[1;34m'` + at_std=`printf '\033[m'` +else + at_red= at_grn= at_lgn= at_blu= at_std= +fi + +# Help message. +if $at_help_p; then + cat <<_ATEOF || at_write_fail=1 +Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS] + +Run all the tests, or the selected TESTS, given by numeric ranges, and +save a detailed log file. Upon failure, create debugging scripts. + +Do not change environment variables directly. Instead, set them via +command line arguments. Set \`AUTOTEST_PATH' to select the executables +to exercise. Each relative directory is expanded as build and source +directories relative to the top level of this distribution. +E.g., from within the build directory /tmp/foo-1.0, invoking this: + + $ $0 AUTOTEST_PATH=bin + +is equivalent to the following, assuming the source directory is /src/foo-1.0: + + PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0 +_ATEOF +cat <<_ATEOF || at_write_fail=1 + +Operation modes: + -h, --help print the help message, then exit + -V, --version print version number, then exit + -c, --clean remove all the files this test suite might create and exit + -l, --list describes all the tests, or the selected TESTS +_ATEOF +cat <<_ATEOF || at_write_fail=1 + +Execution tuning: + -C, --directory=DIR + change to directory DIR before starting + --color[=never|auto|always] + enable colored test results on terminal, or always + -j, --jobs[=N] + Allow N jobs at once; infinite jobs with no arg (default 1) + -k, --keywords=KEYWORDS + select the tests matching all the comma-separated KEYWORDS + multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD + --recheck select all tests that failed or passed unexpectedly last time + -e, --errexit abort as soon as a test fails; implies --debug + -v, --verbose force more detailed output + default for debugging scripts + -d, --debug inhibit clean up and top-level logging + default for debugging scripts + -x, --trace enable tests shell tracing +_ATEOF +cat <<_ATEOF || at_write_fail=1 + +Report bugs to <bug-gdbm@gnu.org>. +_ATEOF + exit $at_write_fail +fi + +# List of tests. +if $at_list_p; then + cat <<_ATEOF || at_write_fail=1 +gdbm 1.11 test suite test groups: + + NUM: FILE-NAME:LINE TEST-GROUP-NAME + KEYWORDS + +_ATEOF + # Pass an empty line as separator between selected groups and help. + $as_echo "$at_groups$as_nl$as_nl$at_help_all" | + awk 'NF == 1 && FS != ";" { + selected[$ 1] = 1 + next + } + /^$/ { FS = ";" } + NF > 0 { + if (selected[$ 1]) { + printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3 + if ($ 4) { + lmax = 79 + indent = " " + line = indent + len = length (line) + n = split ($ 4, a, " ") + for (i = 1; i <= n; i++) { + l = length (a[i]) + 1 + if (i > 1 && len + l > lmax) { + print line + line = indent " " a[i] + len = length (line) + } else { + line = line " " a[i] + len += l + } + } + if (n) + print line + } + } + }' || at_write_fail=1 + exit $at_write_fail +fi +if $at_version_p; then + $as_echo "$as_me (gdbm 1.11)" && + cat <<\_ATEOF || at_write_fail=1 + +Copyright (C) 2012 Free Software Foundation, Inc. +This test suite is free software; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. +_ATEOF + exit $at_write_fail +fi + +# Should we print banners? Yes if more than one test is run. +case $at_groups in #( + *$as_nl* ) + at_print_banners=: ;; #( + * ) at_print_banners=false ;; +esac +# Text for banner N, set to a single space once printed. +# Banner 1. testsuite.at:35 +# Category starts at test group 2. +at_banner_text_1="GDBM interface" +# Banner 2. testsuite.at:46 +# Category starts at test group 8. +at_banner_text_2="Compatibility library (dbm/ndbm)" +# Banner 3. testsuite.at:61 +# Category starts at test group 17. +at_banner_text_3="DB options" +# Banner 4. testsuite.at:66 +# Category starts at test group 19. +at_banner_text_4="Cloexec" + +# Take any -C into account. +if $at_change_dir ; then + test x != "x$at_dir" && cd "$at_dir" \ + || as_fn_error $? "unable to change directory" + at_dir=`pwd` +fi + +# Load the config files for any default variable assignments. +for at_file in atconfig atlocal +do + test -r $at_file || continue + . ./$at_file || as_fn_error $? "invalid content: $at_file" +done + +# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix: +: "${at_top_build_prefix=$at_top_builddir}" + +# Perform any assignments requested during argument parsing. +eval "$at_debug_args" + +# atconfig delivers names relative to the directory the test suite is +# in, but the groups themselves are run in testsuite-dir/group-dir. +if test -n "$at_top_srcdir"; then + builddir=../.. + for at_dir_var in srcdir top_srcdir top_build_prefix + do + eval at_val=\$at_$at_dir_var + case $at_val in + [\\/$]* | ?:[\\/]* ) at_prefix= ;; + *) at_prefix=../../ ;; + esac + eval "$at_dir_var=\$at_prefix\$at_val" + done +fi + +## -------------------- ## +## Directory structure. ## +## -------------------- ## + +# This is the set of directories and files used by this script +# (non-literals are capitalized): +# +# TESTSUITE - the testsuite +# TESTSUITE.log - summarizes the complete testsuite run +# TESTSUITE.dir/ - created during a run, remains after -d or failed test +# + at-groups/ - during a run: status of all groups in run +# | + NNN/ - during a run: meta-data about test group NNN +# | | + check-line - location (source file and line) of current AT_CHECK +# | | + status - exit status of current AT_CHECK +# | | + stdout - stdout of current AT_CHECK +# | | + stder1 - stderr, including trace +# | | + stderr - stderr, with trace filtered out +# | | + test-source - portion of testsuite that defines group +# | | + times - timestamps for computing duration +# | | + pass - created if group passed +# | | + xpass - created if group xpassed +# | | + fail - created if group failed +# | | + xfail - created if group xfailed +# | | + skip - created if group skipped +# + at-stop - during a run: end the run if this file exists +# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction +# + 0..NNN/ - created for each group NNN, remains after -d or failed test +# | + TESTSUITE.log - summarizes the group results +# | + ... - files created during the group + +# The directory the whole suite works in. +# Should be absolute to let the user `cd' at will. +at_suite_dir=$at_dir/$as_me.dir +# The file containing the suite ($at_dir might have changed since earlier). +at_suite_log=$at_dir/$as_me.log +# The directory containing helper files per test group. +at_helper_dir=$at_suite_dir/at-groups +# Stop file: if it exists, do not start new jobs. +at_stop_file=$at_suite_dir/at-stop +# The fifo used for the job dispatcher. +at_job_fifo=$at_suite_dir/at-job-fifo + +if $at_clean; then + test -d "$at_suite_dir" && + find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; + rm -f -r "$at_suite_dir" "$at_suite_log" + exit $? +fi + +# Don't take risks: use only absolute directories in PATH. +# +# For stand-alone test suites (ie. atconfig was not found), +# AUTOTEST_PATH is relative to `.'. +# +# For embedded test suites, AUTOTEST_PATH is relative to the top level +# of the package. Then expand it into build/src parts, since users +# may create executables in both places. +AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"` +at_path= +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $AUTOTEST_PATH $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR +case $as_dir in + [\\/]* | ?:[\\/]* ) + as_fn_append at_path "$as_dir" + ;; + * ) + if test -z "$at_top_build_prefix"; then + # Stand-alone test suite. + as_fn_append at_path "$as_dir" + else + # Embedded test suite. + as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR" + as_fn_append at_path "$at_top_srcdir/$as_dir" + fi + ;; +esac + done +IFS=$as_save_IFS + + +# Now build and simplify PATH. +# +# There might be directories that don't exist, but don't redirect +# builtins' (eg., cd) stderr directly: Ultrix's sh hates that. +at_new_path= +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $at_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -d "$as_dir" || continue +case $as_dir in + [\\/]* | ?:[\\/]* ) ;; + * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;; +esac +case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in + *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;; + $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;; + *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;; +esac + done +IFS=$as_save_IFS + +PATH=$at_new_path +export PATH + +# Setting up the FDs. + + + +# 5 is the log file. Not to be overwritten if `-d'. +if $at_debug_p; then + at_suite_log=/dev/null +else + : >"$at_suite_log" +fi +exec 5>>"$at_suite_log" + +# Banners and logs. +$as_echo "## --------------------- ## +## gdbm 1.11 test suite. ## +## --------------------- ##" +{ + $as_echo "## --------------------- ## +## gdbm 1.11 test suite. ## +## --------------------- ##" + echo + + $as_echo "$as_me: command line was:" + $as_echo " \$ $0 $at_cli_args" + echo + + # If ChangeLog exists, list a few lines in case it might help determining + # the exact version. + if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then + $as_echo "## ---------- ## +## ChangeLog. ## +## ---------- ##" + echo + sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog" + echo + fi + + { +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} + echo + + # Contents of the config files. + for at_file in atconfig atlocal + do + test -r $at_file || continue + $as_echo "$as_me: $at_file:" + sed 's/^/| /' $at_file + echo + done +} >&5 + + +## ------------------------- ## +## Autotest shell functions. ## +## ------------------------- ## + +# at_fn_banner NUMBER +# ------------------- +# Output banner NUMBER, provided the testsuite is running multiple groups and +# this particular banner has not yet been printed. +at_fn_banner () +{ + $at_print_banners || return 0 + eval at_banner_text=\$at_banner_text_$1 + test "x$at_banner_text" = "x " && return 0 + eval "at_banner_text_$1=\" \"" + if test -z "$at_banner_text"; then + $at_first || echo + else + $as_echo "$as_nl$at_banner_text$as_nl" + fi +} # at_fn_banner + +# at_fn_check_prepare_notrace REASON LINE +# --------------------------------------- +# Perform AT_CHECK preparations for the command at LINE for an untraceable +# command; REASON is the reason for disabling tracing. +at_fn_check_prepare_notrace () +{ + $at_trace_echo "Not enabling shell tracing (command contains $1)" + $as_echo "$2" >"$at_check_line_file" + at_check_trace=: at_check_filter=: + : >"$at_stdout"; : >"$at_stderr" +} + +# at_fn_check_prepare_trace LINE +# ------------------------------ +# Perform AT_CHECK preparations for the command at LINE for a traceable +# command. +at_fn_check_prepare_trace () +{ + $as_echo "$1" >"$at_check_line_file" + at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace + : >"$at_stdout"; : >"$at_stderr" +} + +# at_fn_check_prepare_dynamic COMMAND LINE +# ---------------------------------------- +# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate +# preparation function. +at_fn_check_prepare_dynamic () +{ + case $1 in + *$as_nl*) + at_fn_check_prepare_notrace 'an embedded newline' "$2" ;; + *) + at_fn_check_prepare_trace "$2" ;; + esac +} + +# at_fn_filter_trace +# ------------------ +# Remove the lines in the file "$at_stderr" generated by "set -x" and print +# them to stderr. +at_fn_filter_trace () +{ + mv "$at_stderr" "$at_stder1" + grep '^ *+' "$at_stder1" >&2 + grep -v '^ *+' "$at_stder1" >"$at_stderr" +} + +# at_fn_log_failure FILE-LIST +# --------------------------- +# Copy the files in the list on stdout with a "> " prefix, and exit the shell +# with a failure exit code. +at_fn_log_failure () +{ + for file + do $as_echo "$file:"; sed 's/^/> /' "$file"; done + echo 1 > "$at_status_file" + exit 1 +} + +# at_fn_check_skip EXIT-CODE LINE +# ------------------------------- +# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit +# the test group subshell with that same exit code. Use LINE in any report +# about test failure. +at_fn_check_skip () +{ + case $1 in + 99) echo 99 > "$at_status_file"; at_failed=: + $as_echo "$2: hard failure"; exit 99;; + 77) echo 77 > "$at_status_file"; exit 77;; + esac +} + +# at_fn_check_status EXPECTED EXIT-CODE LINE +# ------------------------------------------ +# Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing. +# Otherwise, if it is 77 or 99, exit the test group subshell with that same +# exit code; if it is anything else print an error message referring to LINE, +# and fail the test. +at_fn_check_status () +{ + case $2 in + $1 ) ;; + 77) echo 77 > "$at_status_file"; exit 77;; + 99) echo 99 > "$at_status_file"; at_failed=: + $as_echo "$3: hard failure"; exit 99;; + *) $as_echo "$3: exit code was $2, expected $1" + at_failed=:;; + esac +} + +# at_fn_diff_devnull FILE +# ----------------------- +# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff +# invocations. +at_fn_diff_devnull () +{ + test -s "$1" || return 0 + $at_diff "$at_devnull" "$1" +} + +# at_fn_test NUMBER +# ----------------- +# Parse out test NUMBER from the tail of this file. +at_fn_test () +{ + eval at_sed=\$at_sed$1 + sed "$at_sed" "$at_myself" > "$at_test_source" +} + +# at_fn_create_debugging_script +# ----------------------------- +# Create the debugging script $at_group_dir/run which will reproduce the +# current test group. +at_fn_create_debugging_script () +{ + { + echo "#! /bin/sh" && + echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' && + $as_echo "cd '$at_dir'" && + $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" && + echo 'exit 1' + } >"$at_group_dir/run" && + chmod +x "$at_group_dir/run" +} + +## -------------------------------- ## +## End of autotest shell functions. ## +## -------------------------------- ## +{ + $as_echo "## ---------------- ## +## Tested programs. ## +## ---------------- ##" + echo +} >&5 + +# Report what programs are being tested. +for at_program in : $at_tested +do + test "$at_program" = : && continue + case $at_program in + [\\/]* | ?:[\\/]* ) $at_program_=$at_program ;; + * ) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -f "$as_dir/$at_program" && break + done +IFS=$as_save_IFS + + at_program_=$as_dir/$at_program ;; + esac + if test -f "$at_program_"; then + { + $as_echo "$at_srcdir/testsuite.at:32: $at_program_ --version" + "$at_program_" --version </dev/null + echo + } >&5 2>&1 + else + as_fn_error $? "cannot find $at_program" "$LINENO" 5 + fi +done + +{ + $as_echo "## ------------------ ## +## Running the tests. ## +## ------------------ ##" +} >&5 + +at_start_date=`date` +at_start_time=`date +%s 2>/dev/null` +$as_echo "$as_me: starting at: $at_start_date" >&5 + +# Create the master directory if it doesn't already exist. +as_dir="$at_suite_dir"; as_fn_mkdir_p || + as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5 + +# Can we diff with `/dev/null'? DU 5.0 refuses. +if diff /dev/null /dev/null >/dev/null 2>&1; then + at_devnull=/dev/null +else + at_devnull=$at_suite_dir/devnull + >"$at_devnull" +fi + +# Use `diff -u' when possible. +if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff" +then + at_diff='diff -u' +else + at_diff=diff +fi + +# Get the last needed group. +for at_group in : $at_groups; do :; done + +# Extract the start and end lines of each test group at the tail +# of this file +awk ' +BEGIN { FS="" } +/^#AT_START_/ { + start = NR +} +/^#AT_STOP_/ { + test = substr ($ 0, 10) + print "at_sed" test "=\"1," start "d;" (NR-1) "q\"" + if (test == "'"$at_group"'") exit +}' "$at_myself" > "$at_suite_dir/at-source-lines" && +. "$at_suite_dir/at-source-lines" || + as_fn_error $? "cannot create test line number cache" "$LINENO" 5 +rm -f "$at_suite_dir/at-source-lines" + +# Set number of jobs for `-j'; avoid more jobs than test groups. +set X $at_groups; shift; at_max_jobs=$# +if test $at_max_jobs -eq 0; then + at_jobs=1 +fi +if test $at_jobs -ne 1 && + { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then + at_jobs=$at_max_jobs +fi + +# If parallel mode, don't output banners, don't split summary lines. +if test $at_jobs -ne 1; then + at_print_banners=false + at_quiet=: +fi + +# Set up helper dirs. +rm -rf "$at_helper_dir" && +mkdir "$at_helper_dir" && +cd "$at_helper_dir" && +{ test -z "$at_groups" || mkdir $at_groups; } || +as_fn_error $? "testsuite directory setup failed" "$LINENO" 5 + +# Functions for running a test group. We leave the actual +# test group execution outside of a shell function in order +# to avoid hitting zsh 4.x exit status bugs. + +# at_fn_group_prepare +# ------------------- +# Prepare for running a test group. +at_fn_group_prepare () +{ + # The directory for additional per-group helper files. + at_job_dir=$at_helper_dir/$at_group + # The file containing the location of the last AT_CHECK. + at_check_line_file=$at_job_dir/check-line + # The file containing the exit status of the last command. + at_status_file=$at_job_dir/status + # The files containing the output of the tested commands. + at_stdout=$at_job_dir/stdout + at_stder1=$at_job_dir/stder1 + at_stderr=$at_job_dir/stderr + # The file containing the code for a test group. + at_test_source=$at_job_dir/test-source + # The file containing dates. + at_times_file=$at_job_dir/times + + # Be sure to come back to the top test directory. + cd "$at_suite_dir" + + # Clearly separate the test groups when verbose. + $at_first || $at_verbose echo + + at_group_normalized=$at_group + + eval 'while :; do + case $at_group_normalized in #( + '"$at_format"'*) break;; + esac + at_group_normalized=0$at_group_normalized + done' + + + # Create a fresh directory for the next test group, and enter. + # If one already exists, the user may have invoked ./run from + # within that directory; we remove the contents, but not the + # directory itself, so that we aren't pulling the rug out from + # under the shell's notion of the current directory. + at_group_dir=$at_suite_dir/$at_group_normalized + at_group_log=$at_group_dir/$as_me.log + if test -d "$at_group_dir"; then + find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \; + rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??* +fi || + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5 +$as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;} + # Be tolerant if the above `rm' was not able to remove the directory. + as_dir="$at_group_dir"; as_fn_mkdir_p + + echo 0 > "$at_status_file" + + # In verbose mode, append to the log file *and* show on + # the standard output; in quiet mode only write to the log. + if test -z "$at_verbose"; then + at_tee_pipe='tee -a "$at_group_log"' + else + at_tee_pipe='cat >> "$at_group_log"' + fi +} + +# at_fn_group_banner ORDINAL LINE DESC PAD [BANNER] +# ------------------------------------------------- +# Declare the test group ORDINAL, located at LINE with group description DESC, +# and residing under BANNER. Use PAD to align the status column. +at_fn_group_banner () +{ + at_setup_line="$2" + test -n "$5" && at_fn_banner $5 + at_desc="$3" + case $1 in + [0-9]) at_desc_line=" $1: ";; + [0-9][0-9]) at_desc_line=" $1: " ;; + *) at_desc_line="$1: " ;; + esac + as_fn_append at_desc_line "$3$4" + $at_quiet $as_echo_n "$at_desc_line" + echo "# -*- compilation -*-" >> "$at_group_log" +} + +# at_fn_group_postprocess +# ----------------------- +# Perform cleanup after running a test group. +at_fn_group_postprocess () +{ + # Be sure to come back to the suite directory, in particular + # since below we might `rm' the group directory we are in currently. + cd "$at_suite_dir" + + if test ! -f "$at_check_line_file"; then + sed "s/^ */$as_me: WARNING: /" <<_ATEOF + A failure happened in a test group before any test could be + run. This means that test suite is improperly designed. Please + report this failure to <bug-gdbm@gnu.org>. +_ATEOF + $as_echo "$at_setup_line" >"$at_check_line_file" + at_status=99 + fi + $at_verbose $as_echo_n "$at_group. $at_setup_line: " + $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log" + case $at_xfail:$at_status in + yes:0) + at_msg="UNEXPECTED PASS" + at_res=xpass + at_errexit=$at_errexit_p + at_color=$at_red + ;; + no:0) + at_msg="ok" + at_res=pass + at_errexit=false + at_color=$at_grn + ;; + *:77) + at_msg='skipped ('`cat "$at_check_line_file"`')' + at_res=skip + at_errexit=false + at_color=$at_blu + ;; + no:* | *:99) + at_msg='FAILED ('`cat "$at_check_line_file"`')' + at_res=fail + at_errexit=$at_errexit_p + at_color=$at_red + ;; + yes:*) + at_msg='expected failure ('`cat "$at_check_line_file"`')' + at_res=xfail + at_errexit=false + at_color=$at_lgn + ;; + esac + echo "$at_res" > "$at_job_dir/$at_res" + # In parallel mode, output the summary line only afterwards. + if test $at_jobs -ne 1 && test -n "$at_verbose"; then + $as_echo "$at_desc_line $at_color$at_msg$at_std" + else + # Make sure there is a separator even with long titles. + $as_echo " $at_color$at_msg$at_std" + fi + at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg" + case $at_status in + 0|77) + # $at_times_file is only available if the group succeeded. + # We're not including the group log, so the success message + # is written in the global log separately. But we also + # write to the group log in case they're using -d. + if test -f "$at_times_file"; then + at_log_msg="$at_log_msg ("`sed 1d "$at_times_file"`')' + rm -f "$at_times_file" + fi + $as_echo "$at_log_msg" >> "$at_group_log" + $as_echo "$at_log_msg" >&5 + + # Cleanup the group directory, unless the user wants the files + # or the success was unexpected. + if $at_debug_p || test $at_res = xpass; then + at_fn_create_debugging_script + if test $at_res = xpass && $at_errexit; then + echo stop > "$at_stop_file" + fi + else + if test -d "$at_group_dir"; then + find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \; + rm -fr "$at_group_dir" + fi + rm -f "$at_test_source" + fi + ;; + *) + # Upon failure, include the log into the testsuite's global + # log. The failure message is written in the group log. It + # is later included in the global log. + $as_echo "$at_log_msg" >> "$at_group_log" + + # Upon failure, keep the group directory for autopsy, and create + # the debugging script. With -e, do not start any further tests. + at_fn_create_debugging_script + if $at_errexit; then + echo stop > "$at_stop_file" + fi + ;; + esac +} + + +## ------------ ## +## Driver loop. ## +## ------------ ## + + +if (set -m && set +m && set +b) >/dev/null 2>&1; then + set +b + at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=- +else + at_job_control_on=: at_job_control_off=: at_job_group= +fi + +for at_signal in 1 2 15; do + trap 'set +x; set +e + $at_job_control_off + at_signal='"$at_signal"' + echo stop > "$at_stop_file" + trap "" $at_signal + at_pgids= + for at_pgid in `jobs -p 2>/dev/null`; do + at_pgids="$at_pgids $at_job_group$at_pgid" + done + test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null + wait + if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then + echo >&2 + fi + at_signame=`kill -l $at_signal 2>&1 || echo $at_signal` + set x $at_signame + test 0 -gt 2 && at_signame=$at_signal + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5 +$as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;} + as_fn_arith 128 + $at_signal && exit_status=$as_val + as_fn_exit $exit_status' $at_signal +done + +rm -f "$at_stop_file" +at_first=: + +if test $at_jobs -ne 1 && + rm -f "$at_job_fifo" && + test -n "$at_job_group" && + ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null +then + # FIFO job dispatcher. + + trap 'at_pids= + for at_pid in `jobs -p`; do + at_pids="$at_pids $at_job_group$at_pid" + done + if test -n "$at_pids"; then + at_sig=TSTP + test "${TMOUT+set}" = set && at_sig=STOP + kill -$at_sig $at_pids 2>/dev/null + fi + kill -STOP $$ + test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP + + echo + # Turn jobs into a list of numbers, starting from 1. + at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p` + + set X $at_joblist + shift + for at_group in $at_groups; do + $at_job_control_on 2>/dev/null + ( + # Start one test group. + $at_job_control_off + if $at_first; then + exec 7>"$at_job_fifo" + else + exec 6<&- + fi + trap 'set +x; set +e + trap "" PIPE + echo stop > "$at_stop_file" + echo >&7 + as_fn_exit 141' PIPE + at_fn_group_prepare + if cd "$at_group_dir" && + at_fn_test $at_group && + . "$at_test_source" + then :; else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 +$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} + at_failed=: + fi + at_fn_group_postprocess + echo >&7 + ) & + $at_job_control_off + if $at_first; then + at_first=false + exec 6<"$at_job_fifo" 7>"$at_job_fifo" + fi + shift # Consume one token. + if test $# -gt 0; then :; else + read at_token <&6 || break + set x $* + fi + test -f "$at_stop_file" && break + done + exec 7>&- + # Read back the remaining ($at_jobs - 1) tokens. + set X $at_joblist + shift + if test $# -gt 0; then + shift + for at_job + do + read at_token + done <&6 + fi + exec 6<&- + wait +else + # Run serially, avoid forks and other potential surprises. + for at_group in $at_groups; do + at_fn_group_prepare + if cd "$at_group_dir" && + at_fn_test $at_group && + . "$at_test_source"; then :; else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 +$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} + at_failed=: + fi + at_fn_group_postprocess + test -f "$at_stop_file" && break + at_first=false + done +fi + +# Wrap up the test suite with summary statistics. +cd "$at_helper_dir" + +# Use ?..???? when the list must remain sorted, the faster * otherwise. +at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'` +at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'` +at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'` +at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do + echo $f; done | sed '/?/d; s,/xpass,,'` +at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do + echo $f; done | sed '/?/d; s,/fail,,'` + +set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list +shift; at_group_count=$# +set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$* +set X $at_xfail_list; shift; at_xfail_count=$# +set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$* +set X $at_skip_list; shift; at_skip_count=$# + +as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val +as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val +as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val + +# Back to the top directory. +cd "$at_dir" +rm -rf "$at_helper_dir" + +# Compute the duration of the suite. +at_stop_date=`date` +at_stop_time=`date +%s 2>/dev/null` +$as_echo "$as_me: ending at: $at_stop_date" >&5 +case $at_start_time,$at_stop_time in + [0-9]*,[0-9]*) + as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val + as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val + as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val + as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val + as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val + at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s" + $as_echo "$as_me: test suite duration: $at_duration" >&5 + ;; +esac + +echo +$as_echo "## ------------- ## +## Test results. ## +## ------------- ##" +echo +{ + echo + $as_echo "## ------------- ## +## Test results. ## +## ------------- ##" + echo +} >&5 + +if test $at_run_count = 1; then + at_result="1 test" + at_were=was +else + at_result="$at_run_count tests" + at_were=were +fi +if $at_errexit_p && test $at_unexpected_count != 0; then + if test $at_xpass_count = 1; then + at_result="$at_result $at_were run, one passed" + else + at_result="$at_result $at_were run, one failed" + fi + at_result="$at_result unexpectedly and inhibited subsequent tests." + at_color=$at_red +else + # Don't you just love exponential explosion of the number of cases? + at_color=$at_red + case $at_xpass_count:$at_fail_count:$at_xfail_count in + # So far, so good. + 0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;; + 0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;; + + # Some unexpected failures + 0:*:0) at_result="$at_result $at_were run, +$at_fail_count failed unexpectedly." ;; + + # Some failures, both expected and unexpected + 0:*:1) at_result="$at_result $at_were run, +$at_total_fail_count failed ($at_xfail_count expected failure)." ;; + 0:*:*) at_result="$at_result $at_were run, +$at_total_fail_count failed ($at_xfail_count expected failures)." ;; + + # No unexpected failures, but some xpasses + *:0:*) at_result="$at_result $at_were run, +$at_xpass_count passed unexpectedly." ;; + + # No expected failures, but failures and xpasses + *:1:0) at_result="$at_result $at_were run, +$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;; + *:*:0) at_result="$at_result $at_were run, +$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;; + + # All of them. + *:*:1) at_result="$at_result $at_were run, +$at_xpass_count passed unexpectedly, +$at_total_fail_count failed ($at_xfail_count expected failure)." ;; + *:*:*) at_result="$at_result $at_were run, +$at_xpass_count passed unexpectedly, +$at_total_fail_count failed ($at_xfail_count expected failures)." ;; + esac + + if test $at_skip_count = 0 && test $at_run_count -gt 1; then + at_result="All $at_result" + fi +fi + +# Now put skips in the mix. +case $at_skip_count in + 0) ;; + 1) at_result="$at_result +1 test was skipped." ;; + *) at_result="$at_result +$at_skip_count tests were skipped." ;; +esac + +if test $at_unexpected_count = 0; then + echo "$at_color$at_result$at_std" + echo "$at_result" >&5 +else + echo "${at_color}ERROR: $at_result$at_std" >&2 + echo "ERROR: $at_result" >&5 + { + echo + $as_echo "## ------------------------ ## +## Summary of the failures. ## +## ------------------------ ##" + + # Summary of failed and skipped tests. + if test $at_fail_count != 0; then + echo "Failed tests:" + $SHELL "$at_myself" $at_fail_list --list + echo + fi + if test $at_skip_count != 0; then + echo "Skipped tests:" + $SHELL "$at_myself" $at_skip_list --list + echo + fi + if test $at_xpass_count != 0; then + echo "Unexpected passes:" + $SHELL "$at_myself" $at_xpass_list --list + echo + fi + if test $at_fail_count != 0; then + $as_echo "## ---------------------- ## +## Detailed failed tests. ## +## ---------------------- ##" + echo + for at_group in $at_fail_list + do + at_group_normalized=$at_group + + eval 'while :; do + case $at_group_normalized in #( + '"$at_format"'*) break;; + esac + at_group_normalized=0$at_group_normalized + done' + + cat "$at_suite_dir/$at_group_normalized/$as_me.log" + echo + done + echo + fi + if test -n "$at_top_srcdir"; then + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## ${at_top_build_prefix}config.log ## +_ASBOX + sed 's/^/| /' ${at_top_build_prefix}config.log + echo + fi + } >&5 + + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## $as_me.log was created. ## +_ASBOX + + echo + if $at_debug_p; then + at_msg='per-test log files' + else + at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'" + fi + $as_echo "Please send $at_msg and all information you think might help: + + To: <bug-gdbm@gnu.org> + Subject: [gdbm 1.11] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly} + +You may investigate any problem if you feel able to do so, in which +case the test suite provides a good starting point. Its output may +be found below \`${at_testdir+${at_testdir}/}$as_me.dir'. +" + exit 1 +fi + +exit 0 + +## ------------- ## +## Actual tests. ## +## ------------- ## +#AT_START_1 +at_fn_group_banner 1 'version.at:17' \ + "gdbm version" " " +at_xfail=no +( + $as_echo "1. $at_setup_line: testing $at_desc ..." + $at_traceon + + +{ set +x +$as_echo "$at_srcdir/version.at:19: gtver -lib -full -header -full" +at_fn_check_prepare_trace "version.at:19" +( $at_check_trace; gtver -lib -full -header -full +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "1.11.0 +1.11.0 +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/version.at:19" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_1 +#AT_START_2 +at_fn_group_banner 2 'create00.at:17' \ + "create database" " " 1 +at_xfail=no +( + $as_echo "2. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/create00.at:20: + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:1000 > input +gtload test.db < input +gtdump test.db | sort -k1,2 -n > output +cmp -s input output || diff -u input output +" +at_fn_check_prepare_notrace 'a `...` command substitution' "create00.at:20" +( $at_check_trace; + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:1000 > input +gtload test.db < input +gtdump test.db | sort -k1,2 -n > output +cmp -s input output || diff -u input output + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/create00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_2 +#AT_START_3 +at_fn_group_banner 3 'fetch00.at:17' \ + "fetch a record" " " 1 +at_xfail=no +( + $as_echo "3. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/fetch00.at:20: +num2word 1:10000 | gtload test.db +gtfetch test.db 1 2745 9999 +" +at_fn_check_prepare_notrace 'an embedded newline' "fetch00.at:20" +( $at_check_trace; +num2word 1:10000 | gtload test.db +gtfetch test.db 1 2745 9999 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "one +two thousand seven hundred and fourty-five +nine thousand nine hundred and ninety-nine +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/fetch00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_3 +#AT_START_4 +at_fn_group_banner 4 'fetch01.at:17' \ + "fetch: nonexisting record" " " 1 +at_xfail=no +( + $as_echo "4. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/fetch01.at:20: +num2word 1:10000 | gtload test.db +gtfetch test.db 0 +" +at_fn_check_prepare_notrace 'an embedded newline' "fetch01.at:20" +( $at_check_trace; +num2word 1:10000 | gtload test.db +gtfetch test.db 0 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +echo >>"$at_stderr"; $as_echo "gtfetch: 0: not found +" | \ + $at_diff - "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 2 $at_status "$at_srcdir/fetch01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_4 +#AT_START_5 +at_fn_group_banner 5 'delete00.at:17' \ + "delete a record" " " 1 +at_xfail=no +( + $as_echo "5. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/delete00.at:20: + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:10 | gtload test.db +gtdel test.db 8 +gtdump test.db | sort -k1,2 -n +" +at_fn_check_prepare_notrace 'a `...` command substitution' "delete00.at:20" +( $at_check_trace; + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:10 | gtload test.db +gtdel test.db 8 +gtdump test.db | sort -k1,2 -n + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "1 one +2 two +3 three +4 four +5 five +6 six +7 seven +9 nine +10 ten +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/delete00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_5 +#AT_START_6 +at_fn_group_banner 6 'delete01.at:17' \ + "delete: non existing record" " " 1 +at_xfail=no +( + $as_echo "6. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/delete01.at:20: + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:10 | gtload test.db +gtdel test.db 11 +" +at_fn_check_prepare_notrace 'a `...` command substitution' "delete01.at:20" +( $at_check_trace; + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:10 | gtload test.db +gtdel test.db 11 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +echo >>"$at_stderr"; $as_echo "gtdel: cannot delete 11: Item not found +" | \ + $at_diff - "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 2 $at_status "$at_srcdir/delete01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_6 +#AT_START_7 +at_fn_group_banner 7 'delete02.at:17' \ + "delete: all records" " " 1 +at_xfail=no +( + $as_echo "7. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/delete02.at:20: +num2word 1:10 | gtload test.db +gtdel test.db 1 2 3 4 5 6 7 8 9 10 +gtdump test.db +" +at_fn_check_prepare_notrace 'an embedded newline' "delete02.at:20" +( $at_check_trace; +num2word 1:10 | gtload test.db +gtdel test.db 1 2 3 4 5 6 7 8 9 10 +gtdump test.db + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/delete02.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_7 +#AT_START_8 +at_fn_group_banner 8 'dbmcreate00.at:17' \ + "create database" " " 2 +at_xfail=no +( + $as_echo "8. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmcreate00.at:20: + +test \$COMPAT -eq 1 || exit 77 + + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:1000 > input +dtload test < input +dtdump test | sort -k1,2 -n > output +cmp -s input output || diff -u input output +" +at_fn_check_prepare_notrace 'a `...` command substitution' "dbmcreate00.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:1000 > input +dtload test < input +dtdump test | sort -k1,2 -n > output +cmp -s input output || diff -u input output + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmcreate00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_8 +#AT_START_9 +at_fn_group_banner 9 'dbmcvt.at:17' \ + "converting a 1.8-style database" " " 2 +at_xfail=no +( + $as_echo "9. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmcvt.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +dtfetch test 6 +cmp test.pag test.dir >/dev/null 2>&1 && exit 1 +exit 0 +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmcvt.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +dtfetch test 6 +cmp test.pag test.dir >/dev/null 2>&1 && exit 1 +exit 0 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "six +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmcvt.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_9 +#AT_START_10 +at_fn_group_banner 10 'dbmfetch00.at:17' \ + "fetch a record" " " 2 +at_xfail=no +( + $as_echo "10. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmfetch00.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10000 | dtload test +dtfetch test 1 2745 9999 +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmfetch00.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10000 | dtload test +dtfetch test 1 2745 9999 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "one +two thousand seven hundred and fourty-five +nine thousand nine hundred and ninety-nine +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmfetch00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_10 +#AT_START_11 +at_fn_group_banner 11 'dbmfetch01.at:17' \ + "fetch: nonexisting record" " " 2 +at_xfail=no +( + $as_echo "11. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmfetch01.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10000 | dtload test +dtfetch test 0 +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmfetch01.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10000 | dtload test +dtfetch test 0 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +echo >>"$at_stderr"; $as_echo "dtfetch: 0: not found +" | \ + $at_diff - "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 2 $at_status "$at_srcdir/dbmfetch01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_11 +#AT_START_12 +at_fn_group_banner 12 'dbmfetch02.at:17' \ + "fetch from a read-only database" " " 2 +at_xfail=no +( + $as_echo "12. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmfetch02.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +chmod -w test.dir test.pag +dtfetch test 6 10 +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmfetch02.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +chmod -w test.dir test.pag +dtfetch test 6 10 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "six +ten +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmfetch02.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_12 +#AT_START_13 +at_fn_group_banner 13 'dbmfetch03.at:17' \ + "fetch from a read-only 1.8-style database" " " 2 +at_xfail=no +( + $as_echo "13. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmfetch03.at:20: + +test \$COMPAT -eq 1 || exit 77 + +mkdir dir +cd dir +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +chmod -w test.dir test.pag . +dtfetch test 6 10 +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmfetch03.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +mkdir dir +cd dir +num2word 1:10 | dtload test +rm test.dir +ln test.pag test.dir +chmod -w test.dir test.pag . +dtfetch test 6 10 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "six +ten +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmfetch03.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_13 +#AT_START_14 +at_fn_group_banner 14 'dbmdel00.at:17' \ + "delete a record" " " 2 +at_xfail=no +( + $as_echo "14. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmdel00.at:20: + +test \$COMPAT -eq 1 || exit 77 + + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:10 | dtload test +dtdel test 8 +dtdump test | sort -k1,2 -n +" +at_fn_check_prepare_notrace 'a `...` command substitution' "dbmdel00.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:10 | dtload test +dtdel test 8 +dtdump test | sort -k1,2 -n + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "1 one +2 two +3 three +4 four +5 five +6 six +7 seven +9 nine +10 ten +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmdel00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_14 +#AT_START_15 +at_fn_group_banner 15 'dbmdel01.at:17' \ + "delete: non existing record" " " 2 +at_xfail=no +( + $as_echo "15. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmdel01.at:20: + +test \$COMPAT -eq 1 || exit 77 + + +test -z \"\`sort < /dev/null 2>&1\`\" || exit 77 + +num2word 1:10 | dtload test +dtdel test 11 +" +at_fn_check_prepare_notrace 'a `...` command substitution' "dbmdel01.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +num2word 1:10 | dtload test +dtdel test 11 + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +echo >>"$at_stderr"; $as_echo "dtdel: cannot delete 11: Item not found +" | \ + $at_diff - "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 2 $at_status "$at_srcdir/dbmdel01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_15 +#AT_START_16 +at_fn_group_banner 16 'dbmdel02.at:17' \ + "delete: all records" " " 2 +at_xfail=no +( + $as_echo "16. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/dbmdel02.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +dtdel test 1 2 3 4 5 6 7 8 9 10 +dtdump test +" +at_fn_check_prepare_notrace 'an embedded newline' "dbmdel02.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload test +dtdel test 1 2 3 4 5 6 7 8 9 10 +dtdump test + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/dbmdel02.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_16 +#AT_START_17 +at_fn_group_banner 17 'setopt00.at:17' \ + "setopt" " " 3 +at_xfail=no +( + $as_echo "17. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/setopt00.at:20: +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db '!MMAP' +" +at_fn_check_prepare_notrace 'an embedded newline' "setopt00.at:20" +( $at_check_trace; +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db '!MMAP' + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "GDBM_GETFLAGS: PASS +* CACHESIZE: +initial GDBM_SETCACHESIZE: PASS +GDBM_GETCACHESIZE: PASS +second GDBM_SETCACHESIZE: XFAIL +* SYNCMODE: +initial GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE: PASS +GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE true: PASS +GDBM_GETSYNCMODE: PASS +GDBM_SETSYNCMODE false: PASS +GDBM_GETSYNCMODE: PASS +* CENTFREE: +initial GDBM_GETCENTFREE: PASS +GDBM_SETCENTFREE: PASS +GDBM_GETCENTFREE: FAIL +GDBM_SETCENTFREE true: PASS +GDBM_GETCENTFREE: FAIL +GDBM_SETCENTFREE false: PASS +GDBM_GETCENTFREE: FAIL +* COALESCEBLKS: +initial GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS true: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_SETCOALESCEBLKS false: PASS +GDBM_GETCOALESCEBLKS: PASS +GDBM_GETDBNAME: PASS +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/setopt00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_17 +#AT_START_18 +at_fn_group_banner 18 'setopt01.at:17' \ + "setopt: mmap options" " " 3 +at_xfail=no +( + $as_echo "18. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/setopt01.at:20: +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db 'MMAP' > out +grep 'MMAP: SKIP' out >/dev/null && exit 77 +cat out +" +at_fn_check_prepare_notrace 'an embedded newline' "setopt01.at:20" +( $at_check_trace; +num2word 1:1000 | gtload test.db || exit 2 +gtopt test.db 'MMAP' > out +grep 'MMAP: SKIP' out >/dev/null && exit 77 +cat out + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +echo >>"$at_stdout"; $as_echo "* MMAP: +initial GDBM_GETMMAP: PASS +GDBM_SETMMAP false: PASS +GDBM_GETMMAP: PASS +initial GDBM_GETMAXMAPSIZE: PASS +GDBM_SETMAXMAPSIZE: PASS +GDBM_GETMAXMAPSIZE: PASS +" | \ + $at_diff - "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/setopt01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_18 +#AT_START_19 +at_fn_group_banner 19 'cloexec00.at:17' \ + "cloexec: gdbm_open" " " 4 +at_xfail=no +( + $as_echo "19. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/cloexec00.at:20: +g_open_ce \"\$abs_builddir/fdop\" +" +at_fn_check_prepare_notrace 'an embedded newline' "cloexec00.at:20" +( $at_check_trace; +g_open_ce "$abs_builddir/fdop" + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/cloexec00.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_19 +#AT_START_20 +at_fn_group_banner 20 'cloexec01.at:17' \ + "cloexec: gdbm_reorganize" " " 4 +at_xfail=no +( + $as_echo "20. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/cloexec01.at:20: +g_reorg_ce \"\$abs_builddir/fdop\" +" +at_fn_check_prepare_notrace 'an embedded newline' "cloexec01.at:20" +( $at_check_trace; +g_reorg_ce "$abs_builddir/fdop" + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/cloexec01.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_20 +#AT_START_21 +at_fn_group_banner 21 'cloexec02.at:17' \ + "cloexec: dbm_open" " " 4 +at_xfail=no +( + $as_echo "21. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/cloexec02.at:20: + +test \$COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload file +d_creat_ce \"\$abs_builddir/fdop\" +" +at_fn_check_prepare_notrace 'an embedded newline' "cloexec02.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +num2word 1:10 | dtload file +d_creat_ce "$abs_builddir/fdop" + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/cloexec02.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_21 +#AT_START_22 +at_fn_group_banner 22 'cloexec03.at:17' \ + "cloexec: dbm_open -creat" " " 4 +at_xfail=no +( + $as_echo "22. $at_setup_line: testing $at_desc ..." + $at_traceon + + + +{ set +x +$as_echo "$at_srcdir/cloexec03.at:20: + +test \$COMPAT -eq 1 || exit 77 + +d_creat_ce \"\$abs_builddir/fdop\" -creat +" +at_fn_check_prepare_notrace 'an embedded newline' "cloexec03.at:20" +( $at_check_trace; + +test $COMPAT -eq 1 || exit 77 + +d_creat_ce "$abs_builddir/fdop" -creat + +) >>"$at_stdout" 2>>"$at_stderr" 5>&- +at_status=$? at_failed=false +$at_check_filter +at_fn_diff_devnull "$at_stderr" || at_failed=: +at_fn_diff_devnull "$at_stdout" || at_failed=: +at_fn_check_status 0 $at_status "$at_srcdir/cloexec03.at:20" +$at_failed && at_fn_log_failure +$at_traceon; } + + + set +x + $at_times_p && times >"$at_times_file" +) 5>&1 2>&1 7>&- | eval $at_tee_pipe +read at_status <"$at_status_file" +#AT_STOP_22 diff --git a/tests/testsuite.at b/tests/testsuite.at new file mode 100644 index 0000000..1e7373c --- /dev/null +++ b/tests/testsuite.at @@ -0,0 +1,73 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +m4_version_prereq([2.52g]) + +m4_define([AT_SKIP_TEST],[exit 77]) + +dnl AT_SORT_PREREQ - Skip test if sort utility outputs unwanted data on stderr +m4_define([AT_SORT_PREREQ],[ +test -z "`sort < /dev/null 2>&1`" || AT_SKIP_TEST +]) + +m4_define([AT_COMPAT_PREREQ],[ +test $COMPAT -eq 1 || AT_SKIP_TEST +]) + +dnl # Begin tests + +AT_INIT +m4_include([version.at]) + +AT_BANNER([GDBM interface]) + +m4_include([create00.at]) + +m4_include([fetch00.at]) +m4_include([fetch01.at]) + +m4_include([delete00.at]) +m4_include([delete01.at]) +m4_include([delete02.at]) + +AT_BANNER([Compatibility library (dbm/ndbm)]) + +m4_include([dbmcreate00.at]) + +m4_include([dbmcvt.at]) + +m4_include([dbmfetch00.at]) +m4_include([dbmfetch01.at]) +m4_include([dbmfetch02.at]) +m4_include([dbmfetch03.at]) + +m4_include([dbmdel00.at]) +m4_include([dbmdel01.at]) +m4_include([dbmdel02.at]) + +AT_BANNER([DB options]) + +m4_include([setopt00.at]) +m4_include([setopt01.at]) + +AT_BANNER([Cloexec]) + +m4_include([cloexec00.at]) +m4_include([cloexec01.at]) +m4_include([cloexec02.at]) +m4_include([cloexec03.at]) + +# End of testsuite.at diff --git a/tests/version.at b/tests/version.at new file mode 100644 index 0000000..8959d75 --- /dev/null +++ b/tests/version.at @@ -0,0 +1,25 @@ +# This file is part of GDBM. -*- autoconf -*- +# Copyright (C) 2011 Free Software Foundation, Inc. +# +# GDBM 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 2, or (at your option) +# any later version. +# +# GDBM 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 GDBM. If not, see <http://www.gnu.org/licenses/>. */ + +AT_SETUP([gdbm version]) + +AT_CHECK([gtver -lib -full -header -full], +[0], +[AT_PACKAGE_VERSION_MAJOR.AT_PACKAGE_VERSION_MINOR.AT_PACKAGE_VERSION_PATCH +AT_PACKAGE_VERSION_MAJOR.AT_PACKAGE_VERSION_MINOR.AT_PACKAGE_VERSION_PATCH +]) + +AT_CLEANUP |