📄 close_test.cpp
字号:
ch.push(closable_device<seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test dual-user filter { operation_sequence seq; filtering_streambuf<output> ch; operation dummy; // Test chain::pop() ch.push( closable_filter<dual_use>( dummy, seq.new_operation(1) ) ); ch.push(closable_device<output>(seq.new_operation(3))); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push(closable_device<output>(seq.new_operation(3))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<output>(seq.new_operation(3))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test direct sink { operation_sequence seq; filtering_streambuf<output> ch; // Test chain::pop() ch.push(closable_filter<output>(seq.new_operation(1))); ch.push(closable_device<direct_output>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push(closable_device<direct_output>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<direct_output>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test direct bidirectional device { operation_sequence seq; filtering_streambuf<output> ch; // Test chain::pop() ch.push(closable_filter<output>(seq.new_operation(2))); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(3) ) ); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(3) ) ); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(3) ) ); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test direct seekable device { operation_sequence seq; filtering_streambuf<output> ch; // Test chain::pop() ch.push(closable_filter<output>(seq.new_operation(1))); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); }}void bidirectional_chain_test(){ // Test bidirectional filter and device { operation_sequence seq; filtering_streambuf<bidirectional> ch; // Test chain::pop() ch.push( closable_filter<bidirectional>( seq.new_operation(2), seq.new_operation(3) ) ); ch.push( closable_device<bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push( closable_device<bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push( closable_device<bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test direct bidirectional device { operation_sequence seq; filtering_streambuf<bidirectional> ch; // Test chain::pop() ch.push( closable_filter<bidirectional>( seq.new_operation(2), seq.new_operation(3) ) ); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push( closable_device<direct_bidirectional>( seq.new_operation(1), seq.new_operation(4) ) ); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); }}void seekable_chain_test(){ // Test seekable filter and device { operation_sequence seq; filtering_streambuf<seekable> ch; // Test chain::pop() ch.push(closable_filter<seekable>(seq.new_operation(1))); ch.push(closable_device<seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push(closable_device<seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test direct seekable device { operation_sequence seq; filtering_streambuf<seekable> ch; // Test chain::pop() ch.push(closable_filter<seekable>(seq.new_operation(1))); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.pop()); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and io::close() seq.reset(); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(io::close(ch)); BOOST_CHECK_OPERATION_SEQUENCE(seq); // Test filter reuse and chain::reset() seq.reset(); ch.push(closable_device<direct_seekable>(seq.new_operation(2))); BOOST_CHECK_NO_THROW(ch.reset()); BOOST_CHECK_OPERATION_SEQUENCE(seq); }}void stream_test(){ // Test source { operation_sequence seq; stream< closable_device<input> > str; str.open(closable_device<input>(seq.new_operation(1))); BOOST_CHECK_NO_THROW(str.close()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test sink { operation_sequence seq; stream< closable_device<output> > str; str.open(closable_device<output>(seq.new_operation(1))); BOOST_CHECK_NO_THROW(str.close()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test bidirectional device { operation_sequence seq; stream< closable_device<bidirectional> > str; str.open( closable_device<bidirectional>( seq.new_operation(1), seq.new_operation(2) ) ); BOOST_CHECK_NO_THROW(str.close()); BOOST_CHECK_OPERATION_SEQUENCE(seq); } // Test seekable device { operation_sequence seq; stream< closable_device<seekable> > str; str.open(closable_device<seekable>(seq.new_operation(1))); BOOST_CHECK_NO_THROW(str.close()); BOOST_CHECK_OPERATION_SEQUENCE(seq); }}test_suite* init_unit_test_suite(int, char* []) { test_suite* test = BOOST_TEST_SUITE("execute test"); test->add(BOOST_TEST_CASE(&input_chain_test)); test->add(BOOST_TEST_CASE(&output_chain_test)); test->add(BOOST_TEST_CASE(&bidirectional_chain_test)); test->add(BOOST_TEST_CASE(&seekable_chain_test)); test->add(BOOST_TEST_CASE(&stream_test)); return test;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -