Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/iostreams/test/filter_test.cpp @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 3.4 KB
Line 
1// (C) Copyright Jonathan Turkanis 2004
2// Distributed under the Boost Software License, Version 1.0. (See accompanying
3// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
4
5// See http://www.boost.org/libs/iostreams for documentation.
6
7#include <string>
8#include <boost/iostreams/filter/test.hpp>
9#include <boost/test/test_tools.hpp>
10#include <boost/test/unit_test.hpp>
11#include "detail/filters.hpp"
12
13using namespace boost::iostreams;
14using namespace boost::iostreams::test;
15using boost::unit_test::test_suite;
16
17const std::string lower = 
18    "in addition to providing an abstract framework the "
19    "library provides a number of concrete filters, sources "
20    "and sinks which serve as example applications of the "
21    "library but are also useful in their own right. these "
22    "include components for accessing memory-mapped files, "
23    "for file access via operating system file descriptors, "
24    "for code conversion, for text filtering with regular "
25    "expressions, for line-ending conversion and for "
26    "compression and decompression in the zlib, gzip and "
27    "bzip2 formats.";
28
29const std::string upper = 
30    "IN ADDITION TO PROVIDING AN ABSTRACT FRAMEWORK THE "
31    "LIBRARY PROVIDES A NUMBER OF CONCRETE FILTERS, SOURCES "
32    "AND SINKS WHICH SERVE AS EXAMPLE APPLICATIONS OF THE "
33    "LIBRARY BUT ARE ALSO USEFUL IN THEIR OWN RIGHT. THESE "
34    "INCLUDE COMPONENTS FOR ACCESSING MEMORY-MAPPED FILES, "
35    "FOR FILE ACCESS VIA OPERATING SYSTEM FILE DESCRIPTORS, "
36    "FOR CODE CONVERSION, FOR TEXT FILTERING WITH REGULAR "
37    "EXPRESSIONS, FOR LINE-ENDING CONVERSION AND FOR "
38    "COMPRESSION AND DECOMPRESSION IN THE ZLIB, GZIP AND "
39    "BZIP2 FORMATS.";
40
41struct toupper_dual_use_filter : public dual_use_filter {
42    template<typename Source>
43    int get(Source& s) 
44    { 
45        int c = boost::iostreams::get(s);
46        return c != EOF && c != WOULD_BLOCK ?
47            std::toupper((unsigned char) c) :
48            c;
49    }
50    template<typename Sink>
51    bool put(Sink& s, char c)
52    { 
53        return boost::iostreams::put(
54                   s, (char) std::toupper((unsigned char) c)
55               ); 
56    }
57};
58
59struct tolower_dual_use_filter : public dual_use_filter {
60    template<typename Source>
61    int get(Source& s) 
62    { 
63        int c = boost::iostreams::get(s);
64        return c != EOF && c != WOULD_BLOCK ?
65            std::tolower((unsigned char) c) :
66            c;
67    }
68    template<typename Sink>
69    bool put(Sink& s, char c)
70    { 
71        return boost::iostreams::put(
72                   s, (char) std::tolower((unsigned char) c)
73               ); 
74    }
75};
76
77void filter_test()
78{
79    BOOST_CHECK(test_input_filter(toupper_filter(), lower, upper));
80    BOOST_CHECK(test_input_filter(toupper_multichar_filter(), lower, upper));
81    BOOST_CHECK(test_input_filter(toupper_dual_use_filter(), lower, upper));
82    BOOST_CHECK(test_output_filter(tolower_filter(), upper, lower));
83    BOOST_CHECK(test_output_filter(tolower_multichar_filter(), upper, lower));
84    BOOST_CHECK(test_output_filter(tolower_dual_use_filter(), upper, lower));
85    BOOST_CHECK(test_filter_pair(tolower_filter(), toupper_filter(), upper));
86    BOOST_CHECK(
87        test_filter_pair( tolower_multichar_filter(), 
88                          toupper_multichar_filter(), upper )
89    );
90}
91
92test_suite* init_unit_test_suite(int, char* []) 
93{
94    test_suite* test = BOOST_TEST_SUITE("filter test");
95    test->add(BOOST_TEST_CASE(&filter_test));
96    return test;
97}
Note: See TracBrowser for help on using the repository browser.