/* ZynAddSubFX - a software synthesizer PluginTest.h - CxxTest for embedding zyn Copyright (C) 2013-2013 Mark McCurry Authors: Mark McCurry This program is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License (version 2 or later) for more details. You should have received a copy of the GNU General Public License (version 2) along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "../Misc/Master.h" #include "../Misc/Util.h" #include "../globals.h" SYNTH_T *synth; using namespace std; char *instance_name=(char*)""; class PluginTest:public CxxTest::TestSuite { public: void setUp() { synth = new SYNTH_T; synth->buffersize = 256; synth->samplerate = 48000; synth->alias(); outL = new float[1024]; for(int i = 0; i < synth->buffersize; ++i) outL[i] = 0.0f; outR = new float[1024]; for(int i = 0; i < synth->buffersize; ++i) outR[i] = 0.0f; //next the bad global variables that for some reason have not been properly placed in some //initialization routine, but rather exist as cryptic oneliners in main.cpp: denormalkillbuf = new float[synth->buffersize]; for(int i = 0; i < synth->buffersize; ++i) denormalkillbuf[i] = 0; for(int i = 0; i < 16; ++i) master[i] = new Master(); } void tearDown() { for(int i = 0; i < 16; ++i) delete master[i]; delete[] outL; delete[] outR; delete synth; } void testInit() { for(int x=0; x<100; ++x) for(int i=0; i<16; ++i) master[i]->GetAudioOutSamples(rand()%1025, synth->samplerate, outL, outR); } void testPanic() { master[0]->setController(0, 0x64, 0); master[0]->noteOn(0,64,64); master[0]->AudioOut(outL, outR); float sum = 0.0f; for(int i = 0; i < synth->buffersize; ++i) sum += fabs(outL[i]); TS_ASSERT_LESS_THAN(0.1f, sum); } string loadfile(string fname) const { std::ifstream t(fname.c_str()); std::string str((std::istreambuf_iterator(t)), std::istreambuf_iterator()); return str; } void testLoadSave(void) { const string fname = string(SOURCE_DIR) + "/guitar-adnote.xmz"; const string fdata = string("\n") + loadfile(fname); char *result = NULL; master[0]->putalldata((char*)fdata.c_str(), fdata.length()); int res = master[0]->getalldata(&result); TS_ASSERT_EQUALS(fdata.length()+1, res); TS_ASSERT(fdata == result); } private: float *outR, *outL; Master *master[16]; };