From f2fb8311d373cfd498dfbebc539982b8ad174615 Mon Sep 17 00:00:00 2001 From: Mitya Selivanov <0x7fffff@guattari.ru> Date: Sat, 6 Aug 2022 16:32:59 +0400 Subject: input buffer, dynamic array --- source/test/unittests/CMakeLists.txt | 3 +- source/test/unittests/array_ref.test.c | 42 +++++++ source/test/unittests/async_function.test.c | 2 +- source/test/unittests/dynamic_array.test.c | 174 ++++++++++++++++++++++++++++ source/test/unittests/input_buffer.test.c | 20 ++++ source/test/unittests/input_stream.test.c | 23 ++++ 6 files changed, 262 insertions(+), 2 deletions(-) create mode 100644 source/test/unittests/array_ref.test.c create mode 100644 source/test/unittests/dynamic_array.test.c create mode 100644 source/test/unittests/input_buffer.test.c create mode 100644 source/test/unittests/input_stream.test.c (limited to 'source/test/unittests') diff --git a/source/test/unittests/CMakeLists.txt b/source/test/unittests/CMakeLists.txt index d5cc573..ff99c9c 100644 --- a/source/test/unittests/CMakeLists.txt +++ b/source/test/unittests/CMakeLists.txt @@ -1,4 +1,5 @@ target_sources( ${KIT_TEST_SUITE} PRIVATE - async_function.test.c main.test.c) + async_function.test.c main.test.c array_ref.test.c + input_stream.test.c input_buffer.test.c dynamic_array.test.c) diff --git a/source/test/unittests/array_ref.test.c b/source/test/unittests/array_ref.test.c new file mode 100644 index 0000000..d8cbcec --- /dev/null +++ b/source/test/unittests/array_ref.test.c @@ -0,0 +1,42 @@ +#include "../../kit/array_ref.h" + +#define KIT_TEST_FILE array_ref +#include "../../kit_test/test.h" + +TEST("array ref equal") { + int foo[] = { 1, 2, 3, 4, 5, 6, 7 }; + int bar[] = { 3, 4, 5 }; + + AR(foo_ref, int) = { .size = 3, .values = foo + 2 }; + AR(bar_ref, int) = { .size = 3, .values = bar }; + + REQUIRE(AR_EQUAL(foo_ref, bar_ref)); +} + +static int compare(int const *left, int const *right) { + return *left - *right; +} + +TEST("array ref compare") { + int foo[] = { 1, 2, 3, 5 }; + int bar[] = { 1, 2, 4, 5 }; + + AR(foo_ref, int) = { .size = 3, .values = foo }; + AR(bar_ref, int) = { .size = 3, .values = bar }; + + REQUIRE(AR_COMPARE(foo_ref, bar_ref, compare) < 0); + REQUIRE(AR_COMPARE(bar_ref, foo_ref, compare) > 0); + REQUIRE(AR_COMPARE(foo_ref, foo_ref, compare) == 0); +} + +TEST("array ref different element sizes") { + int foo[] = { 1, 2, 3 }; + char bar[] = { 1, 2, 3 }; + + AR(foo_ref, int) = { .size = 3, .values = foo }; + AR(bar_ref, char) = { .size = 3, .values = bar }; + + REQUIRE(!AR_EQUAL(foo_ref, bar_ref)); + REQUIRE(AR_COMPARE(foo_ref, bar_ref, compare) > 0); + REQUIRE(AR_COMPARE(bar_ref, foo_ref, compare) < 0); +} diff --git a/source/test/unittests/async_function.test.c b/source/test/unittests/async_function.test.c index 1f50445..4fe2c60 100644 --- a/source/test/unittests/async_function.test.c +++ b/source/test/unittests/async_function.test.c @@ -1,6 +1,6 @@ #include "../../kit/async_function.h" -#define KIT_TEST_FILE async_function_test +#define KIT_TEST_FILE async_function #include "../../kit_test/test.h" CORO(int, test_foo) { diff --git a/source/test/unittests/dynamic_array.test.c b/source/test/unittests/dynamic_array.test.c new file mode 100644 index 0000000..fad8d6d --- /dev/null +++ b/source/test/unittests/dynamic_array.test.c @@ -0,0 +1,174 @@ +#include "../../kit/dynamic_array.h" + +#define KIT_TEST_FILE dynamic_array +#include "../../kit_test/test.h" + +TEST("dynamic array empty") { + DA_CREATE(v, char, 0); + + REQUIRE(v.size == 0); + + DA_DESTROY(v); +} + +TEST("dynamic array resize") { + DA_CREATE(v, char, 0); + DA_RESIZE(v, 10); + + REQUIRE(v.size == 10); + + DA_DESTROY(v); +} + +TEST("dynamic array grow") { + DA_CREATE(v, char, 2); + DA_RESIZE(v, 10); + + REQUIRE(v.size == 10); + + DA_DESTROY(v); +} + +TEST("dynamic array diminish") { + DA_CREATE(v, char, 10); + DA_RESIZE(v, 9); + + REQUIRE(v.size == 9); + + DA_DESTROY(v); +} + +TEST("dynamic array of chars") { + DA_CREATE(v, char, 100); + + REQUIRE(v.size == 100); + REQUIRE(v.capacity >= 100); + REQUIRE(v.values != NULL); + + DA_DESTROY(v); +} + +TEST("dynamic array push") { + DA_CREATE(v, char, 0); + DA_APPEND(v, 'x'); + + REQUIRE(v.size == 1); + REQUIRE(v.values[0] == 'x'); + + DA_DESTROY(v); +} + +TEST("dynamic array insert front") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_INSERT(v, 0, 'x'); + + REQUIRE(v.size == 4); + REQUIRE(v.values[0] == 'x'); + REQUIRE(v.values[1] == 'a'); + REQUIRE(v.values[2] == 'b'); + REQUIRE(v.values[3] == 'c'); + + DA_DESTROY(v); +} + +TEST("dynamic array insert back") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_INSERT(v, 3, 'x'); + + REQUIRE(v.size == 4); + REQUIRE(v.values[0] == 'a'); + REQUIRE(v.values[1] == 'b'); + REQUIRE(v.values[2] == 'c'); + REQUIRE(v.values[3] == 'x'); + + DA_DESTROY(v); +} + +TEST("dynamic array insert middle") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_INSERT(v, 2, 'x'); + + REQUIRE(v.size == 4); + REQUIRE(v.values[0] == 'a'); + REQUIRE(v.values[1] == 'b'); + REQUIRE(v.values[2] == 'x'); + REQUIRE(v.values[3] == 'c'); + + DA_DESTROY(v); +} + +TEST("dynamic array erase front") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_ERASE(v, 0); + + REQUIRE(v.size == 2); + REQUIRE(v.values[0] == 'b'); + REQUIRE(v.values[1] == 'c'); + + DA_DESTROY(v); +} + +TEST("dynamic array erase back") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_ERASE(v, 2); + + REQUIRE(v.size == 2); + REQUIRE(v.values[0] == 'a'); + REQUIRE(v.values[1] == 'b'); + + DA_DESTROY(v); +} + +TEST("dynamic array erase middle") { + DA_CREATE(v, char, 3); + + v.values[0] = 'a'; + v.values[1] = 'b'; + v.values[2] = 'c'; + + DA_ERASE(v, 1); + + REQUIRE(v.size == 2); + REQUIRE(v.values[0] == 'a'); + REQUIRE(v.values[1] == 'c'); + + DA_DESTROY(v); +} + +TEST("dynamic array of ints") { + DA_CREATE(v, int, 10); + DA_RESIZE(v, 5); + v.values[4] = 42; + DA_APPEND(v, 43); + + REQUIRE(v.size == 6); + REQUIRE(v.values[4] == 42); + REQUIRE(v.values[5] == 43); + + DA_DESTROY(v); +} diff --git a/source/test/unittests/input_buffer.test.c b/source/test/unittests/input_buffer.test.c new file mode 100644 index 0000000..c7edb8f --- /dev/null +++ b/source/test/unittests/input_buffer.test.c @@ -0,0 +1,20 @@ +#include "../../kit/input_buffer.h" + +#define KIT_TEST_FILE input_buffer +#include "../../kit_test/test.h" + +TEST("input buffer") { + cstr text = { .size = 3, .values = "foo" }; + struct is_handle in = IS_WRAP_STRING(text); + struct ib_handle first = IB_WRAP(in); + + struct ib_handle second = ib_read(first, 3); + + REQUIRE(!second.error); + REQUIRE(second.data.size == 3); + REQUIRE(AR_EQUAL(text, second.data)); + + ib_destroy(second); + ib_destroy(first); + is_destroy(in); +} diff --git a/source/test/unittests/input_stream.test.c b/source/test/unittests/input_stream.test.c new file mode 100644 index 0000000..9fef47a --- /dev/null +++ b/source/test/unittests/input_stream.test.c @@ -0,0 +1,23 @@ +#include "../../kit/input_stream.h" + +#define KIT_TEST_FILE input_stream +#include "../../kit_test/test.h" + +TEST("input stream wrap string") { + char foo[] = "test"; + char bar[] = "test"; + + cstr foo_ref = { .size = sizeof(foo) - 1, .values = foo }; + cstr bar_ref = { .size = sizeof(bar) - 1, .values = bar }; + + struct is_handle in = IS_WRAP_STRING(foo_ref); + + char buf[4]; + out_str buf_ref = { .size = sizeof(buf), .values = buf }; + + REQUIRE(IS_READ(in, buf_ref) == buf_ref.size); + REQUIRE(AR_EQUAL(foo_ref, bar_ref)); + REQUIRE(AR_EQUAL(buf_ref, bar_ref)); + + is_destroy(in); +} -- cgit v1.2.3