libFLAC/stream_encoder_intrin_*.c: More refactoring
[flac.git] / test / test_flac.sh
1 #!/bin/sh -e
2
3 #  FLAC - Free Lossless Audio Codec
4 #  Copyright (C) 2001-2009  Josh Coalson
5 #  Copyright (C) 2011-2014  Xiph.Org Foundation
6 #
7 #  This file is part the FLAC project.  FLAC is comprised of several
8 #  components distributed under different licenses.  The codec libraries
9 #  are distributed under Xiph.Org's BSD-like license (see the file
10 #  COPYING.Xiph in this distribution).  All other programs, libraries, and
11 #  plugins are distributed under the GPL (see COPYING.GPL).  The documentation
12 #  is distributed under the Gnu FDL (see COPYING.FDL).  Each file in the
13 #  FLAC distribution contains at the top the terms under which it may be
14 #  distributed.
15 #
16 #  Since this particular file is relevant to all components of FLAC,
17 #  it may be distributed under the Xiph.Org license, which is the least
18 #  restrictive of those mentioned above.  See the file COPYING.Xiph in this
19 #  distribution.
20
21 . ./common.sh
22
23 # we use '.' as decimal separator in --skip/--until tests
24 export LANG=C LC_ALL=C
25
26 dddie="die ERROR: creating files with dd"
27
28 PATH=`pwd`/../src/flac:$PATH
29 PATH=`pwd`/../src/metaflac:$PATH
30 PATH=`pwd`/../src/test_streams:$PATH
31 PATH=`pwd`/../objs/$BUILD/bin:$PATH
32
33 flac${EXE} --help 1>/dev/null 2>/dev/null || die "ERROR can't find flac executable"
34
35 run_flac ()
36 {
37         if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
38                 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 flac $*" >>test_flac.valgrind.log
39                 valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $* 4>>test_flac.valgrind.log
40         else
41                 flac${EXE} $TOTALLY_SILENT --no-error-on-compression-fail $*
42         fi
43 }
44
45 run_metaflac ()
46 {
47         if [ x"$FLAC__TEST_WITH_VALGRIND" = xyes ] ; then
48                 echo "valgrind --leak-check=yes --show-reachable=yes --num-callers=50 metaflac $*" >>test_flac.valgrind.log
49                 valgrind --leak-check=yes --show-reachable=yes --num-callers=50 --log-fd=4 metaflac${EXE} $* 4>>test_flac.valgrind.log
50         else
51                 metaflac${EXE} $*
52         fi
53 }
54
55 md5cmp ()
56 {
57         n=`( [ -f "$1" ] && [ -f "$2" ] && metaflac${EXE} --show-md5sum --no-filename "$1" "$2" 2>/dev/null || exit 1 ) | uniq | wc -l`
58         [ "$n" != "" ] && [ $n = 1 ]
59 }
60
61 if [ `env | grep -ic '^comspec='` != 0 ] ; then
62         is_win=yes
63 else
64         is_win=no
65 fi
66
67 echo "Checking for --ogg support in flac..."
68 if flac${EXE} --ogg $TOTTALY_SILENT --force-raw-format --endian=little --sign=signed --channels=1 --bps=8 --sample-rate=44100 -c $0 1>/dev/null 2>&1 ; then
69         has_ogg=yes;
70         echo "flac --ogg works"
71 else
72         has_ogg=no;
73         echo "flac --ogg doesn't work"
74 fi
75
76 echo "Generating streams..."
77 if [ ! -f wacky1.wav ] ; then
78         test_streams || die "ERROR during test_streams"
79 fi
80
81 ############################################################################
82 # test that flac doesn't automatically overwrite files unless -f is used
83 ############################################################################
84
85 echo "Try encoding to a file that exists; should fail"
86 cp wacky1.wav exist.wav
87 touch exist.flac
88 if run_flac -0 exist.wav ; then
89         die "ERROR: it should have failed but didn't"
90 else
91         echo "OK, it failed as it should"
92 fi
93
94 echo "Try encoding with -f to a file that exists; should succeed"
95 if run_flac -0 --force exist.wav ; then
96         echo "OK, it succeeded as it should"
97 else
98         die "ERROR: it should have succeeded but didn't"
99 fi
100
101 echo "Try decoding to a file that exists; should fail"
102 if run_flac -d exist.flac ; then
103         die "ERROR: it should have failed but didn't"
104 else
105         echo "OK, it failed as it should"
106 fi
107
108 echo "Try decoding with -f to a file that exists; should succeed"
109 if run_flac -d -f exist.flac ; then
110         echo "OK, it succeeded as it should"
111 else
112         die "ERROR: it should have succeeded but didn't"
113 fi
114
115 rm -f exist.wav exist.flac
116
117 ############################################################################
118 # test fractional block sizes
119 ############################################################################
120
121 test_fractional ()
122 {
123         blocksize=$1
124         samples=$2
125         dd if=noise.raw ibs=4 count=$samples of=pbs.raw 2>/dev/null || $dddie
126         echo $ECHO_N "fractional block size test (blocksize=$blocksize samples=$samples) encode... " $ECHO_C
127         run_flac --force --verify --force-raw-format --endian=little --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=$blocksize --no-padding --lax -o pbs.flac pbs.raw || die "ERROR"
128         echo $ECHO_N "decode... " $ECHO_C
129         run_flac --force --decode --force-raw-format --endian=little --sign=signed -o pbs.cmp pbs.flac || die "ERROR"
130         echo $ECHO_N "compare... " $ECHO_C
131         cmp pbs.raw pbs.cmp || die "ERROR: file mismatch"
132         echo "OK"
133         rm -f pbs.raw pbs.flac pbs.cmp
134 }
135
136 # The special significance of 2048 is it's the # of samples that flac calls
137 # FLAC__stream_encoder_process() on.
138 #
139 # We're trying to make sure the 1-sample overread logic in the stream encoder
140 # (used for last-block checking) works; these values probe around common
141 # multiples of the flac sample chunk size (2048) and the blocksize.
142 for samples in 31 32 33 34 35 2046 2047 2048 2049 2050 ; do
143         test_fractional 33 $samples
144 done
145 for samples in 254 255 256 257 258 510 511 512 513 514 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
146         test_fractional 256 $samples
147 done
148 for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 ; do
149         test_fractional 2048 $samples
150 done
151 for samples in 1022 1023 1024 1025 1026 2046 2047 2048 2049 2050 4094 4095 4096 4097 4098 4606 4607 4608 4609 4610 8190 8191 8192 8193 8194 16382 16383 16384 16385 16386 ; do
152         test_fractional 4608 $samples
153 done
154
155 ############################################################################
156 # basic 'round-trip' tests of various kinds of streams
157 ############################################################################
158
159 rt_test_raw ()
160 {
161         f="$1"
162         extra="$2"
163         channels=`echo $f | awk -F- '{print $2}'`
164         bps=`echo $f | awk -F- '{print $3}'`
165         sign=`echo $f | awk -F- '{print $4}'`
166
167         echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
168         run_flac --force --verify --force-raw-format --endian=little --sign=$sign --sample-rate=44100 --bps=$bps --channels=$channels --no-padding --lax -o rt.flac $extra $f || die "ERROR"
169         echo $ECHO_N "decode... " $ECHO_C
170         run_flac --force --decode --force-raw-format --endian=little --sign=$sign -o rt.raw $extra rt.flac || die "ERROR"
171         echo $ECHO_N "compare... " $ECHO_C
172         cmp $f rt.raw || die "ERROR: file mismatch"
173         echo "OK"
174         rm -f rt.flac rt.raw
175 }
176
177 rt_test_wav ()
178 {
179         f="$1"
180         extra="$2"
181         echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
182         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
183         echo $ECHO_N "decode... " $ECHO_C
184         run_flac --force --decode --channel-map=none -o rt.wav $extra rt.flac || die "ERROR"
185         echo $ECHO_N "compare... " $ECHO_C
186         cmp $f rt.wav || die "ERROR: file mismatch"
187         echo "OK"
188         rm -f rt.flac rt.wav
189 }
190
191 rt_test_w64 ()
192 {
193         f="$1"
194         extra="$2"
195         echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
196         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
197         echo $ECHO_N "decode... " $ECHO_C
198         run_flac --force --decode --channel-map=none -o rt.w64 $extra rt.flac || die "ERROR"
199         echo $ECHO_N "compare... " $ECHO_C
200         cmp $f rt.w64 || die "ERROR: file mismatch"
201         echo "OK"
202         rm -f rt.flac rt.w64
203 }
204
205 rt_test_rf64 ()
206 {
207         f="$1"
208         extra="$2"
209         echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
210         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
211         echo $ECHO_N "decode... " $ECHO_C
212         run_flac --force --decode --channel-map=none -o rt.rf64 $extra rt.flac || die "ERROR"
213         echo $ECHO_N "compare... " $ECHO_C
214         cmp $f rt.rf64 || die "ERROR: file mismatch"
215         echo "OK"
216         rm -f rt.flac rt.rf64
217 }
218
219 rt_test_aiff ()
220 {
221         f="$1"
222         extra="$2"
223         echo $ECHO_N "round-trip test ($f) encode... " $ECHO_C
224         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
225         echo $ECHO_N "decode... " $ECHO_C
226         run_flac --force --decode --channel-map=none -o rt.aiff $extra rt.flac || die "ERROR"
227         echo $ECHO_N "compare... " $ECHO_C
228         cmp $f rt.aiff || die "ERROR: file mismatch"
229         echo "OK"
230         rm -f rt.flac rt.aiff
231 }
232
233 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
234 rt_test_flac ()
235 {
236         f="$1"
237         extra="$2"
238         echo $ECHO_N "round-trip test ($f->flac->flac->wav) encode... " $ECHO_C
239         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.flac $extra $f || die "ERROR"
240         echo $ECHO_N "re-encode... " $ECHO_C
241         run_flac --force --verify --lax -o rt2.flac rt.flac || die "ERROR"
242         echo $ECHO_N "decode... " $ECHO_C
243         run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.flac || die "ERROR"
244         echo $ECHO_N "compare... " $ECHO_C
245         cmp $f rt.wav || die "ERROR: file mismatch"
246         echo "OK"
247         rm -f rt.wav rt.flac rt2.flac
248 }
249
250 # assumes input file is WAVE; does not check the metadata-preserving features of flac-to-flac; that is checked later
251 rt_test_ogg_flac ()
252 {
253         f="$1"
254         extra="$2"
255         echo $ECHO_N "round-trip test ($f->oggflac->oggflac->wav) encode... " $ECHO_C
256         run_flac --force --verify --channel-map=none --no-padding --lax -o rt.oga --ogg $extra $f || die "ERROR"
257         echo $ECHO_N "re-encode... " $ECHO_C
258         run_flac --force --verify --lax -o rt2.oga --ogg rt.oga || die "ERROR"
259         echo $ECHO_N "decode... " $ECHO_C
260         run_flac --force --decode --channel-map=none -o rt.wav $extra rt2.oga || die "ERROR"
261         echo $ECHO_N "compare... " $ECHO_C
262         cmp $f rt.wav || die "ERROR: file mismatch"
263         echo "OK"
264         rm -f rt.wav rt.oga rt2.oga
265 }
266
267 for f in rt-*.raw ; do
268         rt_test_raw $f
269 done
270 for f in rt-*.wav ; do
271         rt_test_wav $f
272 done
273 for f in rt-*.w64 ; do
274         rt_test_w64 $f
275 done
276 for f in rt-*.rf64 ; do
277         rt_test_rf64 $f
278 done
279 for f in rt-*.aiff ; do
280         rt_test_aiff $f
281 done
282 for f in rt-*.wav ; do
283         rt_test_flac $f
284 done
285 if [ $has_ogg = yes ] ; then
286         for f in rt-*.wav ; do
287                 rt_test_ogg_flac $f
288         done
289 fi
290
291 ############################################################################
292 # test --skip and --until
293 ############################################################################
294
295 #
296 # first make some chopped-up raw files
297 #
298 echo "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMN" > master.raw
299 dd if=master.raw ibs=1 count=50 of=50c.raw 2>/dev/null || $dddie
300 dd if=master.raw ibs=1 skip=10 count=40 of=50c.skip10.raw 2>/dev/null || $dddie
301 dd if=master.raw ibs=1 skip=11 count=39 of=50c.skip11.raw 2>/dev/null || $dddie
302 dd if=master.raw ibs=1 skip=20 count=30 of=50c.skip20.raw 2>/dev/null || $dddie
303 dd if=master.raw ibs=1 skip=30 count=20 of=50c.skip30.raw 2>/dev/null || $dddie
304 dd if=master.raw ibs=1 skip=40 count=10 of=50c.skip40.raw 2>/dev/null || $dddie
305 dd if=master.raw ibs=1 count=10 of=50c.until10.raw 2>/dev/null || $dddie
306 dd if=master.raw ibs=1 count=20 of=50c.until20.raw 2>/dev/null || $dddie
307 dd if=master.raw ibs=1 count=30 of=50c.until30.raw 2>/dev/null || $dddie
308 dd if=master.raw ibs=1 count=39 of=50c.until39.raw 2>/dev/null || $dddie
309 dd if=master.raw ibs=1 count=40 of=50c.until40.raw 2>/dev/null || $dddie
310 dd if=master.raw ibs=1 skip=10 count=20 of=50c.skip10.until30.raw 2>/dev/null || $dddie
311 dd if=master.raw ibs=1 skip=10 count=29 of=50c.skip10.until39.raw 2>/dev/null || $dddie
312 dd if=master.raw ibs=1 skip=10 count=30 of=50c.skip10.until40.raw 2>/dev/null || $dddie
313 dd if=master.raw ibs=1 skip=20 count=10 of=50c.skip20.until30.raw 2>/dev/null || $dddie
314 dd if=master.raw ibs=1 skip=20 count=20 of=50c.skip20.until40.raw 2>/dev/null || $dddie
315
316 wav_eopt="--force --verify --no-padding --lax"
317 wav_dopt="--force --decode"
318
319 raw_eopt="$wav_eopt --force-raw-format --endian=big --sign=signed --sample-rate=10 --bps=8 --channels=1"
320 raw_dopt="$wav_dopt --force-raw-format --endian=big --sign=signed"
321
322 #
323 # convert them to WAVE/AIFF/Ogg FLAC files
324 #
325 convert_to_wav ()
326 {
327         run_flac "$2" $1.raw || die "ERROR converting $1.raw to WAVE"
328         run_flac "$3" $1.flac || die "ERROR converting $1.raw to WAVE"
329 }
330 convert_to_wav 50c "$raw_eopt" "$wav_dopt"
331 convert_to_wav 50c.skip10 "$raw_eopt" "$wav_dopt"
332 convert_to_wav 50c.skip11 "$raw_eopt" "$wav_dopt"
333 convert_to_wav 50c.skip20 "$raw_eopt" "$wav_dopt"
334 convert_to_wav 50c.skip30 "$raw_eopt" "$wav_dopt"
335 convert_to_wav 50c.skip40 "$raw_eopt" "$wav_dopt"
336 convert_to_wav 50c.until10 "$raw_eopt" "$wav_dopt"
337 convert_to_wav 50c.until20 "$raw_eopt" "$wav_dopt"
338 convert_to_wav 50c.until30 "$raw_eopt" "$wav_dopt"
339 convert_to_wav 50c.until39 "$raw_eopt" "$wav_dopt"
340 convert_to_wav 50c.until40 "$raw_eopt" "$wav_dopt"
341 convert_to_wav 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
342 convert_to_wav 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
343 convert_to_wav 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
344 convert_to_wav 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
345 convert_to_wav 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
346
347 convert_to_aiff ()
348 {
349         run_flac "$2" $1.raw || die "ERROR converting $1.raw to AIFF"
350         run_flac "$3" $1.flac -o $1.aiff || die "ERROR converting $1.raw to AIFF"
351 }
352 convert_to_aiff 50c "$raw_eopt" "$wav_dopt"
353 convert_to_aiff 50c.skip10 "$raw_eopt" "$wav_dopt"
354 convert_to_aiff 50c.skip11 "$raw_eopt" "$wav_dopt"
355 convert_to_aiff 50c.skip20 "$raw_eopt" "$wav_dopt"
356 convert_to_aiff 50c.skip30 "$raw_eopt" "$wav_dopt"
357 convert_to_aiff 50c.skip40 "$raw_eopt" "$wav_dopt"
358 convert_to_aiff 50c.until10 "$raw_eopt" "$wav_dopt"
359 convert_to_aiff 50c.until20 "$raw_eopt" "$wav_dopt"
360 convert_to_aiff 50c.until30 "$raw_eopt" "$wav_dopt"
361 convert_to_aiff 50c.until39 "$raw_eopt" "$wav_dopt"
362 convert_to_aiff 50c.until40 "$raw_eopt" "$wav_dopt"
363 convert_to_aiff 50c.skip10.until30 "$raw_eopt" "$wav_dopt"
364 convert_to_aiff 50c.skip10.until39 "$raw_eopt" "$wav_dopt"
365 convert_to_aiff 50c.skip10.until40 "$raw_eopt" "$wav_dopt"
366 convert_to_aiff 50c.skip20.until30 "$raw_eopt" "$wav_dopt"
367 convert_to_aiff 50c.skip20.until40 "$raw_eopt" "$wav_dopt"
368
369 convert_to_ogg ()
370 {
371         run_flac "$wav_eopt" --ogg $1.wav || die "ERROR converting $1.raw to Ogg FLAC"
372 }
373 if [ $has_ogg = yes ] ; then
374         convert_to_ogg 50c
375         convert_to_ogg 50c.skip10
376         convert_to_ogg 50c.skip11
377         convert_to_ogg 50c.skip20
378         convert_to_ogg 50c.skip30
379         convert_to_ogg 50c.skip40
380         convert_to_ogg 50c.until10
381         convert_to_ogg 50c.until20
382         convert_to_ogg 50c.until30
383         convert_to_ogg 50c.until39
384         convert_to_ogg 50c.until40
385         convert_to_ogg 50c.skip10.until30
386         convert_to_ogg 50c.skip10.until39
387         convert_to_ogg 50c.skip10.until40
388         convert_to_ogg 50c.skip20.until30
389         convert_to_ogg 50c.skip20.until40
390 fi
391
392 test_skip_until ()
393 {
394         in_fmt=$1
395         out_fmt=$2
396
397         [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
398
399         [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
400
401         if [ $in_fmt = raw ] ; then
402                 eopt="$raw_eopt"
403                 dopt="$raw_dopt"
404         else
405                 eopt="$wav_eopt"
406                 dopt="$wav_dopt"
407         fi
408
409         if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
410                 CMP=md5cmp
411         else
412                 CMP=cmp
413         fi
414
415         if [ $out_fmt = ogg ] ; then
416                 eopt="--ogg $eopt"
417         fi
418
419         #
420         # test --skip when encoding
421         #
422
423         desc="($in_fmt<->$out_fmt)"
424
425         echo $ECHO_N "testing --skip=# (encode) $desc... " $ECHO_C
426         run_flac $eopt --skip=10 -o z50c.skip10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
427         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.$in_fmt z50c.skip10.$out_fmt || die "ERROR decoding FLAC file $desc"
428         $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (encode) $desc"
429         rm -f z50c.skip10.$out_fmt z50c.skip10.$in_fmt
430         echo OK
431
432         echo $ECHO_N "testing --skip=mm:ss (encode) $desc... " $ECHO_C
433         run_flac $eopt --skip=0:01 -o z50c.skip0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
434
435         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.$in_fmt z50c.skip0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
436         $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (encode) $desc"
437         rm -f z50c.skip0_01.$out_fmt z50c.skip0_01.$in_fmt
438         echo OK
439
440         echo $ECHO_N "testing --skip=mm:ss.sss (encode) $desc... " $ECHO_C
441         run_flac $eopt --skip=0:01.1001 -o z50c.skip0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
442         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip0_01.1001.$in_fmt z50c.skip0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
443         $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (encode) $desc"
444         rm -f z50c.skip0_01.1001.$out_fmt z50c.skip0_01.1001.$in_fmt
445         echo OK
446
447         #
448         # test --skip when decoding
449         #
450
451         if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
452
453         echo $ECHO_N "testing --skip=# (decode) $desc... " $ECHO_C
454         run_flac $dopt --skip=10 -o z50c.skip10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
455         $CMP 50c.skip10.$in_fmt z50c.skip10.$in_fmt || die "ERROR: file mismatch for --skip=10 (decode) $desc"
456         rm -f z50c.skip10.$in_fmt
457         echo OK
458
459         echo $ECHO_N "testing --skip=mm:ss (decode) $desc... " $ECHO_C
460         run_flac $dopt --skip=0:01 -o z50c.skip0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
461         $CMP 50c.skip10.$in_fmt z50c.skip0_01.$in_fmt || die "ERROR: file mismatch for --skip=0:01 (decode) $desc"
462         rm -f z50c.skip0_01.$in_fmt
463         echo OK
464
465         echo $ECHO_N "testing --skip=mm:ss.sss (decode) $desc... " $ECHO_C
466         run_flac $dopt --skip=0:01.1001 -o z50c.skip0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
467         $CMP 50c.skip11.$in_fmt z50c.skip0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=0:01.1001 (decode) $desc"
468         rm -f z50c.skip0_01.1001.$in_fmt
469         echo OK
470
471         rm -f z50c.$out_fmt
472
473         #
474         # test --until when encoding
475         #
476
477         echo $ECHO_N "testing --until=# (encode) $desc... " $ECHO_C
478         run_flac $eopt --until=40 -o z50c.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
479         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until40.$in_fmt z50c.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
480         $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (encode) $desc"
481         rm -f z50c.until40.$out_fmt z50c.until40.$in_fmt
482         echo OK
483
484         echo $ECHO_N "testing --until=mm:ss (encode) $desc... " $ECHO_C
485         run_flac $eopt --until=0:04 -o z50c.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
486         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_04.$in_fmt z50c.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
487         $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (encode) $desc"
488         rm -f z50c.until0_04.$out_fmt z50c.until0_04.$in_fmt
489         echo OK
490
491         echo $ECHO_N "testing --until=mm:ss.sss (encode) $desc... " $ECHO_C
492         run_flac $eopt --until=0:03.9001 -o z50c.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
493         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until0_03.9001.$in_fmt z50c.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
494         $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (encode) $desc"
495         rm -f z50c.until0_03.9001.$out_fmt z50c.until0_03.9001.$in_fmt
496         echo OK
497
498         echo $ECHO_N "testing --until=-# (encode) $desc... " $ECHO_C
499         run_flac $eopt --until=-10 -o z50c.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
500         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-10.$in_fmt z50c.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
501         $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (encode) $desc"
502         rm -f z50c.until-10.$out_fmt z50c.until-10.$in_fmt
503         echo OK
504
505         echo $ECHO_N "testing --until=-mm:ss (encode) $desc... " $ECHO_C
506         run_flac $eopt --until=-0:01 -o z50c.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
507         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.$in_fmt z50c.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
508         $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (encode) $desc"
509         rm -f z50c.until-0_01.$out_fmt z50c.until-0_01.$in_fmt
510         echo OK
511
512         echo $ECHO_N "testing --until=-mm:ss.sss (encode) $desc... " $ECHO_C
513         run_flac $eopt --until=-0:01.1001 -o z50c.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
514         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.until-0_01.1001.$in_fmt z50c.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
515         $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (encode) $desc"
516         rm -f z50c.until-0_01.1001.$out_fmt z50c.until-0_01.1001.$in_fmt
517         echo OK
518
519         #
520         # test --until when decoding
521         #
522
523         if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
524
525         echo $ECHO_N "testing --until=# (decode) $desc... " $ECHO_C
526         run_flac $dopt --until=40 -o z50c.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
527         $CMP 50c.until40.$in_fmt z50c.until40.$in_fmt || die "ERROR: file mismatch for --until=40 (decode) $desc"
528         rm -f z50c.until40.$in_fmt
529         echo OK
530
531         echo $ECHO_N "testing --until=mm:ss (decode) $desc... " $ECHO_C
532         run_flac $dopt --until=0:04 -o z50c.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
533         $CMP 50c.until40.$in_fmt z50c.until0_04.$in_fmt || die "ERROR: file mismatch for --until=0:04 (decode) $desc"
534         rm -f z50c.until0_04.$in_fmt
535         echo OK
536
537         echo $ECHO_N "testing --until=mm:ss.sss (decode) $desc... " $ECHO_C
538         run_flac $dopt --until=0:03.9001 -o z50c.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
539         $CMP 50c.until39.$in_fmt z50c.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --until=0:03.9001 (decode) $desc"
540         rm -f z50c.until0_03.9001.$in_fmt
541         echo OK
542
543         echo $ECHO_N "testing --until=-# (decode) $desc... " $ECHO_C
544         run_flac $dopt --until=-10 -o z50c.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
545         $CMP 50c.until40.$in_fmt z50c.until-10.$in_fmt || die "ERROR: file mismatch for --until=-10 (decode) $desc"
546         rm -f z50c.until-10.$in_fmt
547         echo OK
548
549         echo $ECHO_N "testing --until=-mm:ss (decode) $desc... " $ECHO_C
550         run_flac $dopt --until=-0:01 -o z50c.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
551         $CMP 50c.until40.$in_fmt z50c.until-0_01.$in_fmt || die "ERROR: file mismatch for --until=-0:01 (decode) $desc"
552         rm -f z50c.until-0_01.$in_fmt
553         echo OK
554
555         echo $ECHO_N "testing --until=-mm:ss.sss (decode) $desc... " $ECHO_C
556         run_flac $dopt --until=-0:01.1001 -o z50c.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
557         $CMP 50c.until39.$in_fmt z50c.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --until=-0:01.1001 (decode) $desc"
558         rm -f z50c.until-0_01.1001.$in_fmt
559         echo OK
560
561         rm -f z50c.$out_fmt
562
563         #
564         # test --skip and --until when encoding
565         #
566
567         echo $ECHO_N "testing --skip=10 --until=# (encode) $desc... " $ECHO_C
568         run_flac $eopt --skip=10 --until=40 -o z50c.skip10.until40.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
569         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until40.$in_fmt z50c.skip10.until40.$out_fmt || die "ERROR decoding FLAC file $desc"
570         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (encode) $desc"
571         rm -f z50c.skip10.until40.$out_fmt z50c.skip10.until40.$in_fmt
572         echo OK
573
574         echo $ECHO_N "testing --skip=10 --until=mm:ss (encode) $desc... " $ECHO_C
575         run_flac $eopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
576         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_04.$in_fmt z50c.skip10.until0_04.$out_fmt || die "ERROR decoding FLAC file $desc"
577         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (encode) $desc"
578         rm -f z50c.skip10.until0_04.$out_fmt z50c.skip10.until0_04.$in_fmt
579         echo OK
580
581         echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (encode) $desc... " $ECHO_C
582         run_flac $eopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
583         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until0_03.9001.$in_fmt z50c.skip10.until0_03.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
584         $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (encode) $desc"
585         rm -f z50c.skip10.until0_03.9001.$out_fmt z50c.skip10.until0_03.9001.$in_fmt
586         echo OK
587
588         echo $ECHO_N "testing --skip=10 --until=+# (encode) $desc... " $ECHO_C
589         run_flac $eopt --skip=10 --until=+30 -o z50c.skip10.until+30.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
590         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+30.$in_fmt z50c.skip10.until+30.$out_fmt || die "ERROR decoding FLAC file $desc"
591         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+30.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+30 (encode) $desc"
592         rm -f z50c.skip10.until+30.$out_fmt z50c.skip10.until+30.$in_fmt
593         echo OK
594
595         echo $ECHO_N "testing --skip=10 --until=+mm:ss (encode) $desc... " $ECHO_C
596         run_flac $eopt --skip=10 --until=+0:03 -o z50c.skip10.until+0_03.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
597         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_03.$in_fmt z50c.skip10.until+0_03.$out_fmt || die "ERROR decoding FLAC file $desc"
598         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until+0_03.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:03 (encode) $desc"
599         rm -f z50c.skip10.until+0_03.$out_fmt z50c.skip10.until+0_03.$in_fmt
600         echo OK
601
602         echo $ECHO_N "testing --skip=10 --until=+mm:ss.sss (encode) $desc... " $ECHO_C
603         run_flac $eopt --skip=10 --until=+0:02.9001 -o z50c.skip10.until+0_02.9001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
604         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until+0_02.9001.$in_fmt z50c.skip10.until+0_02.9001.$out_fmt || die "ERROR decoding FLAC file $desc"
605         $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until+0_02.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=+0:02.9001 (encode) $desc"
606         rm -f z50c.skip10.until+0_02.9001.$out_fmt z50c.skip10.until+0_02.9001.$in_fmt
607         echo OK
608
609         echo $ECHO_N "testing --skip=10 --until=-# (encode) $desc... " $ECHO_C
610         run_flac $eopt --skip=10 --until=-10 -o z50c.skip10.until-10.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
611         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-10.$in_fmt z50c.skip10.until-10.$out_fmt || die "ERROR decoding FLAC file $desc"
612         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (encode) $desc"
613         rm -f z50c.skip10.until-10.$out_fmt z50c.skip10.until-10.$in_fmt
614         echo OK
615
616         echo $ECHO_N "testing --skip=10 --until=-mm:ss (encode) $desc... " $ECHO_C
617         run_flac $eopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
618         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.$in_fmt z50c.skip10.until-0_01.$out_fmt || die "ERROR decoding FLAC file $desc"
619         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (encode) $desc"
620         rm -f z50c.skip10.until-0_01.$out_fmt z50c.skip10.until-0_01.$in_fmt
621         echo OK
622
623         echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (encode) $desc... " $ECHO_C
624         run_flac $eopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
625         [ $in_fmt = $out_fmt ] || run_flac $dopt -o z50c.skip10.until-0_01.1001.$in_fmt z50c.skip10.until-0_01.1001.$out_fmt || die "ERROR decoding FLAC file $desc"
626         $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (encode) $desc"
627         rm -f z50c.skip10.until-0_01.1001.$out_fmt z50c.skip10.until-0_01.1001.$in_fmt
628         echo OK
629
630         #
631         # test --skip and --until when decoding
632         #
633
634         if [ $in_fmt != $out_fmt ] ; then run_flac $eopt -o z50c.$out_fmt 50c.$in_fmt ; else cp -f 50c.$in_fmt z50c.$out_fmt ; fi || die "ERROR generating FLAC file $desc"
635
636
637         echo $ECHO_N "testing --skip=10 --until=# (decode) $desc... " $ECHO_C
638         run_flac $dopt --skip=10 --until=40 -o z50c.skip10.until40.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
639         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until40.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=40 (decode) $desc"
640         rm -f z50c.skip10.until40.$in_fmt
641         echo OK
642
643         echo $ECHO_N "testing --skip=10 --until=mm:ss (decode) $desc... " $ECHO_C
644         run_flac $dopt --skip=10 --until=0:04 -o z50c.skip10.until0_04.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
645         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until0_04.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:04 (decode) $desc"
646         rm -f z50c.skip10.until0_04.$in_fmt
647         echo OK
648
649         echo $ECHO_N "testing --skip=10 --until=mm:ss.sss (decode) $desc... " $ECHO_C
650         run_flac $dopt --skip=10 --until=0:03.9001 -o z50c.skip10.until0_03.9001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
651         $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until0_03.9001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=0:03.9001 (decode) $desc"
652         rm -f z50c.skip10.until0_03.9001.$in_fmt
653         echo OK
654
655         echo $ECHO_N "testing --skip=10 --until=-# (decode) $desc... " $ECHO_C
656         run_flac $dopt --skip=10 --until=-10 -o z50c.skip10.until-10.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
657         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-10.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-10 (decode) $desc"
658         rm -f z50c.skip10.until-10.$in_fmt
659         echo OK
660
661         echo $ECHO_N "testing --skip=10 --until=-mm:ss (decode) $desc... " $ECHO_C
662         run_flac $dopt --skip=10 --until=-0:01 -o z50c.skip10.until-0_01.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
663         $CMP 50c.skip10.until40.$in_fmt z50c.skip10.until-0_01.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01 (decode) $desc"
664         rm -f z50c.skip10.until-0_01.$in_fmt
665         echo OK
666
667         echo $ECHO_N "testing --skip=10 --until=-mm:ss.sss (decode) $desc... " $ECHO_C
668         run_flac $dopt --skip=10 --until=-0:01.1001 -o z50c.skip10.until-0_01.1001.$in_fmt z50c.$out_fmt || die "ERROR decoding FLAC file $desc"
669         $CMP 50c.skip10.until39.$in_fmt z50c.skip10.until-0_01.1001.$in_fmt || die "ERROR: file mismatch for --skip=10 --until=-0:01.1001 (decode) $desc"
670         rm -f z50c.skip10.until-0_01.1001.$in_fmt
671         echo OK
672
673         rm -f z50c.$out_fmt
674 }
675
676 test_skip_until raw flac
677 test_skip_until wav flac
678 test_skip_until aiff flac
679 test_skip_until flac flac
680 #@@@if [ $has_ogg = yes ] ; then
681 #@@@    #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
682 #@@@    test_skip_until ogg flac
683 #@@@fi
684
685 if [ $has_ogg = yes ] ; then
686         test_skip_until raw ogg
687         test_skip_until wav ogg
688         test_skip_until aiff ogg
689         #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
690         #@@@test_skip_until flac ogg
691         #@@@test_skip_until ogg ogg
692 fi
693
694 echo "testing seek extremes:"
695
696 run_flac --verify --force --no-padding --force-raw-format --endian=big --sign=signed --sample-rate=44100 --bps=16 --channels=2 --blocksize=576 noise.raw || die "ERROR generating FLAC file"
697
698 if [ $is_win = no ] ; then
699         total_noise_cdda_samples=`run_metaflac --show-total-samples noise.flac`
700         [ $? = 0 ] || die "ERROR getting total sample count from noise.flac"
701 else
702         # some flavors of cygwin don't seem to treat the \x0d as a word
703         # separator, so we hard code it.  we'll just have to fix it later
704         # if we change the way noise.flac is made.
705         total_noise_cdda_samples=393216
706 fi
707
708 echo $ECHO_N "testing --skip=0... " $ECHO_C
709 run_flac $wav_dopt --skip=0 -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
710 echo OK
711
712 for delta in 2 1 ; do
713         n=`expr $total_noise_cdda_samples - $delta`
714         echo $ECHO_N "testing --skip=$n... " $ECHO_C
715         run_flac $wav_dopt --skip=$n -o z.wav noise.flac || die "ERROR decoding FLAC file noise.flac"
716         echo OK
717 done
718
719 rm noise.flac z.wav
720
721 ############################################################################
722 # test --input-size
723 ############################################################################
724
725 #@@@ cat will not work on old cygwin, need to fix
726 if [ $is_win = no ] ; then
727         echo $ECHO_N "testing --input-size=50 --skip=10... " $ECHO_C
728         cat 50c.raw | run_flac $raw_eopt --input-size=50 --skip=10 -o z50c.skip10.flac - || die "ERROR generating FLAC file"
729         run_flac $raw_dopt -o z50c.skip10.raw z50c.skip10.flac || die "ERROR decoding FLAC file"
730         cmp 50c.skip10.raw z50c.skip10.raw || die "ERROR: file mismatch for --input-size=50 --skip=10"
731         rm -f z50c.skip10.raw z50c.skip10.flac
732         echo OK
733 fi
734
735
736 ############################################################################
737 # test --cue
738 ############################################################################
739
740 #
741 # create the cue sheet
742 #
743 cuesheet=cuetest.cue
744 cat > $cuesheet << EOF
745 CATALOG 1234567890123
746 FILE "blah" WAVE
747   TRACK 01 AUDIO
748     INDEX 01 0
749     INDEX 02 10
750     INDEX 03 20
751   TRACK 02 AUDIO
752     INDEX 01 30
753   TRACK 04 AUDIO
754     INDEX 01 40
755 EOF
756
757 test_cue ()
758 {
759         in_fmt=$1
760         out_fmt=$2
761
762         [ "$in_fmt" = wav ] || [ "$in_fmt" = aiff ] || [ "$in_fmt" = raw ] || [ "$in_fmt" = flac ] || [ "$in_fmt" = ogg ] || die "ERROR: internal error, bad 'in' format '$in_fmt'"
763
764         [ "$out_fmt" = flac ] || [ "$out_fmt" = ogg ] || die "ERROR: internal error, bad 'out' format '$out_fmt'"
765
766         if [ $in_fmt = raw ] ; then
767                 eopt="$raw_eopt"
768                 dopt="$raw_dopt"
769         else
770                 eopt="$wav_eopt"
771                 dopt="$wav_dopt"
772         fi
773
774         if ( [ $in_fmt = flac ] || [ $in_fmt = ogg ] ) && ( [ $out_fmt = flac ] || [ $out_fmt = ogg ] ) ; then
775                 CMP=md5cmp
776         else
777                 CMP=cmp
778         fi
779
780         if [ $out_fmt = ogg ] ; then
781                 eopt="--ogg $eopt"
782         fi
783
784         desc="($in_fmt<->$out_fmt)"
785
786         #
787         # for this we need just need just one FLAC file; --cue only works while decoding
788         #
789         run_flac $eopt --cuesheet=$cuesheet -o z50c.cue.$out_fmt 50c.$in_fmt || die "ERROR generating FLAC file $desc"
790
791         # To make it easy to translate from cue point to sample numbers, the
792         # file has a sample rate of 10 Hz and a cuesheet like so:
793         #
794         # TRACK 01, INDEX 01 : 0:00.00 -> sample 0
795         # TRACK 01, INDEX 02 : 0:01.00 -> sample 10
796         # TRACK 01, INDEX 03 : 0:02.00 -> sample 20
797         # TRACK 02, INDEX 01 : 0:03.00 -> sample 30
798         # TRACK 04, INDEX 01 : 0:04.00 -> sample 40
799         #
800         echo $ECHO_N "testing --cue=- $desc... " $ECHO_C
801         run_flac $dopt -o z50c.cued.$in_fmt --cue=- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
802         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=- $desc"
803         rm -f z50c.cued.$in_fmt
804         echo OK
805
806         echo $ECHO_N "testing --cue=1.0 $desc... " $ECHO_C
807         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
808         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0 $desc"
809         rm -f z50c.cued.$in_fmt
810         echo OK
811
812         echo $ECHO_N "testing --cue=1.0- $desc... " $ECHO_C
813         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
814         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0- $desc"
815         rm -f z50c.cued.$in_fmt
816         echo OK
817
818         echo $ECHO_N "testing --cue=1.1 $desc... " $ECHO_C
819         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
820         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1 $desc"
821         rm -f z50c.cued.$in_fmt
822         echo OK
823
824         echo $ECHO_N "testing --cue=1.1- $desc... " $ECHO_C
825         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
826         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1- $desc"
827         rm -f z50c.cued.$in_fmt
828         echo OK
829
830         echo $ECHO_N "testing --cue=1.2 $desc... " $ECHO_C
831         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
832         $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2 $desc"
833         rm -f z50c.cued.$in_fmt
834         echo OK
835
836         echo $ECHO_N "testing --cue=1.2- $desc... " $ECHO_C
837         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
838         $CMP 50c.skip10.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2- $desc"
839         rm -f z50c.cued.$in_fmt
840         echo OK
841
842         echo $ECHO_N "testing --cue=1.4 $desc... " $ECHO_C
843         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
844         $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4 $desc"
845         rm -f z50c.cued.$in_fmt
846         echo OK
847
848         echo $ECHO_N "testing --cue=1.4- $desc... " $ECHO_C
849         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4- z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
850         $CMP 50c.skip20.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4- $desc"
851         rm -f z50c.cued.$in_fmt
852         echo OK
853
854         echo $ECHO_N "testing --cue=-5.0 $desc... " $ECHO_C
855         run_flac $dopt -o z50c.cued.$in_fmt --cue=-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
856         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-5.0 $desc"
857         rm -f z50c.cued.$in_fmt
858         echo OK
859
860         echo $ECHO_N "testing --cue=-4.1 $desc... " $ECHO_C
861         run_flac $dopt -o z50c.cued.$in_fmt --cue=-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
862         $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-4.1 $desc"
863         rm -f z50c.cued.$in_fmt
864         echo OK
865
866         echo $ECHO_N "testing --cue=-3.1 $desc... " $ECHO_C
867         run_flac $dopt -o z50c.cued.$in_fmt --cue=-3.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
868         $CMP 50c.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-3.1 $desc"
869         rm -f z50c.cued.$in_fmt
870         echo OK
871
872         echo $ECHO_N "testing --cue=-1.4 $desc... " $ECHO_C
873         run_flac $dopt -o z50c.cued.$in_fmt --cue=-1.4 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
874         $CMP 50c.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=-1.4 $desc"
875         rm -f z50c.cued.$in_fmt
876         echo OK
877
878         echo $ECHO_N "testing --cue=1.0-5.0 $desc... " $ECHO_C
879         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.0-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
880         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.0-5.0 $desc"
881         rm -f z50c.cued.$in_fmt
882         echo OK
883
884         echo $ECHO_N "testing --cue=1.1-5.0 $desc... " $ECHO_C
885         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.1-5.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
886         $CMP 50c.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.1-5.0 $desc"
887         rm -f z50c.cued.$in_fmt
888         echo OK
889
890         echo $ECHO_N "testing --cue=1.2-4.1 $desc... " $ECHO_C
891         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.2-4.1 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
892         $CMP 50c.skip10.until40.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.2-4.1 $desc"
893         rm -f z50c.cued.$in_fmt
894         echo OK
895
896         echo $ECHO_N "testing --cue=1.4-2.0 $desc... " $ECHO_C
897         run_flac $dopt -o z50c.cued.$in_fmt --cue=1.4-2.0 z50c.cue.$out_fmt || die "ERROR decoding FLAC file $desc"
898         $CMP 50c.skip20.until30.$in_fmt z50c.cued.$in_fmt || die "ERROR: file mismatch for --cue=1.4-2.0 $desc"
899         rm -f z50c.cued.$in_fmt
900         echo OK
901
902         rm -f z50c.cue.$out_fmt
903 }
904
905 test_cue raw flac
906 test_cue wav flac
907 test_cue aiff flac
908 test_cue flac flac
909 #@@@if [ $has_ogg = yes ] ; then
910 #@@@    #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
911 #@@@    test_cue ogg flac
912 #@@@fi
913
914 if [ $has_ogg = yes ] ; then
915         test_cue raw ogg
916         test_cue wav ogg
917         test_cue aiff ogg
918         #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
919         #@@@test_cue flac ogg
920         #@@@test_cue ogg ogg
921 fi
922
923 ############################################################################
924 # test 'fixup' code that happens when a FLAC file with total_samples == 0
925 # in the STREAMINFO block is converted to WAVE or AIFF, requiring the
926 # decoder go back and fix up the chunk headers
927 ############################################################################
928
929 echo $ECHO_N "WAVE fixup test... " $ECHO_C
930
931 echo $ECHO_N "prepare... " $ECHO_C
932 convert_to_wav noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference WAVE"
933
934 echo $ECHO_N "encode... " $ECHO_C
935 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
936 # binary-mode stdin problem, so we use an undocumented option to metaflac to
937 # set the total sample count to 0
938 if [ $is_win = yes ] ; then
939         run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
940         run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
941 else
942         cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
943 fi
944
945 echo $ECHO_N "decode... " $ECHO_C
946 run_flac $wav_dopt fixup.flac -o fixup.wav || die "ERROR decoding FLAC file"
947
948 echo $ECHO_N "compare... " $ECHO_C
949 cmp noise.wav fixup.wav || die "ERROR: file mismatch"
950
951 echo OK
952 rm -f noise.wav fixup.wav fixup.flac
953
954 echo $ECHO_N "AIFF fixup test... " $ECHO_C
955
956 echo $ECHO_N "prepare... " $ECHO_C
957 convert_to_aiff noise "$raw_eopt" "$wav_dopt" || die "ERROR creating reference AIFF"
958
959 echo $ECHO_N "encode... " $ECHO_C
960 # the pipe from 'cat' to 'flac' does not work on cygwin because of the EOF/
961 # binary-mode stdin problem, so we use an undocumented option to metaflac to
962 # set the total sample count to 0
963 if [ $is_win = yes ] ; then
964         run_flac $raw_eopt noise.raw -o fixup.flac || die "ERROR generating FLAC file"
965         run_metaflac --set-total-samples=0 fixup.flac 2> /dev/null
966 else
967         cat noise.raw | run_flac $raw_eopt - -c > fixup.flac || die "ERROR generating FLAC file"
968 fi
969
970 echo $ECHO_N "decode... " $ECHO_C
971 run_flac $wav_dopt fixup.flac -o fixup.aiff || die "ERROR decoding FLAC file"
972
973 echo $ECHO_N "compare... " $ECHO_C
974 cmp noise.aiff fixup.aiff || die "ERROR: file mismatch"
975
976 echo OK
977 rm -f noise.aiff fixup.aiff fixup.flac
978
979
980 ############################################################################
981 # multi-file tests
982 ############################################################################
983
984 echo "Generating multiple input files from noise..."
985 multifile_format_decode="--endian=big --sign=signed"
986 multifile_format_encode="$multifile_format_decode --sample-rate=44100 --bps=16 --channels=2 --no-padding"
987 short_noise_cdda_samples=`expr $total_noise_cdda_samples / 8`
988 run_flac --verify --force --force-raw-format $multifile_format_encode --until=$short_noise_cdda_samples -o shortnoise.flac noise.raw || die "ERROR generating FLAC file"
989 run_flac --decode --force shortnoise.flac -o shortnoise.raw --force-raw-format $multifile_format_decode || die "ERROR generating RAW file"
990 run_flac --decode --force shortnoise.flac || die "ERROR generating WAVE file"
991 run_flac --decode --force shortnoise.flac -o shortnoise.aiff || die "ERROR generating AIFF file"
992 cp shortnoise.flac file0.flac
993 cp shortnoise.flac file1.flac
994 cp shortnoise.flac file2.flac
995 rm -f shortnoise.flac
996 cp shortnoise.wav file0.wav
997 cp shortnoise.wav file1.wav
998 cp shortnoise.wav file2.wav
999 rm -f shortnoise.wav
1000 cp shortnoise.aiff file0.aiff
1001 cp shortnoise.aiff file1.aiff
1002 cp shortnoise.aiff file2.aiff
1003 rm -f shortnoise.aiff
1004 cp shortnoise.raw file0.raw
1005 cp shortnoise.raw file1.raw
1006 cp shortnoise.raw file2.raw
1007 rm -f shortnoise.raw
1008 # create authoritative sector-aligned files for comparison
1009 file0_samples=`expr \( $short_noise_cdda_samples / 588 \) \* 588`
1010 file0_remainder=`expr $short_noise_cdda_samples - $file0_samples`
1011 file1_samples=`expr \( \( $file0_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1012 file1_remainder=`expr $file0_remainder + $short_noise_cdda_samples - $file1_samples`
1013 file1_samples=`expr $file1_samples - $file0_remainder`
1014 file2_samples=`expr \( \( $file1_remainder + $short_noise_cdda_samples \) / 588 \) \* 588`
1015 file2_remainder=`expr $file1_remainder + $short_noise_cdda_samples - $file2_samples`
1016 file2_samples=`expr $file2_samples - $file1_remainder`
1017 if [ $file2_remainder != '0' ] ; then
1018         file2_samples=`expr $file2_samples + $file2_remainder`
1019         file2_remainder=`expr 588 - $file2_remainder`
1020 fi
1021
1022 dd if=file0.raw ibs=4 count=$file0_samples of=file0s.raw 2>/dev/null || $dddie
1023 dd if=file0.raw ibs=4 count=$file0_remainder of=file1s.raw skip=$file0_samples 2>/dev/null || $dddie
1024 dd if=file1.raw ibs=4 count=$file1_samples of=z.raw 2>/dev/null || $dddie
1025 cat z.raw >> file1s.raw || die "ERROR: cat-ing sector-aligned files"
1026 dd if=file1.raw ibs=4 count=$file1_remainder of=file2s.raw skip=$file1_samples 2>/dev/null || $dddie
1027 dd if=file2.raw ibs=4 count=$file2_samples of=z.raw 2>/dev/null || $dddie
1028 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1029 dd if=/dev/zero ibs=4 count=$file2_remainder of=z.raw 2>/dev/null || $dddie
1030 cat z.raw >> file2s.raw || die "ERROR: cat-ing sector-aligned files"
1031 rm -f z.raw
1032
1033 convert_to_wav file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1034 convert_to_wav file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1035 convert_to_wav file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned WAVE"
1036
1037 convert_to_aiff file0s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1038 convert_to_aiff file1s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1039 convert_to_aiff file2s "$multifile_format_encode --force --force-raw-format" "$SILENT --force --decode" || die "ERROR creating authoritative sector-aligned AIFF"
1040
1041 test_multifile ()
1042 {
1043         input_type=$1
1044         streamtype=$2
1045         sector_align=$3
1046         encode_options="$4"
1047
1048         extra_encode_options=""
1049         extra_decode_options=""
1050         if [ $input_type = "raw" ] ; then
1051                 extra_encode_options="--force-raw-format $multifile_format_encode"
1052                 extra_decode_options="--force-raw-format $multifile_format_decode"
1053         else
1054                 if [ $input_type = "aiff" ] ; then
1055                         extra_decode_options="--force-aiff-format"
1056                 fi
1057         fi
1058
1059         if [ $streamtype = ogg ] ; then
1060                 suffix=oga
1061                 encode_options="$encode_options --ogg"
1062         else
1063                 suffix=flac
1064         fi
1065
1066         if [ $sector_align = sector_align ] ; then
1067                 encode_options="$encode_options --sector-align"
1068         fi
1069
1070         if [ $input_type = flac ] || [ $input_type = ogg ] ; then
1071                 CMP=md5cmp
1072         else
1073                 CMP=cmp
1074         fi
1075
1076         for n in 0 1 2 ; do
1077                 cp file$n.$input_type file${n}x.$input_type
1078         done
1079         run_flac --force $encode_options $extra_encode_options file0x.$input_type file1x.$input_type file2x.$input_type || die "ERROR"
1080         run_flac --force --decode $extra_decode_options file0x.$suffix file1x.$suffix file2x.$suffix || die "ERROR"
1081         if [ $sector_align != sector_align ] ; then
1082                 for n in 0 1 2 ; do
1083                         $CMP file$n.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1084                 done
1085         else
1086                 for n in 0 1 2 ; do
1087                         $CMP file${n}s.$input_type file${n}x.$input_type || die "ERROR: file mismatch on file #$n"
1088                 done
1089         fi
1090         for n in 0 1 2 ; do
1091                 rm -f file${n}x.$suffix file${n}x.$input_type
1092         done
1093 }
1094
1095 input_types="raw wav aiff flac"
1096 #@@@ doesn't work yet because md5cmp doesn't work because metaflac doesn't work on ogg flac yet
1097 #@@@if [ $has_ogg = yes ] ; then
1098 #@@@    input_types="$input_types ogg"
1099 #@@@fi
1100 for input_type in $input_types ; do
1101         echo "Testing multiple $input_type files without verify..."
1102         test_multifile $input_type flac no_sector_align ""
1103
1104         echo "Testing multiple $input_type files with verify..."
1105         test_multifile $input_type flac no_sector_align "--verify"
1106
1107         if [ $input_type != flac ] && [ $input_type != ogg ] ; then # --sector-align not supported for FLAC input
1108                 echo "Testing multiple $input_type files with --sector-align, without verify..."
1109                 test_multifile $input_type flac sector_align ""
1110
1111                 echo "Testing multiple $input_type files with --sector-align, with verify..."
1112                 test_multifile $input_type flac sector_align "--verify"
1113         fi
1114
1115         if [ $has_ogg = yes ] ; then
1116                 echo "Testing multiple $input_type files with --ogg, without verify..."
1117                 test_multifile $input_type ogg no_sector_align ""
1118
1119                 echo "Testing multiple $input_type files with --ogg, with verify..."
1120                 test_multifile $input_type ogg no_sector_align "--verify"
1121
1122                 if [ $input_type != flac ] ; then # --sector-align not supported for FLAC input
1123                         echo "Testing multiple $input_type files with --ogg and --sector-align, without verify..."
1124                         test_multifile $input_type ogg sector_align ""
1125
1126                         echo "Testing multiple $input_type files with --ogg and --sector-align, with verify..."
1127                         test_multifile $input_type ogg sector_align "--verify"
1128                 fi
1129
1130                 echo "Testing multiple $input_type files with --ogg and --serial-number, with verify..."
1131                 test_multifile $input_type ogg no_sector_align "--serial-number=321 --verify"
1132         fi
1133 done
1134
1135
1136 ############################################################################
1137 # test --keep-foreign-metadata
1138 ############################################################################
1139
1140 echo "Testing --keep-foreign-metadata..."
1141
1142 rt_test_wav wacky1.wav '--keep-foreign-metadata'
1143 rt_test_wav wacky2.wav '--keep-foreign-metadata'
1144 rt_test_w64 wacky1.w64 '--keep-foreign-metadata'
1145 rt_test_w64 wacky2.w64 '--keep-foreign-metadata'
1146 rt_test_rf64 wacky1.rf64 '--keep-foreign-metadata'
1147 rt_test_rf64 wacky2.rf64 '--keep-foreign-metadata'
1148
1149
1150 ############################################################################
1151 # test the metadata-handling properties of flac-to-flac encoding
1152 ############################################################################
1153
1154 echo "Testing the metadata-handling properties of flac-to-flac encoding..."
1155
1156 testdatadir=${top_srcdir}/test/flac-to-flac-metadata-test-files
1157
1158 filter ()
1159 {
1160         # minor danger, changing vendor strings might change the length of the
1161         # VORBIS_COMMENT block, but if we add "^  length: " to the patterns,
1162         # we lose info about PADDING size that we need
1163         grep -Ev '^  vendor string: |^  m..imum .....size: ' | sed -e 's/, stream_offset.*//'
1164 }
1165 flac2flac ()
1166 {
1167         file="$testdatadir/$1"
1168         case="$testdatadir/$2"
1169         args="$3"
1170         expect="$case-expect.meta"
1171         echo $ECHO_N "$2... " $ECHO_C
1172         # The 'make distcheck' target needs this.
1173         chmod u+w $file
1174         run_flac -f -o out.flac $args $file || die "ERROR encoding FLAC file"
1175         run_metaflac --list out.flac | filter > out.meta || die "ERROR listing metadata of output FLAC file"
1176         diff -q -w $expect out.meta 2>/dev/null || die "ERROR: metadata does not match expected $expect"
1177         echo OK
1178 }
1179
1180 #filter=', stream_offset.*|^  vendor string: |^  length: |^  m..imum .....size: '
1181
1182 # case 00a: no alterations on a file with all metadata types, keep all metadata, in same order
1183 flac2flac input-SCVAUP.flac case00a ""
1184 # case 01a: on file with multiple PADDING blocks, they should be aggregated into one at the end
1185 flac2flac input-SCVPAP.flac case01a ""
1186 # case 01b: on file with multiple PADDING blocks and --no-padding specified, they should all be deleted
1187 flac2flac input-SCVPAP.flac case01b "--no-padding"
1188 # case 01c: on file with multiple PADDING blocks and -P specified, they should all be overwritten with -P value
1189 flac2flac input-SCVPAP.flac case01c "-P 1234"
1190 # case 01d: on file with no PADDING blocks, use -P setting
1191 flac2flac input-SCVA.flac case01d "-P 1234"
1192 # case 01e: on file with no PADDING blocks and no -P given, use default padding
1193 flac2flac input-SCVA.flac case01e ""
1194 # case 02a: on file with no VORBIS_COMMENT block, add new VORBIS_COMMENT
1195 flac2flac input-SCPAP.flac case02a ""
1196 # case 02b: on file with no VORBIS_COMMENT block and --tag, add new VORBIS_COMMENT with tags
1197 flac2flac input-SCPAP.flac case02b "--tag=artist=0"
1198 # case 02c: on file with VORBIS_COMMENT block and --tag, replace existing VORBIS_COMMENT with new tags
1199 flac2flac input-SCVAUP.flac case02c "--tag=artist=0"
1200 # case 03a: on file with no CUESHEET block and --cuesheet specified, add it
1201 flac2flac input-SVAUP.flac case03a "--cuesheet=$testdatadir/input0.cue"
1202 # case 03b: on file with CUESHEET block and --cuesheet specified, overwrite existing CUESHEET
1203 flac2flac input-SCVAUP.flac case03b "--cuesheet=$testdatadir/input0.cue"
1204 # case 03c: on file with CUESHEET block and size-changing option specified, drop existing CUESHEET
1205 flac2flac input-SCVAUP.flac case03c "--skip=1"
1206 # case 04a: on file with no SEEKTABLE block and --no-seektable specified, no SEEKTABLE
1207 flac2flac input-VA.flac case04a "--no-padding --no-seektable"
1208 # case 04b: on file with no SEEKTABLE block and -S specified, new SEEKTABLE
1209 flac2flac input-VA.flac case04b "--no-padding -S 5x"
1210 # case 04c: on file with no SEEKTABLE block and no seektable options specified, new SEEKTABLE with default points
1211 flac2flac input-VA.flac case04c "--no-padding"
1212 # case 04d: on file with SEEKTABLE block and --no-seektable specified, drop existing SEEKTABLE
1213 flac2flac input-SCVA.flac case04d "--no-padding --no-seektable"
1214 # case 04e: on file with SEEKTABLE block and -S specified, overwrite existing SEEKTABLE
1215 flac2flac input-SCVA.flac case04e "--no-padding -S 5x"
1216 # case 04f: on file with SEEKTABLE block and size-changing option specified, drop existing SEEKTABLE, new SEEKTABLE with default points
1217 #(already covered by case03c)
1218
1219 rm -f out.flac out.meta
1220
1221 #@@@ when metaflac handles ogg flac, duplicate flac2flac tests here
1222
1223 cd ..