00001 #define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
00002 #define BOOST_TEST_MODULE FakeOStreamTest
00003
00004 #include "util/string_stream.hh"
00005 #include <boost/test/unit_test.hpp>
00006 #include <boost/lexical_cast.hpp>
00007
00008 #include <cstddef>
00009 #include <limits>
00010
00011 namespace util { namespace {
00012
00013 template <class T> void TestEqual(const T value) {
00014 StringStream strme;
00015 strme << value;
00016 BOOST_CHECK_EQUAL(boost::lexical_cast<std::string>(value), strme.str());
00017 }
00018
00019 template <class T> void TestCorners() {
00020 TestEqual(std::numeric_limits<T>::max());
00021 TestEqual(std::numeric_limits<T>::min());
00022 TestEqual(static_cast<T>(0));
00023 TestEqual(static_cast<T>(-1));
00024 TestEqual(static_cast<T>(1));
00025 }
00026
00027 BOOST_AUTO_TEST_CASE(Integer) {
00028 TestCorners<char>();
00029 TestCorners<signed char>();
00030 TestCorners<unsigned char>();
00031
00032 TestCorners<short>();
00033 TestCorners<signed short>();
00034 TestCorners<unsigned short>();
00035
00036 TestCorners<int>();
00037 TestCorners<unsigned int>();
00038 TestCorners<signed int>();
00039
00040 TestCorners<long>();
00041 TestCorners<unsigned long>();
00042 TestCorners<signed long>();
00043
00044 TestCorners<long long>();
00045 TestCorners<unsigned long long>();
00046 TestCorners<signed long long>();
00047
00048 TestCorners<std::size_t>();
00049 }
00050
00051 enum TinyEnum { EnumValue };
00052
00053 BOOST_AUTO_TEST_CASE(EnumCase) {
00054 TestEqual(EnumValue);
00055 }
00056
00057 BOOST_AUTO_TEST_CASE(Strings) {
00058 TestEqual("foo");
00059 const char *a = "bar";
00060 TestEqual(a);
00061 StringPiece piece("abcdef");
00062 TestEqual(piece);
00063 TestEqual(StringPiece());
00064
00065 char non_const[3];
00066 non_const[0] = 'b';
00067 non_const[1] = 'c';
00068 non_const[2] = 0;
00069
00070 StringStream out;
00071 out << "a" << non_const << 'c';
00072 BOOST_CHECK_EQUAL("abcc", out.str());
00073
00074
00075 StringStream stream;
00076 stream << "a" << non_const << 'c' << piece;
00077 BOOST_CHECK_EQUAL("abccabcdef", stream.str());
00078 }
00079
00080 }}