rsys

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

commit 962db29c4f3781e546a0c2f6b60670ba7ba36333
parent 0ec8214b119be0afa53150de65e8e1dbdcf8a76f
Author: vaplv <vaplv@free.fr>
Date:   Thu, 25 May 2017 15:50:21 +0200

Test the big_buffer resize and set functions

Diffstat:
Msrc/test_big_buffer.c | 110+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 110 insertions(+), 0 deletions(-)

diff --git a/src/test_big_buffer.c b/src/test_big_buffer.c @@ -78,6 +78,62 @@ test_byte(struct mem_allocator* allocator) CHECK((size_t)byte, i); } + CHECK(bigbuf_byte_size_get(&bytes), 64); + CHECK(bigbuf_byte_at(&bytes, 61, &byte), RES_OK); + + CHECK(bigbuf_byte_resize(&bytes, 63), RES_OK); + CHECK(bigbuf_byte_size_get(&bytes), 63); + CHECK(bigbuf_byte_at(&bytes, 64, &byte), RES_BAD_ARG); + CHECK(bigbuf_byte_at(&bytes, 63, &byte), RES_BAD_ARG); + CHECK(bigbuf_byte_at(&bytes, 62, &byte), RES_OK); + CHECK(byte, 62); + + byte = 63; + CHECK(bigbuf_byte_push_back(&bytes, &byte), RES_OK); + CHECK(bigbuf_byte_size_get(&bytes), 64); + FOR_EACH(i, 0, bigbuf_byte_size_get(&bytes)) { + CHECK(bigbuf_byte_at(&bytes, i, &byte), RES_OK); + CHECK((size_t)byte, i); + } + + CHECK(bigbuf_byte_resize(&bytes, 32), RES_OK); + CHECK(bigbuf_byte_resize(&bytes, 32), RES_OK); + CHECK(bigbuf_byte_at(&bytes, 32, &byte), RES_BAD_ARG); + + CHECK(bigbuf_byte_at(&bytes, 31, &byte), RES_OK); + CHECK(byte, 31); + FOR_EACH(i, 0, 32) { + byte = (char)(i + 32); + CHECK(bigbuf_byte_push_back(&bytes, &byte), RES_OK); + } + FOR_EACH(i, 0, bigbuf_byte_size_get(&bytes)) { + CHECK(bigbuf_byte_at(&bytes, i, &byte), RES_OK); + CHECK((size_t)byte, i); + } + + CHECK(bigbuf_byte_resize(&bytes, 128), RES_OK); + CHECK(bigbuf_byte_size_get(&bytes), 128); + FOR_EACH(i, 0, bigbuf_byte_size_get(&bytes)) { + CHECK(bigbuf_byte_at(&bytes, i, &byte), RES_OK); + if(i < 64) { + CHECK((size_t)byte, i); + } else { + CHECK(byte, 0); + } + } + + CHECK(bigbuf_byte_set(&bytes, 128, &byte), RES_BAD_ARG); + FOR_EACH(i, 0, 64) { + byte = (char)(i+64); + CHECK(bigbuf_byte_set(&bytes, (size_t)byte, &byte), RES_OK); + CHECK(bigbuf_byte_at(&bytes, (size_t)byte - 1, &byte), RES_OK); + CHECK((size_t)byte, i+63); + } + FOR_EACH(i, 0, bigbuf_byte_size_get(&bytes)) { + CHECK(bigbuf_byte_at(&bytes, i, &byte), RES_OK); + CHECK((size_t)byte, i); + } + bigbuf_byte_release(&bytes); } @@ -145,6 +201,23 @@ test_integer(struct mem_allocator* allocator) CHECK((size_t)integer, i); } + CHECK(bigbuf_integer_resize(&ints2, 999), RES_OK); + CHECK(bigbuf_integer_size_get(&ints2), 999); + FOR_EACH(i, 0, bigbuf_integer_size_get(&ints2)) { + CHECK(bigbuf_integer_at(&ints2, i, &integer), RES_OK); + integer = -integer; + CHECK(bigbuf_integer_set(&ints2, i, &integer), RES_OK); + if(i) { + CHECK(bigbuf_integer_at(&ints2, i-1, &integer), RES_OK); + CHECK(integer, 1 - (int)i); + } + } + + FOR_EACH(i, 0, bigbuf_integer_size_get(&ints2)) { + CHECK(bigbuf_integer_at(&ints2, i, &integer), RES_OK); + CHECK(integer, -(int)i); + } + bigbuf_integer_release(&ints2); fclose(stream); } @@ -156,6 +229,7 @@ test_real(struct mem_allocator* allocator) struct bigbuf_real reals2; FILE* stream; double real; + size_t ids[32]; size_t i; NCHECK(stream = tmpfile(), NULL); @@ -201,6 +275,42 @@ test_real(struct mem_allocator* allocator) CHECK(real, (double)id/100.0); } + CHECK(bigbuf_real_at(&reals2, 5990, &real), RES_OK); + CHECK(real, 59.90); + CHECK(bigbuf_real_resize(&reals2, 5992), RES_OK); + CHECK(bigbuf_real_at(&reals2, 5990, &real), RES_OK); + CHECK(real, 59.90); + CHECK(bigbuf_real_resize(&reals2, 5990), RES_OK); + CHECK(bigbuf_real_at(&reals2, 5990, &real), RES_BAD_ARG); + CHECK(bigbuf_real_at(&reals2, 5989, &real), RES_OK); + CHECK(real, 59.89); + CHECK(bigbuf_real_resize(&reals2, 5985), RES_OK); + CHECK(bigbuf_real_at(&reals2, 5985, &real), RES_BAD_ARG); + CHECK(bigbuf_real_at(&reals2, 5984, &real), RES_OK); + CHECK(real, 59.84); + + FOR_EACH(i, 0, sizeof(ids)/sizeof(size_t)) { + ids[i] = (size_t)(rand_canonic() * (double)bigbuf_real_size_get(&reals2)); + real = (double)ids[i]; + CHECK(bigbuf_real_set(&reals2, ids[i], &real), RES_OK); + } + + CHECK(bigbuf_real_size_get(&reals2), 5985); + FOR_EACH(i, 0, bigbuf_real_size_get(&reals2)) { + size_t j; + CHECK(bigbuf_real_at(&reals2, i, &real), RES_OK); + + FOR_EACH(j, 0, sizeof(ids)/sizeof(size_t)) { + if(i == ids[j]) break; + } + + if(j == sizeof(ids)/sizeof(size_t)) { + CHECK(real, (double)i/100.0); + } else { + CHECK(real, (double)i); + } + } + bigbuf_real_release(&reals); bigbuf_real_release(&reals2); fclose(stream);