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);
  }
Exemplo n.º 5
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);
  }
Exemplo n.º 9
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++;
	}

}