[Bf-blender-cvs] [81ffe2a] gtest-staging: Add BLI_stack test

Campbell Barton noreply at git.blender.org
Mon Jun 30 01:41:08 CEST 2014


Commit: 81ffe2a5aa81ce6dfb6b57a87a8c239b78ebc0fb
Author: Campbell Barton
Date:   Mon Jun 30 09:40:36 2014 +1000
https://developer.blender.org/rB81ffe2a5aa81ce6dfb6b57a87a8c239b78ebc0fb

Add BLI_stack test

===================================================================

A	tests/gtests/blenlib/BLI_stack_test.cc
M	tests/gtests/blenlib/CMakeLists.txt

===================================================================

diff --git a/tests/gtests/blenlib/BLI_stack_test.cc b/tests/gtests/blenlib/BLI_stack_test.cc
new file mode 100644
index 0000000..8ad4d95
--- /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 d6a22ad..3d30d11 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_polyfill2d "bf_blenlib")




More information about the Bf-blender-cvs mailing list