1 /* test_libFLAC - Unit tester for libFLAC
2 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 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 "FLAC/metadata.h"
25 #include "test_libs_common/metadata_utils.h"
28 #include <stdlib.h> /* for malloc() */
29 #include <string.h> /* for memcmp() */
31 static FLAC__byte *make_dummydata_(FLAC__byte *dummydata, unsigned len)
35 if(0 == (ret = (FLAC__byte*)malloc(len))) {
36 printf("FAILED, malloc error\n");
40 memcpy(ret, dummydata, len);
45 static FLAC__bool compare_track_(const FLAC__StreamMetadata_CueSheet_Track *from, const FLAC__StreamMetadata_CueSheet_Track *to)
49 if(from->offset != to->offset) {
50 printf("FAILED, track offset mismatch, expected %" PRIu64 ", got %" PRIu64 "\n", (uint64_t)to->offset, (uint64_t)from->offset);
53 if(from->number != to->number) {
54 printf("FAILED, track number mismatch, expected %u, got %u\n", (unsigned)to->number, (unsigned)from->number);
57 if(0 != strcmp(from->isrc, to->isrc)) {
58 printf("FAILED, track number mismatch, expected %s, got %s\n", to->isrc, from->isrc);
61 if(from->type != to->type) {
62 printf("FAILED, track type mismatch, expected %u, got %u\n", (unsigned)to->type, (unsigned)from->type);
65 if(from->pre_emphasis != to->pre_emphasis) {
66 printf("FAILED, track pre_emphasis mismatch, expected %u, got %u\n", (unsigned)to->pre_emphasis, (unsigned)from->pre_emphasis);
69 if(from->num_indices != to->num_indices) {
70 printf("FAILED, track num_indices mismatch, expected %u, got %u\n", (unsigned)to->num_indices, (unsigned)from->num_indices);
73 if(0 == to->indices || 0 == from->indices) {
74 if(to->indices != from->indices) {
75 printf("FAILED, track indices mismatch\n");
80 for(i = 0; i < to->num_indices; i++) {
81 if(from->indices[i].offset != to->indices[i].offset) {
82 printf("FAILED, track indices[%u].offset mismatch, expected %" PRIu64 ", got %" PRIu64 "\n", i, (uint64_t)to->indices[i].offset, (uint64_t)from->indices[i].offset);
85 if(from->indices[i].number != to->indices[i].number) {
86 printf("FAILED, track indices[%u].number mismatch, expected %u, got %u\n", i, (unsigned)to->indices[i].number, (unsigned)from->indices[i].number);
95 static FLAC__bool compare_seekpoint_array_(const FLAC__StreamMetadata_SeekPoint *from, const FLAC__StreamMetadata_SeekPoint *to, unsigned n)
99 FLAC__ASSERT(0 != from);
100 FLAC__ASSERT(0 != to);
102 for(i = 0; i < n; i++) {
103 if(from[i].sample_number != to[i].sample_number) {
104 printf("FAILED, point[%u].sample_number mismatch, expected %" PRIu64 ", got %" PRIu64 "\n", i, (uint64_t)to[i].sample_number, (uint64_t)from[i].sample_number);
107 if(from[i].stream_offset != to[i].stream_offset) {
108 printf("FAILED, point[%u].stream_offset mismatch, expected %" PRIu64 ", got %" PRIu64 "\n", i, (uint64_t)to[i].stream_offset, (uint64_t)from[i].stream_offset);
111 if(from[i].frame_samples != to[i].frame_samples) {
112 printf("FAILED, point[%u].frame_samples mismatch, expected %u, got %u\n", i, to[i].frame_samples, from[i].frame_samples);
120 static FLAC__bool check_seektable_(const FLAC__StreamMetadata *block, unsigned num_points, const FLAC__StreamMetadata_SeekPoint *array)
122 const unsigned expected_length = num_points * FLAC__STREAM_METADATA_SEEKPOINT_LENGTH;
124 if(block->length != expected_length) {
125 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
128 if(block->data.seek_table.num_points != num_points) {
129 printf("FAILED, expected %u point, got %u\n", num_points, block->data.seek_table.num_points);
133 if(0 != block->data.seek_table.points) {
134 printf("FAILED, 'points' pointer is not null\n");
139 if(!compare_seekpoint_array_(block->data.seek_table.points, array, num_points))
147 static void entry_new_(FLAC__StreamMetadata_VorbisComment_Entry *entry, const char *field)
149 entry->length = strlen(field);
150 entry->entry = (FLAC__byte*)malloc(entry->length+1);
151 FLAC__ASSERT(0 != entry->entry);
152 memcpy(entry->entry, field, entry->length);
153 entry->entry[entry->length] = '\0';
156 static void entry_clone_(FLAC__StreamMetadata_VorbisComment_Entry *entry)
158 FLAC__byte *x = (FLAC__byte*)malloc(entry->length+1);
159 FLAC__ASSERT(0 != x);
160 memcpy(x, entry->entry, entry->length);
161 x[entry->length] = '\0';
165 static void vc_calc_len_(FLAC__StreamMetadata *block)
167 const FLAC__StreamMetadata_VorbisComment *vc = &block->data.vorbis_comment;
170 block->length = FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN / 8;
171 block->length += vc->vendor_string.length;
172 block->length += FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN / 8;
173 for(i = 0; i < vc->num_comments; i++) {
174 block->length += FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN / 8;
175 block->length += vc->comments[i].length;
179 static void vc_resize_(FLAC__StreamMetadata *block, unsigned num)
181 FLAC__StreamMetadata_VorbisComment *vc = &block->data.vorbis_comment;
183 if(vc->num_comments != 0) {
184 FLAC__ASSERT(0 != vc->comments);
185 if(num < vc->num_comments) {
187 for(i = num; i < vc->num_comments; i++) {
188 if(0 != vc->comments[i].entry)
189 free(vc->comments[i].entry);
194 if(0 != vc->comments) {
200 vc->comments = (FLAC__StreamMetadata_VorbisComment_Entry*)realloc(vc->comments, sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*num);
201 FLAC__ASSERT(0 != vc->comments);
202 if(num > vc->num_comments)
203 memset(vc->comments+vc->num_comments, 0, sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*(num-vc->num_comments));
206 vc->num_comments = num;
210 static int vc_find_from_(FLAC__StreamMetadata *block, const char *name, unsigned start)
212 const unsigned n = strlen(name);
214 for(i = start; i < block->data.vorbis_comment.num_comments; i++) {
215 const FLAC__StreamMetadata_VorbisComment_Entry *entry = &block->data.vorbis_comment.comments[i];
216 if(entry->length > n && 0 == strncmp((const char *)entry->entry, name, n) && entry->entry[n] == '=')
222 static void vc_set_vs_new_(FLAC__StreamMetadata_VorbisComment_Entry *entry, FLAC__StreamMetadata *block, const char *field)
224 if(0 != block->data.vorbis_comment.vendor_string.entry)
225 free(block->data.vorbis_comment.vendor_string.entry);
226 entry_new_(entry, field);
227 block->data.vorbis_comment.vendor_string = *entry;
231 static void vc_set_new_(FLAC__StreamMetadata_VorbisComment_Entry *entry, FLAC__StreamMetadata *block, unsigned pos, const char *field)
233 if(0 != block->data.vorbis_comment.comments[pos].entry)
234 free(block->data.vorbis_comment.comments[pos].entry);
235 entry_new_(entry, field);
236 block->data.vorbis_comment.comments[pos] = *entry;
240 static void vc_insert_new_(FLAC__StreamMetadata_VorbisComment_Entry *entry, FLAC__StreamMetadata *block, unsigned pos, const char *field)
242 vc_resize_(block, block->data.vorbis_comment.num_comments+1);
243 memmove(&block->data.vorbis_comment.comments[pos+1], &block->data.vorbis_comment.comments[pos], sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*(block->data.vorbis_comment.num_comments-1-pos));
244 memset(&block->data.vorbis_comment.comments[pos], 0, sizeof(FLAC__StreamMetadata_VorbisComment_Entry));
245 vc_set_new_(entry, block, pos, field);
249 static void vc_delete_(FLAC__StreamMetadata *block, unsigned pos)
251 if(0 != block->data.vorbis_comment.comments[pos].entry)
252 free(block->data.vorbis_comment.comments[pos].entry);
253 memmove(&block->data.vorbis_comment.comments[pos], &block->data.vorbis_comment.comments[pos+1], sizeof(FLAC__StreamMetadata_VorbisComment_Entry)*(block->data.vorbis_comment.num_comments-pos-1));
254 block->data.vorbis_comment.comments[block->data.vorbis_comment.num_comments-1].entry = 0;
255 block->data.vorbis_comment.comments[block->data.vorbis_comment.num_comments-1].length = 0;
256 vc_resize_(block, block->data.vorbis_comment.num_comments-1);
260 static void vc_replace_new_(FLAC__StreamMetadata_VorbisComment_Entry *entry, FLAC__StreamMetadata *block, const char *field, FLAC__bool all)
263 char field_name[256];
264 const char *eq = strchr(field, '=');
265 FLAC__ASSERT(eq>field && (unsigned)(eq-field) < sizeof(field_name));
266 memcpy(field_name, field, eq-field);
267 field_name[eq-field]='\0';
269 index = vc_find_from_(block, field_name, 0);
271 vc_insert_new_(entry, block, block->data.vorbis_comment.num_comments, field);
273 vc_set_new_(entry, block, (unsigned)index, field);
275 for(index = index+1; index >= 0 && (unsigned)index < block->data.vorbis_comment.num_comments; )
276 if((index = vc_find_from_(block, field_name, (unsigned)index)) >= 0)
277 vc_delete_(block, (unsigned)index);
284 static void track_new_(FLAC__StreamMetadata_CueSheet_Track *track, FLAC__uint64 offset, FLAC__byte number, const char *isrc, FLAC__bool data, FLAC__bool pre_em)
286 track->offset = offset;
287 track->number = number;
288 memcpy(track->isrc, isrc, sizeof(track->isrc));
290 track->pre_emphasis = pre_em;
291 track->num_indices = 0;
295 static void track_clone_(FLAC__StreamMetadata_CueSheet_Track *track)
297 if(track->num_indices > 0) {
298 size_t bytes = sizeof(FLAC__StreamMetadata_CueSheet_Index) * track->num_indices;
299 FLAC__StreamMetadata_CueSheet_Index *x = (FLAC__StreamMetadata_CueSheet_Index*)malloc(bytes);
300 FLAC__ASSERT(0 != x);
301 memcpy(x, track->indices, bytes);
306 static void cs_calc_len_(FLAC__StreamMetadata *block)
308 const FLAC__StreamMetadata_CueSheet *cs = &block->data.cue_sheet;
312 FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
313 FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
314 FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
315 FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
316 FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
318 block->length += cs->num_tracks * (
319 FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN +
320 FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN +
321 FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN +
322 FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN +
323 FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN +
324 FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN +
325 FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN
327 for(i = 0; i < cs->num_tracks; i++) {
328 block->length += cs->tracks[i].num_indices * (
329 FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN +
330 FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN +
331 FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN
336 static void tr_resize_(FLAC__StreamMetadata *block, unsigned track_num, unsigned num)
338 FLAC__StreamMetadata_CueSheet_Track *tr;
340 FLAC__ASSERT(track_num < block->data.cue_sheet.num_tracks);
342 tr = &block->data.cue_sheet.tracks[track_num];
344 if(tr->num_indices != 0) {
345 FLAC__ASSERT(0 != tr->indices);
348 if(0 != tr->indices) {
354 tr->indices = (FLAC__StreamMetadata_CueSheet_Index*)realloc(tr->indices, sizeof(FLAC__StreamMetadata_CueSheet_Index)*num);
355 FLAC__ASSERT(0 != tr->indices);
356 if(num > tr->num_indices)
357 memset(tr->indices+tr->num_indices, 0, sizeof(FLAC__StreamMetadata_CueSheet_Index)*(num-tr->num_indices));
360 tr->num_indices = num;
364 static void tr_set_new_(FLAC__StreamMetadata *block, unsigned track_num, unsigned pos, FLAC__StreamMetadata_CueSheet_Index index)
366 FLAC__StreamMetadata_CueSheet_Track *tr;
368 FLAC__ASSERT(track_num < block->data.cue_sheet.num_tracks);
370 tr = &block->data.cue_sheet.tracks[track_num];
372 FLAC__ASSERT(pos < tr->num_indices);
374 tr->indices[pos] = index;
379 static void tr_insert_new_(FLAC__StreamMetadata *block, unsigned track_num, unsigned pos, FLAC__StreamMetadata_CueSheet_Index index)
381 FLAC__StreamMetadata_CueSheet_Track *tr;
383 FLAC__ASSERT(track_num < block->data.cue_sheet.num_tracks);
385 tr = &block->data.cue_sheet.tracks[track_num];
387 FLAC__ASSERT(pos <= tr->num_indices);
389 tr_resize_(block, track_num, tr->num_indices+1);
390 memmove(&tr->indices[pos+1], &tr->indices[pos], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(tr->num_indices-1-pos));
391 tr_set_new_(block, track_num, pos, index);
395 static void tr_delete_(FLAC__StreamMetadata *block, unsigned track_num, unsigned pos)
397 FLAC__StreamMetadata_CueSheet_Track *tr;
399 FLAC__ASSERT(track_num < block->data.cue_sheet.num_tracks);
401 tr = &block->data.cue_sheet.tracks[track_num];
403 FLAC__ASSERT(pos <= tr->num_indices);
405 memmove(&tr->indices[pos], &tr->indices[pos+1], sizeof(FLAC__StreamMetadata_CueSheet_Index)*(tr->num_indices-pos-1));
406 tr_resize_(block, track_num, tr->num_indices-1);
410 static void cs_resize_(FLAC__StreamMetadata *block, unsigned num)
412 FLAC__StreamMetadata_CueSheet *cs = &block->data.cue_sheet;
414 if(cs->num_tracks != 0) {
415 FLAC__ASSERT(0 != cs->tracks);
416 if(num < cs->num_tracks) {
418 for(i = num; i < cs->num_tracks; i++) {
419 if(0 != cs->tracks[i].indices)
420 free(cs->tracks[i].indices);
425 if(0 != cs->tracks) {
431 cs->tracks = (FLAC__StreamMetadata_CueSheet_Track*)realloc(cs->tracks, sizeof(FLAC__StreamMetadata_CueSheet_Track)*num);
432 FLAC__ASSERT(0 != cs->tracks);
433 if(num > cs->num_tracks)
434 memset(cs->tracks+cs->num_tracks, 0, sizeof(FLAC__StreamMetadata_CueSheet_Track)*(num-cs->num_tracks));
437 cs->num_tracks = num;
441 static void cs_set_new_(FLAC__StreamMetadata_CueSheet_Track *track, FLAC__StreamMetadata *block, unsigned pos, FLAC__uint64 offset, FLAC__byte number, const char *isrc, FLAC__bool data, FLAC__bool pre_em)
443 track_new_(track, offset, number, isrc, data, pre_em);
444 block->data.cue_sheet.tracks[pos] = *track;
448 static void cs_insert_new_(FLAC__StreamMetadata_CueSheet_Track *track, FLAC__StreamMetadata *block, unsigned pos, FLAC__uint64 offset, FLAC__byte number, const char *isrc, FLAC__bool data, FLAC__bool pre_em)
450 cs_resize_(block, block->data.cue_sheet.num_tracks+1);
451 memmove(&block->data.cue_sheet.tracks[pos+1], &block->data.cue_sheet.tracks[pos], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(block->data.cue_sheet.num_tracks-1-pos));
452 cs_set_new_(track, block, pos, offset, number, isrc, data, pre_em);
456 static void cs_delete_(FLAC__StreamMetadata *block, unsigned pos)
458 if(0 != block->data.cue_sheet.tracks[pos].indices)
459 free(block->data.cue_sheet.tracks[pos].indices);
460 memmove(&block->data.cue_sheet.tracks[pos], &block->data.cue_sheet.tracks[pos+1], sizeof(FLAC__StreamMetadata_CueSheet_Track)*(block->data.cue_sheet.num_tracks-pos-1));
461 block->data.cue_sheet.tracks[block->data.cue_sheet.num_tracks-1].indices = 0;
462 block->data.cue_sheet.tracks[block->data.cue_sheet.num_tracks-1].num_indices = 0;
463 cs_resize_(block, block->data.cue_sheet.num_tracks-1);
467 static void pi_set_mime_type(FLAC__StreamMetadata *block, const char *s)
469 if(block->data.picture.mime_type) {
470 block->length -= strlen(block->data.picture.mime_type);
471 free(block->data.picture.mime_type);
473 block->data.picture.mime_type = strdup(s);
474 FLAC__ASSERT(block->data.picture.mime_type);
475 block->length += strlen(block->data.picture.mime_type);
478 static void pi_set_description(FLAC__StreamMetadata *block, const FLAC__byte *s)
480 if(block->data.picture.description) {
481 block->length -= strlen((const char *)block->data.picture.description);
482 free(block->data.picture.description);
484 block->data.picture.description = (FLAC__byte*)strdup((const char *)s);
485 FLAC__ASSERT(block->data.picture.description);
486 block->length += strlen((const char *)block->data.picture.description);
489 static void pi_set_data(FLAC__StreamMetadata *block, const FLAC__byte *data, FLAC__uint32 len)
491 if(block->data.picture.data) {
492 block->length -= block->data.picture.data_length;
493 free(block->data.picture.data);
495 block->data.picture.data = (FLAC__byte*)strdup((const char *)data);
496 FLAC__ASSERT(block->data.picture.data);
497 block->data.picture.data_length = len;
498 block->length += len;
501 FLAC__bool test_metadata_object(void)
503 FLAC__StreamMetadata *block, *blockcopy, *vorbiscomment, *cuesheet, *picture;
504 FLAC__StreamMetadata_SeekPoint seekpoint_array[14];
505 FLAC__StreamMetadata_VorbisComment_Entry entry;
506 FLAC__StreamMetadata_CueSheet_Index index;
507 FLAC__StreamMetadata_CueSheet_Track track;
508 unsigned i, expected_length, seekpoints;
510 static FLAC__byte dummydata[4] = { 'a', 'b', 'c', 'd' };
512 printf("\n+++ libFLAC unit test: metadata objects\n\n");
515 printf("testing STREAMINFO\n");
517 printf("testing FLAC__metadata_object_new()... ");
518 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_STREAMINFO);
520 printf("FAILED, returned NULL\n");
523 expected_length = FLAC__STREAM_METADATA_STREAMINFO_LENGTH;
524 if(block->length != expected_length) {
525 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
530 printf("testing FLAC__metadata_object_clone()... ");
531 blockcopy = FLAC__metadata_object_clone(block);
533 printf("FAILED, returned NULL\n");
536 if(!mutils__compare_block(block, blockcopy))
540 printf("testing FLAC__metadata_object_delete()... ");
541 FLAC__metadata_object_delete(blockcopy);
542 FLAC__metadata_object_delete(block);
546 printf("testing PADDING\n");
548 printf("testing FLAC__metadata_object_new()... ");
549 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PADDING);
551 printf("FAILED, returned NULL\n");
555 if(block->length != expected_length) {
556 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
561 printf("testing FLAC__metadata_object_clone()... ");
562 blockcopy = FLAC__metadata_object_clone(block);
564 printf("FAILED, returned NULL\n");
567 if(!mutils__compare_block(block, blockcopy))
571 printf("testing FLAC__metadata_object_delete()... ");
572 FLAC__metadata_object_delete(blockcopy);
573 FLAC__metadata_object_delete(block);
577 printf("testing APPLICATION\n");
579 printf("testing FLAC__metadata_object_new()... ");
580 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_APPLICATION);
582 printf("FAILED, returned NULL\n");
585 expected_length = FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8;
586 if(block->length != expected_length) {
587 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
592 printf("testing FLAC__metadata_object_clone()... ");
593 blockcopy = FLAC__metadata_object_clone(block);
595 printf("FAILED, returned NULL\n");
598 if(!mutils__compare_block(block, blockcopy))
602 printf("testing FLAC__metadata_object_delete()... ");
603 FLAC__metadata_object_delete(blockcopy);
606 printf("testing FLAC__metadata_object_application_set_data(copy)... ");
607 if(!FLAC__metadata_object_application_set_data(block, dummydata, sizeof(dummydata), true/*copy*/)) {
608 printf("FAILED, returned false\n");
611 expected_length = (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8) + sizeof(dummydata);
612 if(block->length != expected_length) {
613 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
616 if(0 != memcmp(block->data.application.data, dummydata, sizeof(dummydata))) {
617 printf("FAILED, data mismatch\n");
622 printf("testing FLAC__metadata_object_clone()... ");
623 blockcopy = FLAC__metadata_object_clone(block);
625 printf("FAILED, returned NULL\n");
628 if(!mutils__compare_block(block, blockcopy))
632 printf("testing FLAC__metadata_object_delete()... ");
633 FLAC__metadata_object_delete(blockcopy);
636 printf("testing FLAC__metadata_object_application_set_data(own)... ");
637 if(!FLAC__metadata_object_application_set_data(block, make_dummydata_(dummydata, sizeof(dummydata)), sizeof(dummydata), false/*own*/)) {
638 printf("FAILED, returned false\n");
641 expected_length = (FLAC__STREAM_METADATA_APPLICATION_ID_LEN / 8) + sizeof(dummydata);
642 if(block->length != expected_length) {
643 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
646 if(0 != memcmp(block->data.application.data, dummydata, sizeof(dummydata))) {
647 printf("FAILED, data mismatch\n");
652 printf("testing FLAC__metadata_object_clone()... ");
653 blockcopy = FLAC__metadata_object_clone(block);
655 printf("FAILED, returned NULL\n");
658 if(!mutils__compare_block(block, blockcopy))
662 printf("testing FLAC__metadata_object_delete()... ");
663 FLAC__metadata_object_delete(blockcopy);
664 FLAC__metadata_object_delete(block);
668 printf("testing SEEKTABLE\n");
670 for(i = 0; i < sizeof(seekpoint_array) / sizeof(FLAC__StreamMetadata_SeekPoint); i++) {
671 seekpoint_array[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
672 seekpoint_array[i].stream_offset = 0;
673 seekpoint_array[i].frame_samples = 0;
677 printf("testing FLAC__metadata_object_new()... ");
678 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE);
680 printf("FAILED, returned NULL\n");
683 if(!check_seektable_(block, seekpoints, 0))
686 printf("testing FLAC__metadata_object_clone()... ");
687 blockcopy = FLAC__metadata_object_clone(block);
689 printf("FAILED, returned NULL\n");
692 if(!mutils__compare_block(block, blockcopy))
696 printf("testing FLAC__metadata_object_delete()... ");
697 FLAC__metadata_object_delete(blockcopy);
701 printf("testing FLAC__metadata_object_seektable_resize_points(grow to %u)...", seekpoints);
702 if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {
703 printf("FAILED, returned false\n");
706 if(!check_seektable_(block, seekpoints, seekpoint_array))
710 printf("testing FLAC__metadata_object_seektable_resize_points(shrink to %u)...", seekpoints);
711 if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {
712 printf("FAILED, returned false\n");
715 if(!check_seektable_(block, seekpoints, seekpoint_array))
718 printf("testing FLAC__metadata_object_seektable_is_legal()...");
719 if(!FLAC__metadata_object_seektable_is_legal(block)) {
720 printf("FAILED, returned false\n");
726 printf("testing FLAC__metadata_object_seektable_resize_points(shrink to %u)...", seekpoints);
727 if(!FLAC__metadata_object_seektable_resize_points(block, seekpoints)) {
728 printf("FAILED, returned false\n");
731 if(!check_seektable_(block, seekpoints, 0))
735 printf("testing FLAC__metadata_object_seektable_insert_point() on empty array...");
736 if(!FLAC__metadata_object_seektable_insert_point(block, 0, seekpoint_array[0])) {
737 printf("FAILED, returned false\n");
740 if(!check_seektable_(block, seekpoints, seekpoint_array))
743 seekpoint_array[0].sample_number = 1;
745 printf("testing FLAC__metadata_object_seektable_insert_point() on beginning of non-empty array...");
746 if(!FLAC__metadata_object_seektable_insert_point(block, 0, seekpoint_array[0])) {
747 printf("FAILED, returned false\n");
750 if(!check_seektable_(block, seekpoints, seekpoint_array))
753 seekpoint_array[1].sample_number = 2;
755 printf("testing FLAC__metadata_object_seektable_insert_point() on middle of non-empty array...");
756 if(!FLAC__metadata_object_seektable_insert_point(block, 1, seekpoint_array[1])) {
757 printf("FAILED, returned false\n");
760 if(!check_seektable_(block, seekpoints, seekpoint_array))
763 seekpoint_array[3].sample_number = 3;
765 printf("testing FLAC__metadata_object_seektable_insert_point() on end of non-empty array...");
766 if(!FLAC__metadata_object_seektable_insert_point(block, 3, seekpoint_array[3])) {
767 printf("FAILED, returned false\n");
770 if(!check_seektable_(block, seekpoints, seekpoint_array))
773 printf("testing FLAC__metadata_object_clone()... ");
774 blockcopy = FLAC__metadata_object_clone(block);
776 printf("FAILED, returned NULL\n");
779 if(!mutils__compare_block(block, blockcopy))
783 printf("testing FLAC__metadata_object_delete()... ");
784 FLAC__metadata_object_delete(blockcopy);
787 seekpoint_array[2].sample_number = seekpoint_array[3].sample_number;
789 printf("testing FLAC__metadata_object_seektable_delete_point() on middle of array...");
790 if(!FLAC__metadata_object_seektable_delete_point(block, 2)) {
791 printf("FAILED, returned false\n");
794 if(!check_seektable_(block, seekpoints, seekpoint_array))
798 printf("testing FLAC__metadata_object_seektable_delete_point() on end of array...");
799 if(!FLAC__metadata_object_seektable_delete_point(block, 2)) {
800 printf("FAILED, returned false\n");
803 if(!check_seektable_(block, seekpoints, seekpoint_array))
807 printf("testing FLAC__metadata_object_seektable_delete_point() on beginning of array...");
808 if(!FLAC__metadata_object_seektable_delete_point(block, 0)) {
809 printf("FAILED, returned false\n");
812 if(!check_seektable_(block, seekpoints, seekpoint_array+1))
815 printf("testing FLAC__metadata_object_seektable_set_point()...");
816 FLAC__metadata_object_seektable_set_point(block, 0, seekpoint_array[0]);
817 if(!check_seektable_(block, seekpoints, seekpoint_array))
820 printf("testing FLAC__metadata_object_delete()... ");
821 FLAC__metadata_object_delete(block);
824 /* seektable template functions */
826 for(i = 0; i < sizeof(seekpoint_array) / sizeof(FLAC__StreamMetadata_SeekPoint); i++) {
827 seekpoint_array[i].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
828 seekpoint_array[i].stream_offset = 0;
829 seekpoint_array[i].frame_samples = 0;
833 printf("testing FLAC__metadata_object_new()... ");
834 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE);
836 printf("FAILED, returned NULL\n");
839 if(!check_seektable_(block, seekpoints, 0))
843 printf("testing FLAC__metadata_object_seekpoint_template_append_placeholders()... ");
844 if(!FLAC__metadata_object_seektable_template_append_placeholders(block, 2)) {
845 printf("FAILED, returned false\n");
848 if(!check_seektable_(block, seekpoints, seekpoint_array))
851 seekpoint_array[seekpoints++].sample_number = 7;
852 printf("testing FLAC__metadata_object_seekpoint_template_append_point()... ");
853 if(!FLAC__metadata_object_seektable_template_append_point(block, 7)) {
854 printf("FAILED, returned false\n");
857 if(!check_seektable_(block, seekpoints, seekpoint_array))
861 FLAC__uint64 nums[2] = { 3, 7 };
862 seekpoint_array[seekpoints++].sample_number = nums[0];
863 seekpoint_array[seekpoints++].sample_number = nums[1];
864 printf("testing FLAC__metadata_object_seekpoint_template_append_points()... ");
865 if(!FLAC__metadata_object_seektable_template_append_points(block, nums, sizeof(nums)/sizeof(FLAC__uint64))) {
866 printf("FAILED, returned false\n");
869 if(!check_seektable_(block, seekpoints, seekpoint_array))
873 seekpoint_array[seekpoints++].sample_number = 0;
874 seekpoint_array[seekpoints++].sample_number = 10;
875 seekpoint_array[seekpoints++].sample_number = 20;
876 printf("testing FLAC__metadata_object_seekpoint_template_append_spaced_points()... ");
877 if(!FLAC__metadata_object_seektable_template_append_spaced_points(block, 3, 30)) {
878 printf("FAILED, returned false\n");
881 if(!check_seektable_(block, seekpoints, seekpoint_array))
885 seekpoint_array[0].sample_number = 0;
886 seekpoint_array[1].sample_number = 3;
887 seekpoint_array[2].sample_number = 7;
888 seekpoint_array[3].sample_number = 10;
889 seekpoint_array[4].sample_number = 20;
890 seekpoint_array[5].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
891 seekpoint_array[6].sample_number = FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
892 printf("testing FLAC__metadata_object_seekpoint_template_sort(compact=true)... ");
893 if(!FLAC__metadata_object_seektable_template_sort(block, /*compact=*/true)) {
894 printf("FAILED, returned false\n");
897 if(!FLAC__metadata_object_seektable_is_legal(block)) {
898 printf("FAILED, seek table is illegal\n");
901 if(!check_seektable_(block, seekpoints, seekpoint_array))
904 printf("testing FLAC__metadata_object_seekpoint_template_sort(compact=false)... ");
905 if(!FLAC__metadata_object_seektable_template_sort(block, /*compact=*/false)) {
906 printf("FAILED, returned false\n");
909 if(!FLAC__metadata_object_seektable_is_legal(block)) {
910 printf("FAILED, seek table is illegal\n");
913 if(!check_seektable_(block, seekpoints, seekpoint_array))
916 seekpoint_array[seekpoints++].sample_number = 0;
917 seekpoint_array[seekpoints++].sample_number = 10;
918 seekpoint_array[seekpoints++].sample_number = 20;
919 printf("testing FLAC__metadata_object_seekpoint_template_append_spaced_points_by_samples()... ");
920 if(!FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(block, 10, 30)) {
921 printf("FAILED, returned false\n");
924 if(!check_seektable_(block, seekpoints, seekpoint_array))
927 seekpoint_array[seekpoints++].sample_number = 0;
928 seekpoint_array[seekpoints++].sample_number = 11;
929 seekpoint_array[seekpoints++].sample_number = 22;
930 printf("testing FLAC__metadata_object_seekpoint_template_append_spaced_points_by_samples()... ");
931 if(!FLAC__metadata_object_seektable_template_append_spaced_points_by_samples(block, 11, 30)) {
932 printf("FAILED, returned false\n");
935 if(!check_seektable_(block, seekpoints, seekpoint_array))
938 printf("testing FLAC__metadata_object_delete()... ");
939 FLAC__metadata_object_delete(block);
943 printf("testing VORBIS_COMMENT\n");
946 FLAC__StreamMetadata_VorbisComment_Entry entry_;
947 char *field_name, *field_value;
949 printf("testing FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair()... ");
950 if(!FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair(&entry_, "name", "value")) {
951 printf("FAILED, returned false\n");
954 if(strcmp((const char *)entry_.entry, "name=value")) {
955 printf("FAILED, field mismatch\n");
960 printf("testing FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair()... ");
961 if(!FLAC__metadata_object_vorbiscomment_entry_to_name_value_pair(entry_, &field_name, &field_value)) {
962 printf("FAILED, returned false\n");
965 if(strcmp(field_name, "name")) {
966 printf("FAILED, field name mismatch\n");
969 if(strcmp(field_value, "value")) {
970 printf("FAILED, field value mismatch\n");
975 printf("testing FLAC__metadata_object_vorbiscomment_entry_matches()... ");
976 if(!FLAC__metadata_object_vorbiscomment_entry_matches(entry_, field_name, strlen(field_name))) {
977 printf("FAILED, expected true, returned false\n");
982 printf("testing FLAC__metadata_object_vorbiscomment_entry_matches()... ");
983 if(FLAC__metadata_object_vorbiscomment_entry_matches(entry_, "blah", strlen("blah"))) {
984 printf("FAILED, expected false, returned true\n");
994 printf("testing FLAC__metadata_object_new()... ");
995 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
997 printf("FAILED, returned NULL\n");
1000 expected_length = (FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN/8 + strlen(FLAC__VENDOR_STRING) + FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN/8);
1001 if(block->length != expected_length) {
1002 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
1007 printf("testing FLAC__metadata_object_clone()... ");
1008 vorbiscomment = FLAC__metadata_object_clone(block);
1009 if(0 == vorbiscomment) {
1010 printf("FAILED, returned NULL\n");
1013 if(!mutils__compare_block(vorbiscomment, block))
1017 vc_resize_(vorbiscomment, 2);
1018 printf("testing FLAC__metadata_object_vorbiscomment_resize_comments(grow to %u)...", vorbiscomment->data.vorbis_comment.num_comments);
1019 if(!FLAC__metadata_object_vorbiscomment_resize_comments(block, vorbiscomment->data.vorbis_comment.num_comments)) {
1020 printf("FAILED, returned false\n");
1023 if(!mutils__compare_block(vorbiscomment, block))
1027 vc_resize_(vorbiscomment, 1);
1028 printf("testing FLAC__metadata_object_vorbiscomment_resize_comments(shrink to %u)...", vorbiscomment->data.vorbis_comment.num_comments);
1029 if(!FLAC__metadata_object_vorbiscomment_resize_comments(block, vorbiscomment->data.vorbis_comment.num_comments)) {
1030 printf("FAILED, returned false\n");
1033 if(!mutils__compare_block(vorbiscomment, block))
1037 vc_resize_(vorbiscomment, 0);
1038 printf("testing FLAC__metadata_object_vorbiscomment_resize_comments(shrink to %u)...", vorbiscomment->data.vorbis_comment.num_comments);
1039 if(!FLAC__metadata_object_vorbiscomment_resize_comments(block, vorbiscomment->data.vorbis_comment.num_comments)) {
1040 printf("FAILED, returned false\n");
1043 if(!mutils__compare_block(vorbiscomment, block))
1047 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(copy) on empty array...");
1048 vc_insert_new_(&entry, vorbiscomment, 0, "name1=field1");
1049 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/true)) {
1050 printf("FAILED, returned false\n");
1053 if(!mutils__compare_block(vorbiscomment, block))
1057 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(copy) on non-empty array...");
1058 vc_insert_new_(&entry, vorbiscomment, 1, "name2=field2");
1059 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/true)) {
1060 printf("FAILED, returned false\n");
1063 if(!mutils__compare_block(vorbiscomment, block))
1067 vc_resize_(vorbiscomment, 0);
1068 printf("testing FLAC__metadata_object_vorbiscomment_resize_comments(shrink to %u)...", vorbiscomment->data.vorbis_comment.num_comments);
1069 if(!FLAC__metadata_object_vorbiscomment_resize_comments(block, vorbiscomment->data.vorbis_comment.num_comments)) {
1070 printf("FAILED, returned false\n");
1073 if(!mutils__compare_block(vorbiscomment, block))
1077 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on empty array...");
1078 vc_insert_new_(&entry, vorbiscomment, 0, "name1=field1");
1079 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 0, entry, /*copy=*/true)) {
1080 printf("FAILED, returned false\n");
1083 if(!mutils__compare_block(vorbiscomment, block))
1087 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on beginning of non-empty array...");
1088 vc_insert_new_(&entry, vorbiscomment, 0, "name2=field2");
1089 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 0, entry, /*copy=*/true)) {
1090 printf("FAILED, returned false\n");
1093 if(!mutils__compare_block(vorbiscomment, block))
1097 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on middle of non-empty array...");
1098 vc_insert_new_(&entry, vorbiscomment, 1, "name3=field3");
1099 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 1, entry, /*copy=*/true)) {
1100 printf("FAILED, returned false\n");
1103 if(!mutils__compare_block(vorbiscomment, block))
1107 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on end of non-empty array...");
1108 vc_insert_new_(&entry, vorbiscomment, 3, "name4=field4");
1109 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 3, entry, /*copy=*/true)) {
1110 printf("FAILED, returned false\n");
1113 if(!mutils__compare_block(vorbiscomment, block))
1117 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on end of non-empty array...");
1118 vc_insert_new_(&entry, vorbiscomment, 4, "name3=field3dup1");
1119 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 4, entry, /*copy=*/true)) {
1120 printf("FAILED, returned false\n");
1123 if(!mutils__compare_block(vorbiscomment, block))
1127 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(copy) on end of non-empty array...");
1128 vc_insert_new_(&entry, vorbiscomment, 5, "name3=field3dup1");
1129 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 5, entry, /*copy=*/true)) {
1130 printf("FAILED, returned false\n");
1133 if(!mutils__compare_block(vorbiscomment, block))
1137 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1138 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, "name3")) != 1) {
1139 printf("FAILED, expected 1, got %d\n", j);
1144 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1145 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, j+1, "name3")) != 4) {
1146 printf("FAILED, expected 4, got %d\n", j);
1151 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1152 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, j+1, "name3")) != 5) {
1153 printf("FAILED, expected 5, got %d\n", j);
1158 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1159 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, "name2")) != 0) {
1160 printf("FAILED, expected 0, got %d\n", j);
1165 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1166 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, j+1, "name2")) != -1) {
1167 printf("FAILED, expected -1, got %d\n", j);
1172 printf("testing FLAC__metadata_object_vorbiscomment_find_entry_from()...");
1173 if((j = FLAC__metadata_object_vorbiscomment_find_entry_from(block, 0, "blah")) != -1) {
1174 printf("FAILED, expected -1, got %d\n", j);
1179 printf("testing FLAC__metadata_object_vorbiscomment_replace_comment(first, copy)...");
1180 vc_replace_new_(&entry, vorbiscomment, "name3=field3new1", /*all=*/false);
1181 if(!FLAC__metadata_object_vorbiscomment_replace_comment(block, entry, /*all=*/false, /*copy=*/true)) {
1182 printf("FAILED, returned false\n");
1185 if(!mutils__compare_block(vorbiscomment, block))
1187 if(block->data.vorbis_comment.num_comments != 6) {
1188 printf("FAILED, expected 6 comments, got %u\n", block->data.vorbis_comment.num_comments);
1193 printf("testing FLAC__metadata_object_vorbiscomment_replace_comment(all, copy)...");
1194 vc_replace_new_(&entry, vorbiscomment, "name3=field3new2", /*all=*/true);
1195 if(!FLAC__metadata_object_vorbiscomment_replace_comment(block, entry, /*all=*/true, /*copy=*/true)) {
1196 printf("FAILED, returned false\n");
1199 if(!mutils__compare_block(vorbiscomment, block))
1201 if(block->data.vorbis_comment.num_comments != 4) {
1202 printf("FAILED, expected 4 comments, got %u\n", block->data.vorbis_comment.num_comments);
1207 printf("testing FLAC__metadata_object_clone()... ");
1208 blockcopy = FLAC__metadata_object_clone(block);
1209 if(0 == blockcopy) {
1210 printf("FAILED, returned NULL\n");
1213 if(!mutils__compare_block(block, blockcopy))
1217 printf("testing FLAC__metadata_object_delete()... ");
1218 FLAC__metadata_object_delete(blockcopy);
1221 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on middle of array...");
1222 vc_delete_(vorbiscomment, 2);
1223 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 2)) {
1224 printf("FAILED, returned false\n");
1227 if(!mutils__compare_block(vorbiscomment, block))
1231 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on end of array...");
1232 vc_delete_(vorbiscomment, 2);
1233 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 2)) {
1234 printf("FAILED, returned false\n");
1237 if(!mutils__compare_block(vorbiscomment, block))
1241 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on beginning of array...");
1242 vc_delete_(vorbiscomment, 0);
1243 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 0)) {
1244 printf("FAILED, returned false\n");
1247 if(!mutils__compare_block(vorbiscomment, block))
1251 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(copy) on non-empty array...");
1252 vc_insert_new_(&entry, vorbiscomment, 1, "rem0=val0");
1253 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/true)) {
1254 printf("FAILED, returned false\n");
1257 if(!mutils__compare_block(vorbiscomment, block))
1261 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(copy) on non-empty array...");
1262 vc_insert_new_(&entry, vorbiscomment, 2, "rem0=val1");
1263 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/true)) {
1264 printf("FAILED, returned false\n");
1267 if(!mutils__compare_block(vorbiscomment, block))
1271 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(copy) on non-empty array...");
1272 vc_insert_new_(&entry, vorbiscomment, 3, "rem0=val2");
1273 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/true)) {
1274 printf("FAILED, returned false\n");
1277 if(!mutils__compare_block(vorbiscomment, block))
1281 printf("testing FLAC__metadata_object_vorbiscomment_remove_entry_matching(\"blah\")...");
1282 if((j = FLAC__metadata_object_vorbiscomment_remove_entry_matching(block, "blah")) != 0) {
1283 printf("FAILED, expected 0, got %d\n", j);
1286 if(block->data.vorbis_comment.num_comments != 4) {
1287 printf("FAILED, expected 4 comments, got %u\n", block->data.vorbis_comment.num_comments);
1290 if(!mutils__compare_block(vorbiscomment, block))
1294 printf("testing FLAC__metadata_object_vorbiscomment_remove_entry_matching(\"rem0\")...");
1295 vc_delete_(vorbiscomment, 1);
1296 if((j = FLAC__metadata_object_vorbiscomment_remove_entry_matching(block, "rem0")) != 1) {
1297 printf("FAILED, expected 1, got %d\n", j);
1300 if(block->data.vorbis_comment.num_comments != 3) {
1301 printf("FAILED, expected 3 comments, got %u\n", block->data.vorbis_comment.num_comments);
1304 if(!mutils__compare_block(vorbiscomment, block))
1308 printf("testing FLAC__metadata_object_vorbiscomment_remove_entries_matching(\"blah\")...");
1309 if((j = FLAC__metadata_object_vorbiscomment_remove_entries_matching(block, "blah")) != 0) {
1310 printf("FAILED, expected 0, got %d\n", j);
1313 if(block->data.vorbis_comment.num_comments != 3) {
1314 printf("FAILED, expected 3 comments, got %u\n", block->data.vorbis_comment.num_comments);
1317 if(!mutils__compare_block(vorbiscomment, block))
1321 printf("testing FLAC__metadata_object_vorbiscomment_remove_entries_matching(\"rem0\")...");
1322 vc_delete_(vorbiscomment, 1);
1323 vc_delete_(vorbiscomment, 1);
1324 if((j = FLAC__metadata_object_vorbiscomment_remove_entries_matching(block, "rem0")) != 2) {
1325 printf("FAILED, expected 2, got %d\n", j);
1328 if(block->data.vorbis_comment.num_comments != 1) {
1329 printf("FAILED, expected 1 comments, got %u\n", block->data.vorbis_comment.num_comments);
1332 if(!mutils__compare_block(vorbiscomment, block))
1336 printf("testing FLAC__metadata_object_vorbiscomment_set_comment(copy)...");
1337 vc_set_new_(&entry, vorbiscomment, 0, "name5=field5");
1338 FLAC__metadata_object_vorbiscomment_set_comment(block, 0, entry, /*copy=*/true);
1339 if(!mutils__compare_block(vorbiscomment, block))
1343 printf("testing FLAC__metadata_object_vorbiscomment_set_vendor_string(copy)...");
1344 vc_set_vs_new_(&entry, vorbiscomment, "name6=field6");
1345 FLAC__metadata_object_vorbiscomment_set_vendor_string(block, entry, /*copy=*/true);
1346 if(!mutils__compare_block(vorbiscomment, block))
1350 printf("testing FLAC__metadata_object_delete()... ");
1351 FLAC__metadata_object_delete(vorbiscomment);
1352 FLAC__metadata_object_delete(block);
1356 printf("testing FLAC__metadata_object_new()... ");
1357 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
1359 printf("FAILED, returned NULL\n");
1364 printf("testing FLAC__metadata_object_clone()... ");
1365 vorbiscomment = FLAC__metadata_object_clone(block);
1366 if(0 == vorbiscomment) {
1367 printf("FAILED, returned NULL\n");
1370 if(!mutils__compare_block(vorbiscomment, block))
1374 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(own) on empty array...");
1375 vc_insert_new_(&entry, vorbiscomment, 0, "name1=field1");
1376 entry_clone_(&entry);
1377 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/false)) {
1378 printf("FAILED, returned false\n");
1381 if(!mutils__compare_block(vorbiscomment, block))
1385 printf("testing FLAC__metadata_object_vorbiscomment_append_comment(own) on non-empty array...");
1386 vc_insert_new_(&entry, vorbiscomment, 1, "name2=field2");
1387 entry_clone_(&entry);
1388 if(!FLAC__metadata_object_vorbiscomment_append_comment(block, entry, /*copy=*/false)) {
1389 printf("FAILED, returned false\n");
1392 if(!mutils__compare_block(vorbiscomment, block))
1396 printf("testing FLAC__metadata_object_delete()... ");
1397 FLAC__metadata_object_delete(vorbiscomment);
1398 FLAC__metadata_object_delete(block);
1401 printf("testing FLAC__metadata_object_new()... ");
1402 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT);
1404 printf("FAILED, returned NULL\n");
1409 printf("testing FLAC__metadata_object_clone()... ");
1410 vorbiscomment = FLAC__metadata_object_clone(block);
1411 if(0 == vorbiscomment) {
1412 printf("FAILED, returned NULL\n");
1415 if(!mutils__compare_block(vorbiscomment, block))
1419 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on empty array...");
1420 vc_insert_new_(&entry, vorbiscomment, 0, "name1=field1");
1421 entry_clone_(&entry);
1422 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 0, entry, /*copy=*/false)) {
1423 printf("FAILED, returned false\n");
1426 if(!mutils__compare_block(vorbiscomment, block))
1430 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on beginning of non-empty array...");
1431 vc_insert_new_(&entry, vorbiscomment, 0, "name2=field2");
1432 entry_clone_(&entry);
1433 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 0, entry, /*copy=*/false)) {
1434 printf("FAILED, returned false\n");
1437 if(!mutils__compare_block(vorbiscomment, block))
1441 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on middle of non-empty array...");
1442 vc_insert_new_(&entry, vorbiscomment, 1, "name3=field3");
1443 entry_clone_(&entry);
1444 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 1, entry, /*copy=*/false)) {
1445 printf("FAILED, returned false\n");
1448 if(!mutils__compare_block(vorbiscomment, block))
1452 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on end of non-empty array...");
1453 vc_insert_new_(&entry, vorbiscomment, 3, "name4=field4");
1454 entry_clone_(&entry);
1455 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 3, entry, /*copy=*/false)) {
1456 printf("FAILED, returned false\n");
1459 if(!mutils__compare_block(vorbiscomment, block))
1463 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on end of non-empty array...");
1464 vc_insert_new_(&entry, vorbiscomment, 4, "name3=field3dup1");
1465 entry_clone_(&entry);
1466 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 4, entry, /*copy=*/false)) {
1467 printf("FAILED, returned false\n");
1470 if(!mutils__compare_block(vorbiscomment, block))
1474 printf("testing FLAC__metadata_object_vorbiscomment_insert_comment(own) on end of non-empty array...");
1475 vc_insert_new_(&entry, vorbiscomment, 5, "name3=field3dup1");
1476 entry_clone_(&entry);
1477 if(!FLAC__metadata_object_vorbiscomment_insert_comment(block, 5, entry, /*copy=*/false)) {
1478 printf("FAILED, returned false\n");
1481 if(!mutils__compare_block(vorbiscomment, block))
1485 printf("testing FLAC__metadata_object_vorbiscomment_replace_comment(first, own)...");
1486 vc_replace_new_(&entry, vorbiscomment, "name3=field3new1", /*all=*/false);
1487 entry_clone_(&entry);
1488 if(!FLAC__metadata_object_vorbiscomment_replace_comment(block, entry, /*all=*/false, /*copy=*/false)) {
1489 printf("FAILED, returned false\n");
1492 if(!mutils__compare_block(vorbiscomment, block))
1494 if(block->data.vorbis_comment.num_comments != 6) {
1495 printf("FAILED, expected 6 comments, got %u\n", block->data.vorbis_comment.num_comments);
1500 printf("testing FLAC__metadata_object_vorbiscomment_replace_comment(all, own)...");
1501 vc_replace_new_(&entry, vorbiscomment, "name3=field3new2", /*all=*/true);
1502 entry_clone_(&entry);
1503 if(!FLAC__metadata_object_vorbiscomment_replace_comment(block, entry, /*all=*/true, /*copy=*/false)) {
1504 printf("FAILED, returned false\n");
1507 if(!mutils__compare_block(vorbiscomment, block))
1509 if(block->data.vorbis_comment.num_comments != 4) {
1510 printf("FAILED, expected 4 comments, got %u\n", block->data.vorbis_comment.num_comments);
1515 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on middle of array...");
1516 vc_delete_(vorbiscomment, 2);
1517 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 2)) {
1518 printf("FAILED, returned false\n");
1521 if(!mutils__compare_block(vorbiscomment, block))
1525 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on end of array...");
1526 vc_delete_(vorbiscomment, 2);
1527 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 2)) {
1528 printf("FAILED, returned false\n");
1531 if(!mutils__compare_block(vorbiscomment, block))
1535 printf("testing FLAC__metadata_object_vorbiscomment_delete_comment() on beginning of array...");
1536 vc_delete_(vorbiscomment, 0);
1537 if(!FLAC__metadata_object_vorbiscomment_delete_comment(block, 0)) {
1538 printf("FAILED, returned false\n");
1541 if(!mutils__compare_block(vorbiscomment, block))
1545 printf("testing FLAC__metadata_object_vorbiscomment_set_comment(own)...");
1546 vc_set_new_(&entry, vorbiscomment, 0, "name5=field5");
1547 entry_clone_(&entry);
1548 FLAC__metadata_object_vorbiscomment_set_comment(block, 0, entry, /*copy=*/false);
1549 if(!mutils__compare_block(vorbiscomment, block))
1553 printf("testing FLAC__metadata_object_vorbiscomment_set_vendor_string(own)...");
1554 vc_set_vs_new_(&entry, vorbiscomment, "name6=field6");
1555 entry_clone_(&entry);
1556 FLAC__metadata_object_vorbiscomment_set_vendor_string(block, entry, /*copy=*/false);
1557 if(!mutils__compare_block(vorbiscomment, block))
1561 printf("testing FLAC__metadata_object_delete()... ");
1562 FLAC__metadata_object_delete(vorbiscomment);
1563 FLAC__metadata_object_delete(block);
1567 printf("testing CUESHEET\n");
1570 FLAC__StreamMetadata_CueSheet_Track *track_, *trackcopy_;
1572 printf("testing FLAC__metadata_object_cuesheet_track_new()... ");
1573 track_ = FLAC__metadata_object_cuesheet_track_new();
1575 printf("FAILED, returned NULL\n");
1580 printf("testing FLAC__metadata_object_cuesheet_track_clone()... ");
1581 trackcopy_ = FLAC__metadata_object_cuesheet_track_clone(track_);
1582 if(0 == trackcopy_) {
1583 printf("FAILED, returned NULL\n");
1586 if(!compare_track_(trackcopy_, track_))
1590 printf("testing FLAC__metadata_object_cuesheet_track_delete()... ");
1591 FLAC__metadata_object_cuesheet_track_delete(trackcopy_);
1592 FLAC__metadata_object_cuesheet_track_delete(track_);
1597 printf("testing FLAC__metadata_object_new()... ");
1598 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_CUESHEET);
1600 printf("FAILED, returned NULL\n");
1604 FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN +
1605 FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN +
1606 FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN +
1607 FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN +
1608 FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN
1610 if(block->length != expected_length) {
1611 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
1616 printf("testing FLAC__metadata_object_clone()... ");
1617 cuesheet = FLAC__metadata_object_clone(block);
1619 printf("FAILED, returned NULL\n");
1622 if(!mutils__compare_block(cuesheet, block))
1626 cs_resize_(cuesheet, 2);
1627 printf("testing FLAC__metadata_object_cuesheet_resize_tracks(grow to %u)...", cuesheet->data.cue_sheet.num_tracks);
1628 if(!FLAC__metadata_object_cuesheet_resize_tracks(block, cuesheet->data.cue_sheet.num_tracks)) {
1629 printf("FAILED, returned false\n");
1632 if(!mutils__compare_block(cuesheet, block))
1636 cs_resize_(cuesheet, 1);
1637 printf("testing FLAC__metadata_object_cuesheet_resize_tracks(shrink to %u)...", cuesheet->data.cue_sheet.num_tracks);
1638 if(!FLAC__metadata_object_cuesheet_resize_tracks(block, cuesheet->data.cue_sheet.num_tracks)) {
1639 printf("FAILED, returned false\n");
1642 if(!mutils__compare_block(cuesheet, block))
1646 cs_resize_(cuesheet, 0);
1647 printf("testing FLAC__metadata_object_cuesheet_resize_tracks(shrink to %u)...", cuesheet->data.cue_sheet.num_tracks);
1648 if(!FLAC__metadata_object_cuesheet_resize_tracks(block, cuesheet->data.cue_sheet.num_tracks)) {
1649 printf("FAILED, returned false\n");
1652 if(!mutils__compare_block(cuesheet, block))
1656 printf("testing FLAC__metadata_object_cuesheet_insert_track(copy) on empty array...");
1657 cs_insert_new_(&track, cuesheet, 0, 0, 1, "ABCDE1234567", false, false);
1658 if(!FLAC__metadata_object_cuesheet_insert_track(block, 0, &track, /*copy=*/true)) {
1659 printf("FAILED, returned false\n");
1662 if(!mutils__compare_block(cuesheet, block))
1666 printf("testing FLAC__metadata_object_cuesheet_insert_track(copy) on beginning of non-empty array...");
1667 cs_insert_new_(&track, cuesheet, 0, 10, 2, "BBCDE1234567", false, false);
1668 if(!FLAC__metadata_object_cuesheet_insert_track(block, 0, &track, /*copy=*/true)) {
1669 printf("FAILED, returned false\n");
1672 if(!mutils__compare_block(cuesheet, block))
1676 printf("testing FLAC__metadata_object_cuesheet_insert_track(copy) on middle of non-empty array...");
1677 cs_insert_new_(&track, cuesheet, 1, 20, 3, "CBCDE1234567", false, false);
1678 if(!FLAC__metadata_object_cuesheet_insert_track(block, 1, &track, /*copy=*/true)) {
1679 printf("FAILED, returned false\n");
1682 if(!mutils__compare_block(cuesheet, block))
1686 printf("testing FLAC__metadata_object_cuesheet_insert_track(copy) on end of non-empty array...");
1687 cs_insert_new_(&track, cuesheet, 3, 30, 4, "DBCDE1234567", false, false);
1688 if(!FLAC__metadata_object_cuesheet_insert_track(block, 3, &track, /*copy=*/true)) {
1689 printf("FAILED, returned false\n");
1692 if(!mutils__compare_block(cuesheet, block))
1696 printf("testing FLAC__metadata_object_cuesheet_insert_blank_track() on end of non-empty array...");
1697 cs_insert_new_(&track, cuesheet, 4, 0, 0, "\0\0\0\0\0\0\0\0\0\0\0\0", false, false);
1698 if(!FLAC__metadata_object_cuesheet_insert_blank_track(block, 4)) {
1699 printf("FAILED, returned false\n");
1702 if(!mutils__compare_block(cuesheet, block))
1706 printf("testing FLAC__metadata_object_clone()... ");
1707 blockcopy = FLAC__metadata_object_clone(block);
1708 if(0 == blockcopy) {
1709 printf("FAILED, returned NULL\n");
1712 if(!mutils__compare_block(block, blockcopy))
1716 printf("testing FLAC__metadata_object_delete()... ");
1717 FLAC__metadata_object_delete(blockcopy);
1720 printf("testing FLAC__metadata_object_cuesheet_delete_track() on end of array...");
1721 cs_delete_(cuesheet, 4);
1722 if(!FLAC__metadata_object_cuesheet_delete_track(block, 4)) {
1723 printf("FAILED, returned false\n");
1726 if(!mutils__compare_block(cuesheet, block))
1730 printf("testing FLAC__metadata_object_cuesheet_delete_track() on middle of array...");
1731 cs_delete_(cuesheet, 2);
1732 if(!FLAC__metadata_object_cuesheet_delete_track(block, 2)) {
1733 printf("FAILED, returned false\n");
1736 if(!mutils__compare_block(cuesheet, block))
1740 printf("testing FLAC__metadata_object_cuesheet_delete_track() on end of array...");
1741 cs_delete_(cuesheet, 2);
1742 if(!FLAC__metadata_object_cuesheet_delete_track(block, 2)) {
1743 printf("FAILED, returned false\n");
1746 if(!mutils__compare_block(cuesheet, block))
1750 printf("testing FLAC__metadata_object_cuesheet_delete_track() on beginning of array...");
1751 cs_delete_(cuesheet, 0);
1752 if(!FLAC__metadata_object_cuesheet_delete_track(block, 0)) {
1753 printf("FAILED, returned false\n");
1756 if(!mutils__compare_block(cuesheet, block))
1760 printf("testing FLAC__metadata_object_cuesheet_set_track(copy)...");
1761 cs_set_new_(&track, cuesheet, 0, 40, 5, "EBCDE1234567", false, false);
1762 FLAC__metadata_object_cuesheet_set_track(block, 0, &track, /*copy=*/true);
1763 if(!mutils__compare_block(cuesheet, block))
1767 tr_resize_(cuesheet, 0, 2);
1768 printf("testing FLAC__metadata_object_cuesheet_track_resize_indices(grow to %u)...", cuesheet->data.cue_sheet.tracks[0].num_indices);
1769 if(!FLAC__metadata_object_cuesheet_track_resize_indices(block, 0, cuesheet->data.cue_sheet.tracks[0].num_indices)) {
1770 printf("FAILED, returned false\n");
1773 if(!mutils__compare_block(cuesheet, block))
1777 tr_resize_(cuesheet, 0, 1);
1778 printf("testing FLAC__metadata_object_cuesheet_track_resize_indices(shrink to %u)...", cuesheet->data.cue_sheet.tracks[0].num_indices);
1779 if(!FLAC__metadata_object_cuesheet_track_resize_indices(block, 0, cuesheet->data.cue_sheet.tracks[0].num_indices)) {
1780 printf("FAILED, returned false\n");
1783 if(!mutils__compare_block(cuesheet, block))
1787 tr_resize_(cuesheet, 0, 0);
1788 printf("testing FLAC__metadata_object_cuesheet_track_resize_indices(shrink to %u)...", cuesheet->data.cue_sheet.tracks[0].num_indices);
1789 if(!FLAC__metadata_object_cuesheet_track_resize_indices(block, 0, cuesheet->data.cue_sheet.tracks[0].num_indices)) {
1790 printf("FAILED, returned false\n");
1793 if(!mutils__compare_block(cuesheet, block))
1799 printf("testing FLAC__metadata_object_cuesheet_track_insert_index() on empty array...");
1800 tr_insert_new_(cuesheet, 0, 0, index);
1801 if(!FLAC__metadata_object_cuesheet_track_insert_index(block, 0, 0, index)) {
1802 printf("FAILED, returned false\n");
1805 if(!mutils__compare_block(cuesheet, block))
1811 printf("testing FLAC__metadata_object_cuesheet_track_insert_index() on beginning of non-empty array...");
1812 tr_insert_new_(cuesheet, 0, 0, index);
1813 if(!FLAC__metadata_object_cuesheet_track_insert_index(block, 0, 0, index)) {
1814 printf("FAILED, returned false\n");
1817 if(!mutils__compare_block(cuesheet, block))
1823 printf("testing FLAC__metadata_object_cuesheet_track_insert_index() on middle of non-empty array...");
1824 tr_insert_new_(cuesheet, 0, 1, index);
1825 if(!FLAC__metadata_object_cuesheet_track_insert_index(block, 0, 1, index)) {
1826 printf("FAILED, returned false\n");
1829 if(!mutils__compare_block(cuesheet, block))
1835 printf("testing FLAC__metadata_object_cuesheet_track_insert_index() on end of non-empty array...");
1836 tr_insert_new_(cuesheet, 0, 3, index);
1837 if(!FLAC__metadata_object_cuesheet_track_insert_index(block, 0, 3, index)) {
1838 printf("FAILED, returned false\n");
1841 if(!mutils__compare_block(cuesheet, block))
1847 printf("testing FLAC__metadata_object_cuesheet_track_insert_blank_index() on end of non-empty array...");
1848 tr_insert_new_(cuesheet, 0, 4, index);
1849 if(!FLAC__metadata_object_cuesheet_track_insert_blank_index(block, 0, 4)) {
1850 printf("FAILED, returned false\n");
1853 if(!mutils__compare_block(cuesheet, block))
1857 printf("testing FLAC__metadata_object_clone()... ");
1858 blockcopy = FLAC__metadata_object_clone(block);
1859 if(0 == blockcopy) {
1860 printf("FAILED, returned NULL\n");
1863 if(!mutils__compare_block(block, blockcopy))
1867 printf("testing FLAC__metadata_object_delete()... ");
1868 FLAC__metadata_object_delete(blockcopy);
1871 printf("testing FLAC__metadata_object_cuesheet_track_delete_index() on end of array...");
1872 tr_delete_(cuesheet, 0, 4);
1873 if(!FLAC__metadata_object_cuesheet_track_delete_index(block, 0, 4)) {
1874 printf("FAILED, returned false\n");
1877 if(!mutils__compare_block(cuesheet, block))
1881 printf("testing FLAC__metadata_object_cuesheet_track_delete_index() on middle of array...");
1882 tr_delete_(cuesheet, 0, 2);
1883 if(!FLAC__metadata_object_cuesheet_track_delete_index(block, 0, 2)) {
1884 printf("FAILED, returned false\n");
1887 if(!mutils__compare_block(cuesheet, block))
1891 printf("testing FLAC__metadata_object_cuesheet_track_delete_index() on end of array...");
1892 tr_delete_(cuesheet, 0, 2);
1893 if(!FLAC__metadata_object_cuesheet_track_delete_index(block, 0, 2)) {
1894 printf("FAILED, returned false\n");
1897 if(!mutils__compare_block(cuesheet, block))
1901 printf("testing FLAC__metadata_object_cuesheet_track_delete_index() on beginning of array...");
1902 tr_delete_(cuesheet, 0, 0);
1903 if(!FLAC__metadata_object_cuesheet_track_delete_index(block, 0, 0)) {
1904 printf("FAILED, returned false\n");
1907 if(!mutils__compare_block(cuesheet, block))
1911 printf("testing FLAC__metadata_object_delete()... ");
1912 FLAC__metadata_object_delete(cuesheet);
1913 FLAC__metadata_object_delete(block);
1917 printf("testing FLAC__metadata_object_new()... ");
1918 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_CUESHEET);
1920 printf("FAILED, returned NULL\n");
1925 printf("testing FLAC__metadata_object_clone()... ");
1926 cuesheet = FLAC__metadata_object_clone(block);
1928 printf("FAILED, returned NULL\n");
1931 if(!mutils__compare_block(cuesheet, block))
1935 printf("testing FLAC__metadata_object_cuesheet_insert_track(own) on empty array...");
1936 cs_insert_new_(&track, cuesheet, 0, 60, 7, "GBCDE1234567", false, false);
1937 track_clone_(&track);
1938 if(!FLAC__metadata_object_cuesheet_insert_track(block, 0, &track, /*copy=*/false)) {
1939 printf("FAILED, returned false\n");
1942 if(!mutils__compare_block(cuesheet, block))
1946 printf("testing FLAC__metadata_object_cuesheet_insert_track(own) on beginning of non-empty array...");
1947 cs_insert_new_(&track, cuesheet, 0, 70, 8, "HBCDE1234567", false, false);
1948 track_clone_(&track);
1949 if(!FLAC__metadata_object_cuesheet_insert_track(block, 0, &track, /*copy=*/false)) {
1950 printf("FAILED, returned false\n");
1953 if(!mutils__compare_block(cuesheet, block))
1957 printf("testing FLAC__metadata_object_cuesheet_insert_track(own) on middle of non-empty array...");
1958 cs_insert_new_(&track, cuesheet, 1, 80, 9, "IBCDE1234567", false, false);
1959 track_clone_(&track);
1960 if(!FLAC__metadata_object_cuesheet_insert_track(block, 1, &track, /*copy=*/false)) {
1961 printf("FAILED, returned false\n");
1964 if(!mutils__compare_block(cuesheet, block))
1968 printf("testing FLAC__metadata_object_cuesheet_insert_track(own) on end of non-empty array...");
1969 cs_insert_new_(&track, cuesheet, 3, 90, 10, "JBCDE1234567", false, false);
1970 track_clone_(&track);
1971 if(!FLAC__metadata_object_cuesheet_insert_track(block, 3, &track, /*copy=*/false)) {
1972 printf("FAILED, returned false\n");
1975 if(!mutils__compare_block(cuesheet, block))
1979 printf("testing FLAC__metadata_object_cuesheet_delete_track() on middle of array...");
1980 cs_delete_(cuesheet, 2);
1981 if(!FLAC__metadata_object_cuesheet_delete_track(block, 2)) {
1982 printf("FAILED, returned false\n");
1985 if(!mutils__compare_block(cuesheet, block))
1989 printf("testing FLAC__metadata_object_cuesheet_delete_track() on end of array...");
1990 cs_delete_(cuesheet, 2);
1991 if(!FLAC__metadata_object_cuesheet_delete_track(block, 2)) {
1992 printf("FAILED, returned false\n");
1995 if(!mutils__compare_block(cuesheet, block))
1999 printf("testing FLAC__metadata_object_cuesheet_delete_track() on beginning of array...");
2000 cs_delete_(cuesheet, 0);
2001 if(!FLAC__metadata_object_cuesheet_delete_track(block, 0)) {
2002 printf("FAILED, returned false\n");
2005 if(!mutils__compare_block(cuesheet, block))
2009 printf("testing FLAC__metadata_object_cuesheet_set_track(own)...");
2010 cs_set_new_(&track, cuesheet, 0, 100, 11, "KBCDE1234567", false, false);
2011 track_clone_(&track);
2012 FLAC__metadata_object_cuesheet_set_track(block, 0, &track, /*copy=*/false);
2013 if(!mutils__compare_block(cuesheet, block))
2017 printf("testing FLAC__metadata_object_cuesheet_is_legal()...");
2019 const char *violation;
2020 if(FLAC__metadata_object_cuesheet_is_legal(block, /*check_cd_da_subset=*/true, &violation)) {
2021 printf("FAILED, returned true when expecting false\n");
2024 printf("returned false as expected, violation=\"%s\" OK\n", violation);
2027 printf("testing FLAC__metadata_object_delete()... ");
2028 FLAC__metadata_object_delete(cuesheet);
2029 FLAC__metadata_object_delete(block);
2033 printf("testing PICTURE\n");
2035 printf("testing FLAC__metadata_object_new()... ");
2036 block = FLAC__metadata_object_new(FLAC__METADATA_TYPE_PICTURE);
2038 printf("FAILED, returned NULL\n");
2042 FLAC__STREAM_METADATA_PICTURE_TYPE_LEN +
2043 FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN +
2044 FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN +
2045 FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN +
2046 FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN +
2047 FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN +
2048 FLAC__STREAM_METADATA_PICTURE_COLORS_LEN +
2049 FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN
2051 if(block->length != expected_length) {
2052 printf("FAILED, bad length, expected %u, got %u\n", expected_length, block->length);
2057 printf("testing FLAC__metadata_object_clone()... ");
2058 picture = FLAC__metadata_object_clone(block);
2060 printf("FAILED, returned NULL\n");
2063 if(!mutils__compare_block(picture, block))
2067 pi_set_mime_type(picture, "image/png\t");
2068 printf("testing FLAC__metadata_object_picture_set_mime_type(copy)...");
2069 if(!FLAC__metadata_object_picture_set_mime_type(block, "image/png\t", /*copy=*/true)) {
2070 printf("FAILED, returned false\n");
2073 if(!mutils__compare_block(picture, block))
2077 printf("testing FLAC__metadata_object_picture_is_legal()...");
2079 const char *violation;
2080 if(FLAC__metadata_object_picture_is_legal(block, &violation)) {
2081 printf("FAILED, returned true when expecting false\n");
2084 printf("returned false as expected, violation=\"%s\" OK\n", violation);
2087 pi_set_mime_type(picture, "image/png");
2088 printf("testing FLAC__metadata_object_picture_set_mime_type(copy)...");
2089 if(!FLAC__metadata_object_picture_set_mime_type(block, "image/png", /*copy=*/true)) {
2090 printf("FAILED, returned false\n");
2093 if(!mutils__compare_block(picture, block))
2097 printf("testing FLAC__metadata_object_picture_is_legal()...");
2099 const char *violation;
2100 if(!FLAC__metadata_object_picture_is_legal(block, &violation)) {
2101 printf("FAILED, returned false, violation=\"%s\"\n", violation);
2107 pi_set_description(picture, (const FLAC__byte *)"DESCRIPTION\xff");
2108 printf("testing FLAC__metadata_object_picture_set_description(copy)...");
2109 if(!FLAC__metadata_object_picture_set_description(block, (FLAC__byte *)"DESCRIPTION\xff", /*copy=*/true)) {
2110 printf("FAILED, returned false\n");
2113 if(!mutils__compare_block(picture, block))
2117 printf("testing FLAC__metadata_object_picture_is_legal()...");
2119 const char *violation;
2120 if(FLAC__metadata_object_picture_is_legal(block, &violation)) {
2121 printf("FAILED, returned true when expecting false\n");
2124 printf("returned false as expected, violation=\"%s\" OK\n", violation);
2127 pi_set_description(picture, (const FLAC__byte *)"DESCRIPTION");
2128 printf("testing FLAC__metadata_object_picture_set_description(copy)...");
2129 if(!FLAC__metadata_object_picture_set_description(block, (FLAC__byte *)"DESCRIPTION", /*copy=*/true)) {
2130 printf("FAILED, returned false\n");
2133 if(!mutils__compare_block(picture, block))
2137 printf("testing FLAC__metadata_object_picture_is_legal()...");
2139 const char *violation;
2140 if(!FLAC__metadata_object_picture_is_legal(block, &violation)) {
2141 printf("FAILED, returned false, violation=\"%s\"\n", violation);
2148 pi_set_data(picture, (const FLAC__byte*)"PNGDATA", strlen("PNGDATA"));
2149 printf("testing FLAC__metadata_object_picture_set_data(copy)...");
2150 if(!FLAC__metadata_object_picture_set_data(block, (FLAC__byte*)"PNGDATA", strlen("PNGDATA"), /*copy=*/true)) {
2151 printf("FAILED, returned false\n");
2154 if(!mutils__compare_block(picture, block))
2158 printf("testing FLAC__metadata_object_clone()... ");
2159 blockcopy = FLAC__metadata_object_clone(block);
2160 if(0 == blockcopy) {
2161 printf("FAILED, returned NULL\n");
2164 if(!mutils__compare_block(block, blockcopy))
2168 printf("testing FLAC__metadata_object_delete()... ");
2169 FLAC__metadata_object_delete(blockcopy);
2172 pi_set_mime_type(picture, "image/png\t");
2173 printf("testing FLAC__metadata_object_picture_set_mime_type(own)...");
2174 if(!FLAC__metadata_object_picture_set_mime_type(block, strdup("image/png\t"), /*copy=*/false)) {
2175 printf("FAILED, returned false\n");
2178 if(!mutils__compare_block(picture, block))
2182 printf("testing FLAC__metadata_object_picture_is_legal()...");
2184 const char *violation;
2185 if(FLAC__metadata_object_picture_is_legal(block, &violation)) {
2186 printf("FAILED, returned true when expecting false\n");
2189 printf("returned false as expected, violation=\"%s\" OK\n", violation);
2192 pi_set_mime_type(picture, "image/png");
2193 printf("testing FLAC__metadata_object_picture_set_mime_type(own)...");
2194 if(!FLAC__metadata_object_picture_set_mime_type(block, strdup("image/png"), /*copy=*/false)) {
2195 printf("FAILED, returned false\n");
2198 if(!mutils__compare_block(picture, block))
2202 printf("testing FLAC__metadata_object_picture_is_legal()...");
2204 const char *violation;
2205 if(!FLAC__metadata_object_picture_is_legal(block, &violation)) {
2206 printf("FAILED, returned false, violation=\"%s\"\n", violation);
2212 pi_set_description(picture, (const FLAC__byte *)"DESCRIPTION\xff");
2213 printf("testing FLAC__metadata_object_picture_set_description(own)...");
2214 if(!FLAC__metadata_object_picture_set_description(block, (FLAC__byte *)strdup("DESCRIPTION\xff"), /*copy=*/false)) {
2215 printf("FAILED, returned false\n");
2218 if(!mutils__compare_block(picture, block))
2222 printf("testing FLAC__metadata_object_picture_is_legal()...");
2224 const char *violation;
2225 if(FLAC__metadata_object_picture_is_legal(block, &violation)) {
2226 printf("FAILED, returned true when expecting false\n");
2229 printf("returned false as expected, violation=\"%s\" OK\n", violation);
2232 pi_set_description(picture, (const FLAC__byte *)"DESCRIPTION");
2233 printf("testing FLAC__metadata_object_picture_set_description(own)...");
2234 if(!FLAC__metadata_object_picture_set_description(block, (FLAC__byte *)strdup("DESCRIPTION"), /*copy=*/false)) {
2235 printf("FAILED, returned false\n");
2238 if(!mutils__compare_block(picture, block))
2242 printf("testing FLAC__metadata_object_picture_is_legal()...");
2244 const char *violation;
2245 if(!FLAC__metadata_object_picture_is_legal(block, &violation)) {
2246 printf("FAILED, returned false, violation=\"%s\"\n", violation);
2252 pi_set_data(picture, (const FLAC__byte*)"PNGDATA", strlen("PNGDATA"));
2253 printf("testing FLAC__metadata_object_picture_set_data(own)...");
2254 if(!FLAC__metadata_object_picture_set_data(block, (FLAC__byte*)strdup("PNGDATA"), strlen("PNGDATA"), /*copy=*/false)) {
2255 printf("FAILED, returned false\n");
2258 if(!mutils__compare_block(picture, block))
2262 printf("testing FLAC__metadata_object_clone()... ");
2263 blockcopy = FLAC__metadata_object_clone(block);
2264 if(0 == blockcopy) {
2265 printf("FAILED, returned NULL\n");
2268 if(!mutils__compare_block(block, blockcopy))
2272 printf("testing FLAC__metadata_object_delete()... ");
2273 FLAC__metadata_object_delete(blockcopy);
2276 printf("testing FLAC__metadata_object_delete()... ");
2277 FLAC__metadata_object_delete(picture);
2278 FLAC__metadata_object_delete(block);