[Positioning] InputLogCSV: Handle calib. requests

InputLogCSV now handles calibration requests.

TestUtil:
- Request list become a Request pointer list (to handle polymorphism).
- Add a ReferencePoint list.
- Reorganise create_test_csv_file().
This commit is contained in:
Matteo Cypriani 2010-02-25 13:51:35 +01:00
parent e70a255083
commit 49ba6ab320
5 changed files with 108 additions and 98 deletions

View File

@ -1,6 +1,8 @@
#include "inputlogcsv.hh"
#include "posexcept.hh"
#include "mobile.hh"
#include "calibrationrequest.hh"
#include "referencepoint.hh"
#include <sstream>
@ -56,8 +58,20 @@ const string InputLogCSV::request_to_csv(const Request &request) const
ostringstream csv_line ;
if (request.get_mobile() != NULL)
csv_line << request.get_mobile()->get_mac_addr() ;
csv_line << ';' << request.get_timestamp().get_timestamp_ms() ;
csv_line << ";0;0;0;0" ; // TODO: handle calibration request
csv_line << ';' << request.get_timestamp().get_timestamp_ms() << ';' ;
const CalibrationRequest *calibration_request =
dynamic_cast<const CalibrationRequest*>(&request) ;
if (calibration_request == NULL)
csv_line << "0;0;0;0" ;
else
{
csv_line
<< calibration_request->get_reference_point()->get_x() << ';'
<< calibration_request->get_reference_point()->get_y() << ';'
<< calibration_request->get_reference_point()->get_z() << ';'
<< static_cast<int>(calibration_request->get_direction()) ;
}
const unordered_map<string, Measurement> &measurements =
request.get_measurements() ;

View File

@ -68,7 +68,7 @@ public:
TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(),
TestUtil::mobiles[0].get_mac_addr()) ;
TS_ASSERT_EQUALS(request1.get_timestamp(),
TestUtil::requests[0].get_timestamp()) ;
TestUtil::requests.at(0)->get_timestamp()) ;
for (std::vector<AccessPoint>::const_iterator i = TestUtil::aps.begin() ;
i != TestUtil::aps.end() ; ++i)
@ -77,7 +77,7 @@ public:
measurement_it1 =
request1.get_measurements().find(i->get_mac_addr()) ;
TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ;
TS_ASSERT_EQUALS(TestUtil::requests[0].get_measurements().
TS_ASSERT_EQUALS(TestUtil::requests.at(0)->get_measurements().
at(i->get_mac_addr()).get_ss_list(),
measurement_it1->second.get_ss_list()) ;
}
@ -91,7 +91,7 @@ public:
TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(),
TestUtil::mobiles[1].get_mac_addr()) ;
TS_ASSERT_EQUALS(request1.get_timestamp(),
TestUtil::requests[1].get_timestamp()) ;
TestUtil::requests.at(1)->get_timestamp()) ;
for (std::vector<AccessPoint>::const_iterator i = TestUtil::aps.begin() ;
i != TestUtil::aps.end() ; ++i)
@ -100,7 +100,7 @@ public:
measurement_it1 =
request1.get_measurements().find(i->get_mac_addr()) ;
TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ;
TS_ASSERT_EQUALS(TestUtil::requests[1].get_measurements().
TS_ASSERT_EQUALS(TestUtil::requests.at(1)->get_measurements().
at(i->get_mac_addr()).get_ss_list(),
measurement_it1->second.get_ss_list()) ;
}
@ -114,7 +114,7 @@ public:
TS_ASSERT_EQUALS(request1.get_mobile()->get_mac_addr(),
TestUtil::mobiles[0].get_mac_addr()) ;
TS_ASSERT_EQUALS(request1.get_timestamp(),
TestUtil::requests[2].get_timestamp()) ;
TestUtil::requests.at(2)->get_timestamp()) ;
for (std::vector<AccessPoint>::const_iterator i = TestUtil::aps.begin() ;
i != TestUtil::aps.end() ; ++i)
@ -123,7 +123,7 @@ public:
measurement_it1 =
request1.get_measurements().find(i->get_mac_addr()) ;
TS_ASSERT_DIFFERS(request1.get_measurements().end(), measurement_it1) ;
TS_ASSERT_EQUALS(TestUtil::requests[2].get_measurements().
TS_ASSERT_EQUALS(TestUtil::requests.at(2)->get_measurements().
at(i->get_mac_addr()).get_ss_list(),
measurement_it1->second.get_ss_list()) ;
}

