aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/Support/InterleavedRangeTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/Support/InterleavedRangeTest.cpp')
-rw-r--r--llvm/unittests/Support/InterleavedRangeTest.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/llvm/unittests/Support/InterleavedRangeTest.cpp b/llvm/unittests/Support/InterleavedRangeTest.cpp
new file mode 100644
index 0000000..8640b81
--- /dev/null
+++ b/llvm/unittests/Support/InterleavedRangeTest.cpp
@@ -0,0 +1,70 @@
+//===- InterleavedRangeTest.cpp - Unit tests for interleaved format -------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/InterleavedRange.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/raw_ostream.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+TEST(InterleavedRangeTest, VectorInt) {
+ SmallVector<int> V = {0, 1, 2, 3};
+
+ // First, make sure that the raw print API works as expected.
+ std::string Buff;
+ raw_string_ostream OS(Buff);
+ OS << interleaved(V);
+ EXPECT_EQ("0, 1, 2, 3", Buff);
+ Buff.clear();
+ OS << interleaved_array(V);
+ EXPECT_EQ("[0, 1, 2, 3]", Buff);
+
+ // In the rest of the tests, use `.str()` for convenience.
+ EXPECT_EQ("0, 1, 2, 3", interleaved(V).str());
+ EXPECT_EQ("{{0,1,2,3}}", interleaved(V, ",", "{{", "}}").str());
+ EXPECT_EQ("[0, 1, 2, 3]", interleaved_array(V).str());
+ EXPECT_EQ("[0;1;2;3]", interleaved_array(V, ";").str());
+ EXPECT_EQ("0;1;2;3", interleaved(V, ";").str());
+}
+
+TEST(InterleavedRangeTest, VectorIntEmpty) {
+ SmallVector<int> V = {};
+ EXPECT_EQ("", interleaved(V).str());
+ EXPECT_EQ("{{}}", interleaved(V, ",", "{{", "}}").str());
+ EXPECT_EQ("[]", interleaved_array(V).str());
+ EXPECT_EQ("", interleaved(V, ";").str());
+}
+
+TEST(InterleavedRangeTest, VectorIntOneElem) {
+ SmallVector<int> V = {42};
+ EXPECT_EQ("42", interleaved(V).str());
+ EXPECT_EQ("{{42}}", interleaved(V, ",", "{{", "}}").str());
+ EXPECT_EQ("[42]", interleaved_array(V).str());
+ EXPECT_EQ("42", interleaved(V, ";").str());
+}
+
+struct CustomPrint {
+ int N;
+ friend raw_ostream &operator<<(raw_ostream &OS, const CustomPrint &CP) {
+ OS << "$$" << CP.N << "##";
+ return OS;
+ }
+};
+
+TEST(InterleavedRangeTest, CustomPrint) {
+ CustomPrint V[] = {{3}, {4}, {5}};
+ EXPECT_EQ("$$3##, $$4##, $$5##", interleaved(V).str());
+ EXPECT_EQ("{{$$3##;$$4##;$$5##}}", interleaved(V, ";", "{{", "}}").str());
+ EXPECT_EQ("[$$3##, $$4##, $$5##]", interleaved_array(V).str());
+}
+
+} // namespace