diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-06-23 04:23:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-06-23 04:36:49 +0300 |
commit | 475b7f5a2cadd2e7ec71c8ba9fa5dad97f4c2afa (patch) | |
tree | 6c544df357e820c9c4a59c2927add6c54d25bed9 /tests | |
parent | 9bce807d0b2f57ad32401fb2cc1080ab503a8a3c (diff) |
BLI_array_utils: add BLI_array_rfindindex
Array search from back to front.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gtests/blenlib/BLI_array_utils_test.cc | 82 |
1 files changed, 76 insertions, 6 deletions
diff --git a/tests/gtests/blenlib/BLI_array_utils_test.cc b/tests/gtests/blenlib/BLI_array_utils_test.cc index e532419691a..eabf5bc72cf 100644 --- a/tests/gtests/blenlib/BLI_array_utils_test.cc +++ b/tests/gtests/blenlib/BLI_array_utils_test.cc @@ -5,6 +5,7 @@ extern "C" { #include "BLI_utildefines.h" #include "BLI_array_utils.h" +#include "BLI_stackdefines.h" } /* -------------------------------------------------------------------- */ @@ -44,33 +45,102 @@ TEST(array_utils, ReverseInt4) TEST(array_utils, FindIndexStringEmpty) { char data[] = "", find = '0'; - EXPECT_EQ(-1, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(-1, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(-1, BLI_array_rfindindex(data, ARRAY_SIZE(data) - 1, &find)); } TEST(array_utils, FindIndexStringSingle) { char data[] = "0", find = '0'; - EXPECT_EQ(0, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(0, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(0, BLI_array_rfindindex(data, ARRAY_SIZE(data) - 1, &find)); } TEST(array_utils, FindIndexStringSingleMissing) { char data[] = "1", find = '0'; - EXPECT_EQ(-1, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(-1, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(-1, BLI_array_rfindindex(data, ARRAY_SIZE(data) - 1, &find)); } TEST(array_utils, FindIndexString4) { char data[] = "0123", find = '3'; - EXPECT_EQ(3, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(3, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + EXPECT_EQ(3, BLI_array_rfindindex(data, ARRAY_SIZE(data) - 1, &find)); } TEST(array_utils, FindIndexInt4) { - int data[] = {0, 1, 2, 3}, find = 2; - EXPECT_EQ(2, BLI_array_findindex(data, ARRAY_SIZE(data) - 1, &find)); + int data[] = {0, 1, 2, 3}, find = 3; + EXPECT_EQ(3, BLI_array_findindex(data, ARRAY_SIZE(data), &find)); + EXPECT_EQ(3, BLI_array_rfindindex(data, ARRAY_SIZE(data), &find)); } +TEST(array_utils, FindIndexInt4_DupeEnd) +{ + int data[] = {0, 1, 2, 0}, find = 0; + EXPECT_EQ(0, BLI_array_findindex(data, ARRAY_SIZE(data), &find)); + EXPECT_EQ(3, BLI_array_rfindindex(data, ARRAY_SIZE(data), &find)); +} + +TEST(array_utils, FindIndexInt4_DupeMid) +{ + int data[] = {1, 0, 0, 3}, find = 0; + EXPECT_EQ(1, BLI_array_findindex(data, ARRAY_SIZE(data), &find)); + EXPECT_EQ(2, BLI_array_rfindindex(data, ARRAY_SIZE(data), &find)); +} + +TEST(array_utils, FindIndexPointer) +{ + const char *data[4] = {NULL}; + STACK_DECLARE(data); + + STACK_INIT(data, ARRAY_SIZE(data)); + + const char *a = "a", *b = "b", *c = "c", *d = "d"; + +#define STACK_PUSH_AND_CHECK_FORWARD(v, i) { \ + STACK_PUSH(data, v); \ + EXPECT_EQ(i, BLI_array_findindex(data, STACK_SIZE(data), &(v))); \ +} ((void)0) + +#define STACK_PUSH_AND_CHECK_BACKWARD(v, i) { \ + STACK_PUSH(data, v); \ + EXPECT_EQ(i, BLI_array_rfindindex(data, STACK_SIZE(data), &(v))); \ +} ((void)0) + +#define STACK_PUSH_AND_CHECK_BOTH(v, i) { \ + STACK_PUSH(data, v); \ + EXPECT_EQ(i, BLI_array_findindex(data, STACK_SIZE(data), &(v))); \ + EXPECT_EQ(i, BLI_array_rfindindex(data, STACK_SIZE(data), &(v))); \ +} ((void)0) + + STACK_PUSH_AND_CHECK_BOTH(a, 0); + STACK_PUSH_AND_CHECK_BOTH(b, 1); + STACK_PUSH_AND_CHECK_BOTH(c, 2); + STACK_PUSH_AND_CHECK_BOTH(d, 3); + + STACK_POP(data); + STACK_PUSH_AND_CHECK_BACKWARD(a, 3); + + STACK_POP(data); + STACK_PUSH_AND_CHECK_FORWARD(a, 0); + + STACK_POP(data); + STACK_POP(data); + + STACK_PUSH_AND_CHECK_BACKWARD(b, 2); + STACK_PUSH_AND_CHECK_BACKWARD(a, 3); + +#undef STACK_PUSH_AND_CHECK_FORWARD +#undef STACK_PUSH_AND_CHECK_BACKWARD +#undef STACK_PUSH_AND_CHECK_BOTH + +} + + + /* BLI_array_binary_and */ #define BINARY_AND_TEST(data_cmp, data_a, data_b, data_combine, length) \ { \ |