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