1
0
Fork 0

Updates to triple buffer

This commit is contained in:
Fred Sundvik 2016-02-20 23:40:52 +02:00
parent 50edb3d90c
commit 4bb5733cdc
2 changed files with 94 additions and 8 deletions

View file

@ -25,20 +25,56 @@ SOFTWARE.
#include <cgreen/cgreen.h>
#include "protocol/triple_buffered_object.c"
Describe(TripleBufferedObject);
BeforeEach(TripleBufferedObject) {}
AfterEach(TripleBufferedObject) {}
typedef struct {
uint8_t state;
uint32_t buffer[3];
}test_object_t;
Ensure(TripleBufferedObject, writes_and_and_reads_object) {
test_object_t test_object;
test_object_t test_object;
Describe(TripleBufferedObject);
BeforeEach(TripleBufferedObject) {
triple_buffer_init((triple_buffer_object_t*)&test_object);
}
AfterEach(TripleBufferedObject) {}
Ensure(TripleBufferedObject, writes_and_reads_object) {
uint32_t src = 0x3456ABCC;
uint32_t dst;
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst);
assert_that(dst, is_equal_to(src));
}
Ensure(TripleBufferedObject, writes_and_reads_object_decomposed) {
uint32_t src = 0x3456ABCC;
uint32_t dst;
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object);
triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst);
triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object);
assert_that(dst, is_equal_to(src));
}
Ensure(TripleBufferedObject, writes_twice_and_reads_object) {
uint32_t src = 0x3456ABCC;
uint32_t dst;
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
src = 0x44778899;
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
triple_buffer_read(4, (triple_buffer_object_t*)&test_object, &dst);
assert_that(dst, is_equal_to(src));
}
Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) {
uint32_t src = 1;
uint32_t dst;
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
src = 2;
triple_buffer_begin_read(4, (triple_buffer_object_t*)&test_object);
triple_buffer_write(4, (triple_buffer_object_t*)&test_object, &src);
triple_buffer_actual_read(4, (triple_buffer_object_t*)&test_object, &dst);
triple_buffer_end_read(4, (triple_buffer_object_t*)&test_object);
assert_that(dst, is_equal_to(1));
}