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);
  }
Exemplo n.º 3
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;
 }
Exemplo n.º 4
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 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.º 6
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);
	}
}