Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-06-30 05:42:26 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-30 05:55:01 +0400
commit228361973dcbefbc89d9dfeff40444bbcb8a3ae2 (patch)
treef95713be55dff07158ac4c4910d35bb88a18ad88 /tests
parentea3c2eb15d276bdd27d2144da2d80f6474f96b8e (diff)
Add BLI_stack test
Diffstat (limited to 'tests')
-rw-r--r--tests/gtests/blenlib/BLI_stack_test.cc137
-rw-r--r--tests/gtests/blenlib/CMakeLists.txt1
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}")