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 "gtest/gtest.h"
00031 #include "filters/filter_chain.h"
00032
00033
00034
00035 TEST(MultiChannelFilterChain, configuring){
00036 double epsilon = 1e-9;
00037 filters::MultiChannelFilterChain<double> chain("double");
00038
00039 EXPECT_TRUE(chain.configure(5, "MultiChannelMeanFilterDouble5"));
00040
00041 double input1[] = {1,2,3,4,5};
00042 double input1a[] = {9,9,9,9,9};
00043 std::vector<double> v1 (input1, input1 + sizeof(input1) / sizeof(double));
00044 std::vector<double> v1a (input1a, input1a + sizeof(input1a) / sizeof(double));
00045
00046
00047 EXPECT_TRUE(chain.update(v1, v1a));
00048
00049 chain.clear();
00050
00051 for (unsigned int i = 1; i < v1.size(); i++)
00052 {
00053 EXPECT_NEAR(input1[i], v1a[i], epsilon);
00054 }
00055 }
00056 TEST(FilterChain, configuring){
00057 double epsilon = 1e-9;
00058 filters::FilterChain<float> chain("float");
00059
00060 EXPECT_TRUE(chain.configure("MeanFilterFloat5"));
00061
00062 float v1 = 1;
00063 float v1a = 9;
00064
00065 EXPECT_TRUE(chain.update(v1, v1a));
00066
00067 chain.clear();
00068
00069 EXPECT_NEAR(v1, v1a, epsilon);
00070
00071 }
00072
00073 TEST(MultiChannelFilterChain, MisconfiguredNumberOfChannels){
00074 filters::MultiChannelFilterChain<double> chain("double");
00075
00076 EXPECT_TRUE(chain.configure(10, "MultiChannelMedianFilterDouble5"));
00077
00078
00079
00080 double input1[] = {1,2,3,4,5};
00081 double input1a[] = {1,2,3,4,5};
00082 std::vector<double> v1 (input1, input1 + sizeof(input1) / sizeof(double));
00083 std::vector<double> v1a (input1a, input1a + sizeof(input1a) / sizeof(double));
00084
00085
00086 EXPECT_FALSE(chain.update(v1, v1a));
00087
00088 chain.clear();
00089
00090 }
00091
00092 TEST(MultiChannelFilterChain, TwoFilters){
00093 double epsilon = 1e-9;
00094 filters::MultiChannelFilterChain<double> chain("double");
00095
00096 EXPECT_TRUE(chain.configure(5, "TwoFilters"));
00097
00098 double input1[] = {1,2,3,4,5};
00099 double input1a[] = {9,9,9,9,9};
00100 std::vector<double> v1 (input1, input1 + sizeof(input1) / sizeof(double));
00101 std::vector<double> v1a (input1a, input1a + sizeof(input1a) / sizeof(double));
00102
00103
00104 EXPECT_TRUE(chain.update(v1, v1a));
00105
00106 chain.clear();
00107
00108 for (unsigned int i = 1; i < v1.size(); i++)
00109 {
00110 EXPECT_NEAR(input1[i], v1a[i], epsilon);
00111 }
00112 }
00113
00114
00115 TEST(MultiChannelFilterChain, TransferFunction){
00116 double epsilon = 1e-4;
00117
00118 filters::MultiChannelFilterChain<double> chain("double");
00119 EXPECT_TRUE(chain.configure(3, "TransferFunction" ));
00120
00121 std::vector<double> in1,in2,in3,in4,in5,in6,in7;
00122 std::vector<double> out1;
00123
00124 in1.push_back(10.0);
00125 in1.push_back(10.0);
00126 in1.push_back(10.0);
00127
00128 in2.push_back(70.0);
00129 in2.push_back(30.0);
00130 in2.push_back(8.0);
00131
00132 in3.push_back(-1.0);
00133 in3.push_back(5.0);
00134 in3.push_back(22.0);
00135
00136 in4.push_back(44.0);
00137 in4.push_back(23.0);
00138 in4.push_back(8.0);
00139
00140 in5.push_back(10.0);
00141 in5.push_back(10.0);
00142 in5.push_back(10.0);
00143
00144 in6.push_back(5.0);
00145 in6.push_back(-1.0);
00146 in6.push_back(5.0);
00147
00148 in7.push_back(6.0);
00149 in7.push_back(-30.0);
00150 in7.push_back(2.0);
00151
00152 out1.push_back(17.1112);
00153 out1.push_back(9.0285);
00154 out1.push_back(8.3102);
00155 EXPECT_TRUE(chain.update(in1, in1));
00156 EXPECT_TRUE(chain.update(in2, in2));
00157 EXPECT_TRUE(chain.update(in3, in3));
00158 EXPECT_TRUE(chain.update(in4, in4));
00159 EXPECT_TRUE(chain.update(in5, in5));
00160 EXPECT_TRUE(chain.update(in6, in6));
00161 EXPECT_TRUE(chain.update(in7, in7));
00162
00163 chain.clear();
00164
00165 for(unsigned int i=0; i<out1.size(); i++)
00166 {
00167 EXPECT_NEAR(out1[i], in7[i], epsilon);
00168 }
00169 }
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187 TEST(FilterChain, ReconfiguringChain){
00188 filters::FilterChain<int> chain("int");
00189
00190 int v1 = 1;
00191 int v1a = 9;
00192
00193 EXPECT_TRUE(chain.configure("OneIncrements"));
00194 EXPECT_TRUE(chain.update(v1, v1a));
00195 EXPECT_EQ(2, v1a);
00196 chain.clear();
00197
00198 EXPECT_TRUE(chain.configure("TwoIncrements"));
00199 EXPECT_TRUE(chain.update(v1, v1a));
00200 EXPECT_EQ(3, v1a);
00201 chain.clear();
00202
00203 }
00204
00205 TEST(FilterChain, ThreeIncrementChains){
00206 filters::FilterChain<int> chain("int");
00207 int v1 = 1;
00208 int v1a = 9;
00209
00210 EXPECT_TRUE(chain.configure("ThreeIncrements"));
00211 EXPECT_TRUE(chain.update(v1, v1a));
00212 EXPECT_EQ(4, v1a);
00213 chain.clear();
00214
00215 }
00216
00217 TEST(FilterChain, TenIncrementChains){
00218 filters::FilterChain<int> chain("int");
00219 int v1 = 1;
00220 int v1a = 9;
00221
00222 EXPECT_TRUE(chain.configure("TenIncrements"));
00223 EXPECT_TRUE(chain.update(v1, v1a));
00224 EXPECT_EQ(11, v1a);
00225 chain.clear();
00226
00227 }
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 TEST(MultiChannelFilterChain, TenMultiChannelIncrementChains){
00260 filters::MultiChannelFilterChain<int> chain("int");
00261 std::vector<int> v1;
00262 v1.push_back(1);
00263 v1.push_back(1);
00264 v1.push_back(1);
00265 std::vector<int> v1a = v1;
00266
00267 EXPECT_TRUE(chain.configure(3, "TenMultiChannelIncrements"));
00268 EXPECT_TRUE(chain.update(v1, v1a));
00269 for (unsigned int i = 0; i < 3; i++)
00270 {
00271 EXPECT_EQ(11, v1a[i]);
00272 }
00273 chain.clear();
00274
00275 }
00276
00277
00278 int main(int argc, char **argv){
00279 testing::InitGoogleTest(&argc, argv);
00280 ros::init(argc, argv, "test_chain");
00281 return RUN_ALL_TESTS();
00282 }