158f0484fSRodney W. Grimes#!/bin/sh - 258f0484fSRodney W. Grimes 358f0484fSRodney W. Grimes# db regression tests 458f0484fSRodney W. Grimesmain() 558f0484fSRodney W. Grimes{ 658f0484fSRodney W. Grimes 758f0484fSRodney W. Grimes PROG=./dbtest 858f0484fSRodney W. Grimes TMP1=t1 958f0484fSRodney W. Grimes TMP2=t2 1058f0484fSRodney W. Grimes TMP3=t3 1158f0484fSRodney W. Grimes 12ef5d438eSPaul Traina if [ -f /usr/share/dict/words ]; then 13ef5d438eSPaul Traina DICT=/usr/share/dict/words 14ef5d438eSPaul Traina elif [ -f /usr/dict/words ]; then 15ef5d438eSPaul Traina DICT=/usr/dict/words 16ef5d438eSPaul Traina else 17ef5d438eSPaul Traina echo 'run.test: no dictionary' 18ef5d438eSPaul Traina exit 1 19ef5d438eSPaul Traina fi 20ef5d438eSPaul Traina 2158f0484fSRodney W. Grimes if [ $# -eq 0 ]; then 2258f0484fSRodney W. Grimes for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20; do 2358f0484fSRodney W. Grimes test$t 2458f0484fSRodney W. Grimes done 2558f0484fSRodney W. Grimes else 2658f0484fSRodney W. Grimes while [ $# -gt 0 ] 2758f0484fSRodney W. Grimes do case "$1" in 2858f0484fSRodney W. Grimes test*) 2958f0484fSRodney W. Grimes $1;; 3058f0484fSRodney W. Grimes [0-9]*) 3158f0484fSRodney W. Grimes test$1;; 3258f0484fSRodney W. Grimes btree) 3358f0484fSRodney W. Grimes for t in 1 2 3 7 8 9 10 12 13; do 3458f0484fSRodney W. Grimes test$t 3558f0484fSRodney W. Grimes done;; 3658f0484fSRodney W. Grimes hash) 3758f0484fSRodney W. Grimes for t in 1 2 3 8 13 20; do 3858f0484fSRodney W. Grimes test$t 3958f0484fSRodney W. Grimes done;; 4058f0484fSRodney W. Grimes recno) 4158f0484fSRodney W. Grimes for t in 1 2 3 4 5 6 7 10 11; do 4258f0484fSRodney W. Grimes test$t 4358f0484fSRodney W. Grimes done;; 4458f0484fSRodney W. Grimes *) 4558f0484fSRodney W. Grimes echo "run.test: unknown test $1" 4658f0484fSRodney W. Grimes echo "usage: run.test test# | type" 4758f0484fSRodney W. Grimes exit 1 4858f0484fSRodney W. Grimes esac 4958f0484fSRodney W. Grimes shift 5058f0484fSRodney W. Grimes done 5158f0484fSRodney W. Grimes fi 5258f0484fSRodney W. Grimes rm -f $TMP1 $TMP2 $TMP3 5358f0484fSRodney W. Grimes exit 0 5458f0484fSRodney W. Grimes} 5558f0484fSRodney W. Grimes 5658f0484fSRodney W. Grimes# Take the first hundred entries in the dictionary, and make them 5758f0484fSRodney W. Grimes# be key/data pairs. 5858f0484fSRodney W. Grimestest1() 5958f0484fSRodney W. Grimes{ 6058f0484fSRodney W. Grimes echo "Test 1: btree, hash: small key, small data pairs" 6158f0484fSRodney W. Grimes sed 200q $DICT > $TMP1 6258f0484fSRodney W. Grimes for type in btree hash; do 6358f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 6458f0484fSRodney W. Grimes for i in `sed 200q $DICT`; do 6558f0484fSRodney W. Grimes echo p 6658f0484fSRodney W. Grimes echo k$i 6758f0484fSRodney W. Grimes echo d$i 6858f0484fSRodney W. Grimes echo g 6958f0484fSRodney W. Grimes echo k$i 7058f0484fSRodney W. Grimes done > $TMP2 7158f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 7258f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 7358f0484fSRodney W. Grimes else 7458f0484fSRodney W. Grimes echo "test1: type $type: failed" 7558f0484fSRodney W. Grimes exit 1 7658f0484fSRodney W. Grimes fi 7758f0484fSRodney W. Grimes done 7858f0484fSRodney W. Grimes echo "Test 1: recno: small key, small data pairs" 7958f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 8058f0484fSRodney W. Grimes sed 200q $DICT | 8158f0484fSRodney W. Grimes awk '{ 8258f0484fSRodney W. Grimes ++i; 8358f0484fSRodney W. Grimes printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 8458f0484fSRodney W. Grimes }' > $TMP2 8558f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 8658f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 8758f0484fSRodney W. Grimes else 8858f0484fSRodney W. Grimes echo "test1: type recno: failed" 8958f0484fSRodney W. Grimes exit 1 9058f0484fSRodney W. Grimes fi 9158f0484fSRodney W. Grimes} 9258f0484fSRodney W. Grimes 9358f0484fSRodney W. Grimes# Take the first 200 entries in the dictionary, and give them 9458f0484fSRodney W. Grimes# each a medium size data entry. 9558f0484fSRodney W. Grimestest2() 9658f0484fSRodney W. Grimes{ 9758f0484fSRodney W. Grimes echo "Test 2: btree, hash: small key, medium data pairs" 9858f0484fSRodney W. Grimes mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 9958f0484fSRodney W. Grimes echo $mdata | 10058f0484fSRodney W. Grimes awk '{ for (i = 1; i < 201; ++i) print $0 }' > $TMP1 10158f0484fSRodney W. Grimes for type in hash btree; do 10258f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 10358f0484fSRodney W. Grimes for i in `sed 200q $DICT`; do 10458f0484fSRodney W. Grimes echo p 10558f0484fSRodney W. Grimes echo k$i 10658f0484fSRodney W. Grimes echo d$mdata 10758f0484fSRodney W. Grimes echo g 10858f0484fSRodney W. Grimes echo k$i 10958f0484fSRodney W. Grimes done > $TMP2 11058f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 11158f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 11258f0484fSRodney W. Grimes else 11358f0484fSRodney W. Grimes echo "test2: type $type: failed" 11458f0484fSRodney W. Grimes exit 1 11558f0484fSRodney W. Grimes fi 11658f0484fSRodney W. Grimes done 11758f0484fSRodney W. Grimes echo "Test 2: recno: small key, medium data pairs" 11858f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 11958f0484fSRodney W. Grimes echo $mdata | 12058f0484fSRodney W. Grimes awk '{ for (i = 1; i < 201; ++i) 12158f0484fSRodney W. Grimes printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 12258f0484fSRodney W. Grimes }' > $TMP2 12358f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 12458f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 12558f0484fSRodney W. Grimes else 12658f0484fSRodney W. Grimes echo "test2: type recno: failed" 12758f0484fSRodney W. Grimes exit 1 12858f0484fSRodney W. Grimes fi 12958f0484fSRodney W. Grimes} 13058f0484fSRodney W. Grimes 13158f0484fSRodney W. Grimes# Insert the programs in /bin with their paths as their keys. 13258f0484fSRodney W. Grimestest3() 13358f0484fSRodney W. Grimes{ 13458f0484fSRodney W. Grimes echo "Test 3: hash: small key, big data pairs" 13558f0484fSRodney W. Grimes rm -f $TMP1 13658f0484fSRodney W. Grimes (find /bin -type f -print | xargs cat) > $TMP1 13758f0484fSRodney W. Grimes for type in hash; do 13858f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 13958f0484fSRodney W. Grimes for i in `find /bin -type f -print`; do 14058f0484fSRodney W. Grimes echo p 14158f0484fSRodney W. Grimes echo k$i 14258f0484fSRodney W. Grimes echo D$i 14358f0484fSRodney W. Grimes echo g 14458f0484fSRodney W. Grimes echo k$i 14558f0484fSRodney W. Grimes done > $TMP2 14658f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 14758f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 14858f0484fSRodney W. Grimes else 14958f0484fSRodney W. Grimes echo "test3: $type: failed" 15058f0484fSRodney W. Grimes exit 1 15158f0484fSRodney W. Grimes fi 15258f0484fSRodney W. Grimes done 15358f0484fSRodney W. Grimes echo "Test 3: btree: small key, big data pairs" 15458f0484fSRodney W. Grimes for psize in 512 16384 65536; do 15558f0484fSRodney W. Grimes echo " page size $psize" 15658f0484fSRodney W. Grimes for type in btree; do 15758f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 15858f0484fSRodney W. Grimes for i in `find /bin -type f -print`; do 15958f0484fSRodney W. Grimes echo p 16058f0484fSRodney W. Grimes echo k$i 16158f0484fSRodney W. Grimes echo D$i 16258f0484fSRodney W. Grimes echo g 16358f0484fSRodney W. Grimes echo k$i 16458f0484fSRodney W. Grimes done > $TMP2 16558f0484fSRodney W. Grimes $PROG -i psize=$psize -o $TMP3 $type $TMP2 16658f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 16758f0484fSRodney W. Grimes else 16858f0484fSRodney W. Grimes echo "test3: $type: page size $psize: failed" 16958f0484fSRodney W. Grimes exit 1 17058f0484fSRodney W. Grimes fi 17158f0484fSRodney W. Grimes done 17258f0484fSRodney W. Grimes done 17358f0484fSRodney W. Grimes echo "Test 3: recno: big data pairs" 17458f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 17558f0484fSRodney W. Grimes find /bin -type f -print | 17658f0484fSRodney W. Grimes awk '{ 17758f0484fSRodney W. Grimes ++i; 17858f0484fSRodney W. Grimes printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i); 17958f0484fSRodney W. Grimes }' > $TMP2 18058f0484fSRodney W. Grimes for psize in 512 16384 65536; do 18158f0484fSRodney W. Grimes echo " page size $psize" 18258f0484fSRodney W. Grimes $PROG -i psize=$psize -o $TMP3 recno $TMP2 18358f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 18458f0484fSRodney W. Grimes else 18558f0484fSRodney W. Grimes echo "test3: recno: page size $psize: failed" 18658f0484fSRodney W. Grimes exit 1 18758f0484fSRodney W. Grimes fi 18858f0484fSRodney W. Grimes done 18958f0484fSRodney W. Grimes} 19058f0484fSRodney W. Grimes 19158f0484fSRodney W. Grimes# Do random recno entries. 19258f0484fSRodney W. Grimestest4() 19358f0484fSRodney W. Grimes{ 19458f0484fSRodney W. Grimes echo "Test 4: recno: random entries" 19558f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 19658f0484fSRodney W. Grimes awk '{ 19758f0484fSRodney W. Grimes for (i = 37; i <= 37 + 88 * 17; i += 17) { 19858f0484fSRodney W. Grimes if (i % 41) 19958f0484fSRodney W. Grimes s = substr($0, 1, i % 41); 20058f0484fSRodney W. Grimes else 20158f0484fSRodney W. Grimes s = substr($0, 1); 20258f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 20358f0484fSRodney W. Grimes } 20458f0484fSRodney W. Grimes for (i = 1; i <= 15; ++i) { 20558f0484fSRodney W. Grimes if (i % 41) 20658f0484fSRodney W. Grimes s = substr($0, 1, i % 41); 20758f0484fSRodney W. Grimes else 20858f0484fSRodney W. Grimes s = substr($0, 1); 20958f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 21058f0484fSRodney W. Grimes } 21158f0484fSRodney W. Grimes for (i = 19234; i <= 19234 + 61 * 27; i += 27) { 21258f0484fSRodney W. Grimes if (i % 41) 21358f0484fSRodney W. Grimes s = substr($0, 1, i % 41); 21458f0484fSRodney W. Grimes else 21558f0484fSRodney W. Grimes s = substr($0, 1); 21658f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 21758f0484fSRodney W. Grimes } 21858f0484fSRodney W. Grimes exit 21958f0484fSRodney W. Grimes }' > $TMP1 22058f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 22158f0484fSRodney W. Grimes cat $TMP1 | 22258f0484fSRodney W. Grimes awk 'BEGIN { 22358f0484fSRodney W. Grimes i = 37; 22458f0484fSRodney W. Grimes incr = 17; 22558f0484fSRodney W. Grimes } 22658f0484fSRodney W. Grimes { 22758f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", i, $0); 22858f0484fSRodney W. Grimes if (i == 19234 + 61 * 27) 22958f0484fSRodney W. Grimes exit; 23058f0484fSRodney W. Grimes if (i == 37 + 88 * 17) { 23158f0484fSRodney W. Grimes i = 1; 23258f0484fSRodney W. Grimes incr = 1; 23358f0484fSRodney W. Grimes } else if (i == 15) { 23458f0484fSRodney W. Grimes i = 19234; 23558f0484fSRodney W. Grimes incr = 27; 23658f0484fSRodney W. Grimes } else 23758f0484fSRodney W. Grimes i += incr; 23858f0484fSRodney W. Grimes } 23958f0484fSRodney W. Grimes END { 24058f0484fSRodney W. Grimes for (i = 37; i <= 37 + 88 * 17; i += 17) 24158f0484fSRodney W. Grimes printf("g\nk%d\n", i); 24258f0484fSRodney W. Grimes for (i = 1; i <= 15; ++i) 24358f0484fSRodney W. Grimes printf("g\nk%d\n", i); 24458f0484fSRodney W. Grimes for (i = 19234; i <= 19234 + 61 * 27; i += 27) 24558f0484fSRodney W. Grimes printf("g\nk%d\n", i); 24658f0484fSRodney W. Grimes }' > $TMP2 24758f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 24858f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 24958f0484fSRodney W. Grimes else 25058f0484fSRodney W. Grimes echo "test4: type recno: failed" 25158f0484fSRodney W. Grimes exit 1 25258f0484fSRodney W. Grimes fi 25358f0484fSRodney W. Grimes} 25458f0484fSRodney W. Grimes 25558f0484fSRodney W. Grimes# Do reverse order recno entries. 25658f0484fSRodney W. Grimestest5() 25758f0484fSRodney W. Grimes{ 25858f0484fSRodney W. Grimes echo "Test 5: recno: reverse order entries" 25958f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 26058f0484fSRodney W. Grimes awk ' { 26158f0484fSRodney W. Grimes for (i = 1500; i; --i) { 26258f0484fSRodney W. Grimes if (i % 34) 26358f0484fSRodney W. Grimes s = substr($0, 1, i % 34); 26458f0484fSRodney W. Grimes else 26558f0484fSRodney W. Grimes s = substr($0, 1); 26658f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 26758f0484fSRodney W. Grimes } 26858f0484fSRodney W. Grimes exit; 26958f0484fSRodney W. Grimes }' > $TMP1 27058f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 27158f0484fSRodney W. Grimes cat $TMP1 | 27258f0484fSRodney W. Grimes awk 'BEGIN { 27358f0484fSRodney W. Grimes i = 1500; 27458f0484fSRodney W. Grimes } 27558f0484fSRodney W. Grimes { 27658f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", i, $0); 27758f0484fSRodney W. Grimes --i; 27858f0484fSRodney W. Grimes } 27958f0484fSRodney W. Grimes END { 28058f0484fSRodney W. Grimes for (i = 1500; i; --i) 28158f0484fSRodney W. Grimes printf("g\nk%d\n", i); 28258f0484fSRodney W. Grimes }' > $TMP2 28358f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 28458f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 28558f0484fSRodney W. Grimes else 28658f0484fSRodney W. Grimes echo "test5: type recno: failed" 28758f0484fSRodney W. Grimes exit 1 28858f0484fSRodney W. Grimes fi 28958f0484fSRodney W. Grimes} 29058f0484fSRodney W. Grimes 29158f0484fSRodney W. Grimes# Do alternating order recno entries. 29258f0484fSRodney W. Grimestest6() 29358f0484fSRodney W. Grimes{ 29458f0484fSRodney W. Grimes echo "Test 6: recno: alternating order entries" 29558f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 29658f0484fSRodney W. Grimes awk ' { 29758f0484fSRodney W. Grimes for (i = 1; i < 1200; i += 2) { 29858f0484fSRodney W. Grimes if (i % 34) 29958f0484fSRodney W. Grimes s = substr($0, 1, i % 34); 30058f0484fSRodney W. Grimes else 30158f0484fSRodney W. Grimes s = substr($0, 1); 30258f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 30358f0484fSRodney W. Grimes } 30458f0484fSRodney W. Grimes for (i = 2; i < 1200; i += 2) { 30558f0484fSRodney W. Grimes if (i % 34) 30658f0484fSRodney W. Grimes s = substr($0, 1, i % 34); 30758f0484fSRodney W. Grimes else 30858f0484fSRodney W. Grimes s = substr($0, 1); 30958f0484fSRodney W. Grimes printf("input key %d: %s\n", i, s); 31058f0484fSRodney W. Grimes } 31158f0484fSRodney W. Grimes exit; 31258f0484fSRodney W. Grimes }' > $TMP1 31358f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 31458f0484fSRodney W. Grimes cat $TMP1 | 31558f0484fSRodney W. Grimes awk 'BEGIN { 31658f0484fSRodney W. Grimes i = 1; 31758f0484fSRodney W. Grimes even = 0; 31858f0484fSRodney W. Grimes } 31958f0484fSRodney W. Grimes { 32058f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", i, $0); 32158f0484fSRodney W. Grimes i += 2; 32258f0484fSRodney W. Grimes if (i >= 1200) { 32358f0484fSRodney W. Grimes if (even == 1) 32458f0484fSRodney W. Grimes exit; 32558f0484fSRodney W. Grimes even = 1; 32658f0484fSRodney W. Grimes i = 2; 32758f0484fSRodney W. Grimes } 32858f0484fSRodney W. Grimes } 32958f0484fSRodney W. Grimes END { 33058f0484fSRodney W. Grimes for (i = 1; i < 1200; ++i) 33158f0484fSRodney W. Grimes printf("g\nk%d\n", i); 33258f0484fSRodney W. Grimes }' > $TMP2 33358f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 33458f0484fSRodney W. Grimes sort -o $TMP1 $TMP1 33558f0484fSRodney W. Grimes sort -o $TMP3 $TMP3 33658f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 33758f0484fSRodney W. Grimes else 33858f0484fSRodney W. Grimes echo "test6: type recno: failed" 33958f0484fSRodney W. Grimes exit 1 34058f0484fSRodney W. Grimes fi 34158f0484fSRodney W. Grimes} 34258f0484fSRodney W. Grimes 34358f0484fSRodney W. Grimes# Delete cursor record 34458f0484fSRodney W. Grimestest7() 34558f0484fSRodney W. Grimes{ 34658f0484fSRodney W. Grimes echo "Test 7: btree, recno: delete cursor record" 34758f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 34858f0484fSRodney W. Grimes awk '{ 34958f0484fSRodney W. Grimes for (i = 1; i <= 120; ++i) 35058f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", i, i, $0); 35158f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", 120, 120, $0); 352ef5d438eSPaul Traina printf("seq failed, no such key\n"); 35358f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", 1, 1, $0); 35458f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", 2, 2, $0); 35558f0484fSRodney W. Grimes exit; 35658f0484fSRodney W. Grimes }' > $TMP1 35758f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 35858f0484fSRodney W. Grimes 35958f0484fSRodney W. Grimes for type in btree recno; do 36058f0484fSRodney W. Grimes cat $TMP1 | 36158f0484fSRodney W. Grimes awk '{ 36258f0484fSRodney W. Grimes if (i == 120) 36358f0484fSRodney W. Grimes exit; 36458f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", ++i, $0); 36558f0484fSRodney W. Grimes } 36658f0484fSRodney W. Grimes END { 36758f0484fSRodney W. Grimes printf("fR_NEXT\n"); 36858f0484fSRodney W. Grimes for (i = 1; i <= 120; ++i) 36958f0484fSRodney W. Grimes printf("s\n"); 37058f0484fSRodney W. Grimes printf("fR_CURSOR\ns\nk120\n"); 371ef5d438eSPaul Traina printf("r\n"); 37258f0484fSRodney W. Grimes printf("fR_NEXT\ns\n"); 37358f0484fSRodney W. Grimes printf("fR_CURSOR\ns\nk1\n"); 374ef5d438eSPaul Traina printf("r\n"); 37558f0484fSRodney W. Grimes printf("fR_FIRST\ns\n"); 37658f0484fSRodney W. Grimes }' > $TMP2 37758f0484fSRodney W. Grimes $PROG -o $TMP3 recno $TMP2 37858f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 37958f0484fSRodney W. Grimes else 38058f0484fSRodney W. Grimes echo "test7: type $type: failed" 38158f0484fSRodney W. Grimes exit 1 38258f0484fSRodney W. Grimes fi 38358f0484fSRodney W. Grimes done 38458f0484fSRodney W. Grimes} 38558f0484fSRodney W. Grimes 38658f0484fSRodney W. Grimes# Make sure that overflow pages are reused. 38758f0484fSRodney W. Grimestest8() 38858f0484fSRodney W. Grimes{ 38958f0484fSRodney W. Grimes echo "Test 8: btree, hash: repeated small key, big data pairs" 39058f0484fSRodney W. Grimes rm -f $TMP1 39158f0484fSRodney W. Grimes echo "" | 39258f0484fSRodney W. Grimes awk 'BEGIN { 39358f0484fSRodney W. Grimes for (i = 1; i <= 10; ++i) { 39458f0484fSRodney W. Grimes printf("p\nkkey1\nD/bin/sh\n"); 39558f0484fSRodney W. Grimes printf("p\nkkey2\nD/bin/csh\n"); 39658f0484fSRodney W. Grimes if (i % 8 == 0) { 39758f0484fSRodney W. Grimes printf("c\nkkey2\nD/bin/csh\n"); 39858f0484fSRodney W. Grimes printf("c\nkkey1\nD/bin/sh\n"); 399ef5d438eSPaul Traina printf("e\t%d of 10 (comparison)\n", i); 40058f0484fSRodney W. Grimes } else 401ef5d438eSPaul Traina printf("e\t%d of 10 \n", i); 40258f0484fSRodney W. Grimes printf("r\nkkey1\nr\nkkey2\n"); 40358f0484fSRodney W. Grimes } 40458f0484fSRodney W. Grimes }' > $TMP1 40558f0484fSRodney W. Grimes $PROG btree $TMP1 40658f0484fSRodney W. Grimes# $PROG hash $TMP1 40758f0484fSRodney W. Grimes # No explicit test for success. 40858f0484fSRodney W. Grimes} 40958f0484fSRodney W. Grimes 41058f0484fSRodney W. Grimes# Test btree duplicate keys 41158f0484fSRodney W. Grimestest9() 41258f0484fSRodney W. Grimes{ 41358f0484fSRodney W. Grimes echo "Test 9: btree: duplicate keys" 41458f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 41558f0484fSRodney W. Grimes awk '{ 41658f0484fSRodney W. Grimes for (i = 1; i <= 543; ++i) 41758f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", i, i, $0); 41858f0484fSRodney W. Grimes exit; 41958f0484fSRodney W. Grimes }' > $TMP1 42058f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 42158f0484fSRodney W. Grimes 42258f0484fSRodney W. Grimes for type in btree; do 42358f0484fSRodney W. Grimes cat $TMP1 | 42458f0484fSRodney W. Grimes awk '{ 42558f0484fSRodney W. Grimes if (i++ % 2) 42658f0484fSRodney W. Grimes printf("p\nkduplicatekey\nd%s\n", $0); 42758f0484fSRodney W. Grimes else 42858f0484fSRodney W. Grimes printf("p\nkunique%dkey\nd%s\n", i, $0); 42958f0484fSRodney W. Grimes } 43058f0484fSRodney W. Grimes END { 43158f0484fSRodney W. Grimes printf("o\n"); 43258f0484fSRodney W. Grimes }' > $TMP2 43358f0484fSRodney W. Grimes $PROG -iflags=1 -o $TMP3 $type $TMP2 43458f0484fSRodney W. Grimes sort -o $TMP3 $TMP3 43558f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 43658f0484fSRodney W. Grimes else 43758f0484fSRodney W. Grimes echo "test9: type $type: failed" 43858f0484fSRodney W. Grimes exit 1 43958f0484fSRodney W. Grimes fi 44058f0484fSRodney W. Grimes done 44158f0484fSRodney W. Grimes} 44258f0484fSRodney W. Grimes 44358f0484fSRodney W. Grimes# Test use of cursor flags without initialization 44458f0484fSRodney W. Grimestest10() 44558f0484fSRodney W. Grimes{ 44658f0484fSRodney W. Grimes echo "Test 10: btree, recno: test cursor flag use" 44758f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 44858f0484fSRodney W. Grimes awk '{ 44958f0484fSRodney W. Grimes for (i = 1; i <= 20; ++i) 45058f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", i, i, $0); 45158f0484fSRodney W. Grimes exit; 45258f0484fSRodney W. Grimes }' > $TMP1 45358f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 45458f0484fSRodney W. Grimes 45558f0484fSRodney W. Grimes # Test that R_CURSOR doesn't succeed before cursor initialized 45658f0484fSRodney W. Grimes for type in btree recno; do 45758f0484fSRodney W. Grimes cat $TMP1 | 45858f0484fSRodney W. Grimes awk '{ 45958f0484fSRodney W. Grimes if (i == 10) 46058f0484fSRodney W. Grimes exit; 46158f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", ++i, $0); 46258f0484fSRodney W. Grimes } 46358f0484fSRodney W. Grimes END { 464ef5d438eSPaul Traina printf("fR_CURSOR\nr\n"); 46558f0484fSRodney W. Grimes printf("eR_CURSOR SHOULD HAVE FAILED\n"); 46658f0484fSRodney W. Grimes }' > $TMP2 46758f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 46858f0484fSRodney W. Grimes if [ -s $TMP3 ] ; then 46958f0484fSRodney W. Grimes echo "Test 10: delete: R_CURSOR SHOULD HAVE FAILED" 47058f0484fSRodney W. Grimes exit 1 47158f0484fSRodney W. Grimes fi 47258f0484fSRodney W. Grimes done 47358f0484fSRodney W. Grimes for type in btree recno; do 47458f0484fSRodney W. Grimes cat $TMP1 | 47558f0484fSRodney W. Grimes awk '{ 47658f0484fSRodney W. Grimes if (i == 10) 47758f0484fSRodney W. Grimes exit; 47858f0484fSRodney W. Grimes printf("p\nk%d\nd%s\n", ++i, $0); 47958f0484fSRodney W. Grimes } 48058f0484fSRodney W. Grimes END { 48158f0484fSRodney W. Grimes printf("fR_CURSOR\np\nk1\ndsome data\n"); 48258f0484fSRodney W. Grimes printf("eR_CURSOR SHOULD HAVE FAILED\n"); 48358f0484fSRodney W. Grimes }' > $TMP2 48458f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 48558f0484fSRodney W. Grimes if [ -s $TMP3 ] ; then 48658f0484fSRodney W. Grimes echo "Test 10: put: R_CURSOR SHOULD HAVE FAILED" 48758f0484fSRodney W. Grimes exit 1 48858f0484fSRodney W. Grimes fi 48958f0484fSRodney W. Grimes done 49058f0484fSRodney W. Grimes} 49158f0484fSRodney W. Grimes 49258f0484fSRodney W. Grimes# Test insert in reverse order. 49358f0484fSRodney W. Grimestest11() 49458f0484fSRodney W. Grimes{ 49558f0484fSRodney W. Grimes echo "Test 11: recno: reverse order insert" 49658f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 49758f0484fSRodney W. Grimes awk '{ 49858f0484fSRodney W. Grimes for (i = 1; i <= 779; ++i) 49958f0484fSRodney W. Grimes printf("%05d: input key %d: %s\n", i, i, $0); 50058f0484fSRodney W. Grimes exit; 50158f0484fSRodney W. Grimes }' > $TMP1 50258f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 50358f0484fSRodney W. Grimes 50458f0484fSRodney W. Grimes for type in recno; do 50558f0484fSRodney W. Grimes cat $TMP1 | 50658f0484fSRodney W. Grimes awk '{ 50758f0484fSRodney W. Grimes if (i == 0) { 50858f0484fSRodney W. Grimes i = 1; 50958f0484fSRodney W. Grimes printf("p\nk1\nd%s\n", $0); 51058f0484fSRodney W. Grimes printf("%s\n", "fR_IBEFORE"); 51158f0484fSRodney W. Grimes } else 51258f0484fSRodney W. Grimes printf("p\nk1\nd%s\n", $0); 51358f0484fSRodney W. Grimes } 51458f0484fSRodney W. Grimes END { 51558f0484fSRodney W. Grimes printf("or\n"); 51658f0484fSRodney W. Grimes }' > $TMP2 51758f0484fSRodney W. Grimes $PROG -o $TMP3 $type $TMP2 51858f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 51958f0484fSRodney W. Grimes else 52058f0484fSRodney W. Grimes echo "test11: type $type: failed" 52158f0484fSRodney W. Grimes exit 1 52258f0484fSRodney W. Grimes fi 52358f0484fSRodney W. Grimes done 52458f0484fSRodney W. Grimes} 52558f0484fSRodney W. Grimes 52658f0484fSRodney W. Grimes# Take the first 20000 entries in the dictionary, reverse them, and give 52758f0484fSRodney W. Grimes# them each a small size data entry. Use a small page size to make sure 52858f0484fSRodney W. Grimes# the btree split code gets hammered. 52958f0484fSRodney W. Grimestest12() 53058f0484fSRodney W. Grimes{ 53158f0484fSRodney W. Grimes echo "Test 12: btree: lots of keys, small page size" 53258f0484fSRodney W. Grimes mdata=abcdefghijklmnopqrstuvwxy 53358f0484fSRodney W. Grimes echo $mdata | 53458f0484fSRodney W. Grimes awk '{ for (i = 1; i < 20001; ++i) print $0 }' > $TMP1 53558f0484fSRodney W. Grimes for type in btree; do 53658f0484fSRodney W. Grimes rm -f $TMP2 $TMP3 53758f0484fSRodney W. Grimes for i in `sed 20000q $DICT | rev`; do 53858f0484fSRodney W. Grimes echo p 53958f0484fSRodney W. Grimes echo k$i 54058f0484fSRodney W. Grimes echo d$mdata 54158f0484fSRodney W. Grimes echo g 54258f0484fSRodney W. Grimes echo k$i 54358f0484fSRodney W. Grimes done > $TMP2 54458f0484fSRodney W. Grimes $PROG -i psize=512 -o $TMP3 $type $TMP2 54558f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 54658f0484fSRodney W. Grimes else 54758f0484fSRodney W. Grimes echo "test12: type $type: failed" 54858f0484fSRodney W. Grimes exit 1 54958f0484fSRodney W. Grimes fi 55058f0484fSRodney W. Grimes done 55158f0484fSRodney W. Grimes} 55258f0484fSRodney W. Grimes 55358f0484fSRodney W. Grimes# Test different byte orders. 55458f0484fSRodney W. Grimestest13() 55558f0484fSRodney W. Grimes{ 55658f0484fSRodney W. Grimes echo "Test 13: btree, hash: differing byte orders" 55758f0484fSRodney W. Grimes sed 50q $DICT > $TMP1 55858f0484fSRodney W. Grimes for order in 1234 4321; do 55958f0484fSRodney W. Grimes for type in btree hash; do 56058f0484fSRodney W. Grimes rm -f byte.file $TMP2 $TMP3 56158f0484fSRodney W. Grimes for i in `sed 50q $DICT`; do 56258f0484fSRodney W. Grimes echo p 56358f0484fSRodney W. Grimes echo k$i 56458f0484fSRodney W. Grimes echo d$i 56558f0484fSRodney W. Grimes echo g 56658f0484fSRodney W. Grimes echo k$i 56758f0484fSRodney W. Grimes done > $TMP2 56858f0484fSRodney W. Grimes $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 56958f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 57058f0484fSRodney W. Grimes else 57158f0484fSRodney W. Grimes echo "test13: $type/$order put failed" 57258f0484fSRodney W. Grimes exit 1 57358f0484fSRodney W. Grimes fi 57458f0484fSRodney W. Grimes for i in `sed 50q $DICT`; do 57558f0484fSRodney W. Grimes echo g 57658f0484fSRodney W. Grimes echo k$i 57758f0484fSRodney W. Grimes done > $TMP2 578ef5d438eSPaul Traina $PROG -s \ 579ef5d438eSPaul Traina -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 58058f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 58158f0484fSRodney W. Grimes else 58258f0484fSRodney W. Grimes echo "test13: $type/$order get failed" 58358f0484fSRodney W. Grimes exit 1 58458f0484fSRodney W. Grimes fi 58558f0484fSRodney W. Grimes done 58658f0484fSRodney W. Grimes done 58758f0484fSRodney W. Grimes rm -f byte.file 58858f0484fSRodney W. Grimes} 58958f0484fSRodney W. Grimes 59058f0484fSRodney W. Grimes# Try a variety of bucketsizes and fill factors for hashing 59158f0484fSRodney W. Grimestest20() 59258f0484fSRodney W. Grimes{ 59358f0484fSRodney W. Grimes echo\ 59458f0484fSRodney W. Grimes "Test 20: hash: bucketsize, fill factor; nelem 25000 cachesize 65536" 59558f0484fSRodney W. Grimes echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 59658f0484fSRodney W. Grimes awk '{ 59758f0484fSRodney W. Grimes for (i = 1; i <= 10000; ++i) { 59858f0484fSRodney W. Grimes if (i % 34) 59958f0484fSRodney W. Grimes s = substr($0, 1, i % 34); 60058f0484fSRodney W. Grimes else 60158f0484fSRodney W. Grimes s = substr($0, 1); 60258f0484fSRodney W. Grimes printf("%s\n", s); 60358f0484fSRodney W. Grimes } 60458f0484fSRodney W. Grimes exit; 60558f0484fSRodney W. Grimes }' > $TMP1 60658f0484fSRodney W. Grimes sed 10000q $DICT | 60758f0484fSRodney W. Grimes awk 'BEGIN { 60858f0484fSRodney W. Grimes ds="abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" 60958f0484fSRodney W. Grimes } 61058f0484fSRodney W. Grimes { 61158f0484fSRodney W. Grimes if (++i % 34) 61258f0484fSRodney W. Grimes s = substr(ds, 1, i % 34); 61358f0484fSRodney W. Grimes else 61458f0484fSRodney W. Grimes s = substr(ds, 1); 61558f0484fSRodney W. Grimes printf("p\nk%s\nd%s\n", $0, s); 61658f0484fSRodney W. Grimes }' > $TMP2 61758f0484fSRodney W. Grimes sed 10000q $DICT | 61858f0484fSRodney W. Grimes awk '{ 61958f0484fSRodney W. Grimes ++i; 62058f0484fSRodney W. Grimes printf("g\nk%s\n", $0); 62158f0484fSRodney W. Grimes }' >> $TMP2 62258f0484fSRodney W. Grimes bsize=256 62358f0484fSRodney W. Grimes for ffactor in 11 14 21; do 62458f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 62558f0484fSRodney W. Grimes $PROG -o$TMP3 \ 62658f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 62758f0484fSRodney W. Grimes hash $TMP2 62858f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 62958f0484fSRodney W. Grimes else 63058f0484fSRodney W. Grimes echo "test20: type hash:\ 63158f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 63258f0484fSRodney W. Grimes exit 1 63358f0484fSRodney W. Grimes fi 63458f0484fSRodney W. Grimes done 63558f0484fSRodney W. Grimes bsize=512 63658f0484fSRodney W. Grimes for ffactor in 21 28 43; do 63758f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 63858f0484fSRodney W. Grimes $PROG -o$TMP3 \ 63958f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 64058f0484fSRodney W. Grimes hash $TMP2 64158f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 64258f0484fSRodney W. Grimes else 64358f0484fSRodney W. Grimes echo "test20: type hash:\ 64458f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 64558f0484fSRodney W. Grimes exit 1 64658f0484fSRodney W. Grimes fi 64758f0484fSRodney W. Grimes done 64858f0484fSRodney W. Grimes bsize=1024 64958f0484fSRodney W. Grimes for ffactor in 43 57 85; do 65058f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 65158f0484fSRodney W. Grimes $PROG -o$TMP3 \ 65258f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 65358f0484fSRodney W. Grimes hash $TMP2 65458f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 65558f0484fSRodney W. Grimes else 65658f0484fSRodney W. Grimes echo "test20: type hash:\ 65758f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 65858f0484fSRodney W. Grimes exit 1 65958f0484fSRodney W. Grimes fi 66058f0484fSRodney W. Grimes done 66158f0484fSRodney W. Grimes bsize=2048 66258f0484fSRodney W. Grimes for ffactor in 85 114 171; do 66358f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 66458f0484fSRodney W. Grimes $PROG -o$TMP3 \ 66558f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 66658f0484fSRodney W. Grimes hash $TMP2 66758f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 66858f0484fSRodney W. Grimes else 66958f0484fSRodney W. Grimes echo "test20: type hash:\ 67058f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 67158f0484fSRodney W. Grimes exit 1 67258f0484fSRodney W. Grimes fi 67358f0484fSRodney W. Grimes done 67458f0484fSRodney W. Grimes bsize=4096 67558f0484fSRodney W. Grimes for ffactor in 171 228 341; do 67658f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 67758f0484fSRodney W. Grimes $PROG -o$TMP3 \ 67858f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 67958f0484fSRodney W. Grimes hash $TMP2 68058f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 68158f0484fSRodney W. Grimes else 68258f0484fSRodney W. Grimes echo "test20: type hash:\ 68358f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 68458f0484fSRodney W. Grimes exit 1 68558f0484fSRodney W. Grimes fi 68658f0484fSRodney W. Grimes done 68758f0484fSRodney W. Grimes bsize=8192 68858f0484fSRodney W. Grimes for ffactor in 341 455 683; do 68958f0484fSRodney W. Grimes echo " bucketsize $bsize, fill factor $ffactor" 69058f0484fSRodney W. Grimes $PROG -o$TMP3 \ 69158f0484fSRodney W. Grimes -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 69258f0484fSRodney W. Grimes hash $TMP2 69358f0484fSRodney W. Grimes if (cmp -s $TMP1 $TMP3) ; then : 69458f0484fSRodney W. Grimes else 69558f0484fSRodney W. Grimes echo "test20: type hash:\ 69658f0484fSRodney W. Grimesbsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 69758f0484fSRodney W. Grimes exit 1 69858f0484fSRodney W. Grimes fi 69958f0484fSRodney W. Grimes done 70058f0484fSRodney W. Grimes} 70158f0484fSRodney W. Grimes 70258f0484fSRodney W. Grimesmain $* 703