mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-11-27 14:32:12 +00:00
4c1292d8ab
Originally, I have only marked it deprecated. But since we have an SOVERSION bump next release and because this function was only meant for internal usage, I think it's safe to remove it right now.
80 lines
2.4 KiB
C
80 lines
2.4 KiB
C
|
|
#include "test.h"
|
|
#include "fluidsynth.h" // use local fluidsynth header
|
|
|
|
|
|
static int callback_triggered = 0;
|
|
void callback_remove_events(unsigned int time, fluid_event_t *event, fluid_sequencer_t *seq, void *data)
|
|
{
|
|
callback_triggered = 1;
|
|
}
|
|
|
|
void test_remove_events(fluid_sequencer_t *seq, fluid_event_t *evt)
|
|
{
|
|
// silently creates a fluid_seqbind_t
|
|
unsigned int i;
|
|
int seqid = fluid_sequencer_register_client(seq, "remove event test", callback_remove_events, NULL);
|
|
TEST_SUCCESS(seqid);
|
|
|
|
fluid_event_set_source(evt, -1);
|
|
fluid_event_set_dest(evt, seqid);
|
|
fluid_event_control_change(evt, 0, 1, 127);
|
|
|
|
for(i = 0; i < 10000; i++)
|
|
{
|
|
TEST_SUCCESS(fluid_sequencer_send_at(seq, evt, i, 0));
|
|
}
|
|
|
|
fluid_sequencer_remove_events(seq, -1, seqid, -1);
|
|
fluid_sequencer_process(seq, i + fluid_sequencer_get_tick(seq));
|
|
TEST_ASSERT(!callback_triggered);
|
|
|
|
for(i = 0; i < 10000; i++)
|
|
{
|
|
fluid_event_control_change(evt, 0, 1, 127);
|
|
TEST_SUCCESS(fluid_sequencer_send_at(seq, evt, i, 0));
|
|
|
|
fluid_event_noteon(evt, 0, 64, 127);
|
|
TEST_SUCCESS(fluid_sequencer_send_at(seq, evt, i, 0));
|
|
}
|
|
|
|
fluid_sequencer_remove_events(seq, -1, seqid, FLUID_SEQ_CONTROLCHANGE);
|
|
fluid_sequencer_process(seq, i + fluid_sequencer_get_tick(seq));
|
|
TEST_ASSERT(callback_triggered);
|
|
|
|
callback_triggered = 0;
|
|
|
|
for(i = 0; i < 10000; i++)
|
|
{
|
|
fluid_event_program_change(evt, 0, 0);
|
|
TEST_SUCCESS(fluid_sequencer_send_at(seq, evt, i, 0));
|
|
|
|
fluid_event_noteon(evt, 0, 64, 127);
|
|
TEST_SUCCESS(fluid_sequencer_send_at(seq, evt, i, 0));
|
|
}
|
|
|
|
fluid_sequencer_remove_events(seq, -1, -1, -1);
|
|
fluid_sequencer_process(seq, i + fluid_sequencer_get_tick(seq));
|
|
TEST_ASSERT(!callback_triggered);
|
|
|
|
fluid_sequencer_unregister_client(seq, seqid);
|
|
}
|
|
|
|
// simple test to ensure that manually unregistering and deleting the internal fluid_seqbind_t works without crashing
|
|
int main(void)
|
|
{
|
|
fluid_event_t *evt;
|
|
fluid_sequencer_t *seq = new_fluid_sequencer2(0 /*i.e. use sample timer*/);
|
|
TEST_ASSERT(seq != NULL);
|
|
TEST_ASSERT(fluid_sequencer_get_use_system_timer(seq) == 0);
|
|
evt = new_fluid_event();
|
|
TEST_ASSERT(evt != NULL);
|
|
|
|
test_remove_events(seq, evt);
|
|
|
|
// client should be removed, deleting the seq should not free the struct again
|
|
delete_fluid_event(evt);
|
|
delete_fluid_sequencer(seq);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|