1#!/bin/sh - 2#
| 1#!/bin/sh - 2#
|
3# @(#)run.test 8.7 (Berkeley) 9/16/93
| 3# @(#)run.test 8.10 (Berkeley) 7/26/94
|
4# 5 6# db regression tests 7main() 8{ 9
| 4# 5 6# db regression tests 7main() 8{ 9
|
10DICT=/usr/share/dict/words 11#DICT=/usr/dict/words 12PROG=./dbtest 13TMP1=t1 14TMP2=t2 15TMP3=t3
| 10 PROG=./dbtest 11 TMP1=t1 12 TMP2=t2 13 TMP3=t3
|
16
| 14
|
| 15 if [ -f /usr/share/dict/words ]; then 16 DICT=/usr/share/dict/words 17 elif [ -f /usr/dict/words ]; then 18 DICT=/usr/dict/words 19 else 20 echo 'run.test: no dictionary' 21 exit 1 22 fi 23
|
17 if [ $# -eq 0 ]; then 18 for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20; do 19 test$t 20 done 21 else 22 while [ $# -gt 0 ] 23 do case "$1" in 24 test*) 25 $1;; 26 [0-9]*) 27 test$1;; 28 btree) 29 for t in 1 2 3 7 8 9 10 12 13; do 30 test$t 31 done;; 32 hash) 33 for t in 1 2 3 8 13 20; do 34 test$t 35 done;; 36 recno) 37 for t in 1 2 3 4 5 6 7 10 11; do 38 test$t 39 done;; 40 *) 41 echo "run.test: unknown test $1" 42 echo "usage: run.test test# | type" 43 exit 1 44 esac 45 shift 46 done 47 fi 48 rm -f $TMP1 $TMP2 $TMP3 49 exit 0 50} 51 52# Take the first hundred entries in the dictionary, and make them 53# be key/data pairs. 54test1() 55{ 56 echo "Test 1: btree, hash: small key, small data pairs" 57 sed 200q $DICT > $TMP1 58 for type in btree hash; do 59 rm -f $TMP2 $TMP3 60 for i in `sed 200q $DICT`; do 61 echo p 62 echo k$i 63 echo d$i 64 echo g 65 echo k$i 66 done > $TMP2 67 $PROG -o $TMP3 $type $TMP2 68 if (cmp -s $TMP1 $TMP3) ; then : 69 else 70 echo "test1: type $type: failed" 71 exit 1 72 fi 73 done 74 echo "Test 1: recno: small key, small data pairs" 75 rm -f $TMP2 $TMP3 76 sed 200q $DICT | 77 awk '{ 78 ++i; 79 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 80 }' > $TMP2 81 $PROG -o $TMP3 recno $TMP2 82 if (cmp -s $TMP1 $TMP3) ; then : 83 else 84 echo "test1: type recno: failed" 85 exit 1 86 fi 87} 88 89# Take the first 200 entries in the dictionary, and give them 90# each a medium size data entry. 91test2() 92{ 93 echo "Test 2: btree, hash: small key, medium data pairs" 94 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 95 echo $mdata | 96 awk '{ for (i = 1; i < 201; ++i) print $0 }' > $TMP1 97 for type in hash btree; do 98 rm -f $TMP2 $TMP3 99 for i in `sed 200q $DICT`; do 100 echo p 101 echo k$i 102 echo d$mdata 103 echo g 104 echo k$i 105 done > $TMP2 106 $PROG -o $TMP3 $type $TMP2 107 if (cmp -s $TMP1 $TMP3) ; then : 108 else 109 echo "test2: type $type: failed" 110 exit 1 111 fi 112 done 113 echo "Test 2: recno: small key, medium data pairs" 114 rm -f $TMP2 $TMP3 115 echo $mdata | 116 awk '{ for (i = 1; i < 201; ++i) 117 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 118 }' > $TMP2 119 $PROG -o $TMP3 recno $TMP2 120 if (cmp -s $TMP1 $TMP3) ; then : 121 else 122 echo "test2: type recno: failed" 123 exit 1 124 fi 125} 126 127# Insert the programs in /bin with their paths as their keys. 128test3() 129{ 130 echo "Test 3: hash: small key, big data pairs" 131 rm -f $TMP1 132 (find /bin -type f -print | xargs cat) > $TMP1 133 for type in hash; do 134 rm -f $TMP2 $TMP3 135 for i in `find /bin -type f -print`; do 136 echo p 137 echo k$i 138 echo D$i 139 echo g 140 echo k$i 141 done > $TMP2 142 $PROG -o $TMP3 $type $TMP2 143 if (cmp -s $TMP1 $TMP3) ; then : 144 else 145 echo "test3: $type: failed" 146 exit 1 147 fi 148 done 149 echo "Test 3: btree: small key, big data pairs" 150 for psize in 512 16384 65536; do 151 echo " page size $psize" 152 for type in btree; do 153 rm -f $TMP2 $TMP3 154 for i in `find /bin -type f -print`; do 155 echo p 156 echo k$i 157 echo D$i 158 echo g 159 echo k$i 160 done > $TMP2 161 $PROG -i psize=$psize -o $TMP3 $type $TMP2 162 if (cmp -s $TMP1 $TMP3) ; then : 163 else 164 echo "test3: $type: page size $psize: failed" 165 exit 1 166 fi 167 done 168 done 169 echo "Test 3: recno: big data pairs" 170 rm -f $TMP2 $TMP3 171 find /bin -type f -print | 172 awk '{ 173 ++i; 174 printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i); 175 }' > $TMP2 176 for psize in 512 16384 65536; do 177 echo " page size $psize" 178 $PROG -i psize=$psize -o $TMP3 recno $TMP2 179 if (cmp -s $TMP1 $TMP3) ; then : 180 else 181 echo "test3: recno: page size $psize: failed" 182 exit 1 183 fi 184 done 185} 186 187# Do random recno entries. 188test4() 189{ 190 echo "Test 4: recno: random entries" 191 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 192 awk '{ 193 for (i = 37; i <= 37 + 88 * 17; i += 17) { 194 if (i % 41) 195 s = substr($0, 1, i % 41); 196 else 197 s = substr($0, 1); 198 printf("input key %d: %s\n", i, s); 199 } 200 for (i = 1; i <= 15; ++i) { 201 if (i % 41) 202 s = substr($0, 1, i % 41); 203 else 204 s = substr($0, 1); 205 printf("input key %d: %s\n", i, s); 206 } 207 for (i = 19234; i <= 19234 + 61 * 27; i += 27) { 208 if (i % 41) 209 s = substr($0, 1, i % 41); 210 else 211 s = substr($0, 1); 212 printf("input key %d: %s\n", i, s); 213 } 214 exit 215 }' > $TMP1 216 rm -f $TMP2 $TMP3 217 cat $TMP1 | 218 awk 'BEGIN { 219 i = 37; 220 incr = 17; 221 } 222 { 223 printf("p\nk%d\nd%s\n", i, $0); 224 if (i == 19234 + 61 * 27) 225 exit; 226 if (i == 37 + 88 * 17) { 227 i = 1; 228 incr = 1; 229 } else if (i == 15) { 230 i = 19234; 231 incr = 27; 232 } else 233 i += incr; 234 } 235 END { 236 for (i = 37; i <= 37 + 88 * 17; i += 17) 237 printf("g\nk%d\n", i); 238 for (i = 1; i <= 15; ++i) 239 printf("g\nk%d\n", i); 240 for (i = 19234; i <= 19234 + 61 * 27; i += 27) 241 printf("g\nk%d\n", i); 242 }' > $TMP2 243 $PROG -o $TMP3 recno $TMP2 244 if (cmp -s $TMP1 $TMP3) ; then : 245 else 246 echo "test4: type recno: failed" 247 exit 1 248 fi 249} 250 251# Do reverse order recno entries. 252test5() 253{ 254 echo "Test 5: recno: reverse order entries" 255 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 256 awk ' { 257 for (i = 1500; i; --i) { 258 if (i % 34) 259 s = substr($0, 1, i % 34); 260 else 261 s = substr($0, 1); 262 printf("input key %d: %s\n", i, s); 263 } 264 exit; 265 }' > $TMP1 266 rm -f $TMP2 $TMP3 267 cat $TMP1 | 268 awk 'BEGIN { 269 i = 1500; 270 } 271 { 272 printf("p\nk%d\nd%s\n", i, $0); 273 --i; 274 } 275 END { 276 for (i = 1500; i; --i) 277 printf("g\nk%d\n", i); 278 }' > $TMP2 279 $PROG -o $TMP3 recno $TMP2 280 if (cmp -s $TMP1 $TMP3) ; then : 281 else 282 echo "test5: type recno: failed" 283 exit 1 284 fi 285} 286 287# Do alternating order recno entries. 288test6() 289{ 290 echo "Test 6: recno: alternating order entries" 291 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 292 awk ' { 293 for (i = 1; i < 1200; i += 2) { 294 if (i % 34) 295 s = substr($0, 1, i % 34); 296 else 297 s = substr($0, 1); 298 printf("input key %d: %s\n", i, s); 299 } 300 for (i = 2; i < 1200; i += 2) { 301 if (i % 34) 302 s = substr($0, 1, i % 34); 303 else 304 s = substr($0, 1); 305 printf("input key %d: %s\n", i, s); 306 } 307 exit; 308 }' > $TMP1 309 rm -f $TMP2 $TMP3 310 cat $TMP1 | 311 awk 'BEGIN { 312 i = 1; 313 even = 0; 314 } 315 { 316 printf("p\nk%d\nd%s\n", i, $0); 317 i += 2; 318 if (i >= 1200) { 319 if (even == 1) 320 exit; 321 even = 1; 322 i = 2; 323 } 324 } 325 END { 326 for (i = 1; i < 1200; ++i) 327 printf("g\nk%d\n", i); 328 }' > $TMP2 329 $PROG -o $TMP3 recno $TMP2 330 sort -o $TMP1 $TMP1 331 sort -o $TMP3 $TMP3 332 if (cmp -s $TMP1 $TMP3) ; then : 333 else 334 echo "test6: type recno: failed" 335 exit 1 336 fi 337} 338 339# Delete cursor record 340test7() 341{ 342 echo "Test 7: btree, recno: delete cursor record" 343 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 344 awk '{ 345 for (i = 1; i <= 120; ++i) 346 printf("%05d: input key %d: %s\n", i, i, $0); 347 printf("%05d: input key %d: %s\n", 120, 120, $0);
| 24 if [ $# -eq 0 ]; then 25 for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20; do 26 test$t 27 done 28 else 29 while [ $# -gt 0 ] 30 do case "$1" in 31 test*) 32 $1;; 33 [0-9]*) 34 test$1;; 35 btree) 36 for t in 1 2 3 7 8 9 10 12 13; do 37 test$t 38 done;; 39 hash) 40 for t in 1 2 3 8 13 20; do 41 test$t 42 done;; 43 recno) 44 for t in 1 2 3 4 5 6 7 10 11; do 45 test$t 46 done;; 47 *) 48 echo "run.test: unknown test $1" 49 echo "usage: run.test test# | type" 50 exit 1 51 esac 52 shift 53 done 54 fi 55 rm -f $TMP1 $TMP2 $TMP3 56 exit 0 57} 58 59# Take the first hundred entries in the dictionary, and make them 60# be key/data pairs. 61test1() 62{ 63 echo "Test 1: btree, hash: small key, small data pairs" 64 sed 200q $DICT > $TMP1 65 for type in btree hash; do 66 rm -f $TMP2 $TMP3 67 for i in `sed 200q $DICT`; do 68 echo p 69 echo k$i 70 echo d$i 71 echo g 72 echo k$i 73 done > $TMP2 74 $PROG -o $TMP3 $type $TMP2 75 if (cmp -s $TMP1 $TMP3) ; then : 76 else 77 echo "test1: type $type: failed" 78 exit 1 79 fi 80 done 81 echo "Test 1: recno: small key, small data pairs" 82 rm -f $TMP2 $TMP3 83 sed 200q $DICT | 84 awk '{ 85 ++i; 86 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 87 }' > $TMP2 88 $PROG -o $TMP3 recno $TMP2 89 if (cmp -s $TMP1 $TMP3) ; then : 90 else 91 echo "test1: type recno: failed" 92 exit 1 93 fi 94} 95 96# Take the first 200 entries in the dictionary, and give them 97# each a medium size data entry. 98test2() 99{ 100 echo "Test 2: btree, hash: small key, medium data pairs" 101 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 102 echo $mdata | 103 awk '{ for (i = 1; i < 201; ++i) print $0 }' > $TMP1 104 for type in hash btree; do 105 rm -f $TMP2 $TMP3 106 for i in `sed 200q $DICT`; do 107 echo p 108 echo k$i 109 echo d$mdata 110 echo g 111 echo k$i 112 done > $TMP2 113 $PROG -o $TMP3 $type $TMP2 114 if (cmp -s $TMP1 $TMP3) ; then : 115 else 116 echo "test2: type $type: failed" 117 exit 1 118 fi 119 done 120 echo "Test 2: recno: small key, medium data pairs" 121 rm -f $TMP2 $TMP3 122 echo $mdata | 123 awk '{ for (i = 1; i < 201; ++i) 124 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i); 125 }' > $TMP2 126 $PROG -o $TMP3 recno $TMP2 127 if (cmp -s $TMP1 $TMP3) ; then : 128 else 129 echo "test2: type recno: failed" 130 exit 1 131 fi 132} 133 134# Insert the programs in /bin with their paths as their keys. 135test3() 136{ 137 echo "Test 3: hash: small key, big data pairs" 138 rm -f $TMP1 139 (find /bin -type f -print | xargs cat) > $TMP1 140 for type in hash; do 141 rm -f $TMP2 $TMP3 142 for i in `find /bin -type f -print`; do 143 echo p 144 echo k$i 145 echo D$i 146 echo g 147 echo k$i 148 done > $TMP2 149 $PROG -o $TMP3 $type $TMP2 150 if (cmp -s $TMP1 $TMP3) ; then : 151 else 152 echo "test3: $type: failed" 153 exit 1 154 fi 155 done 156 echo "Test 3: btree: small key, big data pairs" 157 for psize in 512 16384 65536; do 158 echo " page size $psize" 159 for type in btree; do 160 rm -f $TMP2 $TMP3 161 for i in `find /bin -type f -print`; do 162 echo p 163 echo k$i 164 echo D$i 165 echo g 166 echo k$i 167 done > $TMP2 168 $PROG -i psize=$psize -o $TMP3 $type $TMP2 169 if (cmp -s $TMP1 $TMP3) ; then : 170 else 171 echo "test3: $type: page size $psize: failed" 172 exit 1 173 fi 174 done 175 done 176 echo "Test 3: recno: big data pairs" 177 rm -f $TMP2 $TMP3 178 find /bin -type f -print | 179 awk '{ 180 ++i; 181 printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i); 182 }' > $TMP2 183 for psize in 512 16384 65536; do 184 echo " page size $psize" 185 $PROG -i psize=$psize -o $TMP3 recno $TMP2 186 if (cmp -s $TMP1 $TMP3) ; then : 187 else 188 echo "test3: recno: page size $psize: failed" 189 exit 1 190 fi 191 done 192} 193 194# Do random recno entries. 195test4() 196{ 197 echo "Test 4: recno: random entries" 198 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 199 awk '{ 200 for (i = 37; i <= 37 + 88 * 17; i += 17) { 201 if (i % 41) 202 s = substr($0, 1, i % 41); 203 else 204 s = substr($0, 1); 205 printf("input key %d: %s\n", i, s); 206 } 207 for (i = 1; i <= 15; ++i) { 208 if (i % 41) 209 s = substr($0, 1, i % 41); 210 else 211 s = substr($0, 1); 212 printf("input key %d: %s\n", i, s); 213 } 214 for (i = 19234; i <= 19234 + 61 * 27; i += 27) { 215 if (i % 41) 216 s = substr($0, 1, i % 41); 217 else 218 s = substr($0, 1); 219 printf("input key %d: %s\n", i, s); 220 } 221 exit 222 }' > $TMP1 223 rm -f $TMP2 $TMP3 224 cat $TMP1 | 225 awk 'BEGIN { 226 i = 37; 227 incr = 17; 228 } 229 { 230 printf("p\nk%d\nd%s\n", i, $0); 231 if (i == 19234 + 61 * 27) 232 exit; 233 if (i == 37 + 88 * 17) { 234 i = 1; 235 incr = 1; 236 } else if (i == 15) { 237 i = 19234; 238 incr = 27; 239 } else 240 i += incr; 241 } 242 END { 243 for (i = 37; i <= 37 + 88 * 17; i += 17) 244 printf("g\nk%d\n", i); 245 for (i = 1; i <= 15; ++i) 246 printf("g\nk%d\n", i); 247 for (i = 19234; i <= 19234 + 61 * 27; i += 27) 248 printf("g\nk%d\n", i); 249 }' > $TMP2 250 $PROG -o $TMP3 recno $TMP2 251 if (cmp -s $TMP1 $TMP3) ; then : 252 else 253 echo "test4: type recno: failed" 254 exit 1 255 fi 256} 257 258# Do reverse order recno entries. 259test5() 260{ 261 echo "Test 5: recno: reverse order entries" 262 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 263 awk ' { 264 for (i = 1500; i; --i) { 265 if (i % 34) 266 s = substr($0, 1, i % 34); 267 else 268 s = substr($0, 1); 269 printf("input key %d: %s\n", i, s); 270 } 271 exit; 272 }' > $TMP1 273 rm -f $TMP2 $TMP3 274 cat $TMP1 | 275 awk 'BEGIN { 276 i = 1500; 277 } 278 { 279 printf("p\nk%d\nd%s\n", i, $0); 280 --i; 281 } 282 END { 283 for (i = 1500; i; --i) 284 printf("g\nk%d\n", i); 285 }' > $TMP2 286 $PROG -o $TMP3 recno $TMP2 287 if (cmp -s $TMP1 $TMP3) ; then : 288 else 289 echo "test5: type recno: failed" 290 exit 1 291 fi 292} 293 294# Do alternating order recno entries. 295test6() 296{ 297 echo "Test 6: recno: alternating order entries" 298 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 299 awk ' { 300 for (i = 1; i < 1200; i += 2) { 301 if (i % 34) 302 s = substr($0, 1, i % 34); 303 else 304 s = substr($0, 1); 305 printf("input key %d: %s\n", i, s); 306 } 307 for (i = 2; i < 1200; i += 2) { 308 if (i % 34) 309 s = substr($0, 1, i % 34); 310 else 311 s = substr($0, 1); 312 printf("input key %d: %s\n", i, s); 313 } 314 exit; 315 }' > $TMP1 316 rm -f $TMP2 $TMP3 317 cat $TMP1 | 318 awk 'BEGIN { 319 i = 1; 320 even = 0; 321 } 322 { 323 printf("p\nk%d\nd%s\n", i, $0); 324 i += 2; 325 if (i >= 1200) { 326 if (even == 1) 327 exit; 328 even = 1; 329 i = 2; 330 } 331 } 332 END { 333 for (i = 1; i < 1200; ++i) 334 printf("g\nk%d\n", i); 335 }' > $TMP2 336 $PROG -o $TMP3 recno $TMP2 337 sort -o $TMP1 $TMP1 338 sort -o $TMP3 $TMP3 339 if (cmp -s $TMP1 $TMP3) ; then : 340 else 341 echo "test6: type recno: failed" 342 exit 1 343 fi 344} 345 346# Delete cursor record 347test7() 348{ 349 echo "Test 7: btree, recno: delete cursor record" 350 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 351 awk '{ 352 for (i = 1; i <= 120; ++i) 353 printf("%05d: input key %d: %s\n", i, i, $0); 354 printf("%05d: input key %d: %s\n", 120, 120, $0);
|
348 printf("get failed, no such key\n");
| 355 printf("seq failed, no such key\n");
|
349 printf("%05d: input key %d: %s\n", 1, 1, $0); 350 printf("%05d: input key %d: %s\n", 2, 2, $0); 351 exit; 352 }' > $TMP1 353 rm -f $TMP2 $TMP3 354 355 for type in btree recno; do 356 cat $TMP1 | 357 awk '{ 358 if (i == 120) 359 exit; 360 printf("p\nk%d\nd%s\n", ++i, $0); 361 } 362 END { 363 printf("fR_NEXT\n"); 364 for (i = 1; i <= 120; ++i) 365 printf("s\n"); 366 printf("fR_CURSOR\ns\nk120\n");
| 356 printf("%05d: input key %d: %s\n", 1, 1, $0); 357 printf("%05d: input key %d: %s\n", 2, 2, $0); 358 exit; 359 }' > $TMP1 360 rm -f $TMP2 $TMP3 361 362 for type in btree recno; do 363 cat $TMP1 | 364 awk '{ 365 if (i == 120) 366 exit; 367 printf("p\nk%d\nd%s\n", ++i, $0); 368 } 369 END { 370 printf("fR_NEXT\n"); 371 for (i = 1; i <= 120; ++i) 372 printf("s\n"); 373 printf("fR_CURSOR\ns\nk120\n");
|
367 printf("r\nk120\n");
| 374 printf("r\n");
|
368 printf("fR_NEXT\ns\n"); 369 printf("fR_CURSOR\ns\nk1\n");
| 375 printf("fR_NEXT\ns\n"); 376 printf("fR_CURSOR\ns\nk1\n");
|
370 printf("r\nk1\n");
| 377 printf("r\n");
|
371 printf("fR_FIRST\ns\n"); 372 }' > $TMP2 373 $PROG -o $TMP3 recno $TMP2 374 if (cmp -s $TMP1 $TMP3) ; then : 375 else 376 echo "test7: type $type: failed" 377 exit 1 378 fi 379 done 380} 381 382# Make sure that overflow pages are reused. 383test8() 384{ 385 echo "Test 8: btree, hash: repeated small key, big data pairs" 386 rm -f $TMP1 387 echo "" | 388 awk 'BEGIN { 389 for (i = 1; i <= 10; ++i) { 390 printf("p\nkkey1\nD/bin/sh\n"); 391 printf("p\nkkey2\nD/bin/csh\n"); 392 if (i % 8 == 0) { 393 printf("c\nkkey2\nD/bin/csh\n"); 394 printf("c\nkkey1\nD/bin/sh\n");
| 378 printf("fR_FIRST\ns\n"); 379 }' > $TMP2 380 $PROG -o $TMP3 recno $TMP2 381 if (cmp -s $TMP1 $TMP3) ; then : 382 else 383 echo "test7: type $type: failed" 384 exit 1 385 fi 386 done 387} 388 389# Make sure that overflow pages are reused. 390test8() 391{ 392 echo "Test 8: btree, hash: repeated small key, big data pairs" 393 rm -f $TMP1 394 echo "" | 395 awk 'BEGIN { 396 for (i = 1; i <= 10; ++i) { 397 printf("p\nkkey1\nD/bin/sh\n"); 398 printf("p\nkkey2\nD/bin/csh\n"); 399 if (i % 8 == 0) { 400 printf("c\nkkey2\nD/bin/csh\n"); 401 printf("c\nkkey1\nD/bin/sh\n");
|
395 printf("e\t%d of 10 (comparison)\r\n", i);
| 402 printf("e\t%d of 10 (comparison)\n", i);
|
396 } else
| 403 } else
|
397 printf("e\t%d of 10 \r\n", i);
| 404 printf("e\t%d of 10 \n", i);
|
398 printf("r\nkkey1\nr\nkkey2\n"); 399 }
| 405 printf("r\nkkey1\nr\nkkey2\n"); 406 }
|
400 printf("e\n"); 401 printf("eend of test8 run\n");
| |
402 }' > $TMP1 403 $PROG btree $TMP1 404# $PROG hash $TMP1 405 # No explicit test for success. 406} 407 408# Test btree duplicate keys 409test9() 410{ 411 echo "Test 9: btree: duplicate keys" 412 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 413 awk '{ 414 for (i = 1; i <= 543; ++i) 415 printf("%05d: input key %d: %s\n", i, i, $0); 416 exit; 417 }' > $TMP1 418 rm -f $TMP2 $TMP3 419 420 for type in btree; do 421 cat $TMP1 | 422 awk '{ 423 if (i++ % 2) 424 printf("p\nkduplicatekey\nd%s\n", $0); 425 else 426 printf("p\nkunique%dkey\nd%s\n", i, $0); 427 } 428 END { 429 printf("o\n"); 430 }' > $TMP2 431 $PROG -iflags=1 -o $TMP3 $type $TMP2 432 sort -o $TMP3 $TMP3 433 if (cmp -s $TMP1 $TMP3) ; then : 434 else 435 echo "test9: type $type: failed" 436 exit 1 437 fi 438 done 439} 440 441# Test use of cursor flags without initialization 442test10() 443{ 444 echo "Test 10: btree, recno: test cursor flag use" 445 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 446 awk '{ 447 for (i = 1; i <= 20; ++i) 448 printf("%05d: input key %d: %s\n", i, i, $0); 449 exit; 450 }' > $TMP1 451 rm -f $TMP2 $TMP3 452 453 # Test that R_CURSOR doesn't succeed before cursor initialized 454 for type in btree recno; do 455 cat $TMP1 | 456 awk '{ 457 if (i == 10) 458 exit; 459 printf("p\nk%d\nd%s\n", ++i, $0); 460 } 461 END {
| 407 }' > $TMP1 408 $PROG btree $TMP1 409# $PROG hash $TMP1 410 # No explicit test for success. 411} 412 413# Test btree duplicate keys 414test9() 415{ 416 echo "Test 9: btree: duplicate keys" 417 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 418 awk '{ 419 for (i = 1; i <= 543; ++i) 420 printf("%05d: input key %d: %s\n", i, i, $0); 421 exit; 422 }' > $TMP1 423 rm -f $TMP2 $TMP3 424 425 for type in btree; do 426 cat $TMP1 | 427 awk '{ 428 if (i++ % 2) 429 printf("p\nkduplicatekey\nd%s\n", $0); 430 else 431 printf("p\nkunique%dkey\nd%s\n", i, $0); 432 } 433 END { 434 printf("o\n"); 435 }' > $TMP2 436 $PROG -iflags=1 -o $TMP3 $type $TMP2 437 sort -o $TMP3 $TMP3 438 if (cmp -s $TMP1 $TMP3) ; then : 439 else 440 echo "test9: type $type: failed" 441 exit 1 442 fi 443 done 444} 445 446# Test use of cursor flags without initialization 447test10() 448{ 449 echo "Test 10: btree, recno: test cursor flag use" 450 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 451 awk '{ 452 for (i = 1; i <= 20; ++i) 453 printf("%05d: input key %d: %s\n", i, i, $0); 454 exit; 455 }' > $TMP1 456 rm -f $TMP2 $TMP3 457 458 # Test that R_CURSOR doesn't succeed before cursor initialized 459 for type in btree recno; do 460 cat $TMP1 | 461 awk '{ 462 if (i == 10) 463 exit; 464 printf("p\nk%d\nd%s\n", ++i, $0); 465 } 466 END {
|
462 printf("fR_CURSOR\nr\nk1\n");
| 467 printf("fR_CURSOR\nr\n");
|
463 printf("eR_CURSOR SHOULD HAVE FAILED\n"); 464 }' > $TMP2 465 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 466 if [ -s $TMP3 ] ; then 467 echo "Test 10: delete: R_CURSOR SHOULD HAVE FAILED" 468 exit 1 469 fi 470 done 471 for type in btree recno; do 472 cat $TMP1 | 473 awk '{ 474 if (i == 10) 475 exit; 476 printf("p\nk%d\nd%s\n", ++i, $0); 477 } 478 END { 479 printf("fR_CURSOR\np\nk1\ndsome data\n"); 480 printf("eR_CURSOR SHOULD HAVE FAILED\n"); 481 }' > $TMP2 482 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 483 if [ -s $TMP3 ] ; then 484 echo "Test 10: put: R_CURSOR SHOULD HAVE FAILED" 485 exit 1 486 fi 487 done 488} 489 490# Test insert in reverse order. 491test11() 492{ 493 echo "Test 11: recno: reverse order insert" 494 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 495 awk '{ 496 for (i = 1; i <= 779; ++i) 497 printf("%05d: input key %d: %s\n", i, i, $0); 498 exit; 499 }' > $TMP1 500 rm -f $TMP2 $TMP3 501 502 for type in recno; do 503 cat $TMP1 | 504 awk '{ 505 if (i == 0) { 506 i = 1; 507 printf("p\nk1\nd%s\n", $0); 508 printf("%s\n", "fR_IBEFORE"); 509 } else 510 printf("p\nk1\nd%s\n", $0); 511 } 512 END { 513 printf("or\n"); 514 }' > $TMP2 515 $PROG -o $TMP3 $type $TMP2 516 if (cmp -s $TMP1 $TMP3) ; then : 517 else 518 echo "test11: type $type: failed" 519 exit 1 520 fi 521 done 522} 523 524# Take the first 20000 entries in the dictionary, reverse them, and give 525# them each a small size data entry. Use a small page size to make sure 526# the btree split code gets hammered. 527test12() 528{ 529 echo "Test 12: btree: lots of keys, small page size" 530 mdata=abcdefghijklmnopqrstuvwxy 531 echo $mdata | 532 awk '{ for (i = 1; i < 20001; ++i) print $0 }' > $TMP1 533 for type in btree; do 534 rm -f $TMP2 $TMP3 535 for i in `sed 20000q $DICT | rev`; do 536 echo p 537 echo k$i 538 echo d$mdata 539 echo g 540 echo k$i 541 done > $TMP2 542 $PROG -i psize=512 -o $TMP3 $type $TMP2 543 if (cmp -s $TMP1 $TMP3) ; then : 544 else 545 echo "test12: type $type: failed" 546 exit 1 547 fi 548 done 549} 550 551# Test different byte orders. 552test13() 553{ 554 echo "Test 13: btree, hash: differing byte orders" 555 sed 50q $DICT > $TMP1 556 for order in 1234 4321; do 557 for type in btree hash; do 558 rm -f byte.file $TMP2 $TMP3 559 for i in `sed 50q $DICT`; do 560 echo p 561 echo k$i 562 echo d$i 563 echo g 564 echo k$i 565 done > $TMP2 566 $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 567 if (cmp -s $TMP1 $TMP3) ; then : 568 else 569 echo "test13: $type/$order put failed" 570 exit 1 571 fi 572 for i in `sed 50q $DICT`; do 573 echo g 574 echo k$i 575 done > $TMP2
| 468 printf("eR_CURSOR SHOULD HAVE FAILED\n"); 469 }' > $TMP2 470 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 471 if [ -s $TMP3 ] ; then 472 echo "Test 10: delete: R_CURSOR SHOULD HAVE FAILED" 473 exit 1 474 fi 475 done 476 for type in btree recno; do 477 cat $TMP1 | 478 awk '{ 479 if (i == 10) 480 exit; 481 printf("p\nk%d\nd%s\n", ++i, $0); 482 } 483 END { 484 printf("fR_CURSOR\np\nk1\ndsome data\n"); 485 printf("eR_CURSOR SHOULD HAVE FAILED\n"); 486 }' > $TMP2 487 $PROG -o $TMP3 $type $TMP2 > /dev/null 2>&1 488 if [ -s $TMP3 ] ; then 489 echo "Test 10: put: R_CURSOR SHOULD HAVE FAILED" 490 exit 1 491 fi 492 done 493} 494 495# Test insert in reverse order. 496test11() 497{ 498 echo "Test 11: recno: reverse order insert" 499 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 500 awk '{ 501 for (i = 1; i <= 779; ++i) 502 printf("%05d: input key %d: %s\n", i, i, $0); 503 exit; 504 }' > $TMP1 505 rm -f $TMP2 $TMP3 506 507 for type in recno; do 508 cat $TMP1 | 509 awk '{ 510 if (i == 0) { 511 i = 1; 512 printf("p\nk1\nd%s\n", $0); 513 printf("%s\n", "fR_IBEFORE"); 514 } else 515 printf("p\nk1\nd%s\n", $0); 516 } 517 END { 518 printf("or\n"); 519 }' > $TMP2 520 $PROG -o $TMP3 $type $TMP2 521 if (cmp -s $TMP1 $TMP3) ; then : 522 else 523 echo "test11: type $type: failed" 524 exit 1 525 fi 526 done 527} 528 529# Take the first 20000 entries in the dictionary, reverse them, and give 530# them each a small size data entry. Use a small page size to make sure 531# the btree split code gets hammered. 532test12() 533{ 534 echo "Test 12: btree: lots of keys, small page size" 535 mdata=abcdefghijklmnopqrstuvwxy 536 echo $mdata | 537 awk '{ for (i = 1; i < 20001; ++i) print $0 }' > $TMP1 538 for type in btree; do 539 rm -f $TMP2 $TMP3 540 for i in `sed 20000q $DICT | rev`; do 541 echo p 542 echo k$i 543 echo d$mdata 544 echo g 545 echo k$i 546 done > $TMP2 547 $PROG -i psize=512 -o $TMP3 $type $TMP2 548 if (cmp -s $TMP1 $TMP3) ; then : 549 else 550 echo "test12: type $type: failed" 551 exit 1 552 fi 553 done 554} 555 556# Test different byte orders. 557test13() 558{ 559 echo "Test 13: btree, hash: differing byte orders" 560 sed 50q $DICT > $TMP1 561 for order in 1234 4321; do 562 for type in btree hash; do 563 rm -f byte.file $TMP2 $TMP3 564 for i in `sed 50q $DICT`; do 565 echo p 566 echo k$i 567 echo d$i 568 echo g 569 echo k$i 570 done > $TMP2 571 $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2 572 if (cmp -s $TMP1 $TMP3) ; then : 573 else 574 echo "test13: $type/$order put failed" 575 exit 1 576 fi 577 for i in `sed 50q $DICT`; do 578 echo g 579 echo k$i 580 done > $TMP2
|
576 $PROG -ilorder=$order -f byte.file -o $TMP3 $type $TMP2
| 581 $PROG -s \ 582 -ilorder=$order -f byte.file -o $TMP3 $type $TMP2
|
577 if (cmp -s $TMP1 $TMP3) ; then : 578 else 579 echo "test13: $type/$order get failed" 580 exit 1 581 fi 582 done 583 done 584 rm -f byte.file 585} 586 587# Try a variety of bucketsizes and fill factors for hashing 588test20() 589{ 590 echo\ 591 "Test 20: hash: bucketsize, fill factor; nelem 25000 cachesize 65536" 592 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 593 awk '{ 594 for (i = 1; i <= 10000; ++i) { 595 if (i % 34) 596 s = substr($0, 1, i % 34); 597 else 598 s = substr($0, 1); 599 printf("%s\n", s); 600 } 601 exit; 602 }' > $TMP1 603 sed 10000q $DICT | 604 awk 'BEGIN { 605 ds="abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" 606 } 607 { 608 if (++i % 34) 609 s = substr(ds, 1, i % 34); 610 else 611 s = substr(ds, 1); 612 printf("p\nk%s\nd%s\n", $0, s); 613 }' > $TMP2 614 sed 10000q $DICT | 615 awk '{ 616 ++i; 617 printf("g\nk%s\n", $0); 618 }' >> $TMP2 619 bsize=256 620 for ffactor in 11 14 21; do 621 echo " bucketsize $bsize, fill factor $ffactor" 622 $PROG -o$TMP3 \ 623 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 624 hash $TMP2 625 if (cmp -s $TMP1 $TMP3) ; then : 626 else 627 echo "test20: type hash:\ 628bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 629 exit 1 630 fi 631 done 632 bsize=512 633 for ffactor in 21 28 43; do 634 echo " bucketsize $bsize, fill factor $ffactor" 635 $PROG -o$TMP3 \ 636 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 637 hash $TMP2 638 if (cmp -s $TMP1 $TMP3) ; then : 639 else 640 echo "test20: type hash:\ 641bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 642 exit 1 643 fi 644 done 645 bsize=1024 646 for ffactor in 43 57 85; do 647 echo " bucketsize $bsize, fill factor $ffactor" 648 $PROG -o$TMP3 \ 649 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 650 hash $TMP2 651 if (cmp -s $TMP1 $TMP3) ; then : 652 else 653 echo "test20: type hash:\ 654bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 655 exit 1 656 fi 657 done 658 bsize=2048 659 for ffactor in 85 114 171; do 660 echo " bucketsize $bsize, fill factor $ffactor" 661 $PROG -o$TMP3 \ 662 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 663 hash $TMP2 664 if (cmp -s $TMP1 $TMP3) ; then : 665 else 666 echo "test20: type hash:\ 667bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 668 exit 1 669 fi 670 done 671 bsize=4096 672 for ffactor in 171 228 341; do 673 echo " bucketsize $bsize, fill factor $ffactor" 674 $PROG -o$TMP3 \ 675 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 676 hash $TMP2 677 if (cmp -s $TMP1 $TMP3) ; then : 678 else 679 echo "test20: type hash:\ 680bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 681 exit 1 682 fi 683 done 684 bsize=8192 685 for ffactor in 341 455 683; do 686 echo " bucketsize $bsize, fill factor $ffactor" 687 $PROG -o$TMP3 \ 688 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 689 hash $TMP2 690 if (cmp -s $TMP1 $TMP3) ; then : 691 else 692 echo "test20: type hash:\ 693bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 694 exit 1 695 fi 696 done 697} 698 699main $*
| 583 if (cmp -s $TMP1 $TMP3) ; then : 584 else 585 echo "test13: $type/$order get failed" 586 exit 1 587 fi 588 done 589 done 590 rm -f byte.file 591} 592 593# Try a variety of bucketsizes and fill factors for hashing 594test20() 595{ 596 echo\ 597 "Test 20: hash: bucketsize, fill factor; nelem 25000 cachesize 65536" 598 echo "abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" | 599 awk '{ 600 for (i = 1; i <= 10000; ++i) { 601 if (i % 34) 602 s = substr($0, 1, i % 34); 603 else 604 s = substr($0, 1); 605 printf("%s\n", s); 606 } 607 exit; 608 }' > $TMP1 609 sed 10000q $DICT | 610 awk 'BEGIN { 611 ds="abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg abcdefg" 612 } 613 { 614 if (++i % 34) 615 s = substr(ds, 1, i % 34); 616 else 617 s = substr(ds, 1); 618 printf("p\nk%s\nd%s\n", $0, s); 619 }' > $TMP2 620 sed 10000q $DICT | 621 awk '{ 622 ++i; 623 printf("g\nk%s\n", $0); 624 }' >> $TMP2 625 bsize=256 626 for ffactor in 11 14 21; do 627 echo " bucketsize $bsize, fill factor $ffactor" 628 $PROG -o$TMP3 \ 629 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 630 hash $TMP2 631 if (cmp -s $TMP1 $TMP3) ; then : 632 else 633 echo "test20: type hash:\ 634bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 635 exit 1 636 fi 637 done 638 bsize=512 639 for ffactor in 21 28 43; do 640 echo " bucketsize $bsize, fill factor $ffactor" 641 $PROG -o$TMP3 \ 642 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 643 hash $TMP2 644 if (cmp -s $TMP1 $TMP3) ; then : 645 else 646 echo "test20: type hash:\ 647bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 648 exit 1 649 fi 650 done 651 bsize=1024 652 for ffactor in 43 57 85; do 653 echo " bucketsize $bsize, fill factor $ffactor" 654 $PROG -o$TMP3 \ 655 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 656 hash $TMP2 657 if (cmp -s $TMP1 $TMP3) ; then : 658 else 659 echo "test20: type hash:\ 660bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 661 exit 1 662 fi 663 done 664 bsize=2048 665 for ffactor in 85 114 171; do 666 echo " bucketsize $bsize, fill factor $ffactor" 667 $PROG -o$TMP3 \ 668 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 669 hash $TMP2 670 if (cmp -s $TMP1 $TMP3) ; then : 671 else 672 echo "test20: type hash:\ 673bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 674 exit 1 675 fi 676 done 677 bsize=4096 678 for ffactor in 171 228 341; do 679 echo " bucketsize $bsize, fill factor $ffactor" 680 $PROG -o$TMP3 \ 681 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 682 hash $TMP2 683 if (cmp -s $TMP1 $TMP3) ; then : 684 else 685 echo "test20: type hash:\ 686bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 687 exit 1 688 fi 689 done 690 bsize=8192 691 for ffactor in 341 455 683; do 692 echo " bucketsize $bsize, fill factor $ffactor" 693 $PROG -o$TMP3 \ 694 -ibsize=$bsize,ffactor=$ffactor,nelem=25000,cachesize=65536\ 695 hash $TMP2 696 if (cmp -s $TMP1 $TMP3) ; then : 697 else 698 echo "test20: type hash:\ 699bsize=$bsize ffactor=$ffactor nelem=25000 cachesize=65536 failed" 700 exit 1 701 fi 702 done 703} 704 705main $*
|