//| Copyright: (C) 2020-2024 Kevin Larke //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file. #include "cwCommon.h" #include "cwLog.h" #include "cwCommonImpl.h" #include "cwTest.h" #include "cwMem.h" #include "cwText.h" #include "cwObject.h" #include "cwMidi.h" #include "cwFileSys.h" #include "cwDynRefTbl.h" #include "cwScoreParse.h" #include "cwSfScore.h" #include "cwSfMatch.h" #include "cwSfTrack.h" #include "cwScoreTest.h" cw::rc_t cw::score_test::test( const object_t* cfg ) { rc_t rc = kOkRC; const char* cm_score_fname = nullptr; const object_t* dynArrayNode = nullptr; const object_t* sfmatchNode = nullptr; const object_t* sftrackNode = nullptr; bool parse_fl = false; bool parse_report_fl = false; bool parse_warn_fl = false; bool score_fl = false; bool score_report_fl = false; bool score_warn_fl = false; bool match_fl = false; bool track_fl = false; double srate = 0; dyn_ref_tbl::handle_t dynRefH; sfscore::handle_t scoreH; score_parse::handle_t spH; // parse the test cfg if((rc = cfg->getv( "score_fname", cm_score_fname, "srate", srate, "dyn_ref", dynArrayNode, "sfmatch", sfmatchNode, "sftrack", sftrackNode, "parse_fl", parse_fl, "parse_report_fl", parse_report_fl, "parse_warn_fl", parse_warn_fl, "score_fl", score_fl, "score_report_fl", score_report_fl, "score_warn_fl", score_warn_fl, "match_fl", match_fl, "track_fl", track_fl)) != kOkRC ) { rc = cwLogError(rc,"sfscore test parse params failed on."); goto errLabel; } // parse the dynamics reference array if((rc = dyn_ref_tbl::create(dynRefH,dynArrayNode)) != kOkRC ) { rc = cwLogError(rc,"The reference dynamics array parse failed."); goto errLabel; } // if parsing was requested if( parse_fl ) { // create the score_parse object if((rc = score_parse::create(spH,cm_score_fname,srate,dynRefH,parse_warn_fl)) != kOkRC ) { rc = cwLogError(rc,"Score parse failed on '%s'.",cwStringNullGuard(cm_score_fname)); goto errLabel; } if( parse_report_fl ) report(spH); // if score processing was requested if( score_fl ) { if((rc = create(scoreH,spH)) != kOkRC ) { rc = cwLogError(rc,"Score test create failed."); goto errLabel; } if( score_report_fl ) report(scoreH,nullptr); if( match_fl ) { if((rc = sfmatch::test(sfmatchNode,scoreH)) != kOkRC ) { rc = cwLogError(rc,"Score match test failed."); goto errLabel; } } if( track_fl ) { if((rc = sftrack::test(sftrackNode,scoreH)) != kOkRC ) { rc = cwLogError(rc,"Score track test failed."); goto errLabel; } } } } errLabel: destroy(scoreH); destroy(spH); destroy(dynRefH); return rc; }