add even more circular complex modulator test cases

This commit is contained in:
derselbst 2019-07-13 09:57:13 +02:00
parent 95efd7e503
commit 9847df9f48
1 changed files with 185 additions and 5 deletions

View File

@ -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");