xref: /csrg-svn/lib/libc/db/test/run.test (revision 56050)
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