1#!/bin/sh - 2# 3# Copyright (c) 1992 The Regents of the University of California. 4# All rights reserved. 5# 6# %sccs.include.redist.sh% 7# 8# @(#)run.test 5.2 (Berkeley) 08/26/92 9# 10 11# db regression tests 12 13main() 14{ 15 DICT=/usr/share/dict/words 16 TMP1=t1 17 TMP2=t2 18 TMP3=t3 19 20 test1 21 test2 22 test3 23 test4 24 test5 25 test6 26 rm -f $TMP1 $TMP2 $TMP3 27} 28 29# Take the first hundred entries in the dictionary, and make them 30# be key/data pairs. 31test1() 32{ 33 printf "Test 1: btree, hash: small key, small data pairs\n" 34 for i in `sed 200q $DICT`; do 35 printf "%s\n" $i 36 done > $TMP1 37 for type in btree hash; do 38 rm -f $TMP2 $TMP3 39 for i in `sed 200q $DICT`; do 40 printf "p\nk%s\nd%s\ng\nk%s\n" $i $i $i 41 done > $TMP2 42 ./dbtest -o $TMP3 $type $TMP2 43 if (cmp -s $TMP1 $TMP3) ; then 44 else 45 printf "test1: type %s: failed\n" $type 46 exit 1 47 fi 48 done 49 printf "Test 1: recno: small key, small data pairs\n" 50 rm -f $TMP2 $TMP3 51 sed 200q $DICT | 52 awk '{ 53 ++i; 54 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 55 }' > $TMP2 56 ./dbtest -o $TMP3 recno $TMP2 57 if (cmp -s $TMP1 $TMP3) ; then 58 else 59 printf "test1: type recno: failed\n" 60 exit 1 61 fi 62} 63 64# Take the first hundred entries in the dictionary, and give them 65# each a medium size data entry. 66test2() 67{ 68 printf "Test 2: btree, hash: small key, medium data pairs\n" 69 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 70 echo $mdata | 71 awk '{ for (i = 1; i < 201; ++i) print $0 }' > $TMP1 72 for type in hash btree; do 73 rm -f $TMP2 $TMP3 74 for i in `sed 200q $DICT`; do 75 printf "p\nk%s\nd%s\ng\nk%s\n" $i $mdata $i 76 done > $TMP2 77 ./dbtest -o $TMP3 $type $TMP2 78 if (cmp -s $TMP1 $TMP3) ; then 79 else 80 printf "test2: type %s: failed\n" $type 81 exit 1 82 fi 83 done 84 printf "Test 2: recno: small key, medium data pairs\n" 85 rm -f $TMP2 $TMP3 86 echo $mdata | 87 awk '{ for (i = 1; i < 201; ++i) 88 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 89 }' > $TMP2 90 ./dbtest -o $TMP3 recno $TMP2 91 if (cmp -s $TMP1 $TMP3) ; then 92 else 93 printf "test2: type recno: failed\n" 94 exit 1 95 fi 96} 97 98# Insert the programs in /bin with their paths as their keys. 99test3() 100{ 101 printf "Test 3: btree, hash: small key, big data pairs\n" 102 rm -f $TMP1 103 (find /bin -type f -print | xargs cat) > $TMP1 104 for type in hash btree; do 105 rm -f $TMP2 $TMP3 106 for i in `find /bin -type f -print`; do 107 printf "p\nk%s\nD%s\ng\nk%s\n" $i $i $i 108 done > $TMP2 109 ./dbtest -o $TMP3 $type $TMP2 110 if (cmp -s $TMP1 $TMP3) ; then 111 else 112 printf "test2: type %s: failed\n" $type 113 exit 1 114 fi 115 done 116 printf "Test 3: recno: big data pairs\n" 117 rm -f $TMP2 $TMP3 118 find /bin -type f -print | 119 awk '{ 120 ++i; 121 printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i); 122 }' > $TMP2 123 ./dbtest -o $TMP3 recno $TMP2 124 if (cmp -s $TMP1 $TMP3) ; then 125 else 126 printf "test3: type recno: failed\n" 127 exit 1 128 fi 129} 130 131# Do random recno entries. 132test4() 133{ 134 printf "Test 4: recno: random entries\n" 135 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 136 awk '{ 137 for (i = 37; i <= 37 + 88 * 17; i += 17) 138 printf("input key %d: %.*s\n", i, i % 41, $0); 139 for (i = 1; i <= 15; ++i) 140 printf("input key %d: %.*s\n", i, i % 41, $0); 141 for (i = 19234; i <= 19234 + 61 * 27; i += 27) 142 printf("input key %d: %.*s\n", i, i % 41, $0); 143 exit 144 }' > $TMP1 145 rm -f TMP2 $TMP3 146 cat $TMP1 | awk 'BEGIN { 147 i = 37; 148 incr = 17; 149 } 150 { 151 printf("p\nk%d\nd%s\n", i, $0); 152 if (i == 19234 + 61 * 27) 153 exit; 154 if (i == 37 + 88 * 17) { 155 i = 1; 156 incr = 1; 157 } else if (i == 15) { 158 i = 19234; 159 incr = 27; 160 } else 161 i += incr; 162 } 163 END { 164 for (i = 37; i <= 37 + 88 * 17; i += 17) 165 printf("g\nk%d\n", i); 166 for (i = 1; i <= 15; ++i) 167 printf("g\nk%d\n", i); 168 for (i = 19234; i <= 19234 + 61 * 27; i += 27) 169 printf("g\nk%d\n", i); 170 }' > $TMP2 171 ./dbtest -o $TMP3 recno $TMP2 172 if (cmp -s $TMP1 $TMP3) ; then 173 else 174 printf "test4: type recno: failed\n" 175 exit 1 176 fi 177} 178 179# Do reverse order recno entries. 180test5() 181{ 182 printf "Test 5: recno: reverse order entries\n" 183 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 184 awk ' { 185 for (i = 1500; i; --i) 186 printf("input key %d: %.*s\n", i, i % 34, $0); 187 exit; 188 }' > $TMP1 189 rm -f TMP2 $TMP3 190 cat $TMP1 | awk 'BEGIN { 191 i = 1500; 192 } 193 { 194 printf("p\nk%d\nd%s\n", i, $0); 195 --i; 196 } 197 END { 198 for (i = 1500; i; --i) 199 printf("g\nk%d\n", i); 200 }' > $TMP2 201 ./dbtest -o $TMP3 recno $TMP2 202 if (cmp -s $TMP1 $TMP3) ; then 203 else 204 printf "test5: type recno: failed\n" 205 exit 1 206 fi 207} 208 209# Do alternating order recno entries. 210test6() 211{ 212 printf "Test 6: recno: alternating order entries\n" 213 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 214 awk ' { 215 for (i = 1; i < 1200; i += 2) 216 printf("input key %d: %.*s\n", i, i % 34, $0); 217 for (i = 2; i < 1200; i += 2) 218 printf("input key %d: %.*s\n", i, i % 34, $0); 219 exit; 220 }' > $TMP1 221 rm -f TMP2 $TMP3 222 cat $TMP1 | awk 'BEGIN { 223 i = 1; 224 even = 0; 225 } 226 { 227 printf("p\nk%d\nd%s\n", i, $0); 228 i += 2; 229 if (i >= 1200) { 230 if (even == 1) 231 exit; 232 even = 1; 233 i = 2; 234 } 235 } 236 END { 237 for (i = 1; i < 1200; ++i) 238 printf("g\nk%d\n", i); 239 }' > $TMP2 240 ./dbtest -o $TMP3 recno $TMP2 241 sort -o $TMP1 $TMP1 242 sort -o $TMP3 $TMP3 243 if (cmp -s $TMP1 $TMP3) ; then 244 else 245 printf "test6: type recno: failed\n" 246 exit 1 247 fi 248} 249 250main 251