#include "xtc/xtc_midi.h" #include "xtc/xtc_mixer.h" #include #include #include int main(void) { xtc_project *p = NULL, *undo = NULL; xtc_history *h = NULL; uint64_t track, second, clip, duplicate, note; size_t notes, tracks, clips; xtc_clip_info c; xtc_note_info n, original; assert(xtc_project_create(&p) == XTC_OK); assert(xtc_project_add_track(p,"Keys",&track) == XTC_OK && xtc_project_add_track(p,"Bass",&second) == XTC_OK); assert(xtc_project_add_midi_clip(p,track,0,3840,&clip) == XTC_OK); assert(xtc_project_add_note(p,clip,0,960,69,100,1,¬e) == XTC_OK); assert(xtc_project_edit_clip(p,clip,track,960,1920,960) == XTC_OK); assert(xtc_project_get_note(p,0,&original) == XTC_OK); assert(xtc_history_create(p,&h) == XTC_OK); assert(xtc_project_duplicate_clip(p,clip,second,3840,&duplicate) == XTC_OK && duplicate != clip); assert(xtc_project_find_clip(p,duplicate,&c) == XTC_OK && c.offset_tick == 960 && c.source_length_tick == 3840 && c.midi); assert(xtc_project_get_note(p,1,&n) == XTC_OK && n.clip_id == duplicate && n.id != original.id && n.start_tick == original.start_tick); assert(xtc_project_rename_clip(p,duplicate,"Chorus รค") == XTC_OK); assert(xtc_project_rename_track(p,second,"Bass 2") == XTC_OK); assert(xtc_project_move_track(p,second,0) == XTC_OK); assert(xtc_history_record(h,p) == XTC_OK && xtc_history_checkout(h,0,&undo) == XTC_OK); assert(xtc_project_find_clip(undo,duplicate,&c) == XTC_ERR_NOT_FOUND); assert(xtc_project_get_counts(undo,&tracks,&clips) == XTC_OK && clips == 1); xtc_project_destroy(undo); assert(xtc_project_duplicate_clip(p,clip,track,XTC_PROJECT_MAX_TICK,&duplicate) == XTC_ERR_INVALID_ARGUMENT); assert(xtc_project_rename_track(p,track,"Bad\n") == XTC_ERR_INVALID_ARGUMENT); assert(xtc_project_clone(p,&undo) == XTC_OK); xtc_project_destroy(undo); for (;;) { assert(xtc_project_note_count(p,¬es) == XTC_OK); if (notes == XTC_PROJECT_MAX_NOTES) break; assert(xtc_project_add_note(p,clip,0,1,60,100,0,¬e) == XTC_OK); } assert(xtc_project_duplicate_clip(p,clip,track,0,&duplicate) == XTC_ERR_CAPACITY); assert(xtc_project_get_counts(p,&tracks,&clips) == XTC_OK && clips == 2); xtc_history_destroy(h); xtc_project_destroy(p); puts("Duplicate source notes/trim, naming/order, undo and capacity rollback passed."); return 0; }