00001 #include <ros/ros.h>
00002 #include <gtest/gtest.h>
00003 #include <ddynamic_reconfigure/dd_value.h>
00004
00005 namespace ddynamic_reconfigure {
00006
00010 TEST(DDValueTest, intTest) {
00011
00012 Value v(0);
00013 ASSERT_EQ(0,v.toInt());
00014 ASSERT_EQ(v.getType(),"int");
00015 v = Value(-1);
00016 ASSERT_EQ(-1,v.toInt());
00017 ASSERT_EQ(v.getType(),"int");
00018 v = Value(INT32_MAX);
00019 ASSERT_EQ(INT32_MAX,v.toInt());
00020 ASSERT_EQ(v.getType(),"int");
00021 v = Value(INT32_MIN);
00022 ASSERT_EQ(INT32_MIN,v.toInt());
00023 ASSERT_EQ(v.getType(),"int");
00024
00025 int i = 1;
00026 v = Value(i + 0.1);
00027 ASSERT_EQ(i,v.toInt());
00028 ASSERT_EQ(v.getType(),"double");
00029 v = Value((bool)i);
00030 ASSERT_EQ(i,v.toInt());
00031 ASSERT_EQ(v.getType(),"bool");
00032 stringstream str; str << i;
00033 v = Value(str.str());
00034 ASSERT_EQ(i,v.toInt());
00035 ASSERT_EQ(v.getType(),"string");
00036 }
00037
00041 TEST(DDValueTest, doubleTest) {
00042
00043 Value v(0.0);
00044 ASSERT_EQ(0.0,v.toDouble());
00045 ASSERT_EQ(v.getType(),"double");
00046 v = Value(-1.0);
00047 ASSERT_EQ(-1.0,v.toDouble());
00048 ASSERT_EQ(v.getType(),"double");
00049 v = Value((double)INT32_MAX);
00050 ASSERT_EQ((double)INT32_MAX,v.toDouble());
00051 ASSERT_EQ(v.getType(),"double");
00052 v = Value((double)INT32_MIN);
00053 ASSERT_EQ((double)INT32_MIN,v.toDouble());
00054 ASSERT_EQ(v.getType(),"double");
00055 v = Value(DBL_MAX);
00056 ASSERT_EQ(DBL_MAX,v.toDouble());
00057 ASSERT_EQ(v.getType(),"double");
00058 v = Value(DBL_MIN);
00059 ASSERT_EQ(DBL_MIN,v.toDouble());
00060 ASSERT_EQ(v.getType(),"double");
00061 v = Value(-DBL_MAX);
00062 ASSERT_EQ(-DBL_MAX,v.toDouble());
00063 ASSERT_EQ(v.getType(),"double");
00064
00065 double f = 1.0;
00066 v = Value((int)f);
00067 ASSERT_EQ(f,v.toDouble());
00068 ASSERT_EQ(v.getType(),"int");
00069 v = Value((int)(f + 0.1));
00070 ASSERT_NE(f + 0.1,v.toDouble());
00071 ASSERT_EQ(v.getType(),"int");
00072 v = Value((bool)f);
00073 ASSERT_EQ(f,v.toDouble());
00074 ASSERT_EQ(v.getType(),"bool");
00075 stringstream str; str << f;
00076 v = Value(str.str());
00077 ASSERT_EQ(f,v.toDouble());
00078 ASSERT_EQ(v.getType(),"string");
00079 str << ".000";
00080 v = Value(str.str());
00081 ASSERT_EQ(f,v.toDouble());
00082 ASSERT_EQ(v.getType(),"string");
00083 }
00084
00088 TEST(DDValueTest, boolTest) {
00089
00090 Value v(false);
00091 ASSERT_EQ(false,v.toBool());
00092 ASSERT_EQ(v.getType(),"bool");
00093 v = Value(true);
00094 ASSERT_EQ(true,v.toBool());
00095 ASSERT_EQ(v.getType(),"bool");
00096
00097 v = Value(1);
00098 ASSERT_EQ(true,v.toBool());
00099 ASSERT_EQ(v.getType(),"int");
00100 v = Value(0);
00101 ASSERT_EQ(false,v.toBool());
00102 ASSERT_EQ(v.getType(),"int");
00103 v = Value(2);
00104 ASSERT_EQ(true,v.toBool());
00105 ASSERT_EQ(v.getType(),"int");
00106 v = Value(-1);
00107 ASSERT_EQ(false,v.toBool());
00108 ASSERT_EQ(v.getType(),"int");
00109 v = Value(1.0);
00110 ASSERT_EQ(true,v.toBool());
00111 ASSERT_EQ(v.getType(),"double");
00112 v = Value(0.0);
00113 ASSERT_EQ(false,v.toBool());
00114 ASSERT_EQ(v.getType(),"double");
00115 v = Value(2.0);
00116 ASSERT_EQ(true,v.toBool());
00117 ASSERT_EQ(v.getType(),"double");
00118 v = Value(-1.0);
00119 ASSERT_EQ(false,v.toBool());
00120 ASSERT_EQ(v.getType(),"double");
00121 v = Value("true");
00122 ASSERT_EQ(true,v.toBool());
00123 ASSERT_EQ(v.getType(),"string");
00124 v = Value("false");
00125 ASSERT_EQ(false,v.toBool());
00126 ASSERT_EQ(v.getType(),"string");
00127 v = Value("not a bool");
00128 ASSERT_EQ(false,v.toBool());
00129 ASSERT_EQ(v.getType(),"string");
00130 v = Value("");
00131 ASSERT_EQ(false,v.toBool());
00132 ASSERT_EQ(v.getType(),"string");
00133 }
00134
00138 TEST(DDValueTest, stringTest) {
00139
00140 Value v("normal");
00141 ASSERT_EQ("normal",v.toString());
00142 ASSERT_EQ(v.getType(),"string");
00143 v = Value("\000");
00144 ASSERT_EQ("\000",v.toString());
00145 ASSERT_EQ(v.getType(),"string");
00146 v = Value("");
00147 ASSERT_EQ("",v.toString());
00148 ASSERT_EQ(v.getType(),"string");
00149 string s("How long can I make this string go on for? Well, You would be surprised! I can make it really long, but I won't.");
00150 v = Value(s);
00151 ASSERT_EQ(s,v.toString());
00152 ASSERT_EQ(v.getType(),"string");
00153
00154 v = Value(1);
00155 ASSERT_EQ("1",v.toString());
00156 ASSERT_EQ(v.getType(),"int");
00157 v = Value(-1);
00158 ASSERT_EQ("-1",v.toString());
00159 ASSERT_EQ(v.getType(),"int");
00160 v = Value(1.);
00161 ASSERT_EQ("1",v.toString());
00162 ASSERT_EQ(v.getType(),"double");
00163 v = Value(-1.);
00164 ASSERT_EQ("-1",v.toString());
00165 ASSERT_EQ(v.getType(),"double");
00166 v = Value(1.1);
00167 ASSERT_EQ("1.1",v.toString());
00168 ASSERT_EQ(v.getType(),"double");
00169 v = Value(-1.1);
00170 ASSERT_EQ("-1.1",v.toString());
00171 ASSERT_EQ(v.getType(),"double");
00172 v = Value(true);
00173 ASSERT_EQ("true",v.toString());
00174 ASSERT_EQ(v.getType(),"bool");
00175 v = Value(false);
00176 ASSERT_EQ("false",v.toString());
00177 ASSERT_EQ(v.getType(),"bool");
00178 }
00179 }
00180
00181
00182 int main(int argc, char** argv) {
00183 testing::InitGoogleTest(&argc, argv);
00184
00185 srand((unsigned int)random());
00186
00187 return RUN_ALL_TESTS();
00188 }