t_db.sh revision 1.5 1 # $NetBSD: t_db.sh,v 1.5 2015/02/26 13:00:26 martin Exp $
2 #
3 # Copyright (c) 2008 The NetBSD Foundation, Inc.
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 #
15 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16 # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 # POSSIBILITY OF SUCH DAMAGE.
26 #
27
28 prog()
29 {
30 echo $(atf_get_srcdir)/h_db
31 }
32
33 dict()
34 {
35 if [ -f /usr/share/dict/words ]; then
36 echo /usr/share/dict/words
37 elif [ -f /usr/dict/words ]; then
38 echo /usr/dict/words
39 else
40 atf_fail "no dictionary found"
41 fi
42 }
43
44 SEVEN_SEVEN="abcdefg|abcdefg|abcdefg|abcdefg|abcdefg|abcdefg|abcdefg"
45
46 atf_test_case small_btree
47 small_btree_head()
48 {
49 atf_set "descr" \
50 "Checks btree database using small keys and small data" \
51 "pairs: takes the first hundred entries in the dictionary," \
52 "and makes them be key/data pairs."
53 }
54 small_btree_body()
55 {
56 TMPDIR="$(pwd)/db_dir"; export TMPDIR
57 mkdir ${TMPDIR}
58
59 sed 200q $(dict) >exp
60
61 for i in `sed 200q $(dict)`; do
62 echo p
63 echo k$i
64 echo d$i
65 echo g
66 echo k$i
67 done >in
68
69 atf_check -o file:exp "$(prog)" btree in
70 }
71
72 atf_test_case small_hash
73 small_hash_head()
74 {
75 atf_set "descr" \
76 "Checks hash database using small keys and small data" \
77 "pairs: takes the first hundred entries in the dictionary," \
78 "and makes them be key/data pairs."
79 }
80 small_hash_body()
81 {
82 TMPDIR="$(pwd)/db_dir"; export TMPDIR
83 mkdir ${TMPDIR}
84
85 sed 200q $(dict) >exp
86
87 for i in `sed 200q $(dict)`; do
88 echo p
89 echo k$i
90 echo d$i
91 echo g
92 echo k$i
93 done >in
94
95 atf_check -o file:exp "$(prog)" hash in
96 }
97
98 atf_test_case small_recno
99 small_recno_head()
100 {
101 atf_set "descr" \
102 "Checks recno database using small keys and small data" \
103 "pairs: takes the first hundred entries in the dictionary," \
104 "and makes them be key/data pairs."
105 }
106 small_recno_body()
107 {
108 TMPDIR="$(pwd)/db_dir"; export TMPDIR
109 mkdir ${TMPDIR}
110
111 sed 200q $(dict) >exp
112
113 sed 200q $(dict) |
114 awk '{
115 ++i;
116 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
117 }' >in
118
119 atf_check -o file:exp "$(prog)" recno in
120 }
121
122 atf_test_case medium_btree
123 medium_btree_head()
124 {
125 atf_set "descr" \
126 "Checks btree database using small keys and medium" \
127 "data pairs: takes the first 200 entries in the" \
128 "dictionary, and gives them each a medium size data entry."
129 }
130 medium_btree_body()
131 {
132 TMPDIR="$(pwd)/db_dir"; export TMPDIR
133 mkdir ${TMPDIR}
134
135 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
136 echo $mdata |
137 awk '{ for (i = 1; i < 201; ++i) print $0 }' >exp
138
139 for i in $(sed 200q $(dict)); do
140 echo p
141 echo k$i
142 echo d$mdata
143 echo g
144 echo k$i
145 done >in
146
147 atf_check -o file:exp "$(prog)" btree in
148 }
149
150 atf_test_case medium_hash
151 medium_hash_head()
152 {
153 atf_set "descr" \
154 "Checks hash database using small keys and medium" \
155 "data pairs: takes the first 200 entries in the" \
156 "dictionary, and gives them each a medium size data entry."
157 }
158 medium_hash_body()
159 {
160 TMPDIR="$(pwd)/db_dir"; export TMPDIR
161 mkdir ${TMPDIR}
162
163 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
164 echo $mdata |
165 awk '{ for (i = 1; i < 201; ++i) print $0 }' >exp
166
167 for i in $(sed 200q $(dict)); do
168 echo p
169 echo k$i
170 echo d$mdata
171 echo g
172 echo k$i
173 done >in
174
175 atf_check -o file:exp "$(prog)" hash in
176 }
177
178 atf_test_case medium_recno
179 medium_recno_head()
180 {
181 atf_set "descr" \
182 "Checks recno database using small keys and medium" \
183 "data pairs: takes the first 200 entries in the" \
184 "dictionary, and gives them each a medium size data entry."
185 }
186 medium_recno_body()
187 {
188 TMPDIR="$(pwd)/db_dir"; export TMPDIR
189 mkdir ${TMPDIR}
190
191 mdata=abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
192 echo $mdata |
193 awk '{ for (i = 1; i < 201; ++i) print $0 }' >exp
194
195 echo $mdata |
196 awk '{ for (i = 1; i < 201; ++i)
197 printf("p\nk%d\nd%s\ng\nk%d\n", i, $0, i);
198 }' >in
199
200 atf_check -o file:exp "$(prog)" recno in
201 }
202
203 atf_test_case big_btree
204 big_btree_head()
205 {
206 atf_set "descr" \
207 "Checks btree database using small keys and big data" \
208 "pairs: inserts the programs in /bin with their paths" \
209 "as their keys."
210 }
211 big_btree_body()
212 {
213 TMPDIR="$(pwd)/db_dir"; export TMPDIR
214 mkdir ${TMPDIR}
215
216 (find /bin -type f -print | xargs cat) >exp
217
218 for psize in 512 16384 65536; do
219 echo "checking page size: $psize"
220
221 for i in `find /bin -type f -print`; do
222 echo p
223 echo k$i
224 echo D$i
225 echo g
226 echo k$i
227 done >in
228
229 atf_check "$(prog)" -o out btree in
230 cmp -s exp out || atf_fail "test failed for page size: $psize"
231 done
232 }
233
234 atf_test_case big_hash
235 big_hash_head()
236 {
237 atf_set "descr" \
238 "Checks hash database using small keys and big data" \
239 "pairs: inserts the programs in /bin with their paths" \
240 "as their keys."
241 }
242 big_hash_body()
243 {
244 TMPDIR="$(pwd)/db_dir"; export TMPDIR
245 mkdir ${TMPDIR}
246
247 (find /bin -type f -print | xargs cat) >exp
248
249 for i in `find /bin -type f -print`; do
250 echo p
251 echo k$i
252 echo D$i
253 echo g
254 echo k$i
255 done >in
256
257 atf_check "$(prog)" -o out hash in
258 cmp -s exp out || atf_fail "test failed"
259 }
260
261 atf_test_case big_recno
262 big_recno_head()
263 {
264 atf_set "descr" \
265 "Checks recno database using small keys and big data" \
266 "pairs: inserts the programs in /bin with their paths" \
267 "as their keys."
268 }
269 big_recno_body()
270 {
271 TMPDIR="$(pwd)/db_dir"; export TMPDIR
272 mkdir ${TMPDIR}
273
274 (find /bin -type f -print | xargs cat) >exp
275
276 find /bin -type f -print |
277 awk '{
278 ++i;
279 printf("p\nk%d\nD%s\ng\nk%d\n", i, $0, i);
280 }' >in
281
282 for psize in 512 16384 65536; do
283 echo "checking page size: $psize"
284
285 atf_check "$(prog)" -o out recno in
286 cmp -s exp out || atf_fail "test failed for page size: $psize"
287 done
288 }
289
290 atf_test_case random_recno
291 random_recno_head()
292 {
293 atf_set "descr" "Checks recno database using random entries"
294 }
295 random_recno_body()
296 {
297 TMPDIR="$(pwd)/db_dir"; export TMPDIR
298 mkdir ${TMPDIR}
299
300 echo $SEVEN_SEVEN |
301 awk '{
302 for (i = 37; i <= 37 + 88 * 17; i += 17) {
303 if (i % 41)
304 s = substr($0, 1, i % 41);
305 else
306 s = substr($0, 1);
307 printf("input key %d: %s\n", i, s);
308 }
309 for (i = 1; i <= 15; ++i) {
310 if (i % 41)
311 s = substr($0, 1, i % 41);
312 else
313 s = substr($0, 1);
314 printf("input key %d: %s\n", i, s);
315 }
316 for (i = 19234; i <= 19234 + 61 * 27; i += 27) {
317 if (i % 41)
318 s = substr($0, 1, i % 41);
319 else
320 s = substr($0, 1);
321 printf("input key %d: %s\n", i, s);
322 }
323 exit
324 }' >exp
325
326 cat exp |
327 awk 'BEGIN {
328 i = 37;
329 incr = 17;
330 }
331 {
332 printf("p\nk%d\nd%s\n", i, $0);
333 if (i == 19234 + 61 * 27)
334 exit;
335 if (i == 37 + 88 * 17) {
336 i = 1;
337 incr = 1;
338 } else if (i == 15) {
339 i = 19234;
340 incr = 27;
341 } else
342 i += incr;
343 }
344 END {
345 for (i = 37; i <= 37 + 88 * 17; i += 17)
346 printf("g\nk%d\n", i);
347 for (i = 1; i <= 15; ++i)
348 printf("g\nk%d\n", i);
349 for (i = 19234; i <= 19234 + 61 * 27; i += 27)
350 printf("g\nk%d\n", i);
351 }' >in
352
353 atf_check -o file:exp "$(prog)" recno in
354 }
355
356 atf_test_case reverse_recno
357 reverse_recno_head()
358 {
359 atf_set "descr" "Checks recno database using reverse order entries"
360 }
361 reverse_recno_body()
362 {
363 TMPDIR="$(pwd)/db_dir"; export TMPDIR
364 mkdir ${TMPDIR}
365
366 echo $SEVEN_SEVEN |
367 awk ' {
368 for (i = 1500; i; --i) {
369 if (i % 34)
370 s = substr($0, 1, i % 34);
371 else
372 s = substr($0, 1);
373 printf("input key %d: %s\n", i, s);
374 }
375 exit;
376 }' >exp
377
378 cat exp |
379 awk 'BEGIN {
380 i = 1500;
381 }
382 {
383 printf("p\nk%d\nd%s\n", i, $0);
384 --i;
385 }
386 END {
387 for (i = 1500; i; --i)
388 printf("g\nk%d\n", i);
389 }' >in
390
391 atf_check -o file:exp "$(prog)" recno in
392 }
393
394 atf_test_case alternate_recno
395 alternate_recno_head()
396 {
397 atf_set "descr" "Checks recno database using alternating order entries"
398 }
399 alternate_recno_body()
400 {
401 TMPDIR="$(pwd)/db_dir"; export TMPDIR
402 mkdir ${TMPDIR}
403
404 echo $SEVEN_SEVEN |
405 awk ' {
406 for (i = 1; i < 1200; i += 2) {
407 if (i % 34)
408 s = substr($0, 1, i % 34);
409 else
410 s = substr($0, 1);
411 printf("input key %d: %s\n", i, s);
412 }
413 for (i = 2; i < 1200; i += 2) {
414 if (i % 34)
415 s = substr($0, 1, i % 34);
416 else
417 s = substr($0, 1);
418 printf("input key %d: %s\n", i, s);
419 }
420 exit;
421 }' >exp
422
423 cat exp |
424 awk 'BEGIN {
425 i = 1;
426 even = 0;
427 }
428 {
429 printf("p\nk%d\nd%s\n", i, $0);
430 i += 2;
431 if (i >= 1200) {
432 if (even == 1)
433 exit;
434 even = 1;
435 i = 2;
436 }
437 }
438 END {
439 for (i = 1; i < 1200; ++i)
440 printf("g\nk%d\n", i);
441 }' >in
442
443 atf_check "$(prog)" -o out recno in
444
445 sort -o exp exp
446 sort -o out out
447
448 cmp -s exp out || atf_fail "test failed"
449 }
450
451 h_delete()
452 {
453 TMPDIR="$(pwd)/db_dir"; export TMPDIR
454 mkdir ${TMPDIR}
455
456 type=$1
457
458 echo $SEVEN_SEVEN |
459 awk '{
460 for (i = 1; i <= 120; ++i)
461 printf("%05d: input key %d: %s\n", i, i, $0);
462 }' >exp
463
464 cat exp |
465 awk '{
466 printf("p\nk%d\nd%s\n", ++i, $0);
467 }
468 END {
469 printf("fR_NEXT\n");
470 for (i = 1; i <= 120; ++i)
471 printf("s\n");
472 printf("fR_CURSOR\ns\nkXX\n");
473 printf("r\n");
474 printf("fR_NEXT\ns\n");
475 printf("fR_CURSOR\ns\nk1\n");
476 printf("r\n");
477 printf("fR_FIRST\ns\n");
478 }' >in
479
480 # For btree, the records are ordered by the string representation
481 # of the key value. So sort the expected output file accordingly,
482 # and set the seek_last key to the last expected key value.
483
484 if [ "$type" = "btree" ] ; then
485 sed -e 's/kXX/k99/' < in > tmp
486 mv tmp in
487 sort -d -k4 < exp > tmp
488 mv tmp exp
489 echo $SEVEN_SEVEN |
490 awk '{
491 printf("%05d: input key %d: %s\n", 99, 99, $0);
492 printf("seq failed, no such key\n");
493 printf("%05d: input key %d: %s\n", 1, 1, $0);
494 printf("%05d: input key %d: %s\n", 10, 10, $0);
495 exit;
496 }' >> exp
497 else
498 # For recno, records are ordered by numerical key value. No sort
499 # is needed, but still need to set proper seek_last key value.
500 sed -e 's/kXX/k120/' < in > tmp
501 mv tmp in
502 echo $SEVEN_SEVEN |
503 awk '{
504 printf("%05d: input key %d: %s\n", 120, 120, $0);
505 printf("seq failed, no such key\n");
506 printf("%05d: input key %d: %s\n", 1, 1, $0);
507 printf("%05d: input key %d: %s\n", 2, 2, $0);
508 exit;
509 }' >> exp
510 fi
511
512 atf_check "$(prog)" -o out $type in
513 atf_check -o file:exp cat out
514 }
515
516 atf_test_case delete_btree
517 delete_btree_head()
518 {
519 atf_set "descr" "Checks removing records in btree database"
520 }
521 delete_btree_body()
522 {
523 h_delete btree
524 }
525
526 atf_test_case delete_recno
527 delete_recno_head()
528 {
529 atf_set "descr" "Checks removing records in recno database"
530 }
531 delete_recno_body()
532 {
533 h_delete recno
534 }
535
536 h_repeated()
537 {
538 TMPDIR="$(pwd)/db_dir"; export TMPDIR
539 mkdir ${TMPDIR}
540
541 echo "" |
542 awk 'BEGIN {
543 for (i = 1; i <= 10; ++i) {
544 printf("p\nkkey1\nD/bin/sh\n");
545 printf("p\nkkey2\nD/bin/csh\n");
546 if (i % 8 == 0) {
547 printf("c\nkkey2\nD/bin/csh\n");
548 printf("c\nkkey1\nD/bin/sh\n");
549 printf("e\t%d of 10 (comparison)\n", i);
550 } else
551 printf("e\t%d of 10 \n", i);
552 printf("r\nkkey1\nr\nkkey2\n");
553 }
554 }' >in
555
556 $(prog) btree in
557 }
558
559 atf_test_case repeated_btree
560 repeated_btree_head()
561 {
562 atf_set "descr" \
563 "Checks btree database with repeated small keys and" \
564 "big data pairs. Makes sure that overflow pages are reused"
565 }
566 repeated_btree_body()
567 {
568 h_repeated btree
569 }
570
571 atf_test_case repeated_hash
572 repeated_hash_head()
573 {
574 atf_set "descr" \
575 "Checks hash database with repeated small keys and" \
576 "big data pairs. Makes sure that overflow pages are reused"
577 }
578 repeated_hash_body()
579 {
580 h_repeated hash
581 }
582
583 atf_test_case duplicate_btree
584 duplicate_btree_head()
585 {
586 atf_set "descr" "Checks btree database with duplicate keys"
587 }
588 duplicate_btree_body()
589 {
590 TMPDIR="$(pwd)/db_dir"; export TMPDIR
591 mkdir ${TMPDIR}
592
593 echo $SEVEN_SEVEN |
594 awk '{
595 for (i = 1; i <= 543; ++i)
596 printf("%05d: input key %d: %s\n", i, i, $0);
597 exit;
598 }' >exp
599
600 cat exp |
601 awk '{
602 if (i++ % 2)
603 printf("p\nkduplicatekey\nd%s\n", $0);
604 else
605 printf("p\nkunique%dkey\nd%s\n", i, $0);
606 }
607 END {
608 printf("o\n");
609 }' >in
610
611 atf_check -o file:exp -x "$(prog) -iflags=1 btree in | sort"
612 }
613
614 h_cursor_flags()
615 {
616 TMPDIR="$(pwd)/db_dir"; export TMPDIR
617 mkdir ${TMPDIR}
618
619 type=$1
620
621 echo $SEVEN_SEVEN |
622 awk '{
623 for (i = 1; i <= 20; ++i)
624 printf("%05d: input key %d: %s\n", i, i, $0);
625 exit;
626 }' >exp
627
628 # Test that R_CURSOR doesn't succeed before cursor initialized
629 cat exp |
630 awk '{
631 if (i == 10)
632 exit;
633 printf("p\nk%d\nd%s\n", ++i, $0);
634 }
635 END {
636 printf("fR_CURSOR\nr\n");
637 printf("eR_CURSOR SHOULD HAVE FAILED\n");
638 }' >in
639
640 atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
641 atf_check -s ne:0 test -s out
642
643 cat exp |
644 awk '{
645 if (i == 10)
646 exit;
647 printf("p\nk%d\nd%s\n", ++i, $0);
648 }
649 END {
650 printf("fR_CURSOR\np\nk1\ndsome data\n");
651 printf("eR_CURSOR SHOULD HAVE FAILED\n");
652 }' >in
653
654 atf_check -o ignore -e ignore -s ne:0 "$(prog)" -o out $type in
655 atf_check -s ne:0 test -s out
656 }
657
658 atf_test_case cursor_flags_btree
659 cursor_flags_btree_head()
660 {
661 atf_set "descr" \
662 "Checks use of cursor flags without initialization in btree database"
663 }
664 cursor_flags_btree_body()
665 {
666 h_cursor_flags btree
667 }
668
669 atf_test_case cursor_flags_recno
670 cursor_flags_recno_head()
671 {
672 atf_set "descr" \
673 "Checks use of cursor flags without initialization in recno database"
674 }
675 cursor_flags_recno_body()
676 {
677 h_cursor_flags recno
678 }
679
680 atf_test_case reverse_order_recno
681 reverse_order_recno_head()
682 {
683 atf_set "descr" "Checks reverse order inserts in recno database"
684 }
685 reverse_order_recno_body()
686 {
687 TMPDIR="$(pwd)/db_dir"; export TMPDIR
688 mkdir ${TMPDIR}
689
690 echo $SEVEN_SEVEN |
691 awk '{
692 for (i = 1; i <= 779; ++i)
693 printf("%05d: input key %d: %s\n", i, i, $0);
694 exit;
695 }' >exp
696
697 cat exp |
698 awk '{
699 if (i == 0) {
700 i = 1;
701 printf("p\nk1\nd%s\n", $0);
702 printf("%s\n", "fR_IBEFORE");
703 } else
704 printf("p\nk1\nd%s\n", $0);
705 }
706 END {
707 printf("or\n");
708 }' >in
709
710 atf_check -o file:exp "$(prog)" recno in
711 }
712
713 atf_test_case small_page_btree
714 small_page_btree_head()
715 {
716 atf_set "descr" \
717 "Checks btree database with lots of keys and small page" \
718 "size: takes the first 20000 entries in the dictionary," \
719 "reverses them, and gives them each a small size data" \
720 "entry. Uses a small page size to make sure the btree" \
721 "split code gets hammered."
722 }
723 small_page_btree_body()
724 {
725 TMPDIR="$(pwd)/db_dir"; export TMPDIR
726 mkdir ${TMPDIR}
727
728 mdata=abcdefghijklmnopqrstuvwxy
729 echo $mdata |
730 awk '{ for (i = 1; i < 20001; ++i) print $0 }' >exp
731
732 for i in `sed 20000q $(dict) | rev`; do
733 echo p
734 echo k$i
735 echo d$mdata
736 echo g
737 echo k$i
738 done >in
739
740 atf_check -o file:exp "$(prog)" -i psize=512 btree in
741 }
742
743 h_byte_orders()
744 {
745 TMPDIR="$(pwd)/db_dir"; export TMPDIR
746 mkdir ${TMPDIR}
747
748 type=$1
749
750 sed 50q $(dict) >exp
751 for order in 1234 4321; do
752 for i in `sed 50q $(dict)`; do
753 echo p
754 echo k$i
755 echo d$i
756 echo g
757 echo k$i
758 done >in
759
760 atf_check -o file:exp "$(prog)" -ilorder=$order -f byte.file $type in
761
762 for i in `sed 50q $(dict)`; do
763 echo g
764 echo k$i
765 done >in
766
767 atf_check -o file:exp "$(prog)" -s -ilorder=$order -f byte.file $type in
768 done
769 }
770
771 atf_test_case byte_orders_btree
772 byte_orders_btree_head()
773 {
774 atf_set "descr" "Checks btree database using differing byte orders"
775 }
776 byte_orders_btree_body()
777 {
778 h_byte_orders btree
779 }
780
781 atf_test_case byte_orders_hash
782 byte_orders_hash_head()
783 {
784 atf_set "descr" "Checks hash database using differing byte orders"
785 }
786 byte_orders_hash_body()
787 {
788 h_byte_orders hash
789 }
790
791 h_bsize_ffactor()
792 {
793 bsize=$1
794 ffactor=$2
795
796 echo "bucketsize $bsize, fill factor $ffactor"
797 atf_check -o file:exp "$(prog)" "-ibsize=$bsize,\
798 ffactor=$ffactor,nelem=25000,cachesize=65536" hash in
799 }
800
801 atf_test_case bsize_ffactor
802 bsize_ffactor_head()
803 {
804 atf_set "timeout" "1800"
805 atf_set "descr" "Checks hash database with various" \
806 "bucketsizes and fill factors"
807 }
808 bsize_ffactor_body()
809 {
810 TMPDIR="$(pwd)/db_dir"; export TMPDIR
811 mkdir ${TMPDIR}
812
813 echo $SEVEN_SEVEN |
814 awk '{
815 for (i = 1; i <= 10000; ++i) {
816 if (i % 34)
817 s = substr($0, 1, i % 34);
818 else
819 s = substr($0, 1);
820 printf("%s\n", s);
821 }
822 exit;
823
824 }' >exp
825
826 sed 10000q $(dict) |
827 awk 'BEGIN {
828 ds="'$SEVEN_SEVEN'"
829 }
830 {
831 if (++i % 34)
832 s = substr(ds, 1, i % 34);
833 else
834 s = substr(ds, 1);
835 printf("p\nk%s\nd%s\n", $0, s);
836 }' >in
837
838 sed 10000q $(dict) |
839 awk '{
840 ++i;
841 printf("g\nk%s\n", $0);
842 }' >>in
843
844 h_bsize_ffactor 256 11
845 h_bsize_ffactor 256 14
846 h_bsize_ffactor 256 21
847
848 h_bsize_ffactor 512 21
849 h_bsize_ffactor 512 28
850 h_bsize_ffactor 512 43
851
852 h_bsize_ffactor 1024 43
853 h_bsize_ffactor 1024 57
854 h_bsize_ffactor 1024 85
855
856 h_bsize_ffactor 2048 85
857 h_bsize_ffactor 2048 114
858 h_bsize_ffactor 2048 171
859
860 h_bsize_ffactor 4096 171
861 h_bsize_ffactor 4096 228
862 h_bsize_ffactor 4096 341
863
864 h_bsize_ffactor 8192 341
865 h_bsize_ffactor 8192 455
866 h_bsize_ffactor 8192 683
867 }
868
869 # FIXME: what does it test?
870 atf_test_case four_char_hash
871 four_char_hash_head()
872 {
873 atf_set "descr" \
874 "Checks hash database with 4 char key and" \
875 "value insert on a 65536 bucket size"
876 }
877 four_char_hash_body()
878 {
879 TMPDIR="$(pwd)/db_dir"; export TMPDIR
880 mkdir ${TMPDIR}
881
882 cat >in <<EOF
883 p
884 k1234
885 d1234
886 r
887 k1234
888 EOF
889
890 atf_check "$(prog)" -i bsize=65536 hash in
891 }
892
893 atf_init_test_cases()
894 {
895 atf_add_test_case small_btree
896 atf_add_test_case small_hash
897 atf_add_test_case small_recno
898 atf_add_test_case medium_btree
899 atf_add_test_case medium_hash
900 atf_add_test_case medium_recno
901 atf_add_test_case big_btree
902 atf_add_test_case big_hash
903 atf_add_test_case big_recno
904 atf_add_test_case random_recno
905 atf_add_test_case reverse_recno
906 atf_add_test_case alternate_recno
907 atf_add_test_case delete_btree
908 atf_add_test_case delete_recno
909 atf_add_test_case repeated_btree
910 atf_add_test_case repeated_hash
911 atf_add_test_case duplicate_btree
912 atf_add_test_case cursor_flags_btree
913 atf_add_test_case cursor_flags_recno
914 atf_add_test_case reverse_order_recno
915 atf_add_test_case small_page_btree
916 atf_add_test_case byte_orders_btree
917 atf_add_test_case byte_orders_hash
918 atf_add_test_case bsize_ffactor
919 atf_add_test_case four_char_hash
920 }
921