void addressNormalizationTest() { PoiPolygonAddressScoreExtractor uut; uut.setConfiguration(conf()); OsmMapPtr map(new OsmMap()); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); map->addWay(way1); node1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME, QString::fromUtf8("Quatre-vingt-douze Ave des Champs-Élysées")); way1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME, QString::fromUtf8("92 avenue des champs-elysees")); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME, QString::fromUtf8("Quatre-vingt-douze Ave des Champs-Élysées")); way1->getTags().clear(); way1->getTags().set( TestUtils::FULL_ADDRESS_TAG_NAME, QString::fromUtf8("92 avenue des champs elysees")); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); }
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 invalidFullAddressTest() { PoiPolygonAddressScoreExtractor uut; uut.setConfiguration(conf()); OsmMapPtr map(new OsmMap()); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); map->addWay(way1); node1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 Main Street"); way1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "this isn't an address"); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "this isn't an address"); way1->getTags().clear(); way1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 Main Street"); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 this isn't an address"); way1->getTags().clear(); way1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 Main Street"); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "this isn't an address street"); way1->getTags().clear(); way1->getTags().set(TestUtils::FULL_ADDRESS_TAG_NAME, "123 Main Street"); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); }
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); }
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 runSubLetterTest() { 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, "123a"); way1->getTags().set(TestUtils::STREET_TAG_NAME, "main street"); map->addWay(way1); uut.setAllowLenientHouseNumberMatching(true); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); uut.setAllowLenientHouseNumberMatching(false); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); }
void additionalTagsTest() { PoiPolygonAddressScoreExtractor uut; uut.setConfiguration(conf()); QSet<QString> additionalTagKeys; additionalTagKeys.insert("note"); additionalTagKeys.insert("description"); AddressTagKeysPtr addressTagKeys = AddressTagKeys::getInstance(); addressTagKeys->_additionalTagKeys = additionalTagKeys; OsmMapPtr map(new OsmMap()); NodePtr node1(new Node(Status::Unknown1, -1, Coordinate(0.0, 0.0), 15.0)); map->addNode(node1); WayPtr way1(new Way(Status::Unknown2, -1, 15.0)); map->addWay(way1); node1->getTags().set("note", "123 Main Street"); way1->getTags().set("note", "123 main St"); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set("description", "123 Main Street"); way1->getTags().clear(); way1->getTags().set("description", "123 main St"); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); node1->getTags().clear(); node1->getTags().set("blah", "123 Main Street"); way1->getTags().clear(); way1->getTags().set("blah", "123 main St"); CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, uut.extract(*map, node1, way1), 0.0); // name gets parsed by default node1->getTags().clear(); node1->getTags().set("name", "123 Main Street"); way1->getTags().clear(); way1->getTags().set("name", "123 main St"); CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, uut.extract(*map, node1, way1), 0.0); }
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 way2(int *a, int *b, int *end, int *vb, int *vbb, int *vend) { way1(a + 1, b, end, vb, vbb, vend); int *start = b; int *end1 = end - 1; int *p; int *a1 = a + 1; while (start != end) { //case 1: p = end1; swap(a, start); way4(vb, vbb, vend); while (p != start) { swap(p, a1); way4(vb, vbb, vend); p--; } //case 2: start++; if (start == end) { break; } swap(a, start); way4(vb, vbb, vend); p = start + 1; while (p != end) { swap(p, a); way4(vb, vbb, vend); p++; } //case 3: start++; if (start == end) { break; } swap(a1, start); way4(vb, vbb, vend); p = end1; while (p != start) { swap(p, a); way4(vb, vbb, vend); p--; } //case 4: start++; if (start == end) { break; } swap(a1, start); way4(vb, vbb, vend); p = start + 1; while (p != end) { swap(p, a1); way4(vb, vbb, vend); p++; } start++; } }