View File

@ -56,10 +56,10 @@ public:
// instance in order to be able to close the file (and therefore
// flush the stream) before to read it with InputCSV
InputLogCSV *inputlogcsv1 = new InputLogCSV(log_file_name) ;
for (std::vector<Request>::const_iterator i =
for (std::vector<Request*>::const_iterator i =
TestUtil::requests.begin() ;
i != TestUtil::requests.end() ; ++i)
inputlogcsv1->log_request(*i) ;
inputlogcsv1->log_request(**i) ;
delete inputlogcsv1 ; // Close the output file
// Even if data is not in the same order, size of the two files
@ -69,17 +69,17 @@ public:
// Read the two files and compare to the reference Request list
InputCSV inputcsv_csv(csv_file_name) ;
InputCSV inputcsv_log(log_file_name) ;
for (std::vector<Request>::const_iterator i =
for (std::vector<Request*>::const_iterator i =
TestUtil::requests.begin() ;
i != TestUtil::requests.end() ; ++i)
{
Stock::clear() ;
Request request_csv = inputcsv_csv.get_next_request() ;
TS_ASSERT(TestUtil::request_equals(*i, request_csv)) ;
TS_ASSERT(TestUtil::request_equals(**i, request_csv)) ;
Stock::clear() ;
Request request_log = inputcsv_log.get_next_request() ;
TS_ASSERT(TestUtil::request_equals(*i, request_log)) ;
TS_ASSERT(TestUtil::request_equals(**i, request_log)) ;
}
TS_ASSERT(inputcsv_csv.eof()) ;

View File

@ -1,6 +1,8 @@
#include "testutil.hh"
#include <cxxtest/TestSuite.h>
#include "calibrationrequest.hh"
#include <fstream>
#include <sstream>
#include <sys/stat.h>
@ -10,13 +12,19 @@ using std::tr1::unordered_map ;
vector<AccessPoint> TestUtil::aps ;
vector<Mobile> TestUtil::mobiles ;
vector<Request> TestUtil::requests ;
vector<Request*> TestUtil::requests ;
vector<ReferencePoint> TestUtil::reference_points ;
void TestUtil::tear_down()
{
aps.clear() ;
mobiles.clear() ;
reference_points.clear() ;
for (vector<Request*>::const_iterator i = requests.begin() ;
i != requests.end() ; ++i)
delete *i ;
requests.clear() ;
}
@ -96,12 +104,22 @@ void TestUtil::set_up()
timestamps.push_back(Timestamp(1265120912345)) ;
// Create request list
requests.push_back(Request(&mobiles[0], timestamps[0],
measurements[0])) ;
requests.push_back(Request(&mobiles[1], timestamps[1],
measurements[1])) ;
requests.push_back(Request(&mobiles[0], timestamps[2],
measurements[2])) ;
requests.push_back(new Request(&mobiles[0], timestamps[0],
measurements[0])) ;
Request request2(&mobiles[1], timestamps[1], measurements[1]) ;
reference_points.push_back(ReferencePoint(3.2, 4.1, 3.4)) ;
requests.push_back(new CalibrationRequest(
request2, &reference_points.at(0),
Direction(2))) ;
CalibrationRequest *calibration_request =
dynamic_cast<CalibrationRequest*>(requests.at(1)) ;
if (calibration_request != NULL)
calibration_request->reference_point_backward_link() ;
requests.push_back(new Request(&mobiles[0], timestamps[2],
measurements[2])) ;
}
@ -143,65 +161,51 @@ create_test_csv_file(const string &file_name, bool with_spaces)
if (with_spaces)
line << "\n \n " ;
line << mobiles[0].get_mac_addr() ;
line << ';' ;
line << requests[0].get_timestamp().get_timestamp_ms() ;
line << ';' << requests.at(0)->get_timestamp().get_timestamp_ms() ;
line << ";0;0;0;0;" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[0].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[2].get_mac_addr() ;
line << ";" ;
line << requests[0].get_measurements().at(aps[2].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[0].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[0].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[1] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[0].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[1] ;
line << ';' << requests.at(0)->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[2].get_mac_addr() ;
line << ';' << requests.at(0)->get_measurements()
.at(aps[2].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << requests.at(0)->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[0].get_mac_addr() ;
line << ';' << requests.at(0)->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[1] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << requests.at(0)->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[1] ;
line << '\n' ;
csv_lines.push_back(line.str()) ;
line.str("") ;
line << mobiles[1].get_mac_addr() ;
line << ';' ;
line << requests[1].get_timestamp().get_timestamp_ms() ;
line << ";0;0;0;0;" ;
line << aps[2].get_mac_addr() ;
line << ";" ;
line << requests[1].get_measurements().at(aps[2].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[1].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[1].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[1].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[1] ;
line << ";" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[1].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[1] ;
CalibrationRequest *calibration_request =
dynamic_cast<CalibrationRequest*>(requests.at(1)) ;
assert(calibration_request) ;
line << ';' << calibration_request->get_timestamp().get_timestamp_ms() ;
line << ';' << reference_points.at(0).get_x() ;
line << ';' << reference_points.at(0).get_y() ;
line << ';' << reference_points.at(0).get_z() ;
line << ';' << static_cast<int>(calibration_request->get_direction()) ;
line << ';' << aps[2].get_mac_addr() ;
line << ';' << calibration_request->get_measurements()
.at(aps[2].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[0].get_mac_addr() ;
line << ';' << calibration_request->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << calibration_request->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << calibration_request->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[1] ;
line << ';' << aps[0].get_mac_addr() ;
line << ';' << calibration_request->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[1] ;
line << '\n' ;
if (with_spaces)
line << " \n\
@ -214,33 +218,23 @@ create_test_csv_file(const string &file_name, bool with_spaces)
if (with_spaces)
line << '\t' ;
line << mobiles[0].get_mac_addr() ;
line << ';' ;
line << requests[2].get_timestamp().get_timestamp_ms() ;
line << ';' << requests.at(2)->get_timestamp().get_timestamp_ms() ;
line << ";0;0;0;0;" ;
line << aps[2].get_mac_addr() ;
line << ";" ;
line << requests[2].get_measurements().at(aps[2].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[2].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[2].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[0] ;
line << ";" ;
line << aps[1].get_mac_addr() ;
line << ";" ;
line << requests[2].get_measurements().at(aps[1].get_mac_addr())
.get_ss_list()[1] ;
line << ";" ;
line << aps[0].get_mac_addr() ;
line << ";" ;
line << requests[2].get_measurements().at(aps[0].get_mac_addr())
.get_ss_list()[1] ;
line << ';' << requests.at(2)->get_measurements()
.at(aps[2].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << requests.at(2)->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[0].get_mac_addr() ;
line << ';' << requests.at(2)->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[0] ;
line << ';' << aps[1].get_mac_addr() ;
line << ';' << requests.at(2)->get_measurements()
.at(aps[1].get_mac_addr()).get_ss_list()[1] ;
line << ';' << aps[0].get_mac_addr() ;
line << ';' << requests.at(2)->get_measurements()
.at(aps[0].get_mac_addr()).get_ss_list()[1] ;
line << '\n' ;
if (with_spaces)
line << "\n\t\n" ;

View File

@ -5,6 +5,7 @@
#include "mobile.hh"
#include "request.hh"
#include "measurement.hh"
#include "referencepoint.hh"
#include <string>
#include <vector>
@ -15,7 +16,8 @@ class TestUtil
public:
static std::vector<AccessPoint> aps ;
static std::vector<Mobile> mobiles ;
static std::vector<Request> requests ;
static std::vector<Request*> requests ;
static std::vector<ReferencePoint> reference_points ;
static void set_up(void) ;
static void tear_down(void) ;