diff options
author | Campbell Barton <ideasman42@gmail.com> | 2014-06-30 05:42:26 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2014-06-30 05:55:01 +0400 |
commit | 228361973dcbefbc89d9dfeff40444bbcb8a3ae2 (patch) | |
tree | f95713be55dff07158ac4c4910d35bb88a18ad88 /tests/gtests/blenlib/BLI_stack_test.cc | |
parent | ea3c2eb15d276bdd27d2144da2d80f6474f96b8e (diff) |
Add BLI_stack test
Diffstat (limited to 'tests/gtests/blenlib/BLI_stack_test.cc')
-rw-r--r-- | tests/gtests/blenlib/BLI_stack_test.cc | 137 |
1 files changed, 137 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); +} |