void runCombinedTagTest() { PoiPolygonAddressScoreExtractor uut; uut.setConfiguration(conf()); OsmMapPtr map(new OsmMap()); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); node1->getTags().set(TestUtils::HOUSE_NUMBER_TAG_NAME, "123"); node1->getTags().set(TestUtils::STREET_TAG_NAME, "Main Street"); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); way1->getTags().set(TestUtils::HOUSE_NUMBER_TAG_NAME, "123"); way1->getTags().set(TestUtils::STREET_TAG_NAME, "main street"); map->addWay(way1); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); NodePtr node2(new Node(Status::Unknown1, -2, Coordinate(0.0, 0.0), 15.0)); node2->getTags().set(TestUtils::HOUSE_NUMBER_TAG_NAME, "123"); node2->getTags().set(TestUtils::STREET_TAG_NAME, "Main Street"); map->addNode(node2); WayPtr way2(new Way(Status::Unknown2, -2, 15.0)); way2->getTags().set(TestUtils::HOUSE_NUMBER_TAG_NAME, "567"); way2->getTags().set(TestUtils::STREET_TAG_NAME, "first street"); map->addWay(way2); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node2, way2), 0.01); }
void runAltFormatTest() { PoiPolygonAddressScoreExtractor uut; uut.setConfiguration(conf()); OsmMapPtr map(new OsmMap()); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); node1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, "Main Street 123 20121 mytown"); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); way1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME_2, "main street 123"); map->addWay(way1); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); NodePtr node2(new Node(Status::Unknown1, -2, Coordinate(0.0, 0.0), 15.0)); node2->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, "Main Street 123 20121 mytown"); map->addNode(node2); WayPtr way2(new Way(Status::Unknown2, -2, 15.0)); way2->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, "first street 567"); map->addWay(way2); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node2, way2), 0.01); NodePtr node3(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); node3->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, "ZENTRALLÄNDSTRASSE 40 81379 MÜNCHEN"); map->addNode(node3); WayPtr way3(new Way(Status::Unknown2, -1, 15.0)); way3->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME_2, "40 ZENTRALLÄNDSTRASSE"); map->addWay(way3); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node3, way3), 0.0); }
/** * @todo Dieser Test ist viel (!) zu kurz. */ int testOSMWay() { OSMWay way(25); CHECK_EQ_TYPE(way.getWayID(), 25, boost::uint64_t); way.addMember(1); way.addMember(2); way.addMember(3); way.addMember(4); QVector<boost::uint64_t> wayMemberList = way.getMemberList(); CHECK(!wayMemberList.isEmpty()); CHECK_EQ(wayMemberList.size(), 4); CHECK_EQ_TYPE(wayMemberList[0], 1, boost::uint64_t); CHECK_EQ_TYPE(wayMemberList[1], 2, boost::uint64_t); CHECK_EQ_TYPE(wayMemberList[2], 3, boost::uint64_t); CHECK_EQ_TYPE(wayMemberList[3], 4, boost::uint64_t); CHECK_EQ(way.isOneway(), 0) CHECK_EQ(way.isOnewayForBikes(), 0) OSMWay way2(26); way2.addMember(5); way2.addMember(6); way2.addMember(7); way2.addMember(8); QVector<boost::uint64_t> way2MemberList = way2.getMemberList(); CHECK_EQ_TYPE(way2MemberList[0], 5, boost::uint64_t); CHECK_EQ_TYPE(way2MemberList[1], 6, boost::uint64_t); CHECK_EQ_TYPE(way2MemberList[2], 7, boost::uint64_t); CHECK_EQ_TYPE(way2MemberList[3], 8, boost::uint64_t); CHECK_EQ(way2.isOneway(), 0); CHECK_EQ(way2.isOnewayForBikes(), 0); way2.addProperty(OSMProperty("oneway", "yes")); CHECK_EQ(way2.isOneway(), 1); CHECK_EQ(way2.isOnewayForBikes(), 1); way2.addProperty(OSMProperty("oneway:bicycle", "no")); CHECK_EQ(way2.isOneway(), 1); CHECK_EQ(way2.isOnewayForBikes(), 0); way.addProperty(OSMProperty("key", "value")); way.addProperty(OSMProperty("key2", "value2")); CHECK_EQ(way.getProperties()[0], OSMProperty("key", "value")); CHECK_EQ(way.getProperties()[1], OSMProperty("key2", "value2")); //TODO: Test für OSMEdge erweitern QVector<OSMEdge> edgeList = way.getEdgeList(); CHECK_EQ(edgeList.size(), 6); CHECK_EQ_TYPE(edgeList[0].getID(), 25, boost::uint64_t); CHECK_EQ_TYPE(edgeList[1].getID(), 25, boost::uint64_t); CHECK_EQ_TYPE(edgeList[2].getID(), 25, boost::uint64_t); CHECK(edgeList[0].getProperties().contains(way.getProperties()[0])); CHECK(edgeList[0].getProperties().contains(way.getProperties()[1])); return EXIT_SUCCESS; }
void permunation1_opt2(int n, int * num) { int a = n / 4; int b = n % 4; num[n] = 0; switch (b) { case 0: way4(num, num + 4, num + n); break; case 3: way3(num, num + 3, num + n, num + 3, num + 7, num + n); break; case 2: way2(num, num + 2, num + n, num + 2, num + 6, num + n); break; case 1: way1(num, num + 1, num + n, num + 1, num + 5, num + n); } }
void translateTagValueTest() { PoiPolygonAddressScoreExtractor uut; Settings settings = conf(); OsmMapPtr map(new OsmMap()); settings.set("poi.polygon.address.translate.to.english", "true"); settings.set("language.translation.translator", "hoot::DictionaryTranslator"); settings.set("poi.polygon.address.use.default.language.translation.only", "false"); uut.setConfiguration(settings); boost::shared_ptr<DictionaryTranslator> dictTranslator = boost::dynamic_pointer_cast<DictionaryTranslator>(AddressTranslator::_translator); dictTranslator->setTokenizeInput(false); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); node1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 Main Street"); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); way1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME, QString::fromUtf8("123 Hauptstraße")); map->addWay(way1); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); NodePtr node2(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); node2->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, "Central Border Street 40 81379"); map->addNode(node2); WayPtr way2(new Way(Status::Unknown2, -1, 15.0)); way2->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME_2, QString::fromUtf8("ZENTRALLÄNDE STRASSE 40 81379 MÜNCHEN")); map->addWay(way2); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node2, way2), 0.0); settings.set("poi.polygon.address.translate.to.english", "false"); uut.setConfiguration(settings); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); }
void way3(int *a, int *b, int *end, int *vb, int *vbb, int *vend) { int *a1 = a + 1; int *a2 = a + 2; way2(a1, b, end, vb, vbb, vend); int *end1 = end - 1; int * start; int *p; while (b != end){ swap(a, b); way4(vb, vbb, vend); if (b == end1) { break; } // //倒序交换a2 和 b_n p = end1; start = b; while (p != start) { swap(p, a1); way4(vb, vbb, vend); p--; } // 倒序交换a1 和b_n; p = end1; while (p != start) { swap(p, a2); way4(vb, vbb, vend); p--; } end = end - 1; end1 = end - 1; while (true) { //step 1 start = start + 1; if (start == end) { break; } swap(start, a1); way4(vb, vbb, vend); p = start + 1; while (p != end) { swap(p, a1); way4(vb, vbb, vend); p++; } start = start + 1; if (start == end) { break; } swap(a2, start); way4(vb, vbb, vend); p = end1; while (p != start) { swap(p, a1); way4(vb, vbb, vend); p--; } start = start + 1; if (start == end) { break; } swap(start, a2); way4(vb, vbb, vend); p = start + 1; while (p != end) { swap(p, a2); way4(vb, vbb, vend); p++; } start = start + 1; if (start == end) { break; } swap(start, a1); way4(vb, vbb, vend); p = end1; while (p != start) { swap(p, a2); way4(vb, vbb, vend); p--; } //step 2 } if (*a1 < *a2) { swap(a1, a2); } end = end + 1; end1 = end1 + 1; swap(a2, end1); b++; } if (*a1 < *a2) { swap(a1, a2); } }