1#!/bin/sh
2
3###############################################################################
4#
5# Author: Lasse Collin
6#
7# This file has been put into the public domain.
8# You can do whatever you want with this file.
9#
10###############################################################################
11
12# If xz wasn't built, this test is skipped.
13if test -x ../src/xz/xz ; then
14	:
15else
16	(exit 77)
17	exit 77
18fi
19
20# Find out if our shell supports functions.
21eval 'unset foo ; foo() { return 42; } ; foo'
22if test $? != 42 ; then
23	echo "/bin/sh doesn't support functions, skipping this test."
24	(exit 77)
25	exit 77
26fi
27
28test_xz() {
29	if $XZ -c "$@" "$FILE" > tmp_compressed; then
30		:
31	else
32		echo "Compressing failed: $* $FILE"
33		(exit 1)
34		exit 1
35	fi
36
37	if $XZ -cd tmp_compressed > tmp_uncompressed ; then
38		:
39	else
40		echo "Decompressing failed: $* $FILE"
41		(exit 1)
42		exit 1
43	fi
44
45	if cmp tmp_uncompressed "$FILE" ; then
46		:
47	else
48		echo "Decompressed file does not match" \
49				"the original: $* $FILE"
50		(exit 1)
51		exit 1
52	fi
53
54	if test -n "$XZDEC" ; then
55		if $XZDEC tmp_compressed > tmp_uncompressed ; then
56			:
57		else
58			echo "Decompressing failed: $* $FILE"
59			(exit 1)
60			exit 1
61		fi
62
63		if cmp tmp_uncompressed "$FILE" ; then
64			:
65		else
66			echo "Decompressed file does not match" \
67					"the original: $* $FILE"
68			(exit 1)
69			exit 1
70		fi
71	fi
72
73	# Show progress:
74	echo . | tr -d '\n\r'
75}
76
77XZ="../src/xz/xz --memlimit-compress=48MiB --memlimit-decompress=5MiB \
78		--no-adjust --threads=1 --check=crc64"
79XZDEC="../src/xzdec/xzdec" # No memory usage limiter available
80test -x ../src/xzdec/xzdec || XZDEC=
81
82# Create the required input files.
83if ./create_compress_files ; then
84	:
85else
86	rm -f compress_*
87	echo "Failed to create files to test compression."
88	(exit 1)
89	exit 1
90fi
91
92# Remove temporary now (in case they are something weird), and on exit.
93rm -f tmp_compressed tmp_uncompressed
94trap 'rm -f tmp_compressed tmp_uncompressed' 0
95
96# Compress and decompress each file with various filter configurations.
97# This takes quite a bit of time.
98echo "test_compress.sh:"
99for FILE in compress_generated_* "$srcdir"/compress_prepared_*
100do
101	MSG=`echo "x$FILE" | sed 's,^x,,; s,^.*/,,; s,^compress_,,'`
102	echo "  $MSG" | tr -d '\n\r'
103
104	# Don't test with empty arguments; it breaks some ancient
105	# proprietary /bin/sh versions due to $@ used in test_xz().
106	test_xz -1
107	test_xz -2
108	test_xz -3
109	test_xz -4
110
111	# Disabled until Subblock format is stable.
112#		--subblock \
113#		--subblock=size=1 \
114#		--subblock=size=1,rle=1 \
115#		--subblock=size=1,rle=4 \
116#		--subblock=size=4,rle=4 \
117#		--subblock=size=8,rle=4 \
118#		--subblock=size=8,rle=8 \
119#		--subblock=size=4096,rle=12 \
120#
121	for ARGS in \
122		--delta=dist=1 \
123		--delta=dist=4 \
124		--delta=dist=256 \
125		--x86 \
126		--powerpc \
127		--ia64 \
128		--arm \
129		--armthumb \
130		--sparc
131	do
132		test_xz $ARGS --lzma2=dict=64KiB,nice=32,mode=fast
133
134		# Disabled until Subblock format is stable.
135		# test_xz --subblock $ARGS --lzma2=dict=64KiB,nice=32,mode=fast
136	done
137
138	echo
139done
140
141(exit 0)
142exit 0
143