Go to the documentation of this file.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 }