mirror of https://github.com/ZDoom/fluidsynth.git
add even more circular complex modulator test cases
This commit is contained in:
parent
95efd7e503
commit
9847df9f48
|
@ -8,7 +8,7 @@ int fluid_zone_check_linked_mod(char *zone_name, fluid_mod_t *list_mod);
|
|||
|
||||
// tests the linked "nature" of modulators, i.e. fluid_zone_check_linked_mod()
|
||||
int main(void)
|
||||
{
|
||||
{
|
||||
fluid_mod_t *mod0 = new_fluid_mod();
|
||||
fluid_mod_t *mod1 = new_fluid_mod();
|
||||
fluid_mod_t *mod2 = new_fluid_mod();
|
||||
|
@ -47,6 +47,11 @@ int main(void)
|
|||
TEST_ASSERT(list_of_mods->next == mod1);
|
||||
TEST_ASSERT(list_of_mods->next->next == mod2);
|
||||
TEST_ASSERT(list_of_mods->next->next->next == NULL);
|
||||
|
||||
// no modulators are invalidated, amounts are not changed
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod0) == 100);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod1) == 11025);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 960);
|
||||
}
|
||||
|
||||
// set up a valid list of complex modulators
|
||||
|
@ -147,7 +152,6 @@ int main(void)
|
|||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 300);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0); // invalidated because mod1 without FLUID_MOD_LINK_SRC
|
||||
}
|
||||
|
||||
|
||||
// same list, with additional mod3 and valid mod1 this time
|
||||
printf("\nTest 5: same list, with additional mod3 and valid mod1 this time\n");
|
||||
|
@ -179,7 +183,7 @@ int main(void)
|
|||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 300);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 50);
|
||||
}
|
||||
|
||||
|
||||
// Look like circular circular complex modulators, but it isn't not circular !
|
||||
printf("\nTest 6: false circular complex modulators, CC->mod3->mod1->mod3 => circular path ?\n");
|
||||
printf( " List:m0,m1,m2,m3\n");
|
||||
|
@ -211,7 +215,7 @@ int main(void)
|
|||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 300);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0); // path without destination
|
||||
}
|
||||
|
||||
|
||||
// Circular complex modulators
|
||||
printf("\nTest 6.0: true circular complex modulators, CC->mod3->mod1->mod1 => circular path\n");
|
||||
printf( " List:m0,m1,m2,m3\n");
|
||||
|
@ -290,7 +294,183 @@ int main(void)
|
|||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 0); // part of circular path
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0); // without destination.
|
||||
}
|
||||
|
||||
|
||||
// circular complex modulators
|
||||
printf("Test 6.2: circular complex modulators m3->m2->m1->m0->m3\n");
|
||||
{
|
||||
mod2->next = mod3;
|
||||
mod1->next = mod2;
|
||||
mod0->next = mod1;
|
||||
list_of_mods = mod0;
|
||||
|
||||
fluid_mod_set_source1(mod0, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod0, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod0, 100);
|
||||
fluid_mod_set_dest (mod0, FLUID_MOD_LINK_DEST | 3);
|
||||
|
||||
fluid_mod_set_source1(mod1, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod1, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod1, 200);
|
||||
fluid_mod_set_dest (mod1, FLUID_MOD_LINK_DEST | 0);
|
||||
|
||||
fluid_mod_set_source1(mod2, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod2, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod2, 300);
|
||||
fluid_mod_set_dest (mod2, FLUID_MOD_LINK_DEST | 1);
|
||||
|
||||
fluid_mod_set_source1(mod3, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod3, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod3, 50);
|
||||
fluid_mod_set_dest (mod3, FLUID_MOD_LINK_DEST | 2);
|
||||
|
||||
TEST_ASSERT(fluid_zone_check_linked_mod("test zone with circular linked modulators", list_of_mods) == FALSE);
|
||||
|
||||
TEST_ASSERT(list_of_mods == mod0);
|
||||
TEST_ASSERT(list_of_mods->next == mod1);
|
||||
TEST_ASSERT(list_of_mods->next->next == mod2);
|
||||
TEST_ASSERT(list_of_mods->next->next->next == mod3);
|
||||
TEST_ASSERT(list_of_mods->next->next->next->next == NULL);
|
||||
|
||||
// modulators that are part of the circular list are invalidated
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod0) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod1) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0);
|
||||
}
|
||||
|
||||
// circular complex modulators
|
||||
printf("Test 6.3: circular complex modulators m3+m2->m1->m0->m3\n");
|
||||
{
|
||||
mod2->next = mod3;
|
||||
mod1->next = mod2;
|
||||
mod0->next = mod1;
|
||||
list_of_mods = mod0;
|
||||
|
||||
fluid_mod_set_source1(mod0, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod0, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod0, 100);
|
||||
fluid_mod_set_dest (mod0, FLUID_MOD_LINK_DEST | 3);
|
||||
|
||||
fluid_mod_set_source1(mod1, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod1, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod1, 200);
|
||||
fluid_mod_set_dest (mod1, FLUID_MOD_LINK_DEST | 0);
|
||||
|
||||
fluid_mod_set_source1(mod2, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod2, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod2, 300);
|
||||
fluid_mod_set_dest (mod2, FLUID_MOD_LINK_DEST | 1);
|
||||
|
||||
fluid_mod_set_source1(mod3, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod3, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod3, 50);
|
||||
fluid_mod_set_dest (mod3, FLUID_MOD_LINK_DEST | 1);
|
||||
|
||||
TEST_ASSERT(fluid_zone_check_linked_mod("test zone with circular linked modulators", list_of_mods) == FALSE);
|
||||
|
||||
TEST_ASSERT(list_of_mods == mod0);
|
||||
TEST_ASSERT(list_of_mods->next == mod1);
|
||||
TEST_ASSERT(list_of_mods->next->next == mod2);
|
||||
TEST_ASSERT(list_of_mods->next->next->next == mod3);
|
||||
TEST_ASSERT(list_of_mods->next->next->next->next == NULL);
|
||||
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod0) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod1) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0);
|
||||
}
|
||||
|
||||
// circular complex modulators
|
||||
printf("Test 6.4: circular complex modulators m4->m2->m1->m4 and m3\n");
|
||||
{
|
||||
mod2->next = mod3;
|
||||
mod1->next = mod2;
|
||||
mod0->next = mod1;
|
||||
list_of_mods = mod0;
|
||||
|
||||
fluid_mod_set_source1(mod0, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod0, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod0, 100);
|
||||
fluid_mod_set_dest (mod0, FLUID_MOD_LINK_DEST | 3);
|
||||
|
||||
fluid_mod_set_source1(mod1, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod1, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod1, 200);
|
||||
fluid_mod_set_dest (mod1, FLUID_MOD_LINK_DEST | 0);
|
||||
|
||||
fluid_mod_set_source1(mod2, 20,
|
||||
FLUID_MOD_CC | FLUID_MOD_LINEAR | FLUID_MOD_UNIPOLAR | FLUID_MOD_POSITIVE);
|
||||
fluid_mod_set_source2(mod2, 21,
|
||||
FLUID_MOD_CC | FLUID_MOD_LINEAR | FLUID_MOD_UNIPOLAR | FLUID_MOD_POSITIVE);
|
||||
fluid_mod_set_amount (mod2, 300);
|
||||
fluid_mod_set_dest (mod2, GEN_MODENVHOLD);
|
||||
|
||||
fluid_mod_set_source1(mod3, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod3, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod3, 50);
|
||||
fluid_mod_set_dest (mod3, FLUID_MOD_LINK_DEST | 1);
|
||||
|
||||
TEST_ASSERT(fluid_zone_check_linked_mod("test zone with circular linked modulators", list_of_mods) == FALSE);
|
||||
|
||||
TEST_ASSERT(list_of_mods == mod0);
|
||||
TEST_ASSERT(list_of_mods->next == mod1);
|
||||
TEST_ASSERT(list_of_mods->next->next == mod2);
|
||||
TEST_ASSERT(list_of_mods->next->next->next == mod3);
|
||||
TEST_ASSERT(list_of_mods->next->next->next->next == NULL);
|
||||
|
||||
// modulators that are part of the circular list are invalidated
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod0) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod1) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 300);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0);
|
||||
}
|
||||
|
||||
// circular complex modulators
|
||||
printf("Test 6.5: circular complex modulators m3->m1->m3 and m2->m0\n");
|
||||
{
|
||||
mod2->next = mod3;
|
||||
mod1->next = mod2;
|
||||
mod0->next = mod1;
|
||||
list_of_mods = mod0;
|
||||
|
||||
fluid_mod_set_source1(mod0, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod0, 20,
|
||||
FLUID_MOD_CC | FLUID_MOD_CONCAVE | FLUID_MOD_BIPOLAR | FLUID_MOD_POSITIVE);
|
||||
fluid_mod_set_amount (mod0, 100);
|
||||
fluid_mod_set_dest (mod0, GEN_EXCLUSIVECLASS);
|
||||
|
||||
fluid_mod_set_source1(mod1, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod1, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod1, 200);
|
||||
fluid_mod_set_dest (mod1, FLUID_MOD_LINK_DEST | 3);
|
||||
|
||||
fluid_mod_set_source1(mod2, 20,
|
||||
FLUID_MOD_CC | FLUID_MOD_LINEAR | FLUID_MOD_UNIPOLAR | FLUID_MOD_POSITIVE);
|
||||
fluid_mod_set_source2(mod2, 21,
|
||||
FLUID_MOD_CC | FLUID_MOD_LINEAR | FLUID_MOD_UNIPOLAR | FLUID_MOD_POSITIVE);
|
||||
fluid_mod_set_amount (mod2, 300);
|
||||
fluid_mod_set_dest (mod2, FLUID_MOD_LINK_DEST | 0);
|
||||
|
||||
fluid_mod_set_source1(mod3, FLUID_MOD_LINK_SRC, FLUID_MOD_GC);
|
||||
fluid_mod_set_source2(mod3, FLUID_MOD_NONE, FLUID_MOD_GC);
|
||||
fluid_mod_set_amount (mod3, 50);
|
||||
fluid_mod_set_dest (mod3, FLUID_MOD_LINK_DEST | 1);
|
||||
|
||||
TEST_ASSERT(fluid_zone_check_linked_mod("test zone with circular linked modulators", list_of_mods) == TRUE);
|
||||
|
||||
TEST_ASSERT(list_of_mods == mod0);
|
||||
TEST_ASSERT(list_of_mods->next == mod1);
|
||||
TEST_ASSERT(list_of_mods->next->next == mod2);
|
||||
TEST_ASSERT(list_of_mods->next->next->next == mod3);
|
||||
TEST_ASSERT(list_of_mods->next->next->next->next == NULL);
|
||||
|
||||
// modulators that are part of the circular list are invalidated
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod0) == 100);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod1) == 0);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod2) == 300);
|
||||
TEST_ASSERT(fluid_mod_get_amount(mod3) == 0);
|
||||
}
|
||||
|
||||
// invalid list of complex modulators: the first modulator should not have a linked destination
|
||||
printf("\nTest 7: invalid list of complex modulators: the first modulator should not have a linked destination\n");
|
||||
printf( " List:m1,m0,m2\n");
|
||||
|
|
Loading…
Reference in New Issue