|  | 
#include "asserts.h"
#include "Tremolo.h"
#include "TestComposite.h"
using Trem = Tremolo<TestComposite>;
static void test0()
{
    Trem t;
    t.setSampleRate(44100);
    t.init();
    assertEQ(t.outputs[Trem::SAW_OUTPUT].value, 0);
    assertEQ(t.outputs[Trem::AUDIO_OUTPUT].value, 0);
    t.step();
}
static void test1Sub(float skew)
{
    Trem t;
    t.setSampleRate(44100);
    t.init();
    t.params[Trem::CLOCK_MULT_PARAM].value = 4;        // 4 is free run for Trem
    t.params[Trem::LFO_RATE_PARAM].value = 5;       // max speed
    t.params[Trem::LFO_SKEW_PARAM].value = skew;
    float max = -100;
    float min = 100;
    for (int i = 0; i < 5000; ++i) {
        t.step();
        const float x = t.outputs[Trem::SAW_OUTPUT].value;
        max = std::max(x, max);
        min = std::min(x, min);
    }
    assertClose(max, .5f, .001);
    assertClose(min, -.5f, .001);
}
static void test1()
{
    test1Sub(0);
    test1Sub(5);
    test1Sub(-5);
}
void testTremolo()
{
    test0();
    test1();
}
 |