1#!/bin/bash
2# Library glob testing script
3#
4# Version: 20180317
5
6EXIT_SUCCESS=0;
7EXIT_FAILURE=1;
8EXIT_IGNORE=77;
9
10chr()
11{
12	local CHR_VALUE=`expr \( \( $1 / 64 \) \* 100 \) + \( \( \( $1 % 64 \) / 8 \) \* 10 \) + \( $1 % 8 \)`;
13
14	printf \\${CHR_VALUE};
15}
16
17seq()
18{
19	local VALUE=$1;
20
21	local SEQUENCE="";
22
23	while test ${VALUE} -le $2;
24	do
25
26		if test ${VALUE} -le 9;
27		then
28			SEQUENCE="${SEQUENCE} 0${VALUE}";
29		else
30			SEQUENCE="${SEQUENCE} ${VALUE}";
31		fi
32
33		VALUE=`expr ${VALUE} + 1`;
34	done
35
36	echo ${SEQUENCE};
37}
38
39test_glob_sequence2()
40{
41	local TEST_EXECUTABLE=$1;
42	local BASENAME=$2;
43	local SCHEMA=$3;
44	local FILENAMES=$4;
45
46	local TMPDIR="tmp$$";
47
48	rm -rf ${TMPDIR};
49	mkdir ${TMPDIR};
50
51	if test "${OSTYPE}" = "msys";
52	then
53		TEST_PATH="${TMPDIR}\\${BASENAME}";
54		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}\\\\\\\\?" | sed "s? ? ${TMPDIR}\\\\\\\\?g"`;
55	else
56		TEST_PATH="${TMPDIR}/${BASENAME}";
57		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}/?" | sed "s? ? ${TMPDIR}/?g"`;
58	fi
59	echo ${FILENAMES} > ${TMPDIR}/input;
60
61	touch ${FILENAMES};
62
63	TEST_DESCRIPTION="";
64
65	run_test_with_arguments "${TEST_DESCRIPTION}" "${TEST_EXECUTABLE}" "${TEST_PATH}" > ${TMPDIR}/output;
66
67	RESULT=$?;
68
69	if test ${RESULT} -eq ${EXIT_SUCCESS};
70	then
71		sed 's/\r\n/\n/' -i ${TMPDIR}/output;
72
73		if ! cmp -s ${TMPDIR}/input ${TMPDIR}/output;
74		then
75			RESULT=${EXIT_FAILURE};
76		fi
77	fi
78
79	rm -rf ${TMPDIR};
80
81	echo -n "Testing glob: for basename: ${BASENAME} and schema: ${SCHEMA} ";
82
83	if test ${RESULT} -ne ${EXIT_SUCCESS};
84	then
85		echo " (FAIL)";
86	else
87		echo " (PASS)";
88	fi
89	return ${RESULT};
90}
91
92test_glob_sequence3()
93{
94	local TEST_EXECUTABLE=$1;
95	local BASENAME=$2;
96	local SCHEMA=$3;
97	local FILENAME=$4;
98	local LAST=$5;
99
100	local RESULT=`echo ${SCHEMA} | egrep "^[.][esEL]01$"`;
101	local IS_VALID=$?;
102
103	if test ${IS_VALID} -ne 0;
104	then
105		echo "Unsupported schema: ${SCHEMA}";
106
107		exit ${EXIT_FAILURE};
108	fi
109
110	RESULT=`echo ${LAST} | egrep "^[e-zE-Z][0-9a-zA-Z][0-9a-zA-Z]$"`;
111	IS_VALID=$?;
112
113	if test ${IS_VALID} -ne 0;
114	then
115		echo "Unsupported last: ${LAST}";
116
117		exit ${EXIT_FAILURE};
118	fi
119
120	FIRST_LETTER=`echo ${SCHEMA} | cut -c 2`;
121
122	RESULT=`echo ${LAST} | egrep "^${FIRST_LETTER}[0-9][0-9]$"`;
123	LAST_IS_NUMERIC=$?;
124
125	if test ${LAST_IS_NUMERIC} -eq 0;
126	then
127		LAST=`echo ${LAST} | cut -c '2 3'`;
128
129		SEQUENCE=`seq 1 ${LAST}`;
130	else
131		SEQUENCE=`seq 1 99`;
132	fi
133
134	FILENAMES=`for NUMBER in ${SEQUENCE}; do echo -n "${FILENAME}.${FIRST_LETTER}${NUMBER} "; echo $FILE; done`;
135
136	if test ${LAST_IS_NUMERIC} -ne 0;
137	then
138		RESULT=`echo ${LAST} | egrep "^[A-Z][A-Z][A-Z]$"`;
139		IS_UPPER_CASE=$?;
140
141		SECOND_ITERATOR=0;
142		THIRD_ITERATOR=0;
143
144		if test ${IS_UPPER_CASE} -eq 0;
145		then
146			if test ${FIRST_LETTER} = "E";
147			then
148				FIRST_ITERATOR=4;
149
150			elif test ${FIRST_LETTER} = "L";
151			then
152				FIRST_ITERATOR=11;
153			fi
154
155			FIRST_BYTE_VALUE=`expr 65 + ${FIRST_ITERATOR}`;
156			SECOND_BYTE_VALUE=`expr 65 + ${SECOND_ITERATOR}`;
157			THIRD_BYTE_VALUE=`expr 65 + ${THIRD_ITERATOR}`;
158		else
159			if test ${FIRST_LETTER} = "e";
160			then
161				FIRST_ITERATOR=4;
162
163			elif test ${FIRST_LETTER} = "s";
164			then
165				FIRST_ITERATOR=18;
166			fi
167
168			FIRST_BYTE_VALUE=`expr 97 + ${FIRST_ITERATOR}`;
169			SECOND_BYTE_VALUE=`expr 97 + ${SECOND_ITERATOR}`;
170			THIRD_BYTE_VALUE=`expr 97 + ${THIRD_ITERATOR}`;
171		fi
172
173		FIRST_LETTER=`chr ${FIRST_BYTE_VALUE}`;
174		SECOND_LETTER=`chr ${SECOND_BYTE_VALUE}`;
175		THIRD_LETTER=`chr ${THIRD_BYTE_VALUE}`;
176
177		EXTENSION="${FIRST_LETTER}${SECOND_LETTER}${THIRD_LETTER}";
178
179		until test ${EXTENSION} = ${LAST};
180		do
181			FILENAMES="${FILENAMES} ${FILENAME}.${EXTENSION}";
182
183			THIRD_ITERATOR=`expr ${THIRD_ITERATOR} + 1`;
184
185			if test ${THIRD_ITERATOR} -ge 26;
186			then
187				SECOND_ITERATOR=`expr ${SECOND_ITERATOR} + 1`;
188
189				THIRD_ITERATOR=0;
190			fi
191
192			if test ${SECOND_ITERATOR} -ge 26;
193			then
194				FIRST_ITERATOR=`expr ${FIRST_ITERATOR} + 1`;
195
196				SECOND_ITERATOR=0;
197			fi
198
199			if test ${FIRST_ITERATOR} -ge 26;
200			then
201				break;
202			fi
203
204			if test ${IS_UPPER_CASE} -eq 0;
205			then
206				FIRST_BYTE_VALUE=`expr 65 + ${FIRST_ITERATOR}`;
207				SECOND_BYTE_VALUE=`expr 65 + ${SECOND_ITERATOR}`;
208				THIRD_BYTE_VALUE=`expr 65 + ${THIRD_ITERATOR}`;
209			else
210				FIRST_BYTE_VALUE=`expr 97 + ${FIRST_ITERATOR}`;
211				SECOND_BYTE_VALUE=`expr 97 + ${SECOND_ITERATOR}`;
212				THIRD_BYTE_VALUE=`expr 97 + ${THIRD_ITERATOR}`;
213			fi
214
215			FIRST_LETTER=`chr ${FIRST_BYTE_VALUE}`;
216			SECOND_LETTER=`chr ${SECOND_BYTE_VALUE}`;
217			THIRD_LETTER=`chr ${THIRD_BYTE_VALUE}`;
218
219			EXTENSION="${FIRST_LETTER}${SECOND_LETTER}${THIRD_LETTER}";
220		done
221
222		FILENAMES="${FILENAMES} ${FILENAME}.${EXTENSION}";
223	fi
224
225	TMPDIR="tmp$$";
226
227	rm -rf ${TMPDIR};
228	mkdir ${TMPDIR};
229
230	if test "${OSTYPE}" = "msys";
231	then
232		TEST_PATH="${TMPDIR}\\${BASENAME}";
233		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}\\\\\\\\?" | sed "s? ? ${TMPDIR}\\\\\\\\?g"`;
234	else
235		TEST_PATH="${TMPDIR}/${BASENAME}";
236		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}/?" | sed "s? ? ${TMPDIR}/?g"`;
237	fi
238	echo ${FILENAMES} > ${TMPDIR}/input;
239
240	touch ${FILENAMES};
241
242	TEST_DESCRIPTION="";
243
244	run_test_with_arguments "${TEST_DESCRIPTION}" "${TEST_EXECUTABLE}" "${TEST_PATH}" > ${TMPDIR}/output;
245
246	RESULT=$?;
247
248	if test ${RESULT} -eq ${EXIT_SUCCESS};
249	then
250		sed 's/\r\n/\n/' -i ${TMPDIR}/output;
251
252		if ! cmp -s ${TMPDIR}/input ${TMPDIR}/output;
253		then
254			RESULT=${EXIT_FAILURE};
255		fi
256	fi
257
258	rm -rf ${TMPDIR};
259
260	echo -n "Testing glob: for basename: ${BASENAME} and schema: ${SCHEMA} ";
261
262	if test ${RESULT} -ne ${EXIT_SUCCESS};
263	then
264		echo " (FAIL)";
265	else
266		echo " (PASS)";
267	fi
268	return ${RESULT};
269}
270
271test_glob_sequence4()
272{
273	local TEST_EXECUTABLE=$1;
274	local BASENAME=$2;
275	local SCHEMA=$3;
276	local FILENAME=$4;
277	local LAST=$5;
278
279	local RESULT=`echo ${SCHEMA} | egrep "^[.][EL]x01$"`;
280	local IS_VALID=$?;
281
282	if test ${IS_VALID} -ne 0;
283	then
284		echo "Unsupported schema: ${SCHEMA}";
285
286		exit ${EXIT_FAILURE};
287	fi
288
289	RESULT=`echo ${LAST} | egrep "^[EL][x-z][0-9A-Z][0-9A-Z]$"`;
290	IS_VALID=$?;
291
292	if test ${IS_VALID} -ne 0;
293	then
294		echo "Unsupported last: ${LAST}";
295
296		exit ${EXIT_FAILURE};
297	fi
298
299	FIRST_LETTER=`echo ${SCHEMA} | cut -c 2`;
300	SECOND_LETTER=`echo ${SCHEMA} | cut -c 3`;
301
302	RESULT=`echo ${LAST} | egrep "^${FIRST_LETTER}${SECOND_LETTER}[0-9][0-9]$"`;
303	LAST_IS_NUMERIC=$?;
304
305	if test ${LAST_IS_NUMERIC} -eq 0;
306	then
307		LAST=`echo ${LAST} | cut -c '3 4'`;
308
309		SEQUENCE=`seq 1 ${LAST}`;
310	else
311		SEQUENCE=`seq 1 99`;
312	fi
313
314	FILENAMES=`for NUMBER in ${SEQUENCE}; do echo -n "${FILENAME}.${FIRST_LETTER}${SECOND_LETTER}${NUMBER} "; echo $FILE; done`;
315
316	if test ${LAST_IS_NUMERIC} -ne 0;
317	then
318		SECOND_ITERATOR=23;
319		THIRD_ITERATOR=0;
320		FOURTH_ITERATOR=0;
321
322		SECOND_BYTE_VALUE=`expr 97 + ${SECOND_ITERATOR}`;
323		THIRD_BYTE_VALUE=`expr 65 + ${THIRD_ITERATOR}`;
324		FOURTH_BYTE_VALUE=`expr 65 + ${FOURTH_ITERATOR}`;
325
326		SECOND_LETTER=`chr ${SECOND_BYTE_VALUE}`;
327		THIRD_LETTER=`chr ${THIRD_BYTE_VALUE}`;
328		FOURTH_LETTER=`chr ${FOURTH_BYTE_VALUE}`;
329
330		EXTENSION="${FIRST_LETTER}${SECOND_LETTER}${THIRD_LETTER}${FOURTH_LETTER}";
331
332		until test ${EXTENSION} = ${LAST};
333		do
334			FILENAMES="${FILENAMES} ${FILENAME}.${EXTENSION}";
335
336			FOURTH_ITERATOR=`expr ${FOURTH_ITERATOR} + 1`;
337
338			if test ${FOURTH_ITERATOR} -ge 26;
339			then
340				THIRD_ITERATOR=`expr ${THIRD_ITERATOR} + 1`;
341
342				FOURTH_ITERATOR=0;
343			fi
344
345			if test ${THIRD_ITERATOR} -ge 26;
346			then
347				SECOND_ITERATOR=`expr ${SECOND_ITERATOR} + 1`;
348
349				THIRD_ITERATOR=0;
350			fi
351
352			if test ${SECOND_ITERATOR} -ge 26;
353			then
354				break;
355			fi
356
357			SECOND_BYTE_VALUE=`expr 97 + ${SECOND_ITERATOR}`;
358			THIRD_BYTE_VALUE=`expr 65 + ${THIRD_ITERATOR}`;
359			FOURTH_BYTE_VALUE=`expr 65 + ${FOURTH_ITERATOR}`;
360
361			SECOND_LETTER=`chr ${SECOND_BYTE_VALUE}`;
362			THIRD_LETTER=`chr ${THIRD_BYTE_VALUE}`;
363			FOURTH_LETTER=`chr ${FOURTH_BYTE_VALUE}`;
364
365			EXTENSION="${FIRST_LETTER}${SECOND_LETTER}${THIRD_LETTER}${FOURTH_LETTER}";
366		done
367
368		FILENAMES="${FILENAMES} ${FILENAME}.${EXTENSION}";
369	fi
370
371	TMPDIR="tmp$$";
372
373	rm -rf ${TMPDIR};
374	mkdir ${TMPDIR};
375
376	if test "${OSTYPE}" = "msys";
377	then
378		TEST_PATH="${TMPDIR}\\${BASENAME}";
379		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}\\\\\\\\?" | sed "s? ? ${TMPDIR}\\\\\\\\?g"`;
380	else
381		TEST_PATH="${TMPDIR}/${BASENAME}";
382		FILENAMES=`echo ${FILENAMES} | sed "s?^?${TMPDIR}/?" | sed "s? ? ${TMPDIR}/?g"`;
383	fi
384	echo ${FILENAMES} > ${TMPDIR}/input;
385
386	touch ${FILENAMES};
387
388	TEST_DESCRIPTION="";
389
390	run_test_with_arguments "${TEST_DESCRIPTION}" "${TEST_EXECUTABLE}" "${TEST_PATH}" > ${TMPDIR}/output;
391
392	RESULT=$?;
393
394	if test ${RESULT} -eq ${EXIT_SUCCESS};
395	then
396		sed 's/\r\n/\n/' -i ${TMPDIR}/output;
397
398		if ! cmp -s ${TMPDIR}/input ${TMPDIR}/output;
399		then
400			RESULT=${EXIT_FAILURE};
401		fi
402	fi
403
404	rm -rf ${TMPDIR};
405
406	echo -n "Testing glob: for basename: ${BASENAME} and schema: ${SCHEMA} ";
407
408	if test ${RESULT} -ne ${EXIT_SUCCESS};
409	then
410		echo " (FAIL)";
411	else
412		echo " (PASS)";
413	fi
414	return ${RESULT};
415}
416
417if ! test -z ${SKIP_LIBRARY_TESTS};
418then
419	exit ${EXIT_IGNORE};
420fi
421
422OPERATING_SYSTEM=`uname -o 2> /dev/null`;
423
424if test "${OPERATING_SYSTEM}" = "Cygwin" || test "${OPERATING_SYSTEM}" = "Msys";
425then
426	# The glob tests run very slow on Cygwin and Msys.
427
428	exit ${EXIT_IGNORE};
429fi
430
431TEST_EXECUTABLE="./ewf_test_glob";
432
433if ! test -x "${TEST_EXECUTABLE}";
434then
435	TEST_EXECUTABLE="ewf_test_glob.exe";
436fi
437
438if ! test -x "${TEST_EXECUTABLE}";
439then
440	echo "Missing test executable: ${TEST_EXECUTABLE}";
441
442	exit ${EXIT_FAILURE};
443fi
444
445TEST_RUNNER="tests/test_runner.sh";
446
447if ! test -f "${TEST_RUNNER}";
448then
449	TEST_RUNNER="./test_runner.sh";
450fi
451
452if ! test -f "${TEST_RUNNER}";
453then
454	echo "Missing test runner: ${TEST_RUNNER}";
455
456	exit ${EXIT_FAILURE};
457fi
458
459source ${TEST_RUNNER};
460
461# .e01
462
463test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.e01" ".e01" "PREFIX.e01";
464RESULT=$?;
465
466if test ${RESULT} -ne ${EXIT_SUCCESS};
467then
468	exit ${EXIT_FAILURE};
469fi
470
471test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.e01" ".e01" "PREFIX.e01 PREFIX.e02 PREFIX.e03 PREFIX.e04 PREFIX.e05 PREFIX.e06 PREFIX.e07 PREFIX.e08 PREFIX.e09";
472RESULT=$?;
473
474if test ${RESULT} -ne ${EXIT_SUCCESS};
475then
476	exit ${EXIT_FAILURE};
477fi
478
479test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.e01" ".e01" "PREFIX.e01 PREFIX.e02 PREFIX.e03 PREFIX.e04 PREFIX.e05 PREFIX.e06 PREFIX.e07 PREFIX.e08 PREFIX.e09 PREFIX.e10 PREFIX.e11";
480RESULT=$?;
481
482if test ${RESULT} -ne ${EXIT_SUCCESS};
483then
484	exit ${EXIT_FAILURE};
485fi
486
487test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.e01" ".e01" "PREFIX" "eba";
488RESULT=$?;
489
490if test ${RESULT} -ne ${EXIT_SUCCESS};
491then
492	exit ${EXIT_FAILURE};
493fi
494
495test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.e01" ".e01" "PREFIX" "faa";
496RESULT=$?;
497
498if test ${RESULT} -ne ${EXIT_SUCCESS};
499then
500	exit ${EXIT_FAILURE};
501fi
502
503# .s01
504
505test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.s01" ".s01" "PREFIX.s01";
506RESULT=$?;
507
508if test ${RESULT} -ne ${EXIT_SUCCESS};
509then
510	exit ${EXIT_FAILURE};
511fi
512
513test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.s01" ".s01" "PREFIX.s01 PREFIX.s02 PREFIX.s03 PREFIX.s04 PREFIX.s05 PREFIX.s06 PREFIX.s07 PREFIX.s08 PREFIX.s09";
514RESULT=$?;
515
516if test ${RESULT} -ne ${EXIT_SUCCESS};
517then
518	exit ${EXIT_FAILURE};
519fi
520
521test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.s01" ".s01" "PREFIX.s01 PREFIX.s02 PREFIX.s03 PREFIX.s04 PREFIX.s05 PREFIX.s06 PREFIX.s07 PREFIX.s08 PREFIX.s09 PREFIX.s10 PREFIX.s11";
522RESULT=$?;
523
524if test ${RESULT} -ne ${EXIT_SUCCESS};
525then
526	exit ${EXIT_FAILURE};
527fi
528
529test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.s01" ".s01" "PREFIX" "sba";
530RESULT=$?;
531
532if test ${RESULT} -ne ${EXIT_SUCCESS};
533then
534	exit ${EXIT_FAILURE};
535fi
536
537test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.s01" ".s01" "PREFIX" "taa";
538RESULT=$?;
539
540if test ${RESULT} -ne ${EXIT_SUCCESS};
541then
542	exit ${EXIT_FAILURE};
543fi
544
545# .E01
546
547test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.E01" ".E01" "PREFIX.E01";
548RESULT=$?;
549
550if test ${RESULT} -ne ${EXIT_SUCCESS};
551then
552	exit ${EXIT_FAILURE};
553fi
554
555test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.E01" ".E01" "PREFIX.E01 PREFIX.E02 PREFIX.E03 PREFIX.E04 PREFIX.E05 PREFIX.E06 PREFIX.E07 PREFIX.E08 PREFIX.E09";
556RESULT=$?;
557
558if test ${RESULT} -ne ${EXIT_SUCCESS};
559then
560	exit ${EXIT_FAILURE};
561fi
562
563test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.E01" ".E01" "PREFIX.E01 PREFIX.E02 PREFIX.E03 PREFIX.E04 PREFIX.E05 PREFIX.E06 PREFIX.E07 PREFIX.E08 PREFIX.E09 PREFIX.E10 PREFIX.E11";
564RESULT=$?;
565
566if test ${RESULT} -ne ${EXIT_SUCCESS};
567then
568	exit ${EXIT_FAILURE};
569fi
570
571test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.E01" ".E01" "PREFIX" "EBA";
572RESULT=$?;
573
574if test ${RESULT} -ne ${EXIT_SUCCESS};
575then
576	exit ${EXIT_FAILURE};
577fi
578
579test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.E01" ".E01" "PREFIX" "FAA";
580RESULT=$?;
581
582if test ${RESULT} -ne ${EXIT_SUCCESS};
583then
584	exit ${EXIT_FAILURE};
585fi
586
587# .L01
588
589test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.L01" ".L01" "PREFIX.L01";
590RESULT=$?;
591
592if test ${RESULT} -ne ${EXIT_SUCCESS};
593then
594	exit ${EXIT_FAILURE};
595fi
596
597test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.L01" ".L01" "PREFIX.L01 PREFIX.L02 PREFIX.L03 PREFIX.L04 PREFIX.L05 PREFIX.L06 PREFIX.L07 PREFIX.L08 PREFIX.L09";
598RESULT=$?;
599
600if test ${RESULT} -ne ${EXIT_SUCCESS};
601then
602	exit ${EXIT_FAILURE};
603fi
604
605test_glob_sequence2 "${TEST_EXECUTABLE}" "PREFIX.L01" ".L01" "PREFIX.L01 PREFIX.L02 PREFIX.L03 PREFIX.L04 PREFIX.L05 PREFIX.L06 PREFIX.L07 PREFIX.L08 PREFIX.L09 PREFIX.L10 PREFIX.L11";
606RESULT=$?;
607
608if test ${RESULT} -ne ${EXIT_SUCCESS};
609then
610	exit ${EXIT_FAILURE};
611fi
612
613test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.L01" ".L01" "PREFIX" "LBA";
614RESULT=$?;
615
616if test ${RESULT} -ne ${EXIT_SUCCESS};
617then
618	exit ${EXIT_FAILURE};
619fi
620
621test_glob_sequence3 "${TEST_EXECUTABLE}" "PREFIX.L01" ".L01" "PREFIX" "MAA";
622RESULT=$?;
623
624if test ${RESULT} -ne ${EXIT_SUCCESS};
625then
626	exit ${EXIT_FAILURE};
627fi
628
629exit ${EXIT_SUCCESS};
630
631