rsys

Basic data structures and low-level features
git clone git://git.meso-star.fr/rsys.git
Log | Files | Refs | README | LICENSE

commit 37aee24faf62db15e4d831bb2f74b77c9bea68f9
parent b52a86714bba04f826260961a12de21e318e65ae
Author: vaplv <vaplv@free.fr>
Date:   Mon,  8 May 2017 16:06:35 +0200

Push further the big buffer tests

Diffstat:
Msrc/test_big_buffer.c | 69++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 66 insertions(+), 3 deletions(-)

diff --git a/src/test_big_buffer.c b/src/test_big_buffer.c @@ -29,6 +29,11 @@ #define BIGBUF_BUFSIZE 1 #include "big_buffer.h" +#define BIGBUF_NAME real +#define BIGBUF_DATA double +#define BIGBUF_BUFSIZE 45 +#include "big_buffer.h" + static INLINE double rand_canonic(void) { @@ -79,7 +84,7 @@ test_byte(struct mem_allocator* allocator) } static void -test_integer(void) +test_integer(struct mem_allocator* allocator) { struct bigbuf_integer ints; struct bigbuf_integer ints2; @@ -116,7 +121,7 @@ test_integer(void) bigbuf_integer_release(&ints); rewind(stream); - CHECK(bigbuf_integer_init(NULL, stream, BIGBUF_LOAD_STREAM, &ints), RES_OK); + CHECK(bigbuf_integer_init(allocator, stream, BIGBUF_LOAD_STREAM, &ints), RES_OK); CHECK(bigbuf_integer_size_get(&ints), 1665); FOR_EACH(i, 0, 666) { @@ -146,6 +151,63 @@ test_integer(void) fclose(stream); } +static void +test_real(struct mem_allocator* allocator) +{ + struct bigbuf_real reals; + struct bigbuf_real reals2; + FILE* stream; + double real; + size_t i; + + NCHECK(stream = tmpfile(), NULL); + CHECK(bigbuf_real_init(allocator, stream, BIGBUF_LOAD_STREAM, &reals), RES_IO_ERR); + CHECK(bigbuf_real_init(allocator, stream, 0, &reals), RES_OK); + + FOR_EACH(i, 0, 4000) { + real = (double)i / 100.0; + CHECK(bigbuf_real_push_back(&reals, &real), RES_OK); + } + + CHECK(bigbuf_real_size_get(&reals), 4000); + + FOR_EACH(i, 0, 10) { + size_t id = (size_t)(rand_canonic() * (double)bigbuf_real_size_get(&reals)); + CHECK(bigbuf_real_at(&reals, id, &real), RES_OK); + CHECK(real, (double)id/100.0); + } + + rewind(stream); + + FOR_EACH(i, 0, 2000) { + real = (double)(i+4000) / 100.0; + CHECK(bigbuf_real_push_back(&reals, &real), RES_OK); + } + + bigbuf_real_flush(&reals); + + rewind(stream); + bigbuf_real_init(allocator, stream, BIGBUF_LOAD_STREAM, &reals2); + + CHECK(bigbuf_real_size_get(&reals), 6000); + CHECK(bigbuf_real_size_get(&reals2), 6000); + + FOR_EACH(i, 0, bigbuf_real_size_get(&reals)) { + CHECK(bigbuf_real_at(&reals, i, &real), RES_OK); + CHECK(real, (double)i/100.0); + } + + FOR_EACH(i, 0, 300) { + size_t id = (size_t)(rand_canonic() * (double)bigbuf_real_size_get(&reals2)); + CHECK(bigbuf_real_at(&reals2, id, &real), RES_OK); + CHECK(real, (double)id/100.0); + } + + bigbuf_real_release(&reals); + bigbuf_real_release(&reals2); + fclose(stream); +} + int main(int argc, char** argv) { @@ -155,7 +217,8 @@ main(int argc, char** argv) mem_init_proxy_allocator(&allocator_proxy, &mem_default_allocator); test_byte(&allocator_proxy); - test_integer(); + test_integer(&allocator_proxy); + test_real(&allocator_proxy); check_memory_allocator(&allocator_proxy); mem_shutdown_proxy_allocator(&allocator_proxy);