util: backport std::experimental::ostream_joiner
Change-Id: I4d12269ac41f07d224772abc0e50039be519fdcc
Refs: #3962
diff --git a/tests/unit-tests/util/backports.t.cpp b/tests/unit-tests/util/backports.t.cpp
index 6d8dfd2..21afb0d 100644
--- a/tests/unit-tests/util/backports.t.cpp
+++ b/tests/unit-tests/util/backports.t.cpp
@@ -1,6 +1,6 @@
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
- * Copyright (c) 2013-2016 Regents of the University of California.
+ * Copyright (c) 2013-2017 Regents of the University of California.
*
* This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
*
@@ -22,6 +22,7 @@
#include "util/backports.hpp"
#include "boost-test.hpp"
+#include <numeric>
namespace ndn {
namespace tests {
@@ -267,6 +268,40 @@
BOOST_AUTO_TEST_SUITE_END() // Optional
+BOOST_AUTO_TEST_CASE(OstreamJoiner)
+{
+ boost::test_tools::output_test_stream os;
+
+ auto joiner1 = ostream_joiner<char>(os, ' ');
+ auto joiner2 = make_ostream_joiner(os, ' ');
+ static_assert(std::is_same<decltype(joiner1), decltype(joiner2)>::value, "");
+
+ std::vector<int> v(5);
+ std::iota(v.begin(), v.end(), 1);
+ std::copy(v.begin(), v.end(), joiner2);
+ BOOST_CHECK(os.is_equal("1 2 3 4 5"));
+
+ auto joiner3 = make_ostream_joiner(os, "...");
+ std::copy(v.begin(), v.end(), joiner3);
+ BOOST_CHECK(os.is_equal("1...2...3...4...5"));
+
+ joiner3 = "one";
+ BOOST_CHECK(os.is_equal("one"));
+ joiner3 = "two";
+ BOOST_CHECK(os.is_equal("...two"));
+ ++joiner3 = "three";
+ BOOST_CHECK(os.is_equal("...three"));
+ joiner3++ = "four";
+ BOOST_CHECK(os.is_equal("...four"));
+
+ std::copy(v.begin(), v.end(), make_ostream_joiner(os, ""));
+ BOOST_CHECK(os.is_equal("12345"));
+
+ std::string delimiter("_");
+ std::copy(v.begin(), v.end(), make_ostream_joiner(os, delimiter));
+ BOOST_CHECK(os.is_equal("1_2_3_4_5"));
+}
+
BOOST_AUTO_TEST_SUITE_END() // TestBackports
BOOST_AUTO_TEST_SUITE_END() // Util