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