|
- /*
- 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 <cxxtest/TestSuite.h>
- #include <cmath>
- #include <cstdlib>
- #include <iostream>
- #include <fstream>
- #include <string>
- #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<char>(t)),
- std::istreambuf_iterator<char>());
- 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];
- };
|