libcw/cwScoreTest.cpp

121 lines
3.4 KiB
C++
Raw Normal View History

//| 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;
}