1 /* test_libFLAC - Unit tester for libFLAC
2 * Copyright (C) 2000,2001,2002,2003,2004 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.
19 #include "FLAC/assert.h"
20 #include "private/bitbuffer.h" /* from the libFLAC private include area */
22 #include <string.h> /* for memcmp() */
24 /* adjust for compilers that can't understand using LLU suffix for uint64_t literals */
26 #define FLAC__U64L(x) x
28 #define FLAC__U64L(x) x##LLU
32 * WATCHOUT! Since FLAC__BitBuffer is a private structure, we use a copy of
33 * the definition here to get at the internals. Make sure this is kept up
34 * to date with what is in ../libFLAC/bitbuffer.c
36 struct FLAC__BitBuffer {
38 unsigned capacity; /* in blurbs */
39 unsigned blurbs, bits;
40 unsigned total_bits; /* must always == FLAC__BITS_PER_BLURB*blurbs+bits */
41 unsigned consumed_blurbs, consumed_bits;
42 unsigned total_consumed_bits; /* must always == FLAC__BITS_PER_BLURB*consumed_blurbs+consumed_bits */
43 FLAC__uint16 read_crc16;
44 #if FLAC__BITS_PER_BLURB == 32
47 FLAC__blurb save_head, save_tail;
51 static FLAC__bool dummy_read_callback(FLAC__byte buffer[], unsigned *bytes, void *client_data)
53 (void)buffer, (void)bytes, (void)client_data;
57 FLAC__bool test_bitbuffer()
59 FLAC__BitBuffer *bb, *bb_zero, *bb_one, *bbcopy;
62 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 };
64 FLAC__ASSERT(FLAC__BITS_PER_BLURB == 8);
66 printf("\n+++ libFLAC unit test: bitbuffer\n\n");
71 printf("testing new... ");
72 bb = FLAC__bitbuffer_new();
74 printf("FAILED, returned NULL\n");
79 printf("testing delete... ");
80 FLAC__bitbuffer_delete(bb);
84 * test new -> init -> delete
86 printf("testing new... ");
87 bb = FLAC__bitbuffer_new();
89 printf("FAILED, returned NULL\n");
94 printf("testing init... ");
95 FLAC__bitbuffer_init(bb);
97 printf("FAILED, returned NULL\n");
102 printf("testing delete... ");
103 FLAC__bitbuffer_delete(bb);
107 * test new -> init -> clear -> delete
109 printf("testing new... ");
110 bb = FLAC__bitbuffer_new();
112 printf("FAILED, returned NULL\n");
117 printf("testing init... ");
118 FLAC__bitbuffer_init(bb);
120 printf("FAILED, returned NULL\n");
125 printf("testing clear... ");
126 FLAC__bitbuffer_clear(bb);
128 printf("FAILED, returned NULL\n");
133 printf("testing delete... ");
134 FLAC__bitbuffer_delete(bb);
140 printf("testing new... ");
141 bb = FLAC__bitbuffer_new();
142 bb_zero = FLAC__bitbuffer_new();
143 bb_one = FLAC__bitbuffer_new();
144 bbcopy = FLAC__bitbuffer_new();
145 if(0 == bb || 0 == bb_zero || 0 == bb_one || 0 == bbcopy) {
146 printf("FAILED, returned NULL\n");
151 printf("testing init... ");
152 ok = FLAC__bitbuffer_init(bb) && FLAC__bitbuffer_init(bb_zero) && FLAC__bitbuffer_init(bb_one) && FLAC__bitbuffer_init(bbcopy);
153 printf("%s\n", ok?"OK":"FAILED");
157 printf("testing clear... ");
158 ok = FLAC__bitbuffer_clear(bb) && FLAC__bitbuffer_clear(bb_zero) && FLAC__bitbuffer_clear(bb_one) && FLAC__bitbuffer_clear(bbcopy);
159 printf("%s\n", ok?"OK":"FAILED");
163 printf("setting up bb_one... ");
164 ok = FLAC__bitbuffer_write_raw_uint32(bb_one, 1, 7) && FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 6, dummy_read_callback, 0);
165 printf("%s\n", ok?"OK":"FAILED");
168 FLAC__bitbuffer_dump(bb_one, stdout);
170 printf("capacity = %u\n", bb->capacity);
172 printf("testing zeroes, raw_uint32*... ");
174 FLAC__bitbuffer_write_raw_uint32(bb, 0x1, 1) &&
175 FLAC__bitbuffer_write_raw_uint32(bb, 0x1, 2) &&
176 FLAC__bitbuffer_write_raw_uint32(bb, 0xa, 5) &&
177 FLAC__bitbuffer_write_raw_uint32(bb, 0xf0, 8) &&
178 FLAC__bitbuffer_write_raw_uint32(bb, 0x2aa, 10) &&
179 FLAC__bitbuffer_write_raw_uint32(bb, 0xf, 4) &&
180 FLAC__bitbuffer_write_raw_uint32(bb, 0xaaaaaaaa, 32) &&
181 FLAC__bitbuffer_write_zeroes(bb, 4) &&
182 FLAC__bitbuffer_write_raw_uint32(bb, 0x3, 2) &&
183 FLAC__bitbuffer_write_zeroes(bb, 8) &&
184 FLAC__bitbuffer_write_raw_uint64(bb, FLAC__U64L(0xaaaaaaaadeadbeef), 64) &&
185 FLAC__bitbuffer_write_raw_uint32(bb, 0xace, 12)
189 FLAC__bitbuffer_dump(bb, stdout);
192 if(bb->blurbs != sizeof(test_pattern1)) {
193 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
194 FLAC__bitbuffer_dump(bb, stdout);
198 printf("FAILED bit count %u != 0\n", bb->bits);
199 FLAC__bitbuffer_dump(bb, stdout);
202 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
203 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
204 FLAC__bitbuffer_dump(bb, stdout);
207 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0) {
208 printf("FAILED pattern match\n");
209 FLAC__bitbuffer_dump(bb, stdout);
213 FLAC__bitbuffer_dump(bb, stdout);
215 printf("testing raw_uint32 some more... ");
216 ok = FLAC__bitbuffer_write_raw_uint32(bb, 0x3d, 6);
219 FLAC__bitbuffer_dump(bb, stdout);
222 if(bb->blurbs != sizeof(test_pattern1)) {
223 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
224 FLAC__bitbuffer_dump(bb, stdout);
228 printf("FAILED bit count %u != 6\n", bb->bits);
229 FLAC__bitbuffer_dump(bb, stdout);
232 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
233 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
234 FLAC__bitbuffer_dump(bb, stdout);
237 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x3d) {
238 printf("FAILED pattern match\n");
239 FLAC__bitbuffer_dump(bb, stdout);
243 FLAC__bitbuffer_dump(bb, stdout);
245 printf("testing concatenate_aligned (bb_zero)... ");
246 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_zero);
249 FLAC__bitbuffer_dump(bb, stdout);
252 if(bb->blurbs != sizeof(test_pattern1)) {
253 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
254 FLAC__bitbuffer_dump(bb, stdout);
258 printf("FAILED bit count %u != 6\n", bb->bits);
259 FLAC__bitbuffer_dump(bb, stdout);
262 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
263 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
264 FLAC__bitbuffer_dump(bb, stdout);
267 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x3d) {
268 printf("FAILED pattern match\n");
269 FLAC__bitbuffer_dump(bb, stdout);
273 FLAC__bitbuffer_dump(bb, stdout);
275 printf("testing concatenate_aligned (bb_one)... ");
276 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
279 FLAC__bitbuffer_dump(bb, stdout);
282 if(bb->blurbs != sizeof(test_pattern1)) {
283 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1));
284 FLAC__bitbuffer_dump(bb, stdout);
288 printf("FAILED bit count %u != 7\n", bb->bits);
289 FLAC__bitbuffer_dump(bb, stdout);
292 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
293 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
294 FLAC__bitbuffer_dump(bb, stdout);
297 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x7b) {
298 printf("FAILED pattern match\n");
299 FLAC__bitbuffer_dump(bb, stdout);
303 FLAC__bitbuffer_dump(bb, stdout);
305 printf("testing concatenate_aligned (bb_one again)... ");
306 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 1, 1);
307 (void)FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 1, dummy_read_callback, 0);
308 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
311 FLAC__bitbuffer_dump(bb, stdout);
314 if(bb->blurbs != sizeof(test_pattern1)+1) {
315 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+1);
316 FLAC__bitbuffer_dump(bb, stdout);
320 printf("FAILED bit count %u != 0\n", bb->bits);
321 FLAC__bitbuffer_dump(bb, stdout);
324 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
325 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
326 FLAC__bitbuffer_dump(bb, stdout);
329 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs-1] != 0xf7) {
330 printf("FAILED pattern match\n");
331 FLAC__bitbuffer_dump(bb, stdout);
335 FLAC__bitbuffer_dump(bb, stdout);
337 printf("testing concatenate_aligned (bb_four)... ");
338 (void)FLAC__bitbuffer_clear(bb_one);
339 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 8, 4);
340 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
343 FLAC__bitbuffer_dump(bb, stdout);
346 if(bb->blurbs != sizeof(test_pattern1)+1) {
347 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+1);
348 FLAC__bitbuffer_dump(bb, stdout);
352 printf("FAILED bit count %u != 4\n", bb->bits);
353 FLAC__bitbuffer_dump(bb, stdout);
356 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
357 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
358 FLAC__bitbuffer_dump(bb, stdout);
361 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs] != 0x08) {
362 printf("FAILED pattern match\n");
363 FLAC__bitbuffer_dump(bb, stdout);
367 FLAC__bitbuffer_dump(bb, stdout);
369 printf("testing concatenate_aligned (bb_eight)... ");
370 (void)FLAC__bitbuffer_read_raw_uint32(bb_one, &i, 4, dummy_read_callback, 0);
371 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 0xaa, 8);
372 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
375 FLAC__bitbuffer_dump(bb, stdout);
378 if(bb->blurbs != sizeof(test_pattern1)+2) {
379 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+2);
380 FLAC__bitbuffer_dump(bb, stdout);
384 printf("FAILED bit count %u != 4\n", bb->bits);
385 FLAC__bitbuffer_dump(bb, stdout);
388 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
389 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
390 FLAC__bitbuffer_dump(bb, stdout);
393 if(memcmp(bb->buffer, test_pattern1, sizeof(FLAC__byte)*sizeof(test_pattern1)) != 0 || bb->buffer[bb->blurbs-1] != 0x8a || bb->buffer[bb->blurbs] != 0x0a) {
394 printf("FAILED pattern match\n");
395 FLAC__bitbuffer_dump(bb, stdout);
399 FLAC__bitbuffer_dump(bb, stdout);
401 printf("testing concatenate_aligned (bb_seventeen)... ");
402 (void)FLAC__bitbuffer_write_raw_uint32(bb_one, 0x155, 9);
403 ok = FLAC__bitbuffer_concatenate_aligned(bb, bb_one);
406 FLAC__bitbuffer_dump(bb, stdout);
409 if(bb->blurbs != sizeof(test_pattern1)+4) {
410 printf("FAILED byte count %u != %u\n", bb->blurbs, (unsigned)sizeof(test_pattern1)+4);
411 FLAC__bitbuffer_dump(bb, stdout);
415 printf("FAILED bit count %u != 5\n", bb->bits);
416 FLAC__bitbuffer_dump(bb, stdout);
419 if(bb->total_bits != 8*bb->blurbs+bb->bits) {
420 printf("FAILED total_bits count %u != %u (%u:%u)\n", bb->total_bits, 8*bb->blurbs+bb->bits, bb->blurbs, bb->bits);
421 FLAC__bitbuffer_dump(bb, stdout);
424 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) {
425 printf("FAILED pattern match\n");
426 FLAC__bitbuffer_dump(bb, stdout);
430 FLAC__bitbuffer_dump(bb, stdout);
432 printf("testing utf8_uint32(0x00000000)... ");
433 FLAC__bitbuffer_clear(bb);
434 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000000);
435 ok = bb->total_bits == 8 && bb->buffer[0] == 0;
436 printf("%s\n", ok?"OK":"FAILED");
438 FLAC__bitbuffer_dump(bb, stdout);
442 printf("testing utf8_uint32(0x0000007F)... ");
443 FLAC__bitbuffer_clear(bb);
444 FLAC__bitbuffer_write_utf8_uint32(bb, 0x0000007F);
445 ok = bb->total_bits == 8 && bb->buffer[0] == 0x7F;
446 printf("%s\n", ok?"OK":"FAILED");
448 FLAC__bitbuffer_dump(bb, stdout);
452 printf("testing utf8_uint32(0x00000080)... ");
453 FLAC__bitbuffer_clear(bb);
454 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000080);
455 ok = bb->total_bits == 16 && bb->buffer[0] == 0xC2 && bb->buffer[1] == 0x80;
456 printf("%s\n", ok?"OK":"FAILED");
458 FLAC__bitbuffer_dump(bb, stdout);
462 printf("testing utf8_uint32(0x000007FF)... ");
463 FLAC__bitbuffer_clear(bb);
464 FLAC__bitbuffer_write_utf8_uint32(bb, 0x000007FF);
465 ok = bb->total_bits == 16 && bb->buffer[0] == 0xDF && bb->buffer[1] == 0xBF;
466 printf("%s\n", ok?"OK":"FAILED");
468 FLAC__bitbuffer_dump(bb, stdout);
472 printf("testing utf8_uint32(0x00000800)... ");
473 FLAC__bitbuffer_clear(bb);
474 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00000800);
475 ok = bb->total_bits == 24 && bb->buffer[0] == 0xE0 && bb->buffer[1] == 0xA0 && bb->buffer[2] == 0x80;
476 printf("%s\n", ok?"OK":"FAILED");
478 FLAC__bitbuffer_dump(bb, stdout);
482 printf("testing utf8_uint32(0x0000FFFF)... ");
483 FLAC__bitbuffer_clear(bb);
484 FLAC__bitbuffer_write_utf8_uint32(bb, 0x0000FFFF);
485 ok = bb->total_bits == 24 && bb->buffer[0] == 0xEF && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF;
486 printf("%s\n", ok?"OK":"FAILED");
488 FLAC__bitbuffer_dump(bb, stdout);
492 printf("testing utf8_uint32(0x00010000)... ");
493 FLAC__bitbuffer_clear(bb);
494 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00010000);
495 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF0 && bb->buffer[1] == 0x90 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80;
496 printf("%s\n", ok?"OK":"FAILED");
498 FLAC__bitbuffer_dump(bb, stdout);
502 printf("testing utf8_uint32(0x001FFFFF)... ");
503 FLAC__bitbuffer_clear(bb);
504 FLAC__bitbuffer_write_utf8_uint32(bb, 0x001FFFFF);
505 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF7 && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF;
506 printf("%s\n", ok?"OK":"FAILED");
508 FLAC__bitbuffer_dump(bb, stdout);
512 printf("testing utf8_uint32(0x00200000)... ");
513 FLAC__bitbuffer_clear(bb);
514 FLAC__bitbuffer_write_utf8_uint32(bb, 0x00200000);
515 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;
516 printf("%s\n", ok?"OK":"FAILED");
518 FLAC__bitbuffer_dump(bb, stdout);
522 printf("testing utf8_uint32(0x03FFFFFF)... ");
523 FLAC__bitbuffer_clear(bb);
524 FLAC__bitbuffer_write_utf8_uint32(bb, 0x03FFFFFF);
525 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;
526 printf("%s\n", ok?"OK":"FAILED");
528 FLAC__bitbuffer_dump(bb, stdout);
532 printf("testing utf8_uint32(0x04000000)... ");
533 FLAC__bitbuffer_clear(bb);
534 FLAC__bitbuffer_write_utf8_uint32(bb, 0x04000000);
535 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;
536 printf("%s\n", ok?"OK":"FAILED");
538 FLAC__bitbuffer_dump(bb, stdout);
542 printf("testing utf8_uint32(0x7FFFFFFF)... ");
543 FLAC__bitbuffer_clear(bb);
544 FLAC__bitbuffer_write_utf8_uint32(bb, 0x7FFFFFFF);
545 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;
546 printf("%s\n", ok?"OK":"FAILED");
548 FLAC__bitbuffer_dump(bb, stdout);
552 printf("testing utf8_uint64(0x0000000000000000)... ");
553 FLAC__bitbuffer_clear(bb);
554 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000000);
555 ok = bb->total_bits == 8 && bb->buffer[0] == 0;
556 printf("%s\n", ok?"OK":"FAILED");
558 FLAC__bitbuffer_dump(bb, stdout);
562 printf("testing utf8_uint64(0x000000000000007F)... ");
563 FLAC__bitbuffer_clear(bb);
564 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000000000007F);
565 ok = bb->total_bits == 8 && bb->buffer[0] == 0x7F;
566 printf("%s\n", ok?"OK":"FAILED");
568 FLAC__bitbuffer_dump(bb, stdout);
572 printf("testing utf8_uint64(0x0000000000000080)... ");
573 FLAC__bitbuffer_clear(bb);
574 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000080);
575 ok = bb->total_bits == 16 && bb->buffer[0] == 0xC2 && bb->buffer[1] == 0x80;
576 printf("%s\n", ok?"OK":"FAILED");
578 FLAC__bitbuffer_dump(bb, stdout);
582 printf("testing utf8_uint64(0x00000000000007FF)... ");
583 FLAC__bitbuffer_clear(bb);
584 FLAC__bitbuffer_write_utf8_uint64(bb, 0x00000000000007FF);
585 ok = bb->total_bits == 16 && bb->buffer[0] == 0xDF && bb->buffer[1] == 0xBF;
586 printf("%s\n", ok?"OK":"FAILED");
588 FLAC__bitbuffer_dump(bb, stdout);
592 printf("testing utf8_uint64(0x0000000000000800)... ");
593 FLAC__bitbuffer_clear(bb);
594 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000000800);
595 ok = bb->total_bits == 24 && bb->buffer[0] == 0xE0 && bb->buffer[1] == 0xA0 && bb->buffer[2] == 0x80;
596 printf("%s\n", ok?"OK":"FAILED");
598 FLAC__bitbuffer_dump(bb, stdout);
602 printf("testing utf8_uint64(0x000000000000FFFF)... ");
603 FLAC__bitbuffer_clear(bb);
604 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000000000FFFF);
605 ok = bb->total_bits == 24 && bb->buffer[0] == 0xEF && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF;
606 printf("%s\n", ok?"OK":"FAILED");
608 FLAC__bitbuffer_dump(bb, stdout);
612 printf("testing utf8_uint64(0x0000000000010000)... ");
613 FLAC__bitbuffer_clear(bb);
614 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000010000);
615 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF0 && bb->buffer[1] == 0x90 && bb->buffer[2] == 0x80 && bb->buffer[3] == 0x80;
616 printf("%s\n", ok?"OK":"FAILED");
618 FLAC__bitbuffer_dump(bb, stdout);
622 printf("testing utf8_uint64(0x00000000001FFFFF)... ");
623 FLAC__bitbuffer_clear(bb);
624 FLAC__bitbuffer_write_utf8_uint64(bb, 0x00000000001FFFFF);
625 ok = bb->total_bits == 32 && bb->buffer[0] == 0xF7 && bb->buffer[1] == 0xBF && bb->buffer[2] == 0xBF && bb->buffer[3] == 0xBF;
626 printf("%s\n", ok?"OK":"FAILED");
628 FLAC__bitbuffer_dump(bb, stdout);
632 printf("testing utf8_uint64(0x0000000000200000)... ");
633 FLAC__bitbuffer_clear(bb);
634 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000000200000);
635 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;
636 printf("%s\n", ok?"OK":"FAILED");
638 FLAC__bitbuffer_dump(bb, stdout);
642 printf("testing utf8_uint64(0x0000000003FFFFFF)... ");
643 FLAC__bitbuffer_clear(bb);
644 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000003FFFFFF);
645 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;
646 printf("%s\n", ok?"OK":"FAILED");
648 FLAC__bitbuffer_dump(bb, stdout);
652 printf("testing utf8_uint64(0x0000000004000000)... ");
653 FLAC__bitbuffer_clear(bb);
654 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000004000000);
655 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;
656 printf("%s\n", ok?"OK":"FAILED");
658 FLAC__bitbuffer_dump(bb, stdout);
662 printf("testing utf8_uint64(0x000000007FFFFFFF)... ");
663 FLAC__bitbuffer_clear(bb);
664 FLAC__bitbuffer_write_utf8_uint64(bb, 0x000000007FFFFFFF);
665 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;
666 printf("%s\n", ok?"OK":"FAILED");
668 FLAC__bitbuffer_dump(bb, stdout);
672 printf("testing utf8_uint64(0x0000000080000000)... ");
673 FLAC__bitbuffer_clear(bb);
674 FLAC__bitbuffer_write_utf8_uint64(bb, 0x0000000080000000);
675 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;
676 printf("%s\n", ok?"OK":"FAILED");
678 FLAC__bitbuffer_dump(bb, stdout);
682 printf("testing utf8_uint64(0x0000000FFFFFFFFF)... ");
683 FLAC__bitbuffer_clear(bb);
684 FLAC__bitbuffer_write_utf8_uint64(bb, FLAC__U64L(0x0000000FFFFFFFFF));
685 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;
686 printf("%s\n", ok?"OK":"FAILED");
688 FLAC__bitbuffer_dump(bb, stdout);
692 printf("testing grow... ");
693 FLAC__bitbuffer_clear(bb);
694 FLAC__bitbuffer_write_raw_uint32(bb, 0xa, 4);
696 for(i = 0; i < j; i++)
697 FLAC__bitbuffer_write_raw_uint32(bb, 0xaa, 8);
698 ok = bb->total_bits = i*8+4 && bb->buffer[0] == 0xaa && bb->buffer[i] == 0xa;
699 printf("%s\n", ok?"OK":"FAILED");
701 FLAC__bitbuffer_dump(bb, stdout);
704 printf("capacity = %u\n", bb->capacity);
706 printf("testing clone... ");
707 ok = FLAC__bitbuffer_clone(bbcopy, bb);
710 FLAC__bitbuffer_dump(bb, stdout);
711 FLAC__bitbuffer_dump(bbcopy, stdout);
714 if(bb->blurbs != bbcopy->blurbs) {
715 printf("FAILED byte count %u != %u\n", bb->blurbs, bbcopy->blurbs);
716 FLAC__bitbuffer_dump(bb, stdout);
717 FLAC__bitbuffer_dump(bbcopy, stdout);
720 if(bb->bits != bbcopy->bits) {
721 printf("FAILED bit count %u != %u\n", bb->bits, bbcopy->bits);
722 FLAC__bitbuffer_dump(bb, stdout);
723 FLAC__bitbuffer_dump(bbcopy, stdout);
726 if(bb->total_bits != bbcopy->total_bits) {
727 printf("FAILED total_bits count %u != %u\n", bb->total_bits, bbcopy->total_bits);
728 FLAC__bitbuffer_dump(bb, stdout);
729 FLAC__bitbuffer_dump(bbcopy, stdout);
732 if(memcmp(bb->buffer, bbcopy->buffer, sizeof(FLAC__byte)*bb->capacity) != 0) {
733 printf("FAILED pattern match\n");
734 FLAC__bitbuffer_dump(bb, stdout);
735 FLAC__bitbuffer_dump(bbcopy, stdout);
740 printf("testing free... ");
741 FLAC__bitbuffer_free(bb);
742 FLAC__bitbuffer_free(bbcopy);
745 printf("testing delete... ");
746 FLAC__bitbuffer_delete(bb);
747 FLAC__bitbuffer_delete(bb_zero);
748 FLAC__bitbuffer_delete(bb_one);
749 FLAC__bitbuffer_delete(bbcopy);
752 printf("\nPASSED!\n");