From 8432b9e29acf199d82e03eee2548a70291b098c5 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Fri, 16 Jan 2015 09:03:53 -0800 Subject: [PATCH] Improve streambuf unit test --- beast/asio/tests/streambuf.test.cpp | 90 +++++++++++++++++++++++++++-- 1 file changed, 85 insertions(+), 5 deletions(-) diff --git a/beast/asio/tests/streambuf.test.cpp b/beast/asio/tests/streambuf.test.cpp index 9a69d85a1..5361ad3b6 100644 --- a/beast/asio/tests/streambuf.test.cpp +++ b/beast/asio/tests/streambuf.test.cpp @@ -26,11 +26,11 @@ namespace asio { class streambuf_test : public unit_test::suite { public: - // Convert a ConstBufferSequence to a string - template + // Convert a buffer sequence to a string + template static std::string - to_str (ConstBufferSequence const& b) + to_str (Buffers const& b) { std::string s; auto const n = boost::asio::buffer_size(b); @@ -40,6 +40,84 @@ public: return s; } + // Fill a buffer sequence with predictable data + template + static + void + fill (Buffers const& b) + { + char c = 0; + auto first = boost::asio::buffers_begin(b); + auto last = boost::asio::buffers_end(b); + while (first != last) + *first++ = c++; + } + + // Check that a buffer sequence has predictable data + template + void + check (Buffers const& b, char c = 0) + { + auto first = boost::asio::buffers_begin(b); + auto last = boost::asio::buffers_end(b); + while (first != last) + expect (*first++ == c++); + } + + void + test_prepare() + { + testcase << "prepare"; + beast::asio::streambuf b(11); + for (std::size_t n = 0; n < 97; ++n) + { + fill(b.prepare(n)); + b.commit(n); + check(b.data()); + b.consume(n); + } + } + + void + test_commit() + { + testcase << "commit"; + beast::asio::streambuf b(11); + for (std::size_t n = 0; n < 97; ++n) + { + fill(b.prepare(n)); + char c = 0; + for (int i = 1;; ++i) + { + b.commit(i); + check(b.data(), c); + b.consume(i); + if (b.size() < 1) + break; + c += i; + } + } + } + + void + test_consume() + { + testcase << "consume"; + beast::asio::streambuf b(11); + for (std::size_t n = 0; n < 97; ++n) + { + fill(b.prepare(n)); + b.commit(n); + char c = 0; + for (int i = 1; b.size() > 0; ++i) + { + check(b.data(), c); + b.consume(i); + c += i; + } + } + } + void run() { { @@ -67,8 +145,10 @@ public: b.commit(10); expect(to_str(b.data()) == "567890ABCD"); } - - pass(); + + test_prepare(); + test_commit(); + test_consume(); } };