zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

EffectTest.cpp (2552B)


      1 /*
      2   ZynAddSubFX - a software synthesizer
      3 
      4   EffectTest.h - CxxTest for General Effect Stuff
      5   Copyright (C) 2015 Mark McCurry
      6 
      7   This program is free software; you can redistribute it and/or
      8   modify it under the terms of the GNU General Public License
      9   as published by the Free Software Foundation; either version 2
     10   of the License, or (at your option) any later version.
     11 */
     12 #include "test-suite.h"
     13 #include <cmath>
     14 #include <cstdio>
     15 #include "../Misc/Allocator.h"
     16 #include "../Misc/Stereo.h"
     17 #include "../Effects/EffectMgr.h"
     18 #include "../Effects/Reverb.h"
     19 #include "../Effects/Echo.h"
     20 #include "../globals.h"
     21 using namespace zyn;
     22 
     23 SYNTH_T *synth;
     24 
     25 class EffectTest
     26 {
     27     public:
     28         void setUp() {
     29             synth = new SYNTH_T;
     30             alloc = new AllocatorClass;
     31             mgr   = new EffectMgr(*alloc, *synth, true);
     32         }
     33 
     34         void tearDown() {
     35             delete mgr;
     36             delete alloc;
     37             delete synth;
     38         }
     39 
     40         void testInit() {
     41             TS_ASSERT_EQUAL_INT(mgr->nefx, 0);
     42             mgr->changeeffect(1);
     43             TS_ASSERT_EQUAL_INT(mgr->nefx, 1);
     44             assert_ptr_eq(mgr->efx, nullptr,
     45                     "nothing before init", __LINE__);
     46             mgr->init();
     47             TS_NON_NULL(mgr->efx);
     48         }
     49 
     50         void testClear() {
     51             mgr->changeeffect(1);
     52             mgr->init();
     53             TS_NON_NULL(mgr->efx);
     54             mgr->changeeffect(0);
     55             mgr->init();
     56             assert_ptr_eq(mgr->efx, nullptr,
     57                     "nothing after clearing", __LINE__);
     58         }
     59 
     60         void testSwap() {
     61             //Initially the effect is NULL
     62             assert_ptr_eq(mgr->efx, nullptr,
     63                     "initially null", __LINE__);
     64 
     65             //A Reverb is selected
     66             mgr->changeeffect(1);
     67             mgr->init();
     68             TS_NON_NULL(dynamic_cast<Reverb*>(mgr->efx));
     69             assert_ptr_eq(dynamic_cast<Echo*>(mgr->efx),
     70                     nullptr,
     71                     "not an echo", __LINE__);
     72 
     73             //An Echo is selected
     74             mgr->changeeffect(2);
     75             mgr->init();
     76             assert_ptr_eq(dynamic_cast<Reverb*>(mgr->efx),
     77                     nullptr,
     78                     "not a reverb", __LINE__);
     79             TS_NON_NULL(dynamic_cast<Echo*>(mgr->efx));
     80         }
     81 
     82     private:
     83         EffectMgr *mgr;
     84         Allocator *alloc;
     85         SYNTH_T   *synth;
     86 };
     87 
     88 int main()
     89 {
     90     EffectTest test;
     91     RUN_TEST(testInit);
     92     RUN_TEST(testClear);
     93     RUN_TEST(testSwap);
     94     return test_summary();
     95 }