Add test for queue SPSC

This commit is contained in:
Patrick Pelissier committed 2019-01-21 22:20:28 +01:00
1 parent 50d89f71cb
commit 4e8f5f7b51
1 file changed
+71
+71
View File
@@ -407,6 +407,76 @@ static void test_queue(size_t n, int cpu_count, unsigned long long ref)
queue_uint_clear(g_buff2);
}
/********************************************************************************************/
static void test_spsc(void)
{
squeue_uint_t q;
bool b;
unsigned j;
squeue_uint_init(q, 256);
assert(squeue_uint_empty_p(q));
for(unsigned i = 0; i < 256; i++) {
b = squeue_uint_push(q, i);
assert(b);
}
assert(!squeue_uint_empty_p(q));
assert(squeue_uint_full_p(q));
assert(squeue_uint_size(q) == 256);
assert(squeue_uint_capacity(q) == 256);
b = squeue_uint_push(q, 256);
assert (!b);
for(unsigned i = 0; i < 256; i++) {
b = squeue_uint_pop(&j, q);
assert(b);
assert(j == i);
}
assert(squeue_uint_empty_p(q));
assert(!squeue_uint_full_p(q));
assert(squeue_uint_size(q) == 0);
assert(squeue_uint_capacity(q) == 256);
for(unsigned i = 0; i < 256; i++) {
b = squeue_uint_push(q, i);
assert(b);
}
for(unsigned i = 256; i < 256+128; i++) {
assert(squeue_uint_full_p(q));
squeue_uint_push_force(q, i);
}
for(unsigned i = 128; i < 256+128; i++) {
b = squeue_uint_pop(&j, q);
assert(b);
assert(j == i);
}
unsigned tab[16];
for(unsigned i = 0; i < 16; i++)
tab[i] = i * i;
for(unsigned i = 0; i < 15; i++) {
j = squeue_uint_push_bulk(q, 16, tab);
assert(j == 16);
}
b = squeue_uint_push(q, 1024);
assert(b);
j = squeue_uint_push_bulk(q, 16, tab);
assert(j == 15);
for(unsigned i = 0; i < 16; i++)
tab[i] = 0;
j = squeue_uint_pop_bulk(16, tab, q);
assert(j == 16);
for(unsigned i = 0; i < 16; i++)
assert( tab[i] == i * i);
squeue_uint_clear(q);
}
/********************************************************************************************/
int main(void)
@@ -438,5 +508,6 @@ int main(void)
test_no_thread();
test_global_ishared();
test_queue(1000000, 2, 2148371710223136ULL);
test_spsc();
exit(0);
}