You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rtpengine/t/test-sequencer.c

511 lines
9.5 KiB

#include "codeclib.h"
#include <assert.h>
static unsigned int num_freed;
static void ffunc(seq_packet_t *a) {
num_freed++;
}
void test1(void) {
packet_sequencer_t ps = {0};
packet_sequencer_init(&ps, ffunc, false);
void *p;
int i;
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
p = packet_sequencer_force_next_packet(&ps);
assert(p == NULL);
i = packet_sequencer_next_ok(&ps);
assert(!i);
assert(num_freed == 0);
seq_packet_t pks[10] = {0};
pks[0].seq = 100;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
pks[0].seq = 101;
pks[1].seq = 102;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
pks[0].seq = 103;
pks[1].seq = 104;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == -1);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == -1);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
pks[0].seq = 106;
pks[1].seq = 107;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
p = packet_sequencer_force_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
pks[0].seq = 110;
pks[1].seq = 111;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
pks[2].seq = 112;
pks[3].seq = 113;
pks[4].seq = 114;
pks[5].seq = 115;
pks[6].seq = 116;
pks[7].seq = 117;
pks[8].seq = 118;
pks[9].seq = 119;
i = packet_sequencer_insert(&ps, &pks[2]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[3]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[7]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[8]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[9]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[4]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[6]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[5]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
pks[0].seq = 10000;
pks[1].seq = 10001;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 1);
assert(num_freed == 8);
num_freed = 0;
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == -1);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
pks[0].seq = 10;
pks[1].seq = 11;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 1);
assert(num_freed == 0);
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == -1);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == NULL);
assert(num_freed == 0);
packet_sequencer_destroy(&ps);
}
void test2(void) {
packet_sequencer_t ps = {0};
packet_sequencer_init(&ps, ffunc, false);
void *p;
int i;
seq_packet_t pks[3] = {0};
pks[0].seq = 100;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
pks[1].seq = 99;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == -1);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
pks[2].seq = 101;
i = packet_sequencer_insert(&ps, &pks[2]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[2]);
assert(num_freed == 0);
packet_sequencer_destroy(&ps);
}
void test3(void) {
packet_sequencer_t ps = {0};
packet_sequencer_init(&ps, ffunc, false);
void *p;
int i;
seq_packet_t pks[3] = {0};
pks[0].seq = 100;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
pks[1].seq = 99;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == -1);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
pks[2].seq = 101;
i = packet_sequencer_insert(&ps, &pks[2]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[2]);
assert(num_freed == 0);
packet_sequencer_destroy(&ps);
}
void test4(void) {
packet_sequencer_t ps = {0};
packet_sequencer_init(&ps, ffunc, true);
void *p;
int i;
seq_packet_t pks[3] = {0};
pks[0].seq = 100;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
pks[1].seq = 99;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
pks[2].seq = 101;
pks[2].marker = true;
i = packet_sequencer_insert(&ps, &pks[2]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[2]);
assert(num_freed == 0);
packet_sequencer_destroy(&ps);
}
void test5(void) {
packet_sequencer_t ps = {0};
packet_sequencer_init(&ps, ffunc, true);
void *p;
int i;
seq_packet_t pks[3] = {0};
pks[0].seq = 100;
i = packet_sequencer_insert(&ps, &pks[0]);
assert(i == 0);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
pks[1].seq = 99;
i = packet_sequencer_insert(&ps, &pks[1]);
assert(i == 0);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(!i);
p = packet_sequencer_next_packet(&ps);
assert(!p);
assert(num_freed == 0);
pks[2].seq = 101;
pks[2].marker = true;
i = packet_sequencer_insert(&ps, &pks[2]);
assert(i == 2);
assert(num_freed == 0);
i = packet_sequencer_next_ok(&ps);
assert(i);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[1]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[0]);
assert(num_freed == 0);
p = packet_sequencer_next_packet(&ps);
assert(p == &pks[2]);
assert(num_freed == 0);
packet_sequencer_destroy(&ps);
}
int main(void) {
test1();
return 0;
}