diff options
Diffstat (limited to 'lib/libc/db/test')
| -rw-r--r-- | lib/libc/db/test/Makefile | 16 | ||||
| -rw-r--r-- | lib/libc/db/test/dbtest.c | 56 | ||||
| -rw-r--r-- | lib/libc/db/test/run.test | 315 | ||||
| -rw-r--r-- | lib/libc/db/test/strerror.c | 67 |
4 files changed, 309 insertions, 145 deletions
diff --git a/lib/libc/db/test/Makefile b/lib/libc/db/test/Makefile index f04a780c74dc..a070941f8f2d 100644 --- a/lib/libc/db/test/Makefile +++ b/lib/libc/db/test/Makefile @@ -1,10 +1,14 @@ -# @(#)Makefile 8.1 (Berkeley) 6/4/93 +# @(#)Makefile 8.7 (Berkeley) 1/2/94 PROG= dbtest -SRCS= dbtest.c +OBJS= dbtest.o -CFLAGS+= -g -DDEBUG -DSTATISTICS -NOMAN= noman +# Add -DSTATISTICS to CFLAGS to get btree statistical use info. +# Note, the db library has to be compiled for statistics as well. +CFLAGS= -O -DDEBUG -NOINCLUDE=1 -.include <bsd.prog.mk> +dbtest: ${OBJS} ${LIB} + ${CC} -o $@ ${OBJS} ${LIB} + +clean: + rm -f gmon.out ${OBJS} ${PROG} t1 t2 t3 diff --git a/lib/libc/db/test/dbtest.c b/lib/libc/db/test/dbtest.c index 823223088dd1..41a115e9b602 100644 --- a/lib/libc/db/test/dbtest.c +++ b/lib/libc/db/test/dbtest.c @@ -38,7 +38,7 @@ static char copyright[] = #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)dbtest.c 8.1 (Berkeley) 6/4/93"; +static char sccsid[] = "@(#)dbtest.c 8.7 (Berkeley) 1/2/94"; #endif /* not lint */ #include <sys/param.h> @@ -91,12 +91,13 @@ main(argc, argv) DB *dbp; DBT data, key, keydata; size_t len; - int ch; + int ch, oflags; char *fname, *infoarg, *p, buf[8 * 1024]; infoarg = NULL; fname = NULL; - while ((ch = getopt(argc, argv, "f:i:o:")) != EOF) + oflags = O_CREAT | O_RDWR; + while ((ch = getopt(argc, argv, "f:i:lo:")) != EOF) switch(ch) { case 'f': fname = optarg; @@ -104,6 +105,9 @@ main(argc, argv) case 'i': infoarg = optarg; break; + case 'l': + oflags |= DB_LOCK; + break; case 'o': if ((ofd = open(optarg, O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0) @@ -145,7 +149,7 @@ main(argc, argv) (void)unlink(buf); } if ((dbp = dbopen(fname, - O_CREAT | O_RDWR, S_IRUSR | S_IWUSR, type, infop)) == NULL) + oflags, S_IRUSR | S_IWUSR, type, infop)) == NULL) err("dbopen: %s", strerror(errno)); XXdbp = dbp; @@ -238,7 +242,7 @@ ldata: switch(command) { err("line %lu: not expecting a key", lineno); if (type == DB_RECNO) { static recno_t recno; - recno = strtol(p + 1, NULL, 0); + recno = atoi(p + 1); key.data = &recno; key.size = sizeof(recno); } else { @@ -284,6 +288,10 @@ lkey: switch(command) { p, lineno); } } +#ifdef STATISTICS + if (type == DB_BTREE) + __bt_stat(dbp); +#endif if (dbp->close(dbp)) err("db->close: %s", strerror(errno)); (void)close(ofd); @@ -502,75 +510,75 @@ setinfo(type, s) switch(type) { case DB_BTREE: if (!strcmp("flags", s)) { - ib.flags = strtoul(eq, NULL, 0); + ib.flags = atoi(eq); return (&ib); } if (!strcmp("cachesize", s)) { - ib.cachesize = strtoul(eq, NULL, 0); + ib.cachesize = atoi(eq); return (&ib); } if (!strcmp("maxkeypage", s)) { - ib.maxkeypage = strtoul(eq, NULL, 0); + ib.maxkeypage = atoi(eq); return (&ib); } if (!strcmp("minkeypage", s)) { - ib.minkeypage = strtoul(eq, NULL, 0); + ib.minkeypage = atoi(eq); return (&ib); } if (!strcmp("lorder", s)) { - ib.lorder = strtoul(eq, NULL, 0); + ib.lorder = atoi(eq); return (&ib); } if (!strcmp("psize", s)) { - ib.psize = strtoul(eq, NULL, 0); + ib.psize = atoi(eq); return (&ib); } break; case DB_HASH: if (!strcmp("bsize", s)) { - ih.bsize = strtoul(eq, NULL, 0); + ih.bsize = atoi(eq); return (&ih); } if (!strcmp("ffactor", s)) { - ih.ffactor = strtoul(eq, NULL, 0); + ih.ffactor = atoi(eq); return (&ih); } if (!strcmp("nelem", s)) { - ih.nelem = strtoul(eq, NULL, 0); + ih.nelem = atoi(eq); return (&ih); } if (!strcmp("cachesize", s)) { - ih.cachesize = strtoul(eq, NULL, 0); + ih.cachesize = atoi(eq); return (&ih); } if (!strcmp("lorder", s)) { - ih.lorder = strtoul(eq, NULL, 0); + ih.lorder = atoi(eq); return (&ih); } break; case DB_RECNO: if (!strcmp("flags", s)) { - rh.flags = strtoul(eq, NULL, 0); + rh.flags = atoi(eq); return (&rh); } if (!strcmp("cachesize", s)) { - rh.cachesize = strtoul(eq, NULL, 0); + rh.cachesize = atoi(eq); return (&rh); } if (!strcmp("lorder", s)) { - rh.lorder = strtoul(eq, NULL, 0); + rh.lorder = atoi(eq); return (&rh); } if (!strcmp("reclen", s)) { - rh.reclen = strtoul(eq, NULL, 0); + rh.reclen = atoi(eq); return (&rh); } if (!strcmp("bval", s)) { - rh.bval = strtoul(eq, NULL, 0); + rh.bval = atoi(eq); return (&rh); } if (!strcmp("psize", s)) { - rh.psize = strtoul(eq, NULL, 0); + rh.psize = atoi(eq); return (&rh); } break; @@ -595,8 +603,10 @@ rfile(name, lenp) if ((fd = open(name, O_RDONLY, 0)) < 0 || fstat(fd, &sb)) err("%s: %s\n", name, strerror(errno)); +#ifdef NOT_PORTABLE if (sb.st_size > (off_t)SIZE_T_MAX) err("%s: %s\n", name, strerror(E2BIG)); +#endif if ((p = malloc((u_int)sb.st_size)) == NULL) err("%s", strerror(errno)); (void)read(fd, p, (int)sb.st_size); @@ -622,7 +632,7 @@ void usage() { (void)fprintf(stderr, - "usage: dbtest [-f file] [-i info] [-o file] type script\n"); + "usage: dbtest [-l] [-f file] [-i info] [-o file] type script\n"); exit(1); } diff --git a/lib/libc/db/test/run.test b/lib/libc/db/test/run.test index 2e0bd8d196ff..5eeaf743dd68 100644 --- a/lib/libc/db/test/run.test +++ b/lib/libc/db/test/run.test @@ -1,32 +1,50 @@ #!/bin/sh - # -# @(#)run.test 8.1 (Berkeley) 6/4/93 +# @(#)run.test 8.7 (Berkeley) 9/16/93 # # db regression tests - main() { - DICT=/usr/share/dict/words - PROG=obj/dbtest - TMP1=t1 - TMP2=t2 - TMP3=t3 - test1 - test2 - test3 - test4 - test5 - test6 - test7 - test8 - test9 - test10 - test11 - test12 - test13 - test20 +DICT=/usr/share/dict/words +#DICT=/usr/dict/words +PROG=./dbtest +TMP1=t1 +TMP2=t2 +TMP3=t3 + + if [ $# -eq 0 ]; then + for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20; do + test$t + done + else + while [ $# -gt 0 ] + do case "$1" in + test*) + $1;; + [0-9]*) + test$1;; + btree) + for t in 1 2 3 7 8 9 10 12 13; do + test$t + done;; + hash) + for t in 1 2 3 8 13 20; do + test$t + done;; + recno) + for t in 1 2 3 4 5 6 7 10 11; do + test$t + done;; + *) + echo "run.test: unknown test $1" + echo "usage: run.test test# | type" + exit 1 + esac + shift + done + fi rm -f $TMP1 $TMP2 $TMP3 exit 0 } @@ -35,21 +53,25 @@ main() # be key/data pairs. test1() { - printf "Test 1: btree, hash: small key, small data pairs\n" + echo "Test 1: btree, hash: small key, small data pairs" sed 200q $DICT > $TMP1 for type in btree hash; do rm -f $TMP2 $TMP3 for i in `sed 200q $DICT`; do - printf "p\nk%s\nd%s\ng\nk%s\n" $i $i $i + echo p + echo k$i + echo d$i + echo g + echo k$i done > $TMP2 $PROG -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test1: type %s: failed\n" $type + echo "test1: type $type: failed" exit 1 fi done - printf "Test 1: recno: small key, small data pairs\n" + echo "Test 1: recno: small key, small data pairs" rm -f $TMP2 $TMP3 sed 200q $DICT | awk '{ @@ -59,7 +81,7 @@ test1() $PROG -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test1: type recno: failed\n" + echo "test1: type recno: failed" exit 1 fi } @@ -68,23 +90,27 @@ test1() # each a medium size data entry. test2() { - printf "Test 2: btree, hash: small key, medium data pairs\n" + echo "Test 2: btree, hash: small key, medium data pairs" mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz echo $mdata | awk '{ for (i = 1; i < 201; ++i) print $0 }' > $TMP1 for type in hash btree; do rm -f $TMP2 $TMP3 for i in `sed 200q $DICT`; do - printf "p\nk%s\nd%s\ng\nk%s\n" $i $mdata $i + echo p + echo k$i + echo d$mdata + echo g + echo k$i done > $TMP2 $PROG -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test2: type %s: failed\n" $type + echo "test2: type $type: failed" exit 1 fi done - printf "Test 2: recno: small key, medium data pairs\n" + echo "Test 2: recno: small key, medium data pairs" rm -f $TMP2 $TMP3 echo $mdata | awk '{ for (i = 1; i < 201; ++i) @@ -93,7 +119,7 @@ test2() $PROG -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test2: type recno: failed\n" + echo "test2: type recno: failed" exit 1 fi } @@ -101,40 +127,46 @@ test2() # Insert the programs in /bin with their paths as their keys. test3() { - printf "Test 3: hash: small key, big data pairs\n" + echo "Test 3: hash: small key, big data pairs" rm -f $TMP1 (find /bin -type f -print | xargs cat) > $TMP1 for type in hash; do rm -f $TMP2 $TMP3 for i in `find /bin -type f -print`; do - printf "p\nk%s\nD%s\ng\nk%s\n" $i $i $i + echo p + echo k$i + echo D$i + echo g + echo k$i done > $TMP2 $PROG -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test3: %s: page size %d: failed\n" \ - $type $psize + echo "test3: $type: failed" exit 1 fi done - printf "Test 3: btree: small key, big data pairs\n" + echo "Test 3: btree: small key, big data pairs" for psize in 512 16384 65536; do - printf "\tpage size %d\n" $psize + echo " page size $psize" for type in btree; do rm -f $TMP2 $TMP3 for i in `find /bin -type f -print`; do - printf "p\nk%s\nD%s\ng\nk%s\n" $i $i $i + echo p + echo k$i + echo D$i + echo g + echo k$i done > $TMP2 $PROG -i psize=$psize -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test3: %s: page size %d: failed\n" \ - $type $psize + echo "test3: $type: page size $psize: failed" exit 1 fi done done - printf "Test 3: recno: big data pairs\n" + echo "Test 3: recno: big data pairs" rm -f $TMP2 $TMP3 find /bin -type f -print | awk '{ @@ -142,11 +174,11 @@ test3() printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i); }' > $TMP2 for psize in 512 16384 65536; do - printf "\tpage size %d\n" $psize + echo " page size $psize" $PROG -i psize=$psize -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test3: recno: page size %d: failed\n" $psize + echo "test3: recno: page size $psize: failed" exit 1 fi done @@ -155,18 +187,33 @@ test3() # Do random recno entries. test4() { - printf "Test 4: recno: random entries\n" + echo "Test 4: recno: random entries" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk '{ - for (i = 37; i <= 37 + 88 * 17; i += 17) - printf("input key %d: %.*s\n", i, i % 41, $0); - for (i = 1; i <= 15; ++i) - printf("input key %d: %.*s\n", i, i % 41, $0); - for (i = 19234; i <= 19234 + 61 * 27; i += 27) - printf("input key %d: %.*s\n", i, i % 41, $0); + for (i = 37; i <= 37 + 88 * 17; i += 17) { + if (i % 41) + s = substr($0, 1, i % 41); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } + for (i = 1; i <= 15; ++i) { + if (i % 41) + s = substr($0, 1, i % 41); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } + for (i = 19234; i <= 19234 + 61 * 27; i += 27) { + if (i % 41) + s = substr($0, 1, i % 41); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } exit }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 cat $TMP1 | awk 'BEGIN { i = 37; @@ -196,7 +243,7 @@ test4() $PROG -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test4: type recno: failed\n" + echo "test4: type recno: failed" exit 1 fi } @@ -204,14 +251,19 @@ test4() # Do reverse order recno entries. test5() { - printf "Test 5: recno: reverse order entries\n" + echo "Test 5: recno: reverse order entries" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk ' { - for (i = 1500; i; --i) - printf("input key %d: %.*s\n", i, i % 34, $0); + for (i = 1500; i; --i) { + if (i % 34) + s = substr($0, 1, i % 34); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 cat $TMP1 | awk 'BEGIN { i = 1500; @@ -227,7 +279,7 @@ test5() $PROG -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test5: type recno: failed\n" + echo "test5: type recno: failed" exit 1 fi } @@ -235,16 +287,26 @@ test5() # Do alternating order recno entries. test6() { - printf "Test 6: recno: alternating order entries\n" + echo "Test 6: recno: alternating order entries" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk ' { - for (i = 1; i < 1200; i += 2) - printf("input key %d: %.*s\n", i, i % 34, $0); - for (i = 2; i < 1200; i += 2) - printf("input key %d: %.*s\n", i, i % 34, $0); + for (i = 1; i < 1200; i += 2) { + if (i % 34) + s = substr($0, 1, i % 34); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } + for (i = 2; i < 1200; i += 2) { + if (i % 34) + s = substr($0, 1, i % 34); + else + s = substr($0, 1); + printf("input key %d: %s\n", i, s); + } exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 cat $TMP1 | awk 'BEGIN { i = 1; @@ -269,7 +331,7 @@ test6() sort -o $TMP3 $TMP3 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test6: type recno: failed\n" + echo "test6: type recno: failed" exit 1 fi } @@ -277,7 +339,7 @@ test6() # Delete cursor record test7() { - printf "Test 7: btree, recno: delete cursor record\n" + echo "Test 7: btree, recno: delete cursor record" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk '{ for (i = 1; i <= 120; ++i) @@ -288,7 +350,7 @@ test7() printf("%05d: input key %d: %s\n", 2, 2, $0); exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 for type in btree recno; do cat $TMP1 | @@ -311,7 +373,7 @@ test7() $PROG -o $TMP3 recno $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test7: type $type: failed\n" + echo "test7: type $type: failed" exit 1 fi done @@ -320,8 +382,9 @@ test7() # Make sure that overflow pages are reused. test8() { - printf "Test 8: btree, hash: repeated small key, big data pairs\n" + echo "Test 8: btree, hash: repeated small key, big data pairs" rm -f $TMP1 + echo "" | awk 'BEGIN { for (i = 1; i <= 10; ++i) { printf("p\nkkey1\nD/bin/sh\n"); @@ -338,21 +401,21 @@ test8() printf("eend of test8 run\n"); }' > $TMP1 $PROG btree $TMP1 - $PROG hash $TMP1 +# $PROG hash $TMP1 # No explicit test for success. } # Test btree duplicate keys test9() { - printf "Test 9: btree: duplicate keys\n" + echo "Test 9: btree: duplicate keys" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk '{ for (i = 1; i <= 543; ++i) printf("%05d: input key %d: %s\n", i, i, $0); exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 for type in btree; do cat $TMP1 | @@ -369,7 +432,7 @@ test9() sort -o $TMP3 $TMP3 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test9: type $type: failed\n" + echo "test9: type $type: failed" exit 1 fi done @@ -378,14 +441,14 @@ test9() # Test use of cursor flags without initialization test10() { - printf "Test 10: btree, recno: test cursor flag use\n" + echo "Test 10: btree, recno: test cursor flag use" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk '{ for (i = 1; i <= 20; ++i) printf("%05d: input key %d: %s\n", i, i, $0); exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 # Test that R_CURSOR doesn't succeed before cursor initialized for type in btree recno; do @@ -401,7 +464,7 @@ test10() }' > $TMP2 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 if [ -s $TMP3 ] ; then - printf "Test 10: delete: R_CURSOR SHOULD HAVE FAILED\n" + echo "Test 10: delete: R_CURSOR SHOULD HAVE FAILED" exit 1 fi done @@ -418,7 +481,7 @@ test10() }' > $TMP2 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 if [ -s $TMP3 ] ; then - printf "Test 10: put: R_CURSOR SHOULD HAVE FAILED\n" + echo "Test 10: put: R_CURSOR SHOULD HAVE FAILED" exit 1 fi done @@ -427,14 +490,14 @@ test10() # Test insert in reverse order. test11() { - printf "Test 11: recno: reverse order insert\n" + echo "Test 11: recno: reverse order insert" echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | awk '{ for (i = 1; i <= 779; ++i) printf("%05d: input key %d: %s\n", i, i, $0); exit; }' > $TMP1 - rm -f TMP2 $TMP3 + rm -f $TMP2 $TMP3 for type in recno; do cat $TMP1 | @@ -452,7 +515,7 @@ test11() $PROG -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test11: type $type: failed\n" + echo "test11: type $type: failed" exit 1 fi done @@ -463,19 +526,23 @@ test11() # the btree split code gets hammered. test12() { - printf "Test 12: btree: lots of keys, small page size\n" + echo "Test 12: btree: lots of keys, small page size" mdata=abcdefghijklmnopqrstuvwxy echo $mdata | awk '{ for (i = 1; i < 20001; ++i) print $0 }' > $TMP1 for type in btree; do rm -f $TMP2 $TMP3 for i in `sed 20000q $DICT | rev`; do - printf "p\nk%s\nd%s\ng\nk%s\n" $i $mdata $i + echo p + echo k$i + echo d$mdata + echo g + echo k$i done > $TMP2 $PROG -i psize=512 -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test12: type %s: failed\n" $type + echo "test12: type $type: failed" exit 1 fi done @@ -484,27 +551,32 @@ test12() # Test different byte orders. test13() { - printf "Test 13: btree, hash: differing byte orders\n" + echo "Test 13: btree, hash: differing byte orders" sed 50q $DICT > $TMP1 for order in 1234 4321; do for type in btree hash; do rm -f byte.file $TMP2 $TMP3 for i in `sed 50q $DICT`; do - printf "p\nk%s\nd%s\ng\nk%s\n" $i $i $i + echo p + echo k$i + echo d$i + echo g + echo k$i done > $TMP2 $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test13: %s/%s put failed\n" $type $order + echo "test13: $type/$order put failed" exit 1 fi for i in `sed 50q $DICT`; do - printf "g\nk%s\n" $i + echo g + echo k$i done > $TMP2 $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test13: %s/%s get failed\n" $type $order + echo "test13: $type/$order get failed" exit 1 fi done @@ -515,18 +587,29 @@ test13() # Try a variety of bucketsizes and fill factors for hashing test20() { - printf\ - "Test 20: hash: bucketsize, fill factor; nelem 25000 cachesize 65536\n" - awk 'BEGIN { - for (i = 1; i <= 10000; ++i) - printf("%.*s\n", i % 34, - "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg"); + echo\ + "Test 20: hash: bucketsize, fill factor; nelem 25000 cachesize 65536" + echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | + awk '{ + for (i = 1; i <= 10000; ++i) { + if (i % 34) + s = substr($0, 1, i % 34); + else + s = substr($0, 1); + printf("%s\n", s); + } + exit; }' > $TMP1 sed 10000q $DICT | - awk '{ - ++i; - printf("p\nk%s\nd%.*s\n", $0, i % 34, - "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg"); + awk 'BEGIN { + ds="abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" + } + { + if (++i % 34) + s = substr(ds, 1, i % 34); + else + s = substr(ds, 1); + printf("p\nk%s\nd%s\n", $0, s); }' > $TMP2 sed 10000q $DICT | awk '{ @@ -535,82 +618,82 @@ test20() }' >> $TMP2 bsize=256 for ffactor in 11 14 21; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done bsize=512 for ffactor in 21 28 43; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done bsize=1024 for ffactor in 43 57 85; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done bsize=2048 for ffactor in 85 114 171; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done bsize=4096 for ffactor in 171 228 341; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done bsize=8192 for ffactor in 341 455 683; do - printf "\tbucketsize %d, fill factor %d\n" $bsize $ffactor + echo " bucketsize $bsize, fill factor $ffactor" $PROG -o$TMP3 \ -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ hash $TMP2 if (cmp -s $TMP1 $TMP3) ; then : else - printf "test20: type hash:\ -bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed\n" + echo "test20: type hash:\ +bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" exit 1 fi done } -main +main $* diff --git a/lib/libc/db/test/strerror.c b/lib/libc/db/test/strerror.c new file mode 100644 index 000000000000..53f374bdf796 --- /dev/null +++ b/lib/libc/db/test/strerror.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93"; +#endif /* LIBC_SCCS and not lint */ + +#include <string.h> + +char * +strerror(num) + int num; +{ + extern int sys_nerr; + extern char *sys_errlist[]; +#define UPREFIX "Unknown error: " + static char ebuf[40] = UPREFIX; /* 64-bit number + slop */ + register unsigned int errnum; + register char *p, *t; + char tmp[40]; + + errnum = num; /* convert to unsigned */ + if (errnum < sys_nerr) + return(sys_errlist[errnum]); + + /* Do this by hand, so we don't include stdio(3). */ + t = tmp; + do { + *t++ = "0123456789"[errnum % 10]; + } while (errnum /= 10); + for (p = ebuf + sizeof(UPREFIX) - 1;;) { + *p++ = *--t; + if (t <= tmp) + break; + } + return(ebuf); +} |
