121 lines
3.4 KiB
C++
121 lines
3.4 KiB
C++
//| Copyright: (C) 2020-2024 Kevin Larke <contact AT larke DOT org>
|
|
//| 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;
|
|
|
|
|
|
}
|