mirror of https://github.com/tailix/libshmemq.git
Add test "prod_jumps_to_buffer_start_and_reaches_cons"
This commit is contained in:
parent
eb93a66013
commit
c02d0f29c4
|
@ -37,4 +37,5 @@
|
|||
/examples/raw_receiver
|
||||
/examples/raw_sender
|
||||
/tests/test_main
|
||||
/tests/test_prod_jumps_to_buffer_start_and_reaches_cons
|
||||
/tests/test_prod_reaches_buffer_end
|
||||
|
|
|
@ -10,6 +10,7 @@ lib_LIBRARIES = libshmemq.a
|
|||
|
||||
TESTS = \
|
||||
tests/test_main \
|
||||
tests/test_prod_jumps_to_buffer_start_and_reaches_cons \
|
||||
tests/test_prod_reaches_buffer_end
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
|
@ -31,6 +32,10 @@ tests_test_main_SOURCES = \
|
|||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_main.c
|
||||
|
||||
tests_test_prod_jumps_to_buffer_start_and_reaches_cons_SOURCES = \
|
||||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_prod_jumps_to_buffer_start_and_reaches_cons.c
|
||||
|
||||
tests_test_prod_reaches_buffer_end_SOURCES = \
|
||||
$(libshmemq_a_SOURCES) \
|
||||
tests/test_prod_reaches_buffer_end.c
|
||||
|
|
20
src/main.c
20
src/main.c
|
@ -147,6 +147,18 @@ ShmemqFrame shmemq_push_start(const Shmemq shmemq)
|
|||
if (
|
||||
shmemq->buffer->header.write_frame_index >=
|
||||
shmemq->buffer->header.frames_count
|
||||
) {
|
||||
if (shmemq->buffer->header.read_frame_index > 0) {
|
||||
shmemq->buffer->header.write_frame_index = 0;
|
||||
}
|
||||
else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
shmemq->buffer->header.write_frame_index ==
|
||||
shmemq->buffer->header.read_frame_index - 1
|
||||
) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -182,6 +194,14 @@ void shmemq_push_end(
|
|||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
shmemq->buffer->header.write_frame_index ==
|
||||
shmemq->buffer->header.read_frame_index - 1
|
||||
) {
|
||||
if (error_ptr) *error_ptr = SHMEMQ_ERROR_BUG_PUSH_END_ON_FULL_QUEUE;
|
||||
return;
|
||||
}
|
||||
|
||||
const ShmemqFrame frame =
|
||||
&shmemq->buffer->frames[shmemq->buffer->header.write_frame_index];
|
||||
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
#include <shmemq.h>
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
static const char name[] = "/foobar";
|
||||
|
||||
int main()
|
||||
{
|
||||
ShmemqError error;
|
||||
|
||||
const Shmemq consumer = shmemq_new(name, true, &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
|
||||
const Shmemq producer = shmemq_new(name, false, &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
|
||||
for (unsigned i = 0; i < 100; ++i) {
|
||||
const ShmemqFrame frame = shmemq_push_start(producer);
|
||||
assert(frame != NULL);
|
||||
|
||||
*(unsigned*)frame->data = i;
|
||||
|
||||
shmemq_push_end(producer, sizeof(unsigned), &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < 10; ++i) {
|
||||
const ShmemqFrame frame = shmemq_pop_start(consumer);
|
||||
assert(frame != NULL);
|
||||
|
||||
assert(*(unsigned*)frame->data == i);
|
||||
|
||||
shmemq_pop_end(consumer, &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < 9; ++i) {
|
||||
const ShmemqFrame frame = shmemq_push_start(producer);
|
||||
assert(frame != NULL);
|
||||
|
||||
*(unsigned*)frame->data = i;
|
||||
|
||||
shmemq_push_end(producer, sizeof(unsigned), &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
}
|
||||
|
||||
assert(shmemq_push_start(producer) == NULL);
|
||||
|
||||
shmemq_push_end(producer, sizeof(unsigned), &error);
|
||||
assert(error == SHMEMQ_ERROR_BUG_PUSH_END_ON_FULL_QUEUE);
|
||||
|
||||
shmemq_delete(consumer, &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
|
||||
shmemq_delete(producer, &error);
|
||||
assert(error == SHMEMQ_ERROR_NONE);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue