diff options
-rw-r--r-- | tests/gtests/blenlib/BLI_stack_test.cc | 137 | ||||
-rw-r--r-- | tests/gtests/blenlib/CMakeLists.txt | 1 |
2 files changed, 138 insertions, 0 deletions
diff --git a/tests/gtests/blenlib/BLI_stack_test.cc b/tests/gtests/blenlib/BLI_stack_test.cc new file mode 100644 index 00000000000..8ad4d957813 --- /dev/null +++ b/tests/gtests/blenlib/BLI_stack_test.cc @@ -0,0 +1,137 @@ +/* Apache License, Version 2.0 */ + +#include "testing/testing.h" +#include <string.h> + +extern "C" { +#include "BLI_stack.h" +#include "BLI_utildefines.h" +#include "BLI_array.h" +}; + +#define SIZE 1024 + +TEST(stack, Empty) +{ + BLI_Stack *stack; + + stack = BLI_stack_new(sizeof(int), __func__); + EXPECT_EQ(BLI_stack_is_empty(stack), true); + BLI_stack_free(stack); +} + +TEST(stack, One) +{ + BLI_Stack *stack; + unsigned int in = -1, out = 1; + + stack = BLI_stack_new(sizeof(in), __func__); + + BLI_stack_push(stack, (void *)&in); + EXPECT_EQ(BLI_stack_is_empty(stack), false); + BLI_stack_pop(stack, (void *)&out); + EXPECT_EQ(in, out); + EXPECT_EQ(BLI_stack_is_empty(stack), true); + BLI_stack_free(stack); +} + +TEST(stack, Range) +{ + const int tot = SIZE; + BLI_Stack *stack; + int in, out; + + stack = BLI_stack_new(sizeof(in), __func__); + + for (in = 0; in < tot; in++) { + BLI_stack_push(stack, (void *)&in); + } + + for (in = tot - 1; in >= 0; in--) { + EXPECT_EQ(BLI_stack_is_empty(stack), false); + BLI_stack_pop(stack, (void *)&out); + EXPECT_EQ(in, out); + + } + EXPECT_EQ(BLI_stack_is_empty(stack), true); + + BLI_stack_free(stack); +} + +TEST(stack, String) +{ + const int tot = SIZE; + int i; + + BLI_Stack *stack; + char in[] = "hello world!"; + char out[sizeof(in)]; + + stack = BLI_stack_new(sizeof(in), __func__); + + for (i = 0; i < tot; i++) { + *((int *)in) = i; + BLI_stack_push(stack, (void *)in); + } + + for (i = tot - 1; i >= 0; i--) { + EXPECT_EQ(BLI_stack_is_empty(stack), false); + *((int *)in) = i; + BLI_stack_pop(stack, (void *)&out); + EXPECT_STREQ(in, out); + + } + EXPECT_EQ(BLI_stack_is_empty(stack), true); + + BLI_stack_free(stack); +} + +TEST(stack, Reuse) +{ + const int sizes[] = {3, 11, 81, 400, 999, 12, 1, 9721, 7, 99, 5, 0}; + int sizes_test[ARRAY_SIZE(sizes)]; + const int *s; + int in, out, i; + int sum, sum_test; + + BLI_Stack *stack; + + stack = BLI_stack_new(sizeof(in), __func__); + + /* add a bunch of numbers, ensure we get same sum out */ + sum = 0; + for (s = sizes; *s; s++) { + for (i = *s; i != 0; i--) { + BLI_stack_push(stack, (void *)&i); + sum += i; + } + } + sum_test = 0; + while (!BLI_stack_is_empty(stack)) { + BLI_stack_pop(stack, (void *)&out); + sum_test += out; + } + EXPECT_EQ(sum, sum_test); + + /* add and remove all except last */ + for (s = sizes; *s; s++) { + for (i = *s; i >= 0; i--) { + BLI_stack_push(stack, (void *)&i); + } + for (i = *s; i > 0; i--) { + BLI_stack_pop(stack, (void *)&out); + } + } + + i = ARRAY_SIZE(sizes) - 1; + while (!BLI_stack_is_empty(stack)) { + i--; + BLI_stack_pop(stack, (void *)&sizes_test[i]); + EXPECT_EQ(sizes[i], sizes_test[i]); + EXPECT_GT(i, -1); + } + EXPECT_EQ(i, 0); + EXPECT_EQ(memcmp(sizes, sizes_test, sizeof(sizes) - sizeof(int)), 0); + + BLI_stack_free(stack); +} diff --git a/tests/gtests/blenlib/CMakeLists.txt b/tests/gtests/blenlib/CMakeLists.txt index 45bbcbd4097..07db51b887d 100644 --- a/tests/gtests/blenlib/CMakeLists.txt +++ b/tests/gtests/blenlib/CMakeLists.txt @@ -34,6 +34,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}") +BLENDER_TEST(BLI_stack "bf_blenlib") BLENDER_TEST(BLI_math_color "bf_blenlib") BLENDER_TEST(BLI_math_geom "bf_blenlib") BLENDER_TEST(BLI_path_util "bf_blenlib;extern_wcwidth;${ZLIB_LIBRARIES}") |