#ifdef HAVE_USING_OPERATOR
-#include "glog/stl_logging.h"
-
+#include <functional>
#include <iostream>
#include <map>
+#include <ostream>
#include <string>
-#include <strstream>
#include <vector>
#ifdef __GNUC__
-# include <ext/hash_map>
-# include <ext/hash_set>
+// C++0x isn't enabled by default in GCC and libc++ does not have
+// non-standard ext/* and tr1/unordered_*.
+# if defined(_LIBCPP_VERSION)
+# ifndef GLOG_STL_LOGGING_FOR_UNORDERED
+# define GLOG_STL_LOGGING_FOR_UNORDERED
+# endif
+# else
+# ifndef GLOG_STL_LOGGING_FOR_EXT_HASH
+# define GLOG_STL_LOGGING_FOR_EXT_HASH
+# endif
+# ifndef GLOG_STL_LOGGING_FOR_EXT_SLIST
+# define GLOG_STL_LOGGING_FOR_EXT_SLIST
+# endif
+# ifndef GLOG_STL_LOGGING_FOR_TR1_UNORDERED
+# define GLOG_STL_LOGGING_FOR_TR1_UNORDERED
+# endif
+# endif
#endif
#include "glog/logging.h"
+#include "glog/stl_logging.h"
#include "googletest.h"
using namespace std;
-#ifdef __GNUC__
+#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
using namespace __gnu_cxx;
#endif
v.push_back(10);
v.push_back(20);
v.push_back(30);
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- // Just ostrstream s1; leaks heap.
- ss << v << ends;
- CHECK_STREQ(ss.str(), "10 20 30");
+ ostringstream ss;
+ ss << v;
+ EXPECT_EQ(ss.str(), "10 20 30");
vector<int> copied_v(v);
CHECK_EQ(v, copied_v); // This must compile.
}
m[20] = "twenty";
m[10] = "ten";
m[30] = "thirty";
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << m << ends;
- CHECK_STREQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)");
+ ostringstream ss;
+ ss << m;
+ EXPECT_EQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)");
map< int, string > copied_m(m);
CHECK_EQ(m, copied_m); // This must compile.
}
-#ifdef __GNUC__
+#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
{
// Test a hashed simple associative container.
hash_set<int> hs;
hs.insert(10);
hs.insert(20);
hs.insert(30);
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << hs << ends;
- CHECK_STREQ(ss.str(), "10 20 30");
+ ostringstream ss;
+ ss << hs;
+ EXPECT_EQ(ss.str(), "10 20 30");
hash_set<int> copied_hs(hs);
CHECK_EQ(hs, copied_hs); // This must compile.
}
#endif
-#ifdef __GNUC__
+#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
{
// Test a hashed pair associative container.
hash_map<int, string> hm;
hm[10] = "ten";
hm[20] = "twenty";
hm[30] = "thirty";
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << hm << ends;
- CHECK_STREQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)");
+ ostringstream ss;
+ ss << hm;
+ EXPECT_EQ(ss.str(), "(10, ten) (20, twenty) (30, thirty)");
hash_map<int, string> copied_hm(hm);
CHECK_EQ(hm, copied_hm); // this must compile
}
}
v.push_back(100);
expected += " ...";
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << v << ends;
- CHECK_STREQ(ss.str(), expected.c_str());
+ ostringstream ss;
+ ss << v;
+ CHECK_EQ(ss.str(), expected.c_str());
}
{
m[20] = "twenty";
m[10] = "ten";
m[30] = "thirty";
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << m << ends;
- CHECK_STREQ(ss.str(), "(30, thirty) (20, twenty) (10, ten)");
+ ostringstream ss;
+ ss << m;
+ EXPECT_EQ(ss.str(), "(30, thirty) (20, twenty) (10, ten)");
map< int, string, greater<int> > copied_m(m);
CHECK_EQ(m, copied_m); // This must compile.
}
-#ifdef __GNUC__
+#ifdef GLOG_STL_LOGGING_FOR_EXT_HASH
{
// Test a hashed simple associative container.
// Use a user defined hash function.
hs.insert(10);
hs.insert(20);
hs.insert(30);
- char ss_buf[1000];
- ostrstream ss(ss_buf, sizeof(ss_buf));
- ss << hs << ends;
- CHECK_STREQ(ss.str(), "10 20 30");
+ ostringstream ss;
+ ss << hs;
+ EXPECT_EQ(ss.str(), "10 20 30");
hash_set<int, user_hash> copied_hs(hs);
CHECK_EQ(hs, copied_hs); // This must compile.
}
#endif
}
-int main(int argc, char** argv) {
+int main(int, char**) {
TestSTLLogging();
std::cout << "PASS\n";
return 0;
#include <iostream>
-int main(int argc, char** argv) {
+int main(int, char**) {
std::cout << "We don't support stl_logging for this compiler.\n"
<< "(we need compiler support of 'using ::operator<<' "
<< "for this feature.)\n";