00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <locale>
00031
00032 #include <gtest/gtest.h>
00033 #include <rviz/uniform_string_stream.h>
00034
00035 using namespace rviz;
00036
00037 TEST( UniformStringStream, parse_floats )
00038 {
00039 UniformStringStream uss( "1,2 3.4 5,6e2" );
00040 float a, b, c;
00041 uss.parseFloat( a );
00042 uss.parseFloat( b );
00043 uss.parseFloat( c );
00044 EXPECT_TRUE( !!uss );
00045 EXPECT_EQ( a, 1.2f );
00046 EXPECT_EQ( b, 3.4f );
00047 EXPECT_EQ( c, 560.0f );
00048 uss.parseFloat( a );
00049 EXPECT_FALSE( !!uss );
00050 }
00051
00052 TEST( UniformStringStream, parse_ints )
00053 {
00054 UniformStringStream uss( "1 2 -3" );
00055 int a, b, c;
00056 uss >> a;
00057 uss >> b;
00058 uss >> c;
00059 EXPECT_TRUE( !!uss );
00060 EXPECT_EQ( a, 1 );
00061 EXPECT_EQ( b, 2 );
00062 EXPECT_EQ( c, -3 );
00063 uss >> a;
00064 EXPECT_FALSE( !!uss );
00065 }
00066
00067 class CommaFloat: public std::numpunct<char>
00068 {
00069 protected:
00070 virtual char do_decimal_point() const { return 'p'; }
00071 };
00072
00073 TEST( UniformStringStream, print_floats )
00074 {
00075 UniformStringStream uss;
00076 uss << 1.2f;
00077 EXPECT_EQ( uss.str(), "1.2" );
00078
00079 CommaFloat* comma_float_facet = new CommaFloat;
00080 std::locale new_locale( std::locale::classic(), comma_float_facet );
00081
00082 std::locale old_locale = std::locale::global( new_locale );
00083
00084
00085 std::stringstream ss;
00086 ss << 3.4f;
00087 EXPECT_EQ( ss.str(), "3p4" );
00088
00089
00090 UniformStringStream uss2;
00091 uss2 << 3.4f;
00092 EXPECT_EQ( uss2.str(), "3.4" );
00093
00094
00095 std::locale::global( old_locale );
00096 }
00097
00098 int main(int argc, char **argv){
00099 testing::InitGoogleTest(&argc, argv);
00100 return RUN_ALL_TESTS();
00101 }