@@ -539,6 +539,93 @@ TEST (PCL, Organized_Sparse_View_Radius)
539
539
}
540
540
#endif
541
541
542
+ class MakeNonTrivialTests : public ::testing::TestWithParam<bool > {
543
+ void
544
+ SetUp () override
545
+ {
546
+ search = pcl::make_shared<pcl::search::BruteForce<pcl::PointXYZ>>(GetParam ());
547
+ }
548
+
549
+ std::vector<Indices> test_indices = {{1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 },
550
+ {1 , 1 , 2 , 3 , 1 , 1 , 1 , 4 , 5 }};
551
+ std::vector<std::vector<float >> test_distances = {{0 , 0 , 0.0001 , 2 , 5 , 0 , 0 , 0 , 10 },
552
+ {1 , 0 , 0.0001 , 2 , 5 , 0 , 0 , 0 , 10 }};
553
+
554
+ Indices test_seeds = {1 , 9 };
555
+
556
+ pcl::shared_ptr<pcl::search::BruteForce<pcl::PointXYZ>> search;
557
+ };
558
+
559
+ TEST_P (MakeNonTrivialTests, distance)
560
+ {
561
+ std::vector<std::size_t > expected_sorted_sizes = {7 , 9 },
562
+ expected_unsorted_sizes = {4 , 5 };
563
+
564
+ auto * expected_sizes =
565
+ search->getSortedResults () ? &expected_sorted_sizes : &expected_unsorted_sizes;
566
+
567
+ for (int i = 0 ; i < test_distances.size (); i++) {
568
+ auto indices = test_indices[i];
569
+ auto distances = test_distances[i];
570
+ auto size = search->makeNonTrivial (indices, distances);
571
+
572
+ EXPECT_EQ (indices.size (), size);
573
+ EXPECT_EQ (distances.size (), size);
574
+
575
+ EXPECT_LE (distances.size (), test_distances[i].size ());
576
+ EXPECT_EQ (size, expected_sizes[i]);
577
+
578
+ if (distances.empty ()) {
579
+ continue ;
580
+ }
581
+
582
+ if (search->getSortedResults ()) {
583
+ EXPECT_TRUE (distances[0 ]);
584
+ }
585
+ else {
586
+ for (const auto & dist : distances) {
587
+ EXPECT_TRUE (dist);
588
+ }
589
+ }
590
+ }
591
+ }
592
+
593
+ TEST_P (MakeNonTrivialTests, index)
594
+ {
595
+ // vector of vectors, per seed
596
+ std::vector<std::vector<std::size_t >> expected_sorted_sizes = {{8 , 7 }, {9 , 9 }},
597
+ expected_unsorted_sizes = {{8 , 4 }, {8 , 9 }};
598
+
599
+ auto * expected_sizes =
600
+ search->getSortedResults () ? &expected_sorted_sizes : &expected_unsorted_sizes;
601
+
602
+ for (int seed_idx = 0 ; seed_idx < test_seeds; seed_idx++) {
603
+ for (int i = 0 ; i < test_distances.size (); i++) {
604
+ auto indices = test_indices[i];
605
+ auto distances = test_distances[i];
606
+ auto size = search->makeNonTrivial (test_seeds[seed_idx], indices, distances);
607
+
608
+ EXPECT_EQ (indices.size (), size);
609
+ EXPECT_EQ (distances.size (), size);
610
+
611
+ EXPECT_LE (indices.size (), test_indices[i].size ());
612
+ EXPECT_EQ (size, expected_sizes[seed_idx][i]);
613
+
614
+ if (distances.empty ()) {
615
+ continue ;
616
+ }
617
+ if (search->getSortedResults ()) {
618
+ EXPECT_NE (indices[0 ], test_seeds[seed_idx]);
619
+ }
620
+ else {
621
+ for (const auto & idx : indices) {
622
+ EXPECT_NE (idx, test_seeds[seed_idx]);
623
+ }
624
+ }
625
+ }
626
+ }
627
+ }
628
+
542
629
TEST (PCL, Search_nonTrivialDistance)
543
630
{
544
631
Indices test_indices = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
0 commit comments