From 680a923aa59cc9c9656cdde71b630abac3c0b009 Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser <kaspar@schleiser.de> Date: Fri, 14 Oct 2016 15:00:41 +0200 Subject: [PATCH] tests: unittests: add unittests for heatshrink package --- tests/unittests/tests-heatshrink/Makefile | 1 + .../tests-heatshrink/Makefile.include | 1 + .../tests-heatshrink/tests-heatshrink.c | 122 ++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 tests/unittests/tests-heatshrink/Makefile create mode 100644 tests/unittests/tests-heatshrink/Makefile.include create mode 100644 tests/unittests/tests-heatshrink/tests-heatshrink.c diff --git a/tests/unittests/tests-heatshrink/Makefile b/tests/unittests/tests-heatshrink/Makefile new file mode 100644 index 0000000000..48422e909a --- /dev/null +++ b/tests/unittests/tests-heatshrink/Makefile @@ -0,0 +1 @@ +include $(RIOTBASE)/Makefile.base diff --git a/tests/unittests/tests-heatshrink/Makefile.include b/tests/unittests/tests-heatshrink/Makefile.include new file mode 100644 index 0000000000..78eebac93e --- /dev/null +++ b/tests/unittests/tests-heatshrink/Makefile.include @@ -0,0 +1 @@ +USEPKG += heatshrink diff --git a/tests/unittests/tests-heatshrink/tests-heatshrink.c b/tests/unittests/tests-heatshrink/tests-heatshrink.c new file mode 100644 index 0000000000..340c24ebfd --- /dev/null +++ b/tests/unittests/tests-heatshrink/tests-heatshrink.c @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2016 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup unittests + * @{ + * @file + * @brief Tests for the heatshrink compression library package + * @author Kaspar Schleiser <kaspar@schleiser.de> + * @} + */ +#include <string.h> +#include <stdio.h> + +#include "embUnit.h" + +#include "heatshrink_encoder.h" +#include "heatshrink_decoder.h" + +static const char *_data = "This is a test string TEST TEST TEST TEST!"; + +#define BUFSIZE (256U) + +static uint8_t _buf[BUFSIZE]; +static uint8_t _buf_res[BUFSIZE]; + +static heatshrink_encoder _encoder; +static heatshrink_decoder _decoder; + +static int _comp_uncomp(const uint8_t *buf, size_t len) +{ + memset(_buf, 0, sizeof(_buf)); + memset(_buf_res, 0, sizeof(_buf_res)); + + heatshrink_encoder_reset(&_encoder); + heatshrink_decoder_reset(&_decoder); + + size_t n = len; + uint8_t *inpos = (uint8_t*)buf; + uint8_t *outpos = _buf; + + /* compress */ + while(1) { + unsigned n_sunk = 0; + if (n) { + heatshrink_encoder_sink(&_encoder, inpos, n, &n_sunk); + if (n_sunk) { + inpos += n_sunk; + n -= n_sunk; + } + unsigned written = 0; + heatshrink_encoder_poll(&_encoder, outpos, (_buf + sizeof(_buf) - outpos), &written); + outpos += written; + } + else { + while (heatshrink_encoder_finish(&_encoder) == HSER_FINISH_MORE) { + unsigned written = 0; + heatshrink_encoder_poll(&_encoder, outpos, (_buf + sizeof(_buf) - outpos), &written); + outpos += written; + } + break; + } + } + + /* decompress */ + n = (outpos - _buf); + inpos = (uint8_t*) _buf; + outpos = _buf_res; + + while(1) { + unsigned n_sunk = 0; + if (n) { + heatshrink_decoder_sink(&_decoder, inpos, n, &n_sunk); + if (n_sunk) { + inpos += n_sunk; + n -= n_sunk; + } + unsigned written = 0; + heatshrink_decoder_poll(&_decoder, outpos, (_buf + sizeof(_buf) - outpos), &written); + outpos += written; + } + else { + while (heatshrink_decoder_finish(&_decoder) == HSDR_FINISH_MORE) { + unsigned written = 0; + heatshrink_decoder_poll(&_decoder, outpos, (_buf_res + sizeof(_buf_res) - outpos), &written); + outpos += written; + } + break; + } + } + + if ((outpos - _buf_res) - len) { + return -1; + } + + return memcmp(buf, _buf_res, len); +} + +static void test_heatshrink(void) +{ + TEST_ASSERT_EQUAL_INT(_comp_uncomp((const uint8_t*)_data, strlen(_data)), 0); +} + +TestRef test_heatshrink_all(void) +{ + EMB_UNIT_TESTFIXTURES(fixtures) { + new_TestFixture(test_heatshrink), + }; + + EMB_UNIT_TESTCALLER(HeatshrinkTest, 0, 0, fixtures); + return (TestRef) & HeatshrinkTest; +} + +void tests_heatshrink(void) +{ + TESTS_RUN(test_heatshrink_all()); +} -- GitLab