- Timestamp:
- May 25, 2016, 7:13:59 AM (9 years ago)
- Children:
- a52369
- Parents:
- a92c27
- git-author:
- Frederik Heber <heber@…> (05/18/16 21:47:15)
- git-committer:
- Frederik Heber <heber@…> (05/25/16 07:13:59)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Fragmentation/Exporters/unittests/SphericalPointDistributionUnitTest.cpp
ra92c27 r46e561 47 47 #include <algorithm> 48 48 #include <boost/assign.hpp> 49 #include <boost/math/quaternion.hpp> 49 #include <boost/bind.hpp> 50 #include <numeric> 50 51 51 52 #include "CodePatterns/Assert.hpp" … … 339 340 // and compare the two 340 341 CPPUNIT_ASSERT_EQUAL( expected, adjacency ); 342 } 343 344 /** UnitTest for getConnections() 345 */ 346 template <> 347 void SphericalPointDistributionTest_assistant::getConnectionTest<8>() 348 { 349 const int N=8; 350 SphericalPointDistribution SPD(1.); 351 // get the points and convert into TesselPoint list 352 SphericalPointDistribution::Polygon_t newpolygon = SPD.get<N>(); 353 TesselPointSTLList Corners; 354 SphericalPointDistribution::IndexList_t indices(N); 355 std::generate(indices.begin(), indices.end(), UniqueNumber); 356 std::transform( 357 newpolygon.begin(), newpolygon.end(), 358 indices.begin(), 359 std::back_inserter(Corners), 360 VectorToTesselPoint()); 361 362 // create the tesselation 363 const double SPHERERADIUS = 1.5; 364 Tesselation TesselStruct; 365 PointCloudAdaptor<TesselPointSTLList> cloud(&Corners, "TesselPointSTLList"); 366 TesselStruct(cloud, SPHERERADIUS); 367 368 // create a adjacency list from a tesselation of the (convex set of) points 369 SphericalPointDistribution::adjacency_t adjacency; 370 for (LineMap::const_iterator iter = TesselStruct.LinesOnBoundary.begin(); 371 iter != TesselStruct.LinesOnBoundary.end(); ++iter) { 372 const BoundaryLineSet * const line = iter->second; 373 { 374 std::pair< SphericalPointDistribution::adjacency_t::iterator, bool > inserter = 375 adjacency.insert( 376 std::make_pair( 377 line->endpoints[0]->Nr, 378 SphericalPointDistribution::IndexSet_t() )); 379 inserter.first->second.insert(line->endpoints[1]->Nr); 380 LOG(6, "DEBUG: Inserting " << line->endpoints[0]->Nr << "," << line->endpoints[1]->Nr); 381 } 382 { 383 std::pair< SphericalPointDistribution::adjacency_t::iterator, bool > inserter = 384 adjacency.insert( 385 std::make_pair( 386 line->endpoints[1]->Nr, 387 SphericalPointDistribution::IndexSet_t() )); 388 inserter.first->second.insert(line->endpoints[0]->Nr); 389 LOG(6, "DEBUG: Inserting " << line->endpoints[1]->Nr << "," << line->endpoints[0]->Nr); 390 } 391 } 392 393 // get the implemented connections 394 SphericalPointDistribution::adjacency_t expected = 395 SPD.getConnections<N>(); 396 397 // and compare the two 398 // CPPUNIT_ASSERT_EQUAL( expected, adjacency ); 399 400 // with eight points we obtain a cube. The problem is that each side 401 // is a polygon with four corners that is ambiguous in the tesselation 402 // it receives. Hence, we cannot directly test the linking but only 403 // the properties. 404 size_t NumberEdges_expected = 0; 405 for (SphericalPointDistribution::adjacency_t::const_iterator iter = expected.begin(); 406 iter != expected.begin(); ++iter) { 407 NumberEdges_expected += iter->second.size(); 408 CPPUNIT_ASSERT( iter->second.size() >= 3 ); 409 CPPUNIT_ASSERT( iter->second.size() <= 6 ); 410 } 411 size_t NumberEdges_adjacency = 0; 412 for (SphericalPointDistribution::adjacency_t::const_iterator iter = adjacency.begin(); 413 iter != adjacency.begin(); ++iter) { 414 NumberEdges_adjacency += iter->second.size(); 415 CPPUNIT_ASSERT( iter->second.size() >= 3 ); 416 CPPUNIT_ASSERT( iter->second.size() <= 6 ); 417 } 418 CPPUNIT_ASSERT_EQUAL( NumberEdges_expected, NumberEdges_adjacency); 419 } 420 421 /** UnitTest for getConnections() 422 */ 423 template <> 424 void SphericalPointDistributionTest_assistant::getConnectionTest<11>() 425 { 426 const int N=11; 427 SphericalPointDistribution SPD(1.); 428 // get the points and convert into TesselPoint list 429 SphericalPointDistribution::Polygon_t newpolygon = SPD.get<N>(); 430 TesselPointSTLList Corners; 431 SphericalPointDistribution::IndexList_t indices(N); 432 std::generate(indices.begin(), indices.end(), UniqueNumber); 433 std::transform( 434 newpolygon.begin(), newpolygon.end(), 435 indices.begin(), 436 std::back_inserter(Corners), 437 VectorToTesselPoint()); 438 439 // create the tesselation 440 const double SPHERERADIUS = 1.5; 441 Tesselation TesselStruct; 442 PointCloudAdaptor<TesselPointSTLList> cloud(&Corners, "TesselPointSTLList"); 443 TesselStruct(cloud, SPHERERADIUS); 444 445 // create a adjacency list from a tesselation of the (convex set of) points 446 SphericalPointDistribution::adjacency_t adjacency; 447 for (LineMap::const_iterator iter = TesselStruct.LinesOnBoundary.begin(); 448 iter != TesselStruct.LinesOnBoundary.end(); ++iter) { 449 const BoundaryLineSet * const line = iter->second; 450 { 451 std::pair< SphericalPointDistribution::adjacency_t::iterator, bool > inserter = 452 adjacency.insert( 453 std::make_pair( 454 line->endpoints[0]->Nr, 455 SphericalPointDistribution::IndexSet_t() )); 456 inserter.first->second.insert(line->endpoints[1]->Nr); 457 LOG(6, "DEBUG: Inserting " << line->endpoints[0]->Nr << "," << line->endpoints[1]->Nr); 458 } 459 { 460 std::pair< SphericalPointDistribution::adjacency_t::iterator, bool > inserter = 461 adjacency.insert( 462 std::make_pair( 463 line->endpoints[1]->Nr, 464 SphericalPointDistribution::IndexSet_t() )); 465 inserter.first->second.insert(line->endpoints[0]->Nr); 466 LOG(6, "DEBUG: Inserting " << line->endpoints[1]->Nr << "," << line->endpoints[0]->Nr); 467 } 468 } 469 470 // get the implemented connections 471 SphericalPointDistribution::adjacency_t expected = 472 SPD.getConnections<N>(); 473 474 // and compare the two 475 // CPPUNIT_ASSERT_EQUAL( expected, adjacency ); 476 477 // again, we only check properties as tesselation has ambiguities. 478 size_t NumberEdges_expected = 0; 479 for (SphericalPointDistribution::adjacency_t::const_iterator iter = expected.begin(); 480 iter != expected.begin(); ++iter) { 481 NumberEdges_expected += iter->second.size(); 482 CPPUNIT_ASSERT( iter->second.size() >= 4 ); 483 CPPUNIT_ASSERT( iter->second.size() <= 6 ); 484 } 485 size_t NumberEdges_adjacency = 0; 486 for (SphericalPointDistribution::adjacency_t::const_iterator iter = adjacency.begin(); 487 iter != adjacency.begin(); ++iter) { 488 NumberEdges_adjacency += iter->second.size(); 489 CPPUNIT_ASSERT( iter->second.size() >= 4 ); 490 CPPUNIT_ASSERT( iter->second.size() <= 6 ); 491 } 492 CPPUNIT_ASSERT_EQUAL( NumberEdges_expected, NumberEdges_adjacency); 341 493 } 342 494
Note:
See TracChangeset
for help on using the changeset viewer.
