From a72473232b03c56cb9bd6b6959def80f0d03d458 Mon Sep 17 00:00:00 2001 From: Harpreet Sangar Date: Tue, 25 Apr 2023 14:27:50 +0530 Subject: [PATCH] Add tests for `ArrayUtils::skip_index_to_id`. --- src/array_utils.cpp | 6 +++++- test/array_utils_test.cpp | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/array_utils.cpp b/src/array_utils.cpp index ad22a85f..e034c4d6 100644 --- a/src/array_utils.cpp +++ b/src/array_utils.cpp @@ -153,11 +153,15 @@ size_t ArrayUtils::exclude_scalar(const uint32_t *A, const size_t lenA, bool ArrayUtils::skip_index_to_id(uint32_t& curr_index, uint32_t const* const array, const uint32_t& array_len, const uint32_t& id) { + if (curr_index >= array_len) { + return false; + } + if (id <= array[curr_index]) { return id == array[curr_index]; } - long start = curr_index, mid, end = array_len; + long start = curr_index, mid, end = array_len - 1; while (start <= end) { mid = start + (end - start) / 2; diff --git a/test/array_utils_test.cpp b/test/array_utils_test.cpp index 0fa4622a..2a961296 100644 --- a/test/array_utils_test.cpp +++ b/test/array_utils_test.cpp @@ -172,4 +172,46 @@ TEST(SortedArrayTest, FilterArray) { delete[] arr2; delete[] arr1; delete[] results; +} + +TEST(SortedArrayTest, SkipToID) { + std::vector array; + for (uint32_t i = 0; i < 10; i++) { + array.push_back(i * 3); + } + + uint32_t index = 0; + bool found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 15); + ASSERT_TRUE(found); + ASSERT_EQ(5, index); + + index = 4; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 3); + ASSERT_FALSE(found); + ASSERT_EQ(4, index); + + index = 4; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 12); + ASSERT_TRUE(found); + ASSERT_EQ(4, index); + + index = 4; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 24); + ASSERT_TRUE(found); + ASSERT_EQ(8, index); + + index = 4; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 25); + ASSERT_FALSE(found); + ASSERT_EQ(9, index); + + index = 4; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 30); + ASSERT_FALSE(found); + ASSERT_EQ(10, index); + + index = 12; + found = ArrayUtils::skip_index_to_id(index, array.data(), array.size(), 30); + ASSERT_FALSE(found); + ASSERT_EQ(12, index); } \ No newline at end of file