#ifdef WITH_TESTS #include "../Tests.h" #include "../../floorplan/v2/Floorplan.h" #include TEST(NewFloorplan, saveAndLoad) { std::string xml; float f1AtHeight = 1.1f; float f2AtHeight = 3.3f; Floorplan::AccessPoint ap0("ap0", "11:11:11:22:22:22", Point3(1,1,1)); Floorplan::AccessPoint ap1("ap1", "01:23:45:67:89:ab", Point3(1,2,3)); Floorplan::AccessPoint ap2("ap2", "22:33:44:55:66:77", Point3(4,5,6)); Floorplan::Beacon b0("b0", "22:22:22:11:11:11", Point3(2,2,2)); Floorplan::Beacon b1("b1", "aa:bb:cc:dd:ee:ff", Point3(3,2,1)); Floorplan::Beacon b2("b2", "77:66:55:44:33:22", Point3(6,5,4)); Floorplan::FloorObstacle fo0(Floorplan::ObstacleType::WALL, Floorplan::Material::CONCRETE, Point2(3,2), Point2(1,2)); Floorplan::FloorObstacle fo1(Floorplan::ObstacleType::DOOR, Floorplan::Material::WOOD, Point2(4,5), Point2(7,8)); Floorplan::FloorOutlinePolygon pa0("pa0", {Point2(1,2), Point2(4,5), Point2(7,8)}); Floorplan::FloorOutlinePolygon pr0("pr0", {Point2(3,2), Point2(6,5), Point2(9,8)}); Floorplan::FloorOutlinePolygon pa1("pa1", {Point2(1,2), Point2(7,8)}); Floorplan::FloorOutlinePolygon pa2("pa2", {Point2(4,5), Point2(7,8)}); // create and export { Floorplan::IndoorMap im; im.width = 123; im.depth = 456; // floor1 Floorplan::Floor f1; f1.atHeight = f1AtHeight; f1.accesspoints.push_back(ap0); f1.beacons.push_back(b0); f1.obstacles.push_back(fo0); f1.obstacles.push_back(fo1); f1.outline.add.push_back(pa0); f1.outline.remove.push_back(pr0); im.floors.push_back(f1); // floor2 Floorplan::Floor f2; f2.atHeight = f2AtHeight; f2.accesspoints.push_back(ap1); f2.accesspoints.push_back(ap2); f2.beacons.push_back(b1); f2.beacons.push_back(b2); f2.outline.add.push_back(pa1); f2.outline.add.push_back(pa2); im.floors.push_back(f2); xml = Floorplan::Writer::writeToString(im); } // load and check { const float delta = 0.0001; Floorplan::IndoorMap im = Floorplan::Reader::readFromString(xml); ASSERT_NEAR(123, im.width, delta); ASSERT_NEAR(456, im.depth, delta); ASSERT_EQ(2, im.floors.size()); // floor1 ASSERT_NEAR(f1AtHeight, im.floors[0].atHeight, delta); ASSERT_EQ(1, im.floors[0].accesspoints.size()); ASSERT_EQ(1, im.floors[0].beacons.size()); ASSERT_EQ(2, im.floors[0].obstacles.size()); ASSERT_EQ(1, im.floors[0].outline.add.size()); ASSERT_EQ(1, im.floors[0].outline.remove.size()); ASSERT_EQ(ap0, im.floors[0].accesspoints[0]); ASSERT_EQ(b0, im.floors[0].beacons[0]); ASSERT_EQ(fo0, im.floors[0].obstacles[0]); ASSERT_EQ(fo1, im.floors[0].obstacles[1]); ASSERT_EQ(pa0, im.floors[0].outline.add[0]); ASSERT_EQ(pr0, im.floors[0].outline.remove[0]); // floor2 ASSERT_NEAR(f2AtHeight, im.floors[1].atHeight, delta); ASSERT_EQ(2, im.floors[1].accesspoints.size()); ASSERT_EQ(2, im.floors[1].beacons.size()); ASSERT_EQ(0, im.floors[1].obstacles.size()); ASSERT_EQ(2, im.floors[1].outline.add.size()); ASSERT_EQ(0, im.floors[1].outline.remove.size()); ASSERT_EQ(ap1, im.floors[1].accesspoints[0]); ASSERT_EQ(ap2, im.floors[1].accesspoints[1]); ASSERT_EQ(b1, im.floors[1].beacons[0]); ASSERT_EQ(b2, im.floors[1].beacons[1]); ASSERT_EQ(pa1, im.floors[1].outline.add[0]); ASSERT_EQ(pa2, im.floors[1].outline.add[1]); } } #endif