1 /* test_libFLAC - Unit tester for libFLAC
2 * Copyright (C) 2000,2001,2002,2003,2004,2005,2006 Josh Coalson
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 #include "FLAC/assert.h"
24 #include "private/bitbuffer.h" /* from the libFLAC private include area */
26 #include <string.h> /* for memcmp() */
28 /* adjust for compilers that can't understand using LLU suffix for uint64_t literals */
30 #define FLAC__U64L(x) x
32 #define FLAC__U64L(x) x##LLU
36 * WATCHOUT! Since FLAC__BitBuffer is a private structure, we use a copy of
37 * the definition here to get at the internals. Make sure this is kept up
38 * to date with what is in ../libFLAC/bitbuffer.c
40 struct FLAC__BitBuffer {
42 unsigned capacity; /* in blurbs */
43 unsigned blurbs, bits;
44 unsigned total_bits; /* must always == FLAC__BITS_PER_BLURB*blurbs+bits */
45 unsigned consumed_blurbs, consumed_bits;
46 unsigned total_consumed_bits; /* must always == FLAC__BITS_PER_BLURB*consumed_blurbs+consumed_bits */
47 FLAC__uint16 read_crc16;
48 #if FLAC__BITS_PER_BLURB == 32
51 FLAC__blurb save_head, save_tail;
55 static FLAC__bool dummy_read_callback(FLAC__byte buffer[], size_t *bytes, void *client_data)
57 (void)buffer, (void)bytes, (void)client_data;
61 FLAC__bool test_bitbuffer()
63 FLAC__BitBuffer *bb, *bb_zero, *bb_one, *bbcopy;
66 static FLAC__byte test_pattern1[19] = { 0xaa, 0xf0, 0xaa, 0xbe, 0xaa, 0xaa, 0xaa, 0xa8, 0x30, 0x0a, 0xaa, 0xaa, 0xaa, 0xad, 0xea, 0xdb, 0xee, 0xfa, 0xce };
68 FLAC__ASSERT(FLAC__BITS_PER_BLURB == 8);
70 printf("\n+++ libFLAC unit test: bitbuffer\n\n");
75 printf("testing new... ");
76 bb = FLAC__bitbuffer_new();
78 printf("FAILED, returned NULL\n");
83 printf("testing delete... ");
84 FLAC__bitbuffer_delete(bb);
88 * test new -> init -> delete
90 printf("testing new... ");
91 bb = FLAC__bitbuffer_new();
93 printf("FAILED, returned NULL\n");
98 printf("testing init... ");
99 FLAC__bitbuffer_init(bb);
101 printf("FAILED, returned NULL\n");
106 printf("testing delete... ");
107 FLAC__bitbuffer_delete(bb);
111 * test new -> init -> clear -> delete
113 printf("testing new... ");
114 bb = FLAC__bitbuffer_new();
116 printf("FAILED, returned NULL\n");
121 printf("testing init... ");
122 FLAC__bitbuffer_init(bb);
124 printf("FAILED, returned NULL\n");
129 printf("testing clear... ");
130 FLAC__bitbuffer_clear(bb);
132 printf("FAILED, returned NULL\n");
137 printf("testing delete... ");
138 FLAC__bitbuffer_delete(bb);
144 printf("testing new... ");
145 bb = FLAC__bitbuffer_new();
146 bb_zero = FLAC__bitbuffer_new();
147 bb_one = FLAC__bitbuffer_new();
148 bbcopy = FLAC__bitbuffer_new();
149 if(0 == bb || 0 == bb_zero || 0 == bb_one || 0 == bbcopy) {
150 printf("FAILED, returned NULL\n");
155 printf("testing init... ");
156 ok = FLAC__bitbuffer_init(bb) && FLAC__bitbuffer_init(bb_zero) && FLAC__bitbuffer_init(bb_one) && FLAC__bitbuffer_init(bbcopy);
157 printf("%s\n", ok?"OK":"FAILED");
161 printf("testing clear... ");
162 ok = FLAC__bitbuffer_clear(bb) && FLAC__bitbuffer_clear(bb_zero) && FLAC__bitbuffer_clear(bb_one) && FLAC__bitbuffer_clear(bbcopy);
163 printf("%s\n", ok?"OK":"FAILED");
167 printf("setting up bb_one... ");
168 ok = FLAC__bitbuffer_write_raw_uint32(bb_one, 1, 7) && FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 6, dummy_read_callback, 0);
169 printf("%s\n", ok?"OK":"FAILED");
172 FLAC__bitbuffer_dump(bb_one, stdout);
174 printf("capacity = %u\n", bb->capacity);
176 printf("testing zeroes, raw_uint32*... ");
178 FLAC__bitbuffer_write_raw_uint32(bb, 0x1, 1) &&
179 FLAC__bitbuffer_write_raw_uint32(bb, 0x1, 2) &&
180 FLAC__bitbuffer_write_raw_uint32(bb, 0xa, 5) &&
181 FLAC__bitbuffer_write_raw_uint32(bb, 0xf0, 8) &&
182 FLAC__bitbuffer_write_raw_uint32(bb, 0x2aa, 10) &&
183 FLAC__bitbuffer_write_raw_uint32(bb, 0xf, 4) &&
184 FLAC__bitbuffer_write_raw_uint32(bb, 0xaaaaaaaa, 32) &&
185 FLAC__bitbuffer_write_zeroes(bb, 4) &&
186 FLAC__bitbuffer_write_raw_uint32(bb, 0x3, 2) &&
187 FLAC__bitbuffer_write_zeroes(bb, 8) &&
188 FLAC__bitbuffer_write_raw_uint64(bb, FLAC__U64L(0xaaaaaaaadeadbeef), 64) &&
189 FLAC__bitbuffer_write_raw_uint32(bb, 0xace, 12)
193 FLAC__bitbuffer_dump(bb, stdout);
196 if(bb->blurbs != sizeof(test_pattern1)) {
197 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
198 FLAC__bitbuffer_dump(bb, stdout);
202 printf("FAILED bit count %u != 0\n", bb->bits);
203 FLAC__bitbuffer_dump(bb, stdout);
206 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
207 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
208 FLAC__bitbuffer_dump(bb, stdout);
211 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0) {
212 printf("FAILED pattern match\n");
213 FLAC__bitbuffer_dump(bb, stdout);
217 FLAC__bitbuffer_dump(bb, stdout);
219 printf("testing raw_uint32 some more... ");
220 ok = FLAC__bitbuffer_write_raw_uint32(bb, 0x3d, 6);
223 FLAC__bitbuffer_dump(bb, stdout);
226 if(bb->blurbs != sizeof(test_pattern1)) {
227 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
228 FLAC__bitbuffer_dump(bb, stdout);
232 printf("FAILED bit count %u != 6\n", bb->bits);
233 FLAC__bitbuffer_dump(bb, stdout);
236 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
237 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
238 FLAC__bitbuffer_dump(bb, stdout);
241 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x3d) {
242 printf("FAILED pattern match\n");
243 FLAC__bitbuffer_dump(bb, stdout);
247 FLAC__bitbuffer_dump(bb, stdout);
249 printf("testing concatenate_aligned (bb_zero)... ");
250 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_zero);
253 FLAC__bitbuffer_dump(bb, stdout);
256 if(bb->blurbs != sizeof(test_pattern1)) {
257 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
258 FLAC__bitbuffer_dump(bb, stdout);
262 printf("FAILED bit count %u != 6\n", bb->bits);
263 FLAC__bitbuffer_dump(bb, stdout);
266 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
267 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
268 FLAC__bitbuffer_dump(bb, stdout);
271 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x3d) {
272 printf("FAILED pattern match\n");
273 FLAC__bitbuffer_dump(bb, stdout);
277 FLAC__bitbuffer_dump(bb, stdout);
279 printf("testing concatenate_aligned (bb_one)... ");
280 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
283 FLAC__bitbuffer_dump(bb, stdout);
286 if(bb->blurbs != sizeof(test_pattern1)) {
287 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
288 FLAC__bitbuffer_dump(bb, stdout);
292 printf("FAILED bit count %u != 7\n", bb->bits);
293 FLAC__bitbuffer_dump(bb, stdout);
296 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
297 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
298 FLAC__bitbuffer_dump(bb, stdout);
301 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x7b) {
302 printf("FAILED pattern match\n");
303 FLAC__bitbuffer_dump(bb, stdout);
307 FLAC__bitbuffer_dump(bb, stdout);
309 printf("testing concatenate_aligned (bb_one again)... ");
310 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 1, 1);
311 (void)FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 1, dummy_read_callback, 0);
312 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
315 FLAC__bitbuffer_dump(bb, stdout);
318 if(bb->blurbs != sizeof(test_pattern1)+1) {
319 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+1);
320 FLAC__bitbuffer_dump(bb, stdout);
324 printf("FAILED bit count %u != 0\n", bb->bits);
325 FLAC__bitbuffer_dump(bb, stdout);
328 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
329 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
330 FLAC__bitbuffer_dump(bb, stdout);
333 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs-1] != 0xf7) {
334 printf("FAILED pattern match\n");
335 FLAC__bitbuffer_dump(bb, stdout);
339 FLAC__bitbuffer_dump(bb, stdout);
341 printf("testing concatenate_aligned (bb_four)... ");
342 (void)FLAC__bitbuffer_clear(bb_one);
343 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 8, 4);
344 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
347 FLAC__bitbuffer_dump(bb, stdout);
350 if(bb->blurbs != sizeof(test_pattern1)+1) {
351 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+1);
352 FLAC__bitbuffer_dump(bb, stdout);
356 printf("FAILED bit count %u != 4\n", bb->bits);
357 FLAC__bitbuffer_dump(bb, stdout);
360 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
361 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
362 FLAC__bitbuffer_dump(bb, stdout);
365 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x08) {
366 printf("FAILED pattern match\n");
367 FLAC__bitbuffer_dump(bb, stdout);
371 FLAC__bitbuffer_dump(bb, stdout);
373 printf("testing concatenate_aligned (bb_eight)... ");
374 (void)FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 4, dummy_read_callback, 0);
375 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 0xaa, 8);
376 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
379 FLAC__bitbuffer_dump(bb, stdout);
382 if(bb->blurbs != sizeof(test_pattern1)+2) {
383 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+2);
384 FLAC__bitbuffer_dump(bb, stdout);
388 printf("FAILED bit count %u != 4\n", bb->bits);
389 FLAC__bitbuffer_dump(bb, stdout);
392 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
393 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
394 FLAC__bitbuffer_dump(bb, stdout);
397 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs-1] != 0x8a || bb->buffer[bb->blurbs] != 0x0a) {
398 printf("FAILED pattern match\n");
399 FLAC__bitbuffer_dump(bb, stdout);
403 FLAC__bitbuffer_dump(bb, stdout);
405 printf("testing concatenate_aligned (bb_seventeen)... ");
406 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 0x155, 9);
407 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
410 FLAC__bitbuffer_dump(bb, stdout);
413 if(bb->blurbs != sizeof(test_pattern1)+4) {
414 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+4);
415 FLAC__bitbuffer_dump(bb, stdout);
419 printf("FAILED bit count %u != 5\n", bb->bits);
420 FLAC__bitbuffer_dump(bb, stdout);
423 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
424 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
425 FLAC__bitbuffer_dump(bb, stdout);
428 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs-3] != 0x8a || bb->buffer[bb->blurbs-2] != 0xaa || bb->buffer[bb->blurbs-1] != 0xaa || bb->buffer[bb->blurbs] != 0x15) {
429 printf("FAILED pattern match\n");
430 FLAC__bitbuffer_dump(bb, stdout);
434 FLAC__bitbuffer_dump(bb, stdout);
436 printf("testing utf8_uint32(0x00000000)... ");
437 FLAC__bitbuffer_clear(bb);
438 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000000);
439 ok = bb->total_bits == 8 && bb->buffer[0] == 0;
440 printf("%s\n", ok?"OK":"FAILED");
442 FLAC__bitbuffer_dump(bb, stdout);
446 printf("testing utf8_uint32(0x0000007F)... ");
447 FLAC__bitbuffer_clear(bb);
448 FLAC__bitbuffer_write_utf8_uint32(bb, 0x0000007F);
449 ok = bb->total_bits == 8 && bb->buffer[0] == 0x7F;
450 printf("%s\n", ok?"OK":"FAILED");
452 FLAC__bitbuffer_dump(bb, stdout);
456 printf("testing utf8_uint32(0x00000080)... ");
457 FLAC__bitbuffer_clear(bb);
458 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000080);
459 ok = bb->total_bits == 16 && bb->buffer[0] == 0xC2 && bb->buffer[1] == 0x80;
460 printf("%s\n", ok?"OK":"FAILED");
462 FLAC__bitbuffer_dump(bb, stdout);
466 printf("testing utf8_uint32(0x000007FF)... ");
467 FLAC__bitbuffer_clear(bb);
468 FLAC__bitbuffer_write_utf8_uint32(bb, 0x000007FF);
469 ok = bb->total_bits == 16 && bb->buffer[0] == 0xDF && bb->buffer[1] == 0xBF;
470 printf("%s\n", ok?"OK":"FAILED");
472 FLAC__bitbuffer_dump(bb, stdout);
476 printf("testing utf8_uint32(0x00000800)... ");
477 FLAC__bitbuffer_clear(bb);
478 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000800);
479 ok = bb->total_bits == 24 && bb->buffer[0] == 0xE0 && bb->buffer[1] == 0xA0 && bb->buffer[2] == 0x80;
480 printf("%s\n", ok?"OK":"FAILED");
482 FLAC__bitbuffer_dump(bb, stdout);
486 printf("testing utf8_uint32(0x0000FFFF)... ");
487 FLAC__bitbuffer_clear(bb);
488 FLAC__bitbuffer_write_utf8_uint32(bb, 0x0000FFFF);
489 ok = bb->total_bits == 24 && bb->buffer[0] == 0xEF && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF;
490 printf("%s\n", ok?"OK":"FAILED");
492 FLAC__bitbuffer_dump(bb, stdout);
496 printf("testing utf8_uint32(0x00010000)... ");
497 FLAC__bitbuffer_clear(bb);
498 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00010000);
499 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF0 && bb->buffer[1] == 0x90 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80;
500 printf("%s\n", ok?"OK":"FAILED");
502 FLAC__bitbuffer_dump(bb, stdout);
506 printf("testing utf8_uint32(0x001FFFFF)... ");
507 FLAC__bitbuffer_clear(bb);
508 FLAC__bitbuffer_write_utf8_uint32(bb, 0x001FFFFF);
509 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF7 && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF;
510 printf("%s\n", ok?"OK":"FAILED");
512 FLAC__bitbuffer_dump(bb, stdout);
516 printf("testing utf8_uint32(0x00200000)... ");
517 FLAC__bitbuffer_clear(bb);
518 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00200000);
519 ok = bb->total_bits == 40 && bb->buffer[0] == 0xF8 && bb->buffer[1] == 0x88 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80 && bb->buffer[4] == 0x80;
520 printf("%s\n", ok?"OK":"FAILED");
522 FLAC__bitbuffer_dump(bb, stdout);
526 printf("testing utf8_uint32(0x03FFFFFF)... ");
527 FLAC__bitbuffer_clear(bb);
528 FLAC__bitbuffer_write_utf8_uint32(bb, 0x03FFFFFF);
529 ok = bb->total_bits == 40 && bb->buffer[0] == 0xFB && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF && bb->buffer[4] == 0xBF;
530 printf("%s\n", ok?"OK":"FAILED");
532 FLAC__bitbuffer_dump(bb, stdout);
536 printf("testing utf8_uint32(0x04000000)... ");
537 FLAC__bitbuffer_clear(bb);
538 FLAC__bitbuffer_write_utf8_uint32(bb, 0x04000000);
539 ok = bb->total_bits == 48 && bb->buffer[0] == 0xFC && bb->buffer[1] == 0x84 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80 && bb->buffer[4] == 0x80 && bb->buffer[5] == 0x80;
540 printf("%s\n", ok?"OK":"FAILED");
542 FLAC__bitbuffer_dump(bb, stdout);
546 printf("testing utf8_uint32(0x7FFFFFFF)... ");
547 FLAC__bitbuffer_clear(bb);
548 FLAC__bitbuffer_write_utf8_uint32(bb, 0x7FFFFFFF);
549 ok = bb->total_bits == 48 && bb->buffer[0] == 0xFD && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF && bb->buffer[4] == 0xBF && bb->buffer[5] == 0xBF;
550 printf("%s\n", ok?"OK":"FAILED");
552 FLAC__bitbuffer_dump(bb, stdout);
556 printf("testing utf8_uint64(0x0000000000000000)... ");
557 FLAC__bitbuffer_clear(bb);
558 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000000);
559 ok = bb->total_bits == 8 && bb->buffer[0] == 0;
560 printf("%s\n", ok?"OK":"FAILED");
562 FLAC__bitbuffer_dump(bb, stdout);
566 printf("testing utf8_uint64(0x000000000000007F)... ");
567 FLAC__bitbuffer_clear(bb);
568 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000000000007F);
569 ok = bb->total_bits == 8 && bb->buffer[0] == 0x7F;
570 printf("%s\n", ok?"OK":"FAILED");
572 FLAC__bitbuffer_dump(bb, stdout);
576 printf("testing utf8_uint64(0x0000000000000080)... ");
577 FLAC__bitbuffer_clear(bb);
578 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000080);
579 ok = bb->total_bits == 16 && bb->buffer[0] == 0xC2 && bb->buffer[1] == 0x80;
580 printf("%s\n", ok?"OK":"FAILED");
582 FLAC__bitbuffer_dump(bb, stdout);
586 printf("testing utf8_uint64(0x00000000000007FF)... ");
587 FLAC__bitbuffer_clear(bb);
588 FLAC__bitbuffer_write_utf8_uint64(bb, 0x00000000000007FF);
589 ok = bb->total_bits == 16 && bb->buffer[0] == 0xDF && bb->buffer[1] == 0xBF;
590 printf("%s\n", ok?"OK":"FAILED");
592 FLAC__bitbuffer_dump(bb, stdout);
596 printf("testing utf8_uint64(0x0000000000000800)... ");
597 FLAC__bitbuffer_clear(bb);
598 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000800);
599 ok = bb->total_bits == 24 && bb->buffer[0] == 0xE0 && bb->buffer[1] == 0xA0 && bb->buffer[2] == 0x80;
600 printf("%s\n", ok?"OK":"FAILED");
602 FLAC__bitbuffer_dump(bb, stdout);
606 printf("testing utf8_uint64(0x000000000000FFFF)... ");
607 FLAC__bitbuffer_clear(bb);
608 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000000000FFFF);
609 ok = bb->total_bits == 24 && bb->buffer[0] == 0xEF && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF;
610 printf("%s\n", ok?"OK":"FAILED");
612 FLAC__bitbuffer_dump(bb, stdout);
616 printf("testing utf8_uint64(0x0000000000010000)... ");
617 FLAC__bitbuffer_clear(bb);
618 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000010000);
619 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF0 && bb->buffer[1] == 0x90 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80;
620 printf("%s\n", ok?"OK":"FAILED");
622 FLAC__bitbuffer_dump(bb, stdout);
626 printf("testing utf8_uint64(0x00000000001FFFFF)... ");
627 FLAC__bitbuffer_clear(bb);
628 FLAC__bitbuffer_write_utf8_uint64(bb, 0x00000000001FFFFF);
629 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF7 && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF;
630 printf("%s\n", ok?"OK":"FAILED");
632 FLAC__bitbuffer_dump(bb, stdout);
636 printf("testing utf8_uint64(0x0000000000200000)... ");
637 FLAC__bitbuffer_clear(bb);
638 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000200000);
639 ok = bb->total_bits == 40 && bb->buffer[0] == 0xF8 && bb->buffer[1] == 0x88 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80 && bb->buffer[4] == 0x80;
640 printf("%s\n", ok?"OK":"FAILED");
642 FLAC__bitbuffer_dump(bb, stdout);
646 printf("testing utf8_uint64(0x0000000003FFFFFF)... ");
647 FLAC__bitbuffer_clear(bb);
648 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000003FFFFFF);
649 ok = bb->total_bits == 40 && bb->buffer[0] == 0xFB && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF && bb->buffer[4] == 0xBF;
650 printf("%s\n", ok?"OK":"FAILED");
652 FLAC__bitbuffer_dump(bb, stdout);
656 printf("testing utf8_uint64(0x0000000004000000)... ");
657 FLAC__bitbuffer_clear(bb);
658 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000004000000);
659 ok = bb->total_bits == 48 && bb->buffer[0] == 0xFC && bb->buffer[1] == 0x84 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80 && bb->buffer[4] == 0x80 && bb->buffer[5] == 0x80;
660 printf("%s\n", ok?"OK":"FAILED");
662 FLAC__bitbuffer_dump(bb, stdout);
666 printf("testing utf8_uint64(0x000000007FFFFFFF)... ");
667 FLAC__bitbuffer_clear(bb);
668 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000007FFFFFFF);
669 ok = bb->total_bits == 48 && bb->buffer[0] == 0xFD && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF && bb->buffer[4] == 0xBF && bb->buffer[5] == 0xBF;
670 printf("%s\n", ok?"OK":"FAILED");
672 FLAC__bitbuffer_dump(bb, stdout);
676 printf("testing utf8_uint64(0x0000000080000000)... ");
677 FLAC__bitbuffer_clear(bb);
678 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000080000000);
679 ok = bb->total_bits == 56 && bb->buffer[0] == 0xFE && bb->buffer[1] == 0x82 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80 && bb->buffer[4] == 0x80 && bb->buffer[5] == 0x80 && bb->buffer[6] == 0x80;
680 printf("%s\n", ok?"OK":"FAILED");
682 FLAC__bitbuffer_dump(bb, stdout);
686 printf("testing utf8_uint64(0x0000000FFFFFFFFF)... ");
687 FLAC__bitbuffer_clear(bb);
688 FLAC__bitbuffer_write_utf8_uint64(bb, FLAC__U64L(0x0000000FFFFFFFFF));
689 ok = bb->total_bits == 56 && bb->buffer[0] == 0xFE && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF && bb->buffer[4] == 0xBF && bb->buffer[5] == 0xBF && bb->buffer[6] == 0xBF;
690 printf("%s\n", ok?"OK":"FAILED");
692 FLAC__bitbuffer_dump(bb, stdout);
696 printf("testing grow... ");
697 FLAC__bitbuffer_clear(bb);
698 FLAC__bitbuffer_write_raw_uint32(bb, 0xa, 4);
700 for(i = 0; i < j; i++)
701 FLAC__bitbuffer_write_raw_uint32(bb, 0xaa, 8);
702 ok = bb->total_bits = i*8+4 && bb->buffer[0] == 0xaa && bb->buffer[i] == 0xa;
703 printf("%s\n", ok?"OK":"FAILED");
705 FLAC__bitbuffer_dump(bb, stdout);
708 printf("capacity = %u\n", bb->capacity);
710 printf("testing clone... ");
711 ok = FLAC__bitbuffer_clone(bbcopy, bb);
714 FLAC__bitbuffer_dump(bb, stdout);
715 FLAC__bitbuffer_dump(bbcopy, stdout);
718 if(bb->blurbs != bbcopy->blurbs) {
719 printf("FAILED byte count %u != %u\n", bb->blurbs, bbcopy->blurbs);
720 FLAC__bitbuffer_dump(bb, stdout);
721 FLAC__bitbuffer_dump(bbcopy, stdout);
724 if(bb->bits != bbcopy->bits) {
725 printf("FAILED bit count %u != %u\n", bb->bits, bbcopy->bits);
726 FLAC__bitbuffer_dump(bb, stdout);
727 FLAC__bitbuffer_dump(bbcopy, stdout);
730 if(bb->total_bits != bbcopy->total_bits) {
731 printf("FAILED total_bits count %u != %u\n", bb->total_bits, bbcopy->total_bits);
732 FLAC__bitbuffer_dump(bb, stdout);
733 FLAC__bitbuffer_dump(bbcopy, stdout);
736 if(memcmp(bb->buffer, bbcopy->buffer, sizeof(FLAC__byte)*bb->capacity) != 0) {
737 printf("FAILED pattern match\n");
738 FLAC__bitbuffer_dump(bb, stdout);
739 FLAC__bitbuffer_dump(bbcopy, stdout);
744 printf("testing free... ");
745 FLAC__bitbuffer_free(bb);
746 FLAC__bitbuffer_free(bbcopy);
749 printf("testing delete... ");
750 FLAC__bitbuffer_delete(bb);
751 FLAC__bitbuffer_delete(bb_zero);
752 FLAC__bitbuffer_delete(bb_one);
753 FLAC__bitbuffer_delete(bbcopy);
756 printf("\nPASSED!\n");