rtc::ArrayView reverse iterators
- rtc::ArrayView::rbegin()
- rtc::ArrayView::rend()
- rtc::ArrayView::crbegin()
- rtc::ArrayView::crend()
Bug: webrtc:7494
Change-Id: Id773d66cc9da8bd58def1dba35a706914440ef37
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/189880
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32458}
diff --git a/api/array_view_unittest.cc b/api/array_view_unittest.cc
index 0357f68..97267df 100644
--- a/api/array_view_unittest.cc
+++ b/api/array_view_unittest.cc
@@ -451,6 +451,20 @@
}
}
+TEST(ArrayViewTest, TestReverseIterationEmpty) {
+ // Variable-size.
+ ArrayView<std::vector<std::vector<std::vector<std::string>>>> av;
+ EXPECT_EQ(av.rbegin(), av.rend());
+ EXPECT_EQ(av.crbegin(), av.crend());
+ EXPECT_TRUE(av.empty());
+
+ // Fixed-size.
+ ArrayView<std::vector<std::vector<std::vector<std::string>>>, 0> af;
+ EXPECT_EQ(af.begin(), af.end());
+ EXPECT_EQ(af.cbegin(), af.cend());
+ EXPECT_TRUE(af.empty());
+}
+
TEST(ArrayViewTest, TestIterationVariable) {
char arr[] = "Arrr!";
ArrayView<char> av(arr);
@@ -472,6 +486,25 @@
}
}
+TEST(ArrayViewTest, TestReverseIterationVariable) {
+ char arr[] = "Arrr!";
+ ArrayView<char> av(arr);
+ EXPECT_EQ('\0', *av.rbegin());
+ EXPECT_EQ('\0', *av.crbegin());
+ EXPECT_EQ('A', *(av.rend() - 1));
+ EXPECT_EQ('A', *(av.crend() - 1));
+
+ const char* cit = av.cend() - 1;
+ for (auto crit = av.crbegin(); crit != av.crend(); ++crit, --cit) {
+ EXPECT_EQ(*cit, *crit);
+ }
+
+ char* it = av.end() - 1;
+ for (auto rit = av.rbegin(); rit != av.rend(); ++rit, --it) {
+ EXPECT_EQ(*it, *rit);
+ }
+}
+
TEST(ArrayViewTest, TestIterationFixed) {
char arr[] = "Arrr!";
ArrayView<char, 6> av(arr);
@@ -493,6 +526,25 @@
}
}
+TEST(ArrayViewTest, TestReverseIterationFixed) {
+ char arr[] = "Arrr!";
+ ArrayView<char, 6> av(arr);
+ EXPECT_EQ('\0', *av.rbegin());
+ EXPECT_EQ('\0', *av.crbegin());
+ EXPECT_EQ('A', *(av.rend() - 1));
+ EXPECT_EQ('A', *(av.crend() - 1));
+
+ const char* cit = av.cend() - 1;
+ for (auto crit = av.crbegin(); crit != av.crend(); ++crit, --cit) {
+ EXPECT_EQ(*cit, *crit);
+ }
+
+ char* it = av.end() - 1;
+ for (auto rit = av.rbegin(); rit != av.rend(); ++rit, --it) {
+ EXPECT_EQ(*it, *rit);
+ }
+}
+
TEST(ArrayViewTest, TestEmpty) {
EXPECT_TRUE(ArrayView<int>().empty());
const int a[] = {1, 2, 3};