| 
							- /*
 -   ZynAddSubFX - a software synthesizer
 - 
 -   MicrotonalTest.h - CxxTest for Misc/Microtonal
 -   Copyright (C) 2009-2012 Mark McCurry
 -   Author: 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 <iostream>
 - #include "../Misc/Microtonal.h"
 - #include <cstring>
 - #include <string>
 - #include <cstdio>
 - #include "../globals.h"
 - SYNTH_T *synth;
 - 
 - using namespace std;
 - 
 - class MicrotonalTest:public CxxTest::TestSuite
 - {
 -     public:
 -         void setUp() {
 -             synth     = new SYNTH_T;
 -             testMicro = new Microtonal();
 -         }
 - 
 -         void tearDown() {
 -             delete testMicro;
 -             delete synth;
 -         }
 - 
 -         //Verifies that the object is initialized correctly
 -         void testinit() {
 -             TS_ASSERT_EQUALS(testMicro->Pinvertupdown, 0);
 -             TS_ASSERT_EQUALS(testMicro->Pinvertupdowncenter, 60);
 -             TS_ASSERT_EQUALS(testMicro->getoctavesize(), 12);
 -             TS_ASSERT_EQUALS(testMicro->Penabled, 0);
 -             TS_ASSERT_EQUALS(testMicro->PAnote, 69);
 -             TS_ASSERT_EQUALS(testMicro->PAfreq, 440.0f);
 -             TS_ASSERT_EQUALS(testMicro->Pscaleshift, 64);
 -             TS_ASSERT_EQUALS(testMicro->Pfirstkey, 0);
 -             TS_ASSERT_EQUALS(testMicro->Plastkey, 127);
 -             TS_ASSERT_EQUALS(testMicro->Pmiddlenote, 60);
 -             TS_ASSERT_EQUALS(testMicro->Pmapsize, 12);
 -             TS_ASSERT_EQUALS(testMicro->Pmappingenabled, 0);
 -             TS_ASSERT_EQUALS(testMicro->Pglobalfinedetune, 64);
 - 
 -             TS_ASSERT_EQUALS(string((const char *)testMicro->Pname), "12tET");
 -             TS_ASSERT_EQUALS(string(
 -                                  (const char *)testMicro->Pcomment),
 -                              "Equal Temperament 12 notes per octave");
 - 
 -             for(int i = 0; i < 128; ++i)
 -                 TS_ASSERT_EQUALS(testMicro->Pmapping[i], i);
 - 
 -             TS_ASSERT_DELTA(testMicro->getnotefreq(19, 0), 24.4997f, 0.0001f);
 -         }
 - 
 -         //Tests saving/loading to XML
 -         void testXML() {
 -             //Gah, the XMLwrapper is a twisted maze
 -             testMicro->Penabled = 1;
 -             XMLwrapper xml;
 -             xml.beginbranch("Dummy"); //this should not be needed, but odd behavior
 -                                       //seems to exist from MICROTONAL being on the
 -                                       //top of the stack
 -             xml.beginbranch("MICROTONAL");
 -             testMicro->add2XML(&xml);
 -             xml.endbranch();
 -             xml.endbranch();
 - 
 -             char *tmp = xml.getXMLdata();
 -             Microtonal other;
 - 
 -             other.Penabled = 1;
 -             strcpy((char *)other.Pname, "Myname"); //will be nicer with strings
 - 
 -             TS_ASSERT(*testMicro != other); //sanity check
 - 
 -             TS_ASSERT(xml.enterbranch("Dummy"));
 -             TS_ASSERT(xml.enterbranch("MICROTONAL"));
 - 
 -             other.getfromXML(&xml);
 -             xml.exitbranch();
 -             xml.exitbranch();
 -             char *tmpo = xml.getXMLdata();
 - 
 -             TS_ASSERT(!strcmp(tmp, tmpo));
 -             free(tmp);
 -             free(tmpo);
 -         }
 - 
 - #if 0
 -         /**\todo Test Saving/loading from file*/
 - 
 -         //Test texttomapping TODO finish
 -         void _testTextToMapping() {
 -             //the mapping is from old documentation for "Intense Diatonic" scale
 -             const char *mapping[12] =
 -             {"0", "x", "1", "x", "2", "3", "x", "4", "x", "5", "x", "6"};
 -             //for(int i=0;i<20;++i)
 -             //    cout << i << ':' << testMicro->getnotefreq(i,0) << endl;
 -             //
 -             //    octave size == 7
 -             //    find dead notes
 -         }
 -         //Test texttotunings TODO finish
 -         void _testTextToTunings() {
 -             //the tuning is from old documentation for "Intense Diatonic" scale
 -             const char *tuning[7] =
 -             {"9/8", "5/4", "4/3", "3/2", "5/3", "15/8", "2/1"};
 -             const int numTunings = 7;
 -             //for(int i=0;i<20;++i)
 -             //    cout << i << ':' << testMicro->getnotefreq(i,0) << endl;
 -             //    go to middle key and verify the proportions
 -         }
 -         /**\TODO test loading from scl and kbm files*/
 - #endif
 - 
 -     private:
 -         Microtonal *testMicro;
 - };
 
 
  |