File: test_ct2hz.c

package info (click to toggle)
fluidsynth 2.4.4%2Bdfsg-1%2Bdeb13u1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,328 kB
  • sloc: ansic: 43,529; cpp: 1,434; xml: 1,020; makefile: 71; sh: 46
file content (44 lines) | stat: -rw-r--r-- 1,740 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

#include "test.h"
#include "utils/fluid_conv.h"
#include "utils/fluid_conv_tables.h"
#include "utils/fluid_sys.h"

// this test makes sure FLUID_SNPRINTF uses a proper C99 compliant implementation

int float_eq(double x, double y)
{
    static const double EPS = 1e-3;
    FLUID_LOG(FLUID_INFO, "Comparing %.9f and %.9f", x, y);
    return fabs(x-y) < EPS;
}

int main(void)
{
    int i;
    // 440 * 2^((x-6900)/1200) where x is the cent value given to ct2hz()

    TEST_ASSERT(float_eq(fluid_ct2hz_real(13500), 19912.12695821317828712777723687254894626098));

    TEST_ASSERT(float_eq(fluid_ct2hz_real(12900), 14080));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(12899), 14071.86942151064095341800489737387241797607));

    TEST_ASSERT(float_eq(fluid_ct2hz_real(12700), 12543.85395141597741074238497471441611245995));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(6900), 440));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(5700), 220));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(4500), 110));

    TEST_ASSERT(float_eq(fluid_ct2hz_real(901), 13.7579446057151293153308979171569743434390204));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(900), 13.75));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(899), 13.7420599819439853060722704075916722831797578));

    TEST_ASSERT(float_eq(fluid_ct2hz_real(1), 8.1805228064648688650522010380302841769481091116));
    TEST_ASSERT(float_eq(fluid_ct2hz_real(0), 8.1757989156437073336828122976032719176391831357)); // often referred to as Absolute zero in the SF2 spec

    // Test the entire possible range: from lowest permitted value of MODLFOFREQ up to filter fc limit
    for(i = -16000; i < 13500; i++)
    {
        TEST_ASSERT(float_eq(fluid_ct2hz_real(i), fluid_act2hz(i)));
    }
    return EXIT_SUCCESS;
}