30 #include <gtest/gtest.h> 39 timeval temp_time_struct;
40 gettimeofday(&temp_time_struct,NULL);
41 srand(temp_time_struct.tv_usec);
44 void generate_rand_vectors(
double scale, uint64_t runs, std::vector<double>& xvalues, std::vector<double>& yvalues, std::vector<double>&zvalues)
47 for ( uint64_t i = 0; i < runs ; i++ )
49 xvalues[i] = 1.0 * ((double) rand() - (double)RAND_MAX /2.0) /(double)RAND_MAX;
50 yvalues[i] = 1.0 * ((double) rand() - (double)RAND_MAX /2.0) /(double)RAND_MAX;
51 zvalues[i] = 1.0 * ((double) rand() - (double)RAND_MAX /2.0) /(double)RAND_MAX;
55 TEST(MultiChannelMeanFilterDouble, ConfirmIdentityNRows)
62 EXPECT_TRUE(filter->
configure(rows,
"MultiChannelMeanFilterDouble5"));
64 double input1[] = {1,2,3,4,5};
65 double input1a[] = {1,2,3,4,5};
66 std::vector<double> v1 (input1, input1 +
sizeof(input1) /
sizeof(
double));
67 std::vector<double> v1a (input1a, input1a +
sizeof(input1a) /
sizeof(
double));
70 for (int32_t i =0; i < rows*10; i++)
72 EXPECT_TRUE(filter->
update(v1, v1a));
74 for (
int i = 1; i < length; i++)
76 EXPECT_NEAR(v1[i], v1a[i], epsilon);
81 TEST(MultiChannelMeanFilterDouble, ThreeRows)
88 EXPECT_TRUE(filter->
configure(rows,
"MultiChannelMeanFilterDouble5"));
90 double input1[] = {0,1,2,3,4};
91 std::vector<double> v1 (input1, input1 +
sizeof(input1) /
sizeof(
double));
92 double input2[] = {1,2,3,4,5};
93 std::vector<double> v2 (input2, input2 +
sizeof(input2) /
sizeof(
double));
94 double input3[] = {2,3,4,5,6};
95 std::vector<double> v3 (input3, input3 +
sizeof(input3) /
sizeof(
double));
96 double input1a[] = {1,2,3,4,5};
97 std::vector<double> v1a (input1a, input1a +
sizeof(input1a) /
sizeof(
double));
100 EXPECT_TRUE(filter->
update(v1, v1a));
101 EXPECT_TRUE(filter->
update(v2, v1a));
102 EXPECT_TRUE(filter->
update(v3, v1a));
104 for (
int i = 1; i < length; i++)
106 EXPECT_NEAR(v2[i], v1a[i], epsilon);
111 TEST(MeanFilterDouble, ConfirmIdentityNRows)
118 EXPECT_TRUE(filter->
configure(
"MeanFilterDouble5"));
124 for (int32_t i =0; i < rows*10; i++)
126 EXPECT_TRUE(filter->
update(input, output));
128 for (
int i = 1; i < length; i++)
130 EXPECT_NEAR(input, output, epsilon);
135 TEST(MeanFilterDouble, ThreeRows)
140 EXPECT_TRUE(filter->
configure(
"MeanFilterDouble5"));
148 EXPECT_TRUE(filter->
update(input1, output));
149 EXPECT_NEAR(input1, output, epsilon);
150 EXPECT_TRUE(filter->
update(input2, output));
151 EXPECT_NEAR((input1+ input2)/2.0, output, epsilon);
152 EXPECT_TRUE(filter->
update(input3, output));
153 EXPECT_NEAR((input1 + input2 + input3)/3, output, epsilon);
159 int main(
int argc,
char **argv){
160 testing::InitGoogleTest(&argc, argv);
162 return RUN_ALL_TESTS();
bool configure(const std::string ¶m_name, ros::NodeHandle node_handle=ros::NodeHandle())
Configure the filter from the parameter server.
virtual bool update(const std::vector< T > &data_in, std::vector< T > &data_out)=0
Update the filter and return the data seperately.
A Base filter class to provide a standard interface for all filters.
bool configure(unsigned int number_of_channels, const std::string ¶m_name, ros::NodeHandle node_handle=ros::NodeHandle())
Configure the filter from the parameter server.
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
virtual bool update(const T &data_in, T &data_out)=0
Update the filter and return the data seperately This is an inefficient way to do this and can be ove...
TEST(MultiChannelMeanFilterDouble, ConfirmIdentityNRows)
A mean filter which works on double arrays.
void generate_rand_vectors(double scale, uint64_t runs, std::vector< double > &xvalues, std::vector< double > &yvalues, std::vector< double > &zvalues)
A mean filter which works on doubles.
int main(int argc, char **argv)