#define BOOST_TEST_MODULE nonblocking_indirect_streambuf_write #include #include #include #include struct sink { public: typedef char char_type; typedef boost::iostreams::sink_tag category; sink() : state_(0) { } ~sink() { BOOST_REQUIRE_EQUAL(state_, 4); } std::streamsize write(const char* in, std::streamsize n) { BOOST_REQUIRE_GE(n, 2); switch(state_++) { case 0: BOOST_REQUIRE_EQUAL(std::string(in, 2), "AB"); break; case 1: BOOST_REQUIRE_EQUAL(std::string(in, 2), "CD"); break; case 2: BOOST_REQUIRE_EQUAL(std::string(in, 2), "EF"); break; case 3: BOOST_REQUIRE_EQUAL(std::string(in, 2), "GH"); break; default: BOOST_FAIL("'write' called too many times!"); } return 2; } size_t state_; }; BOOST_AUTO_TEST_CASE(nonblocking_indirect_streambuf_write) { boost::iostreams::filtering_ostream ostream; ostream.push((sink())); ostream << "ABCDEFGH"; ostream.flush(); }