#ifdef WITH_TESTS #include "../../Tests.h" #include "../../../sensors/radio/WiFiGridEstimator.h" #include "../../../sensors/radio/model/WiFiModelLogDist.h" #include "../../../sensors/radio/WiFiObservation.h" #include "../../../grid/Grid.h" struct MyNode : GridNode, GridPoint, WiFiGridNode<10> { MyNode(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(WiFiGridModelLogDist, create) { int gs = 20; Grid grid(gs); for (int x = 0; x < 2000; x += gs) { for (int y = 0; y < 2000; y += gs) { grid.add(MyNode(x,y,0)); } } std::cout << "GridNodeSize: " << sizeof(MyNode) << std::endl; LocatedAccessPoint ap1("00:00:00:00:00:01", 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 aps = {ap1, ap2, ap3, ap4}; ASSERT_EQ(0, grid[0].getNumVisibleAPs()); WiFiModelLogDist model(-40, 1.5); WiFiGridEstimator::estimate(grid, model, aps); 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"); WiFiObservation obs; obs.entries.push_back(WiFiObservationEntry(MACAddress("00:00:00:00:00:01"), -55)); obs.entries.push_back(WiFiObservationEntry(MACAddress("00:00:00:00:00:02"), -55)); obs.entries.push_back(WiFiObservationEntry(MACAddress("00:00:00:00:00:03"), -55)); obs.entries.push_back(WiFiObservationEntry(MACAddress("00:00:00:00:00:04"), -55)); WiFiObserver observer(5.0f); const MyNode& gn = grid.getNodeFor(GridPoint(1000,1000,0)); const float p = observer.getProbability(gn, obs, 0); observer.dump(grid, obs, "/tmp/eval1.gp"); int i = 0; (void) i; } #endif