1*600f14f4SXin Li /* test_libFLAC - Unit tester for libFLAC
2*600f14f4SXin Li * Copyright (C) 2000-2009 Josh Coalson
3*600f14f4SXin Li * Copyright (C) 2011-2023 Xiph.Org Foundation
4*600f14f4SXin Li *
5*600f14f4SXin Li * This program is free software; you can redistribute it and/or
6*600f14f4SXin Li * modify it under the terms of the GNU General Public License
7*600f14f4SXin Li * as published by the Free Software Foundation; either version 2
8*600f14f4SXin Li * of the License, or (at your option) any later version.
9*600f14f4SXin Li *
10*600f14f4SXin Li * This program is distributed in the hope that it will be useful,
11*600f14f4SXin Li * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*600f14f4SXin Li * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13*600f14f4SXin Li * GNU General Public License for more details.
14*600f14f4SXin Li *
15*600f14f4SXin Li * You should have received a copy of the GNU General Public License along
16*600f14f4SXin Li * with this program; if not, write to the Free Software Foundation, Inc.,
17*600f14f4SXin Li * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*600f14f4SXin Li */
19*600f14f4SXin Li
20*600f14f4SXin Li #ifdef HAVE_CONFIG_H
21*600f14f4SXin Li # include <config.h>
22*600f14f4SXin Li #endif
23*600f14f4SXin Li
24*600f14f4SXin Li #include "FLAC/assert.h"
25*600f14f4SXin Li #include "share/compat.h"
26*600f14f4SXin Li #include "private/bitwriter.h" /* from the libFLAC private include area */
27*600f14f4SXin Li #include "bitwriter.h"
28*600f14f4SXin Li #include <stdio.h>
29*600f14f4SXin Li #include <string.h> /* for memcmp() */
30*600f14f4SXin Li
31*600f14f4SXin Li /*
32*600f14f4SXin Li * WATCHOUT! Since FLAC__BitWriter is a private structure, we use a copy of
33*600f14f4SXin Li * the definition here to get at the internals. Make sure this is kept up
34*600f14f4SXin Li * to date with what is in ../libFLAC/bitwriter.c
35*600f14f4SXin Li */
36*600f14f4SXin Li #if (ENABLE_64_BIT_WORDS == 0)
37*600f14f4SXin Li
38*600f14f4SXin Li typedef FLAC__uint32 bwword;
39*600f14f4SXin Li #define FLAC__BYTES_PER_WORD 4
40*600f14f4SXin Li #define FLAC__BITS_PER_WORD 32
41*600f14f4SXin Li #define PRI_BWWORD "08x"
42*600f14f4SXin Li
43*600f14f4SXin Li #else
44*600f14f4SXin Li
45*600f14f4SXin Li typedef FLAC__uint64 bwword;
46*600f14f4SXin Li #define FLAC__BYTES_PER_WORD 8
47*600f14f4SXin Li #define FLAC__BITS_PER_WORD 64
48*600f14f4SXin Li #define PRI_BWWORD "016" PRIx64
49*600f14f4SXin Li
50*600f14f4SXin Li #endif
51*600f14f4SXin Li
52*600f14f4SXin Li struct FLAC__BitWriter {
53*600f14f4SXin Li bwword *buffer;
54*600f14f4SXin Li bwword accum; /* accumulator; bits are right-justified; when full, accum is appended to buffer */
55*600f14f4SXin Li uint32_t capacity; /* capacity of buffer in words */
56*600f14f4SXin Li uint32_t words; /* # of complete words in buffer */
57*600f14f4SXin Li uint32_t bits; /* # of used bits in accum */
58*600f14f4SXin Li };
59*600f14f4SXin Li
60*600f14f4SXin Li #define WORDS_TO_BITS(words) ((words) * FLAC__BITS_PER_WORD)
61*600f14f4SXin Li #define TOTAL_BITS(bw) (WORDS_TO_BITS((bw)->words) + (bw)->bits)
62*600f14f4SXin Li
FLAC__bitwriter_dump(const FLAC__BitWriter * bw,FILE * out)63*600f14f4SXin Li static void FLAC__bitwriter_dump(const FLAC__BitWriter *bw, FILE *out)
64*600f14f4SXin Li {
65*600f14f4SXin Li uint32_t i, j;
66*600f14f4SXin Li if(bw == 0) {
67*600f14f4SXin Li fprintf(out, "bitwriter is NULL\n");
68*600f14f4SXin Li }
69*600f14f4SXin Li else {
70*600f14f4SXin Li fprintf(out, "bitwriter: capacity=%u words=%u bits=%u total_bits=%u\n", bw->capacity, bw->words, bw->bits, TOTAL_BITS(bw));
71*600f14f4SXin Li
72*600f14f4SXin Li for(i = 0; i < bw->words; i++) {
73*600f14f4SXin Li fprintf(out, "%08X: ", i);
74*600f14f4SXin Li for(j = 0; j < FLAC__BITS_PER_WORD; j++)
75*600f14f4SXin Li fprintf(out, "%01d", bw->buffer[i] & ((bwword)1 << (FLAC__BITS_PER_WORD-j-1)) ? 1:0);
76*600f14f4SXin Li fprintf(out, "\n");
77*600f14f4SXin Li }
78*600f14f4SXin Li if(bw->bits > 0) {
79*600f14f4SXin Li fprintf(out, "%08X: ", i);
80*600f14f4SXin Li for(j = 0; j < bw->bits; j++)
81*600f14f4SXin Li fprintf(out, "%01d", bw->accum & ((bwword)1 << (bw->bits-j-1)) ? 1:0);
82*600f14f4SXin Li fprintf(out, "\n");
83*600f14f4SXin Li }
84*600f14f4SXin Li }
85*600f14f4SXin Li }
86*600f14f4SXin Li
test_bitwriter(void)87*600f14f4SXin Li FLAC__bool test_bitwriter(void)
88*600f14f4SXin Li {
89*600f14f4SXin Li FLAC__BitWriter *bw;
90*600f14f4SXin Li FLAC__bool ok;
91*600f14f4SXin Li uint32_t i, j;
92*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
93*600f14f4SXin Li #if WORDS_BIGENDIAN
94*600f14f4SXin Li static bwword test_pattern1[5] = { 0xaaf0aabe, 0xaaaaaaa8, 0x300aaaaa, 0xaaadeadb, 0x00eeface };
95*600f14f4SXin Li #else
96*600f14f4SXin Li static bwword test_pattern1[5] = { 0xbeaaf0aa, 0xa8aaaaaa, 0xaaaa0a30, 0xdbeaadaa, 0x00eeface };
97*600f14f4SXin Li #endif
98*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
99*600f14f4SXin Li #if WORDS_BIGENDIAN
100*600f14f4SXin Li static bwword test_pattern1[3] = { FLAC__U64L(0xaaf0aabeaaaaaaa8), FLAC__U64L(0x300aaaaaaaadeadb), FLAC__U64L(0x0000000000eeface) };
101*600f14f4SXin Li #else
102*600f14f4SXin Li static bwword test_pattern1[3] = { FLAC__U64L(0xa8aaaaaabeaaf0aa), FLAC__U64L(0xdbeaadaaaaaa0a30), FLAC__U64L(0x0000000000eeface) };
103*600f14f4SXin Li #endif
104*600f14f4SXin Li #else
105*600f14f4SXin Li #error FLAC__BYTES_PER_WORD is neither 4 nor 8 -- not implemented
106*600f14f4SXin Li #endif
107*600f14f4SXin Li uint32_t words, bits; /* what we think bw->words and bw->bits should be */
108*600f14f4SXin Li
109*600f14f4SXin Li printf("\n+++ libFLAC unit test: bitwriter\n\n");
110*600f14f4SXin Li
111*600f14f4SXin Li /*
112*600f14f4SXin Li * test new -> delete
113*600f14f4SXin Li */
114*600f14f4SXin Li printf("testing new... ");
115*600f14f4SXin Li bw = FLAC__bitwriter_new();
116*600f14f4SXin Li if(0 == bw) {
117*600f14f4SXin Li printf("FAILED, returned NULL\n");
118*600f14f4SXin Li return false;
119*600f14f4SXin Li }
120*600f14f4SXin Li printf("OK\n");
121*600f14f4SXin Li
122*600f14f4SXin Li printf("testing delete... ");
123*600f14f4SXin Li FLAC__bitwriter_delete(bw);
124*600f14f4SXin Li printf("OK\n");
125*600f14f4SXin Li
126*600f14f4SXin Li /*
127*600f14f4SXin Li * test new -> init -> delete
128*600f14f4SXin Li */
129*600f14f4SXin Li printf("testing new... ");
130*600f14f4SXin Li bw = FLAC__bitwriter_new();
131*600f14f4SXin Li if(0 == bw) {
132*600f14f4SXin Li printf("FAILED, returned NULL\n");
133*600f14f4SXin Li return false;
134*600f14f4SXin Li }
135*600f14f4SXin Li printf("OK\n");
136*600f14f4SXin Li
137*600f14f4SXin Li printf("testing init... ");
138*600f14f4SXin Li if(!FLAC__bitwriter_init(bw)) {
139*600f14f4SXin Li printf("FAILED, returned false\n");
140*600f14f4SXin Li return false;
141*600f14f4SXin Li }
142*600f14f4SXin Li printf("OK\n");
143*600f14f4SXin Li
144*600f14f4SXin Li printf("testing delete... ");
145*600f14f4SXin Li FLAC__bitwriter_delete(bw);
146*600f14f4SXin Li printf("OK\n");
147*600f14f4SXin Li
148*600f14f4SXin Li /*
149*600f14f4SXin Li * test new -> init -> clear -> delete
150*600f14f4SXin Li */
151*600f14f4SXin Li printf("testing new... ");
152*600f14f4SXin Li bw = FLAC__bitwriter_new();
153*600f14f4SXin Li if(0 == bw) {
154*600f14f4SXin Li printf("FAILED, returned NULL\n");
155*600f14f4SXin Li return false;
156*600f14f4SXin Li }
157*600f14f4SXin Li printf("OK\n");
158*600f14f4SXin Li
159*600f14f4SXin Li printf("testing init... ");
160*600f14f4SXin Li if(!FLAC__bitwriter_init(bw)) {
161*600f14f4SXin Li printf("FAILED, returned false\n");
162*600f14f4SXin Li return false;
163*600f14f4SXin Li }
164*600f14f4SXin Li printf("OK\n");
165*600f14f4SXin Li
166*600f14f4SXin Li printf("testing clear... ");
167*600f14f4SXin Li FLAC__bitwriter_clear(bw);
168*600f14f4SXin Li printf("OK\n");
169*600f14f4SXin Li
170*600f14f4SXin Li printf("testing delete... ");
171*600f14f4SXin Li FLAC__bitwriter_delete(bw);
172*600f14f4SXin Li printf("OK\n");
173*600f14f4SXin Li
174*600f14f4SXin Li /*
175*600f14f4SXin Li * test normal usage
176*600f14f4SXin Li */
177*600f14f4SXin Li printf("testing new... ");
178*600f14f4SXin Li bw = FLAC__bitwriter_new();
179*600f14f4SXin Li if(0 == bw) {
180*600f14f4SXin Li printf("FAILED, returned NULL\n");
181*600f14f4SXin Li return false;
182*600f14f4SXin Li }
183*600f14f4SXin Li printf("OK\n");
184*600f14f4SXin Li
185*600f14f4SXin Li printf("testing init... ");
186*600f14f4SXin Li if(!FLAC__bitwriter_init(bw)) {
187*600f14f4SXin Li printf("FAILED, returned false\n");
188*600f14f4SXin Li return false;
189*600f14f4SXin Li }
190*600f14f4SXin Li printf("OK\n");
191*600f14f4SXin Li
192*600f14f4SXin Li printf("testing clear... ");
193*600f14f4SXin Li FLAC__bitwriter_clear(bw);
194*600f14f4SXin Li printf("OK\n");
195*600f14f4SXin Li
196*600f14f4SXin Li words = bits = 0;
197*600f14f4SXin Li
198*600f14f4SXin Li printf("capacity = %u\n", bw->capacity);
199*600f14f4SXin Li
200*600f14f4SXin Li printf("testing zeroes, raw_uint32*... ");
201*600f14f4SXin Li ok =
202*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0x1, 1) &&
203*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0x1, 2) &&
204*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xa, 5) &&
205*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xf0, 8) &&
206*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0x2aa, 10) &&
207*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xf, 4) &&
208*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xaaaaaaaa, 32) &&
209*600f14f4SXin Li FLAC__bitwriter_write_zeroes(bw, 4) &&
210*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0x3, 2) &&
211*600f14f4SXin Li FLAC__bitwriter_write_zeroes(bw, 8) &&
212*600f14f4SXin Li FLAC__bitwriter_write_raw_uint64(bw, FLAC__U64L(0xaaaaaaaadeadbeef), 64) &&
213*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xace, 12)
214*600f14f4SXin Li ;
215*600f14f4SXin Li if(!ok) {
216*600f14f4SXin Li printf("FAILED\n");
217*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
218*600f14f4SXin Li return false;
219*600f14f4SXin Li }
220*600f14f4SXin Li /* we wrote 152 bits (=19 bytes) to the bitwriter */
221*600f14f4SXin Li words = 152 / FLAC__BITS_PER_WORD;
222*600f14f4SXin Li bits = 152 - words*FLAC__BITS_PER_WORD;
223*600f14f4SXin Li
224*600f14f4SXin Li if(bw->words != words) {
225*600f14f4SXin Li printf("FAILED word count %u != %u\n", bw->words, words);
226*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
227*600f14f4SXin Li return false;
228*600f14f4SXin Li }
229*600f14f4SXin Li if(bw->bits != bits) {
230*600f14f4SXin Li printf("FAILED bit count %u != %u\n", bw->bits, bits);
231*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
232*600f14f4SXin Li return false;
233*600f14f4SXin Li }
234*600f14f4SXin Li if(memcmp(bw->buffer, test_pattern1, sizeof(bwword)*words) != 0) {
235*600f14f4SXin Li printf("FAILED pattern match (buffer)\n");
236*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
237*600f14f4SXin Li return false;
238*600f14f4SXin Li }
239*600f14f4SXin Li if((bw->accum & 0x00ffffff) != test_pattern1[words]) {
240*600f14f4SXin Li printf("FAILED pattern match (bw->accum=%" PRI_BWWORD " != %" PRI_BWWORD ")\n", bw->accum&0x00ffffff, test_pattern1[words]);
241*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
242*600f14f4SXin Li return false;
243*600f14f4SXin Li }
244*600f14f4SXin Li printf("OK\n");
245*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
246*600f14f4SXin Li
247*600f14f4SXin Li printf("testing raw_uint32 some more... ");
248*600f14f4SXin Li ok = FLAC__bitwriter_write_raw_uint32(bw, 0x3d, 6);
249*600f14f4SXin Li if(!ok) {
250*600f14f4SXin Li printf("FAILED\n");
251*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
252*600f14f4SXin Li return false;
253*600f14f4SXin Li }
254*600f14f4SXin Li bits += 6;
255*600f14f4SXin Li test_pattern1[words] <<= 6;
256*600f14f4SXin Li test_pattern1[words] |= 0x3d;
257*600f14f4SXin Li if(bw->words != words) {
258*600f14f4SXin Li printf("FAILED word count %u != %u\n", bw->words, words);
259*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
260*600f14f4SXin Li return false;
261*600f14f4SXin Li }
262*600f14f4SXin Li if(bw->bits != bits) {
263*600f14f4SXin Li printf("FAILED bit count %u != %u\n", bw->bits, bits);
264*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
265*600f14f4SXin Li return false;
266*600f14f4SXin Li }
267*600f14f4SXin Li if(memcmp(bw->buffer, test_pattern1, sizeof(bwword)*words) != 0) {
268*600f14f4SXin Li printf("FAILED pattern match (buffer)\n");
269*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
270*600f14f4SXin Li return false;
271*600f14f4SXin Li }
272*600f14f4SXin Li if((bw->accum & 0x3fffffff) != test_pattern1[words]) {
273*600f14f4SXin Li printf("FAILED pattern match (bw->accum=%" PRI_BWWORD " != %" PRI_BWWORD ")\n", bw->accum&0x3fffffff, test_pattern1[words]);
274*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
275*600f14f4SXin Li return false;
276*600f14f4SXin Li }
277*600f14f4SXin Li printf("OK\n");
278*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
279*600f14f4SXin Li
280*600f14f4SXin Li printf("testing utf8_uint32(0x00000000)... ");
281*600f14f4SXin Li FLAC__bitwriter_clear(bw);
282*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x00000000);
283*600f14f4SXin Li ok = TOTAL_BITS(bw) == 8 && (bw->accum & 0xff) == 0;
284*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
285*600f14f4SXin Li if(!ok) {
286*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
287*600f14f4SXin Li return false;
288*600f14f4SXin Li }
289*600f14f4SXin Li
290*600f14f4SXin Li printf("testing utf8_uint32(0x0000007F)... ");
291*600f14f4SXin Li FLAC__bitwriter_clear(bw);
292*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x0000007F);
293*600f14f4SXin Li ok = TOTAL_BITS(bw) == 8 && (bw->accum & 0xff) == 0x7F;
294*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
295*600f14f4SXin Li if(!ok) {
296*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
297*600f14f4SXin Li return false;
298*600f14f4SXin Li }
299*600f14f4SXin Li
300*600f14f4SXin Li printf("testing utf8_uint32(0x00000080)... ");
301*600f14f4SXin Li FLAC__bitwriter_clear(bw);
302*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x00000080);
303*600f14f4SXin Li ok = TOTAL_BITS(bw) == 16 && (bw->accum & 0xffff) == 0xC280;
304*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
305*600f14f4SXin Li if(!ok) {
306*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
307*600f14f4SXin Li return false;
308*600f14f4SXin Li }
309*600f14f4SXin Li
310*600f14f4SXin Li printf("testing utf8_uint32(0x000007FF)... ");
311*600f14f4SXin Li FLAC__bitwriter_clear(bw);
312*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x000007FF);
313*600f14f4SXin Li ok = TOTAL_BITS(bw) == 16 && (bw->accum & 0xffff) == 0xDFBF;
314*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
315*600f14f4SXin Li if(!ok) {
316*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
317*600f14f4SXin Li return false;
318*600f14f4SXin Li }
319*600f14f4SXin Li
320*600f14f4SXin Li printf("testing utf8_uint32(0x00000800)... ");
321*600f14f4SXin Li FLAC__bitwriter_clear(bw);
322*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x00000800);
323*600f14f4SXin Li ok = TOTAL_BITS(bw) == 24 && (bw->accum & 0xffffff) == 0xE0A080;
324*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
325*600f14f4SXin Li if(!ok) {
326*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
327*600f14f4SXin Li return false;
328*600f14f4SXin Li }
329*600f14f4SXin Li
330*600f14f4SXin Li printf("testing utf8_uint32(0x0000FFFF)... ");
331*600f14f4SXin Li FLAC__bitwriter_clear(bw);
332*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x0000FFFF);
333*600f14f4SXin Li ok = TOTAL_BITS(bw) == 24 && (bw->accum & 0xffffff) == 0xEFBFBF;
334*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
335*600f14f4SXin Li if(!ok) {
336*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
337*600f14f4SXin Li return false;
338*600f14f4SXin Li }
339*600f14f4SXin Li
340*600f14f4SXin Li printf("testing utf8_uint32(0x00010000)... ");
341*600f14f4SXin Li FLAC__bitwriter_clear(bw);
342*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x00010000);
343*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
344*600f14f4SXin Li #if WORDS_BIGENDIAN
345*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xF0908080;
346*600f14f4SXin Li #else
347*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0x808090F0;
348*600f14f4SXin Li #endif
349*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
350*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && (bw->accum & 0xffffffff) == 0xF0908080;
351*600f14f4SXin Li #endif
352*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
353*600f14f4SXin Li if(!ok) {
354*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
355*600f14f4SXin Li return false;
356*600f14f4SXin Li }
357*600f14f4SXin Li
358*600f14f4SXin Li printf("testing utf8_uint32(0x001FFFFF)... ");
359*600f14f4SXin Li FLAC__bitwriter_clear(bw);
360*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x001FFFFF);
361*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
362*600f14f4SXin Li #if WORDS_BIGENDIAN
363*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xF7BFBFBF;
364*600f14f4SXin Li #else
365*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xBFBFBFF7;
366*600f14f4SXin Li #endif
367*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
368*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && (bw->accum & 0xffffffff) == 0xF7BFBFBF;
369*600f14f4SXin Li #endif
370*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
371*600f14f4SXin Li if(!ok) {
372*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
373*600f14f4SXin Li return false;
374*600f14f4SXin Li }
375*600f14f4SXin Li
376*600f14f4SXin Li printf("testing utf8_uint32(0x00200000)... ");
377*600f14f4SXin Li FLAC__bitwriter_clear(bw);
378*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x00200000);
379*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
380*600f14f4SXin Li #if WORDS_BIGENDIAN
381*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xF8888080 && (bw->accum & 0xff) == 0x80;
382*600f14f4SXin Li #else
383*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0x808088F8 && (bw->accum & 0xff) == 0x80;
384*600f14f4SXin Li #endif
385*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
386*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && (bw->accum & FLAC__U64L(0xffffffffff)) == FLAC__U64L(0xF888808080);
387*600f14f4SXin Li #endif
388*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
389*600f14f4SXin Li if(!ok) {
390*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
391*600f14f4SXin Li return false;
392*600f14f4SXin Li }
393*600f14f4SXin Li
394*600f14f4SXin Li printf("testing utf8_uint32(0x03FFFFFF)... ");
395*600f14f4SXin Li FLAC__bitwriter_clear(bw);
396*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x03FFFFFF);
397*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
398*600f14f4SXin Li #if WORDS_BIGENDIAN
399*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xFBBFBFBF && (bw->accum & 0xff) == 0xBF;
400*600f14f4SXin Li #else
401*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xBFBFBFFB && (bw->accum & 0xff) == 0xBF;
402*600f14f4SXin Li #endif
403*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
404*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && (bw->accum & FLAC__U64L(0xffffffffff)) == FLAC__U64L(0xFBBFBFBFBF);
405*600f14f4SXin Li #endif
406*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
407*600f14f4SXin Li if(!ok) {
408*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
409*600f14f4SXin Li return false;
410*600f14f4SXin Li }
411*600f14f4SXin Li
412*600f14f4SXin Li printf("testing utf8_uint32(0x04000000)... ");
413*600f14f4SXin Li FLAC__bitwriter_clear(bw);
414*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x04000000);
415*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
416*600f14f4SXin Li #if WORDS_BIGENDIAN
417*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xFC848080 && (bw->accum & 0xffff) == 0x8080;
418*600f14f4SXin Li #else
419*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0x808084FC && (bw->accum & 0xffff) == 0x8080;
420*600f14f4SXin Li #endif
421*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
422*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && (bw->accum & FLAC__U64L(0xffffffffffff)) == FLAC__U64L(0xFC8480808080);
423*600f14f4SXin Li #endif
424*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
425*600f14f4SXin Li if(!ok) {
426*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
427*600f14f4SXin Li return false;
428*600f14f4SXin Li }
429*600f14f4SXin Li
430*600f14f4SXin Li printf("testing utf8_uint32(0x7FFFFFFF)... ");
431*600f14f4SXin Li FLAC__bitwriter_clear(bw);
432*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint32(bw, 0x7FFFFFFF);
433*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
434*600f14f4SXin Li #if WORDS_BIGENDIAN
435*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xFDBFBFBF && (bw->accum & 0xffff) == 0xBFBF;
436*600f14f4SXin Li #else
437*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xBFBFBFFD && (bw->accum & 0xffff) == 0xBFBF;
438*600f14f4SXin Li #endif
439*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
440*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && (bw->accum & FLAC__U64L(0xffffffffffff)) == FLAC__U64L(0xFDBFBFBFBFBF);
441*600f14f4SXin Li #endif
442*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
443*600f14f4SXin Li if(!ok) {
444*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
445*600f14f4SXin Li return false;
446*600f14f4SXin Li }
447*600f14f4SXin Li
448*600f14f4SXin Li printf("testing utf8_uint64(0x0000000000000000)... ");
449*600f14f4SXin Li FLAC__bitwriter_clear(bw);
450*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000000000000));
451*600f14f4SXin Li ok = TOTAL_BITS(bw) == 8 && (bw->accum & 0xff) == 0;
452*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
453*600f14f4SXin Li if(!ok) {
454*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
455*600f14f4SXin Li return false;
456*600f14f4SXin Li }
457*600f14f4SXin Li
458*600f14f4SXin Li printf("testing utf8_uint64(0x000000000000007F)... ");
459*600f14f4SXin Li FLAC__bitwriter_clear(bw);
460*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x000000000000007F));
461*600f14f4SXin Li ok = TOTAL_BITS(bw) == 8 && (bw->accum & 0xff) == 0x7F;
462*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
463*600f14f4SXin Li if(!ok) {
464*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
465*600f14f4SXin Li return false;
466*600f14f4SXin Li }
467*600f14f4SXin Li
468*600f14f4SXin Li printf("testing utf8_uint64(0x0000000000000080)... ");
469*600f14f4SXin Li FLAC__bitwriter_clear(bw);
470*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000000000080));
471*600f14f4SXin Li ok = TOTAL_BITS(bw) == 16 && (bw->accum & 0xffff) == 0xC280;
472*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
473*600f14f4SXin Li if(!ok) {
474*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
475*600f14f4SXin Li return false;
476*600f14f4SXin Li }
477*600f14f4SXin Li
478*600f14f4SXin Li printf("testing utf8_uint64(0x00000000000007FF)... ");
479*600f14f4SXin Li FLAC__bitwriter_clear(bw);
480*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x00000000000007FF));
481*600f14f4SXin Li ok = TOTAL_BITS(bw) == 16 && (bw->accum & 0xffff) == 0xDFBF;
482*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
483*600f14f4SXin Li if(!ok) {
484*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
485*600f14f4SXin Li return false;
486*600f14f4SXin Li }
487*600f14f4SXin Li
488*600f14f4SXin Li printf("testing utf8_uint64(0x0000000000000800)... ");
489*600f14f4SXin Li FLAC__bitwriter_clear(bw);
490*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000000000800));
491*600f14f4SXin Li ok = TOTAL_BITS(bw) == 24 && (bw->accum & 0xffffff) == 0xE0A080;
492*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
493*600f14f4SXin Li if(!ok) {
494*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
495*600f14f4SXin Li return false;
496*600f14f4SXin Li }
497*600f14f4SXin Li
498*600f14f4SXin Li printf("testing utf8_uint64(0x000000000000FFFF)... ");
499*600f14f4SXin Li FLAC__bitwriter_clear(bw);
500*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x000000000000FFFF));
501*600f14f4SXin Li ok = TOTAL_BITS(bw) == 24 && (bw->accum & 0xffffff) == 0xEFBFBF;
502*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
503*600f14f4SXin Li if(!ok) {
504*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
505*600f14f4SXin Li return false;
506*600f14f4SXin Li }
507*600f14f4SXin Li
508*600f14f4SXin Li printf("testing utf8_uint64(0x0000000000010000)... ");
509*600f14f4SXin Li FLAC__bitwriter_clear(bw);
510*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000000010000));
511*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
512*600f14f4SXin Li #if WORDS_BIGENDIAN
513*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xF0908080;
514*600f14f4SXin Li #else
515*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0x808090F0;
516*600f14f4SXin Li #endif
517*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
518*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && (bw->accum & 0xffffffff) == 0xF0908080;
519*600f14f4SXin Li #endif
520*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
521*600f14f4SXin Li if(!ok) {
522*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
523*600f14f4SXin Li return false;
524*600f14f4SXin Li }
525*600f14f4SXin Li
526*600f14f4SXin Li printf("testing utf8_uint64(0x00000000001FFFFF)... ");
527*600f14f4SXin Li FLAC__bitwriter_clear(bw);
528*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x00000000001FFFFF));
529*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
530*600f14f4SXin Li #if WORDS_BIGENDIAN
531*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xF7BFBFBF;
532*600f14f4SXin Li #else
533*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && bw->buffer[0] == 0xBFBFBFF7;
534*600f14f4SXin Li #endif
535*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
536*600f14f4SXin Li ok = TOTAL_BITS(bw) == 32 && (bw->accum & 0xffffffff) == 0xF7BFBFBF;
537*600f14f4SXin Li #endif
538*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
539*600f14f4SXin Li if(!ok) {
540*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
541*600f14f4SXin Li return false;
542*600f14f4SXin Li }
543*600f14f4SXin Li
544*600f14f4SXin Li printf("testing utf8_uint64(0x0000000000200000)... ");
545*600f14f4SXin Li FLAC__bitwriter_clear(bw);
546*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000000200000));
547*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
548*600f14f4SXin Li #if WORDS_BIGENDIAN
549*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xF8888080 && (bw->accum & 0xff) == 0x80;
550*600f14f4SXin Li #else
551*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0x808088F8 && (bw->accum & 0xff) == 0x80;
552*600f14f4SXin Li #endif
553*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
554*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && (bw->accum & FLAC__U64L(0xffffffffff)) == FLAC__U64L(0xF888808080);
555*600f14f4SXin Li #endif
556*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
557*600f14f4SXin Li if(!ok) {
558*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
559*600f14f4SXin Li return false;
560*600f14f4SXin Li }
561*600f14f4SXin Li
562*600f14f4SXin Li printf("testing utf8_uint64(0x0000000003FFFFFF)... ");
563*600f14f4SXin Li FLAC__bitwriter_clear(bw);
564*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000003FFFFFF));
565*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
566*600f14f4SXin Li #if WORDS_BIGENDIAN
567*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xFBBFBFBF && (bw->accum & 0xff) == 0xBF;
568*600f14f4SXin Li #else
569*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && bw->buffer[0] == 0xBFBFBFFB && (bw->accum & 0xff) == 0xBF;
570*600f14f4SXin Li #endif
571*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
572*600f14f4SXin Li ok = TOTAL_BITS(bw) == 40 && (bw->accum & FLAC__U64L(0xffffffffff)) == FLAC__U64L(0xFBBFBFBFBF);
573*600f14f4SXin Li #endif
574*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
575*600f14f4SXin Li if(!ok) {
576*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
577*600f14f4SXin Li return false;
578*600f14f4SXin Li }
579*600f14f4SXin Li
580*600f14f4SXin Li printf("testing utf8_uint64(0x0000000004000000)... ");
581*600f14f4SXin Li FLAC__bitwriter_clear(bw);
582*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000004000000));
583*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
584*600f14f4SXin Li #if WORDS_BIGENDIAN
585*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xFC848080 && (bw->accum & 0xffff) == 0x8080;
586*600f14f4SXin Li #else
587*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0x808084FC && (bw->accum & 0xffff) == 0x8080;
588*600f14f4SXin Li #endif
589*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
590*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && (bw->accum & FLAC__U64L(0xffffffffffff)) == FLAC__U64L(0xFC8480808080);
591*600f14f4SXin Li #endif
592*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
593*600f14f4SXin Li if(!ok) {
594*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
595*600f14f4SXin Li return false;
596*600f14f4SXin Li }
597*600f14f4SXin Li
598*600f14f4SXin Li printf("testing utf8_uint64(0x000000007FFFFFFF)... ");
599*600f14f4SXin Li FLAC__bitwriter_clear(bw);
600*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x000000007FFFFFFF));
601*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
602*600f14f4SXin Li #if WORDS_BIGENDIAN
603*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xFDBFBFBF && (bw->accum & 0xffff) == 0xBFBF;
604*600f14f4SXin Li #else
605*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && bw->buffer[0] == 0xBFBFBFFD && (bw->accum & 0xffff) == 0xBFBF;
606*600f14f4SXin Li #endif
607*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
608*600f14f4SXin Li ok = TOTAL_BITS(bw) == 48 && (bw->accum & FLAC__U64L(0xffffffffffff)) == FLAC__U64L(0xFDBFBFBFBFBF);
609*600f14f4SXin Li #endif
610*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
611*600f14f4SXin Li if(!ok) {
612*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
613*600f14f4SXin Li return false;
614*600f14f4SXin Li }
615*600f14f4SXin Li
616*600f14f4SXin Li printf("testing utf8_uint64(0x0000000080000000)... ");
617*600f14f4SXin Li FLAC__bitwriter_clear(bw);
618*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000080000000));
619*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
620*600f14f4SXin Li #if WORDS_BIGENDIAN
621*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && bw->buffer[0] == 0xFE828080 && (bw->accum & 0xffffff) == 0x808080;
622*600f14f4SXin Li #else
623*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && bw->buffer[0] == 0x808082FE && (bw->accum & 0xffffff) == 0x808080;
624*600f14f4SXin Li #endif
625*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
626*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && (bw->accum & FLAC__U64L(0xffffffffffffff)) == FLAC__U64L(0xFE828080808080);
627*600f14f4SXin Li #endif
628*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
629*600f14f4SXin Li if(!ok) {
630*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
631*600f14f4SXin Li return false;
632*600f14f4SXin Li }
633*600f14f4SXin Li
634*600f14f4SXin Li printf("testing utf8_uint64(0x0000000FFFFFFFFF)... ");
635*600f14f4SXin Li FLAC__bitwriter_clear(bw);
636*600f14f4SXin Li FLAC__bitwriter_write_utf8_uint64(bw, FLAC__U64L(0x0000000FFFFFFFFF));
637*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
638*600f14f4SXin Li #if WORDS_BIGENDIAN
639*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && bw->buffer[0] == 0xFEBFBFBF && (bw->accum & 0xffffff) == 0xBFBFBF;
640*600f14f4SXin Li #else
641*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && bw->buffer[0] == 0xBFBFBFFE && (bw->accum & 0xffffff) == 0xBFBFBF;
642*600f14f4SXin Li #endif
643*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
644*600f14f4SXin Li ok = TOTAL_BITS(bw) == 56 && (bw->accum & FLAC__U64L(0xffffffffffffff)) == FLAC__U64L(0xFEBFBFBFBFBFBF);
645*600f14f4SXin Li #endif
646*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
647*600f14f4SXin Li if(!ok) {
648*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
649*600f14f4SXin Li return false;
650*600f14f4SXin Li }
651*600f14f4SXin Li
652*600f14f4SXin Li printf("testing grow... ");
653*600f14f4SXin Li FLAC__bitwriter_clear(bw);
654*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0x5, 4);
655*600f14f4SXin Li j = bw->capacity;
656*600f14f4SXin Li for(i = 0; i < j; i++)
657*600f14f4SXin Li FLAC__bitwriter_write_raw_uint32(bw, 0xaaaaaaaa, 32);
658*600f14f4SXin Li #if FLAC__BYTES_PER_WORD == 4
659*600f14f4SXin Li #if WORDS_BIGENDIAN
660*600f14f4SXin Li ok = TOTAL_BITS(bw) == i*32+4 && bw->buffer[0] == 0x5aaaaaaa && (bw->accum & 0xf) == 0xa;
661*600f14f4SXin Li #else
662*600f14f4SXin Li ok = TOTAL_BITS(bw) == i*32+4 && bw->buffer[0] == 0xaaaaaa5a && (bw->accum & 0xf) == 0xa;
663*600f14f4SXin Li #endif
664*600f14f4SXin Li #elif FLAC__BYTES_PER_WORD == 8
665*600f14f4SXin Li #if WORDS_BIGENDIAN
666*600f14f4SXin Li ok = TOTAL_BITS(bw) == i*32+4 && bw->buffer[0] == FLAC__U64L(0x5aaaaaaaaaaaaaaa) && (bw->accum & 0xf) == 0xa;
667*600f14f4SXin Li #else
668*600f14f4SXin Li ok = TOTAL_BITS(bw) == i*32+4 && bw->buffer[0] == FLAC__U64L(0xaaaaaaaaaaaaaa5a) && (bw->accum & 0xf) == 0xa;
669*600f14f4SXin Li #endif
670*600f14f4SXin Li #endif
671*600f14f4SXin Li printf("%s\n", ok?"OK":"FAILED");
672*600f14f4SXin Li if(!ok) {
673*600f14f4SXin Li FLAC__bitwriter_dump(bw, stdout);
674*600f14f4SXin Li return false;
675*600f14f4SXin Li }
676*600f14f4SXin Li printf("capacity = %u\n", bw->capacity);
677*600f14f4SXin Li
678*600f14f4SXin Li printf("testing free... ");
679*600f14f4SXin Li FLAC__bitwriter_free(bw);
680*600f14f4SXin Li printf("OK\n");
681*600f14f4SXin Li
682*600f14f4SXin Li printf("testing delete... ");
683*600f14f4SXin Li FLAC__bitwriter_delete(bw);
684*600f14f4SXin Li printf("OK\n");
685*600f14f4SXin Li
686*600f14f4SXin Li printf("\nPASSED!\n");
687*600f14f4SXin Li return true;
688*600f14f4SXin Li }
689