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
00031
00032
00033
00034
00035
00036 #include <gtest/gtest.h>
00037
00038 #include "settlerlib/sorted_deque.h"
00039
00040 using namespace std;
00041 using namespace settlerlib;
00042
00043 struct Header
00044 {
00045 ros::Time stamp ;
00046 } ;
00047
00048
00049 struct Msg
00050 {
00051 Header header ;
00052 int data ;
00053 } ;
00054
00055 void fillEasy(SortedDeque<Msg>& sd, unsigned int start, unsigned int end)
00056 {
00057 for (unsigned int i=start; i < end; i++)
00058 {
00059 Msg msg ;
00060 msg.data = i ;
00061 msg.header.stamp.fromSec(i*10) ;
00062
00063 sd.add(msg) ;
00064 }
00065 }
00066
00067 TEST(SortedDeque, easyInterval)
00068 {
00069 SortedDeque<Msg> sd;
00070 sd.setMaxSize(10);
00071
00072 fillEasy(sd, 0, 5);
00073
00074 vector<Msg> interval_data = sd.getInterval(ros::Time().fromSec(5), ros::Time().fromSec(35)) ;
00075
00076 EXPECT_EQ(interval_data.size(), (unsigned int) 3) ;
00077 EXPECT_EQ(interval_data[0].data, 1) ;
00078 EXPECT_EQ(interval_data[1].data, 2) ;
00079 EXPECT_EQ(interval_data[2].data, 3) ;
00080
00081
00082 interval_data = sd.getInterval(ros::Time().fromSec(55), ros::Time().fromSec(65)) ;
00083 EXPECT_EQ(interval_data.size(), (unsigned int) 0) ;
00084
00085
00086 fillEasy(sd, 5, 20) ;
00087 interval_data = sd.getInterval(ros::Time().fromSec(5), ros::Time().fromSec(35)) ;
00088 EXPECT_EQ(interval_data.size(), (unsigned int) 0) ;
00089 }
00090
00091 TEST(SortedDeque, easySurroundingInterval)
00092 {
00093 SortedDeque<Msg> cache;
00094 cache.setMaxSize(10);
00095 fillEasy(cache, 1, 6);
00096
00097 vector<Msg> interval_data;
00098 interval_data = cache.getSurroundingInterval(ros::Time(15,0), ros::Time(35,0)) ;
00099 EXPECT_EQ(interval_data.size(), (unsigned int) 4);
00100 EXPECT_EQ(interval_data[0].data, 1);
00101 EXPECT_EQ(interval_data[1].data, 2);
00102 EXPECT_EQ(interval_data[2].data, 3);
00103 EXPECT_EQ(interval_data[3].data, 4);
00104
00105 interval_data = cache.getSurroundingInterval(ros::Time(0,0), ros::Time(35,0)) ;
00106 EXPECT_EQ(interval_data.size(), (unsigned int) 4);
00107 EXPECT_EQ(interval_data[0].data, 1);
00108
00109 interval_data = cache.getSurroundingInterval(ros::Time(35,0), ros::Time(35,0)) ;
00110 EXPECT_EQ(interval_data.size(), (unsigned int) 2);
00111 EXPECT_EQ(interval_data[0].data, 3);
00112 EXPECT_EQ(interval_data[1].data, 4);
00113
00114 interval_data = cache.getSurroundingInterval(ros::Time(55,0), ros::Time(55,0)) ;
00115 EXPECT_EQ(interval_data.size(), (unsigned int) 1);
00116 EXPECT_EQ(interval_data[0].data, 5);
00117 }
00118
00119 Msg buildMsg(double time, int data)
00120 {
00121 Msg msg;
00122 msg.data = data;
00123 msg.header.stamp.fromSec(time);
00124 return msg;
00125 }
00126
00127 TEST(SortedDeque, easyUnsorted)
00128 {
00129 SortedDeque<Msg> cache;
00130 cache.setMaxSize(10);
00131
00132 cache.add(buildMsg(10.0, 1)) ;
00133 cache.add(buildMsg(30.0, 3)) ;
00134 cache.add(buildMsg(70.0, 7)) ;
00135 cache.add(buildMsg( 5.0, 0)) ;
00136 cache.add(buildMsg(20.0, 2)) ;
00137
00138 vector<Msg> interval_data = cache.getInterval(ros::Time().fromSec(3), ros::Time().fromSec(15)) ;
00139
00140 EXPECT_EQ(interval_data.size(), (unsigned int) 2) ;
00141 EXPECT_EQ(interval_data[0].data, 0) ;
00142 EXPECT_EQ(interval_data[1].data, 1) ;
00143
00144
00145 interval_data = cache.getInterval(ros::Time().fromSec(0), ros::Time().fromSec(80)) ;
00146 EXPECT_EQ(interval_data.size(), (unsigned int) 5) ;
00147 EXPECT_EQ(interval_data[0].data, 0) ;
00148 EXPECT_EQ(interval_data[1].data, 1) ;
00149 EXPECT_EQ(interval_data[2].data, 2) ;
00150 EXPECT_EQ(interval_data[3].data, 3) ;
00151 EXPECT_EQ(interval_data[4].data, 7) ;
00152 }
00153
00154 TEST(SortedDeque, easyElemBeforeAfter)
00155 {
00156 SortedDeque<Msg> cache;
00157 cache.setMaxSize(10);
00158 Msg elem;
00159
00160 fillEasy(cache, 5, 10) ;
00161
00162 bool result;
00163 result = cache.getElemAfterTime( ros::Time().fromSec(85.0), elem);
00164
00165 ASSERT_TRUE(result);
00166 EXPECT_EQ(elem.data, 9);
00167
00168 result = cache.getElemBeforeTime( ros::Time().fromSec(85.0), elem);
00169 ASSERT_TRUE(result) ;
00170 EXPECT_EQ(elem.data, 8) ;
00171
00172 result = cache.getElemBeforeTime( ros::Time().fromSec(45.0), elem);
00173 EXPECT_FALSE(result) ;
00174 }
00175
00176 TEST(SortedDeque, easyRemoval)
00177 {
00178 SortedDeque<Msg> sd;
00179 sd.setMaxSize(20);
00180
00181 fillEasy(sd, 1, 10);
00182
00183 vector<Msg> interval_data;
00184 interval_data = sd.getInterval(ros::Time().fromSec(5), ros::Time().fromSec(105)) ;
00185 EXPECT_EQ(interval_data.size(), (unsigned int) 9) ;
00186
00187 sd.removeAllBeforeTime(ros::Time().fromSec(35));
00188 interval_data = sd.getInterval(ros::Time().fromSec(5), ros::Time().fromSec(105)) ;
00189 EXPECT_EQ(interval_data.size(), (unsigned int) 6);
00190 EXPECT_EQ(interval_data[0].data, 4) ;
00191 EXPECT_EQ(interval_data[1].data, 5) ;
00192 EXPECT_EQ(interval_data[2].data, 6) ;
00193 EXPECT_EQ(interval_data[3].data, 7) ;
00194 EXPECT_EQ(interval_data[4].data, 8) ;
00195 EXPECT_EQ(interval_data[5].data, 9) ;
00196 }
00197
00198 TEST(SortedDeque, easyClosest)
00199 {
00200 SortedDeque<Msg> sd;
00201 sd.setMaxSize(20);
00202
00203 fillEasy(sd, 1, 10);
00204
00205 bool found;
00206 Msg elem;
00207
00208 found = sd.getClosestElem(ros::Time().fromSec(5), elem) ;
00209 EXPECT_TRUE(found) ;
00210 EXPECT_EQ(elem.data, 1) ;
00211
00212 found = sd.getClosestElem(ros::Time().fromSec(20), elem) ;
00213 EXPECT_TRUE(found) ;
00214 EXPECT_EQ(elem.data, 2) ;
00215 }
00216
00217
00218
00219 TEST(SortedDeque, easyPointer)
00220 {
00221 SortedDeque<boost::shared_ptr<Msg> > sd(SortedDeque<boost::shared_ptr<Msg> >::getPtrStamp);
00222 sd.setMaxSize(20);
00223
00224 boost::shared_ptr<Msg> msg_ptr(new Msg);
00225 msg_ptr->header.stamp = ros::Time(10,0);
00226 sd.add(msg_ptr);
00227
00228 msg_ptr.reset(new Msg);
00229 msg_ptr->header.stamp = ros::Time(20,0);
00230 sd.add(msg_ptr);
00231
00232 msg_ptr.reset(new Msg);
00233 msg_ptr->header.stamp = ros::Time(30,0);
00234 sd.add(msg_ptr);
00235
00236
00237 boost::shared_ptr<Msg> found_elem;
00238 bool found;
00239 found = sd.getClosestElem(ros::Time().fromSec(22), found_elem);
00240 ASSERT_TRUE(found);
00241 EXPECT_EQ(found_elem->header.stamp, ros::Time(20,0));
00242 }
00243
00244
00245
00246 int main(int argc, char **argv){
00247 testing::InitGoogleTest(&argc, argv);
00248 return RUN_ALL_TESTS();
00249 }