summaryrefslogtreecommitdiffstats
path: root/llvm/unittests
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2016-09-30 15:43:59 +0000
committerZachary Turner <zturner@google.com>2016-09-30 15:43:59 +0000
commit4f20a0a4d990f5be139bf4fd0d90d7f94b266e70 (patch)
tree656e26d8ab332e20ddae45362c616cb0d1d0d902 /llvm/unittests
parent17d9caf6654c9577555dd92e3e47160f10cecb22 (diff)
downloadbcm5719-llvm-4f20a0a4d990f5be139bf4fd0d90d7f94b266e70.tar.gz
bcm5719-llvm-4f20a0a4d990f5be139bf4fd0d90d7f94b266e70.zip
Resubmit "Add llvm::enumerate() to STLExtras."
The CL was originally failing due to the use of some C++14 specific features, so I've removed those. Hopefully this will satisfy the bots. llvm-svn: 282867
Diffstat (limited to 'llvm/unittests')
-rw-r--r--llvm/unittests/ADT/STLExtrasTest.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/STLExtrasTest.cpp b/llvm/unittests/ADT/STLExtrasTest.cpp
index dc62b03741c..ebb119600c7 100644
--- a/llvm/unittests/ADT/STLExtrasTest.cpp
+++ b/llvm/unittests/ADT/STLExtrasTest.cpp
@@ -10,6 +10,8 @@
#include "llvm/ADT/STLExtras.h"
#include "gtest/gtest.h"
+#include <vector>
+
using namespace llvm;
namespace {
@@ -37,4 +39,51 @@ TEST(STLExtrasTest, Rank) {
EXPECT_EQ(4, f(rank<6>()));
}
+TEST(STLExtrasTest, Enumerate) {
+ std::vector<char> foo = {'a', 'b', 'c'};
+
+ std::vector<std::pair<std::size_t, char>> results;
+
+ for (auto X : llvm::enumerate(foo)) {
+ results.push_back(std::make_pair(X.Index, X.Value));
+ }
+ ASSERT_EQ(3u, results.size());
+ EXPECT_EQ(0u, results[0].first);
+ EXPECT_EQ('a', results[0].second);
+ EXPECT_EQ(1u, results[1].first);
+ EXPECT_EQ('b', results[1].second);
+ EXPECT_EQ(2u, results[2].first);
+ EXPECT_EQ('c', results[2].second);
+
+ results.clear();
+ const std::vector<int> bar = {'1', '2', '3'};
+ for (auto X : llvm::enumerate(bar)) {
+ results.push_back(std::make_pair(X.Index, X.Value));
+ }
+ EXPECT_EQ(0u, results[0].first);
+ EXPECT_EQ('1', results[0].second);
+ EXPECT_EQ(1u, results[1].first);
+ EXPECT_EQ('2', results[1].second);
+ EXPECT_EQ(2u, results[2].first);
+ EXPECT_EQ('3', results[2].second);
+
+ results.clear();
+ const std::vector<int> baz;
+ for (auto X : llvm::enumerate(baz)) {
+ results.push_back(std::make_pair(X.Index, X.Value));
+ }
+ EXPECT_TRUE(baz.empty());
+}
+
+TEST(STLExtrasTest, EnumerateModify) {
+ std::vector<char> foo = {'a', 'b', 'c'};
+
+ for (auto X : llvm::enumerate(foo)) {
+ ++X.Value;
+ }
+
+ EXPECT_EQ('b', foo[0]);
+ EXPECT_EQ('c', foo[1]);
+ EXPECT_EQ('d', foo[2]);
+}
}
OpenPOWER on IntegriCloud