#define _POSIX_C_SOURCE 200809L #include "xtc/xtc_editing.h" #include "xtc/xtc_mixer.h" #include "xtc/xtc_audio.h" #include #include #include #include #include static void markers(void) { xtc_project *p=NULL,*q=NULL;xtc_marker m;size_t count;char path[]="/tmp/xtc-sections-XXXXXX"; int fd=mkstemp(path);assert(fd>=0 && close(fd)==0); assert(xtc_project_create(&p)==XTC_OK && xtc_project_create(&q)==XTC_OK); assert(xtc_project_set_marker(p,3840,"Chorus")==XTC_OK); assert(xtc_project_set_marker(p,0,"Intro")==XTC_OK); assert(xtc_project_set_marker(p,0,"Intro ä")==XTC_OK); assert(xtc_project_get_marker(p,0,&m)==XTC_OK && !strcmp(m.name,"Intro ä")); assert(xtc_project_set_marker(p,1,"Bad\n")==XTC_ERR_INVALID_ARGUMENT); assert(xtc_project_save(p,path)==XTC_OK && xtc_project_load(q,path)==XTC_OK); assert(xtc_project_marker_count(q,&count)==XTC_OK && count==2); assert(xtc_project_get_marker(q,1,&m)==XTC_OK && m.tick==3840 && !strcmp(m.name,"Chorus")); assert(xtc_project_remove_marker(q,0)==XTC_OK && xtc_project_remove_marker(q,0)==XTC_ERR_NOT_FOUND); for(size_t i=1;i<127;++i)assert(xtc_project_set_marker(p,i,"M")==XTC_OK); assert(xtc_project_set_marker(p,999,"Full")==XTC_ERR_CAPACITY); /* Malformed marker ordering rejects transactionally. */ {FILE *f=fopen(path,"r");char data[32768];size_t n;assert(f);n=fread(data,1,sizeof(data)-1,f);data[n]=0;fclose(f); char *at=strstr(data,"MARKER 3840");assert(at);memcpy(at+7,"0000",4); f=fopen(path,"w");assert(f && fwrite(data,1,n,f)==n && fclose(f)==0); assert(xtc_project_load(q,path)==XTC_ERR_FORMAT);assert(xtc_project_marker_count(q,&count)==XTC_OK && count==1);} xtc_project_destroy(p);xtc_project_destroy(q);assert(unlink(path)==0); } int main(void){markers();puts("Next DAW workflow tests passed.");return 0;}