This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/tests/sensors/radio/TestWiFiGrid.cpp
kazu 4f511d907e some fixes [multithreading,..]
needed interface changes [new options]
logger for android
wifi-ap-optimization
new test-cases
2016-09-28 12:19:14 +02:00

133 lines
4.1 KiB
C++

#ifdef WITH_TESTS
#include "../../Tests.h"
#include "../../../sensors/radio/model/WiFiModelLogDist.h"
#include "../../../sensors/radio/WiFiGridEstimator.h"
#include "../../../sensors/radio/WiFiMeasurements.h"
#include "../../../sensors/radio/WiFiProbability.h"
#include "../../../sensors/radio/WiFiProbabilityFree.h"
#include "../../../sensors/radio/WiFiProbabilityGrid.h"
#include "../../../grid/Grid.h"
// ensure the class-name is unique!
struct TestNode190231 : public GridNode, public GridPoint, public WiFiGridNode<10> {
TestNode190231(const int x_cm, const int y_cm, const int z_cm) : GridPoint(x_cm, y_cm, z_cm) {;}
};
/** test the RSSI storage. [we use only a single byte due to memory constraints, but allow 0.25 dB steps!] */
TEST(WiFiGridNodeAP, rssi) {
for (float rssi = -40; rssi > -103; rssi -= 0.1f) {
WiFiGridNodeAP ap(0, rssi);
ASSERT_NEAR(rssi, ap.getRSSI(), 0.2f); // max 0.2 dB variation from what it should be
}
}
/** test the signal-strength limit: [-40: -103] */
TEST(WiFiGridNodeAP, rssiLimits) {
// limit 1
WiFiGridNodeAP ap1(0, -10);
ASSERT_EQ(-40, ap1.getRSSI());
// limit 2
WiFiGridNodeAP ap2(0, -200);
ASSERT_EQ(-103, ap2.getRSSI());
}
TEST(WiFiGridNode, ctor) {
// ensure nodes are correctly empty initialized
WiFiGridNode<10> node;
ASSERT_EQ(0, node.getNumVisibleAPs());
TestNode190231 node2(0,0,0);
ASSERT_EQ(0, node2.getNumVisibleAPs());
}
// gnuplot debug dumps
TEST(WiFiGridModelLogDist, create) {
int gs = 20;
Grid<TestNode190231> grid(gs);
for (int x = 0; x < 2000; x += gs) {
for (int y = 0; y < 2000; y += gs) {
grid.add(TestNode190231(x,y,0));
}
}
std::cout << "GridNodeSize: " << sizeof(TestNode190231) << std::endl;
const MACAddress ap1 = MACAddress("00:00:00:00:00:01");
const MACAddress ap2 = MACAddress("00:00:00:00:00:02");
const MACAddress ap3 = MACAddress("00:00:00:00:00:03");
const MACAddress ap4 = MACAddress("00:00:00:00:00:04");
// LocatedAccessPoint ap1, Point3( 0, 0,0));
// LocatedAccessPoint ap2("00:00:00:00:00:02", Point3(20, 0,0));
// LocatedAccessPoint ap3("00:00:00:00:00:03", Point3( 0,20,0));
// LocatedAccessPoint ap4("00:00:00:00:00:04", Point3(20,20,0));
// std::vector<LocatedAccessPoint> aps = {ap1, ap2, ap3, ap4};
// model not populated -> must be empty
ASSERT_EQ(0, grid[0].getNumVisibleAPs());
WiFiModelLogDist model;
model.addAP(ap1, WiFiModelLogDist::APEntry( Point3(0,0,0), -40, 1.5));
model.addAP(ap2, WiFiModelLogDist::APEntry( Point3(20,0,0), -40, 1.5));
model.addAP(ap3, WiFiModelLogDist::APEntry( Point3(0,20,0), -40, 1.5));
model.addAP(ap4, WiFiModelLogDist::APEntry( Point3(20,20,0), -40, 1.5));
// std::vector<AccessPoint> aps = {
// AccessPoint(ap1), AccessPoint(ap2), AccessPoint(ap3), AccessPoint(ap4)
// };
WiFiGridEstimator::estimate(grid, model, 0);
ASSERT_EQ(4, grid[0].getNumVisibleAPs()); // 4 APs visible at this node
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:01")); // non-zero RSSI
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:02")); // non-zero RSSI
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:03")); // non-zero RSSI
ASSERT_GT(0, grid[0].getRSSI("00:00:00:00:00:04")); // non-zero RSSI
ASSERT_EQ(0, grid[0].getRSSI("00:00:00:00:00:05")); // unknown AP -> 0 RSSI
WiFiGridEstimator::dump(grid, "00:00:00:00:00:01", "/tmp/ap1.gp");
WiFiGridEstimator::dump(grid, "00:00:00:00:00:02", "/tmp/ap2.gp");
WiFiGridEstimator::dump(grid, "00:00:00:00:00:03", "/tmp/ap3.gp");
WiFiGridEstimator::dump(grid, "00:00:00:00:00:04", "/tmp/ap4.gp");
Timestamp ts = Timestamp::fromMS(10);
WiFiMeasurements obs;
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:01"), -55, ts));
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:02"), -55, ts));
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:03"), -55, ts));
obs.entries.push_back(WiFiMeasurement(MACAddress("00:00:00:00:00:04"), -55, ts));
WiFiObserverGrid<TestNode190231> observer(5.0f);
const TestNode190231& gn = grid.getNodeFor(GridPoint(1000,1000,0));
const float p = observer.getProbability(gn, ts, obs);
observer.dump(grid, ts, obs, "/tmp/eval1.gp");
std::cout << "see: /tmp/eval1.gp" << std::endl;
int i = 0; (void) i;
}
#endif