Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
z_score_validator_test.cpp
Go to the documentation of this file.
3
4#include <gtest/gtest.h>
5#include <memory>
6
10class ZScoreValidatorTest : public ::testing::Test {
11 public:
15 void SetUp() override {
16 _clusters_ = {};
17 }
18
19 void add_cluster(float centroid_x, float centroid_y) {
20 auto point_cloud = std::make_shared<pcl::PointCloud<pcl::PointXYZI>>();
21 point_cloud->push_back(pcl::PointXYZI{centroid_x, centroid_y, 42, 42});
22 _clusters_.emplace_back(point_cloud);
23 }
24
25 std::vector<Cluster> _clusters_;
27};
28
29
33TEST_F(ZScoreValidatorTest, SinglePointPerfectZScores) {
34 auto validator = ZScoreValidator(1, 1, 1, 1);
35 add_cluster(-1, 0);
36 Cluster::set_z_scores(_clusters_);
37
38 ASSERT_TRUE(validator.coneValidator(&_clusters_[0], _plane_));
39 ASSERT_EQ(_clusters_[0].get_z_score_x(), 1);
40 ASSERT_EQ(_clusters_[0].get_z_score_y(), 1);
41}
42
46TEST_F(ZScoreValidatorTest, TwoPointsPerfectZScores) {
47 auto validator = ZScoreValidator(1, 1, 1, 1);
48 add_cluster(-1, 0);
49 add_cluster(1, 0);
50 Cluster::set_z_scores(_clusters_);
51
52 ASSERT_TRUE(validator.coneValidator(&_clusters_[0], _plane_));
53 ASSERT_EQ(_clusters_[0].get_z_score_x(), 1);
54 ASSERT_EQ(_clusters_[0].get_z_score_y(), 1);
55 ASSERT_EQ(_clusters_[1].get_z_score_x(), 1);
56 ASSERT_EQ(_clusters_[1].get_z_score_y(), 1);
57}
58
63TEST_F(ZScoreValidatorTest, PerfectZScore) {
64 auto validator = ZScoreValidator(1, 1, 1, 1);
65 add_cluster(-1, 0);
66 add_cluster(1, 0);
67 add_cluster(-1, 1);
68 add_cluster(1, 1);
69 Cluster::set_z_scores(_clusters_);
70
71 for (int i = 0; i < 4; i++) {
72 ASSERT_TRUE(validator.coneValidator(&_clusters_[i], _plane_));
73 }
74}
75
80TEST_F(ZScoreValidatorTest, PerfectZScoreWith1Outlier) {
81 auto validator = ZScoreValidator(1, 1, 1, 1);
82 add_cluster(-1, 0);
83 add_cluster(1, 0);
84 add_cluster(-1, 1);
85 add_cluster(1, 1);
86 add_cluster(5, 5);
87 Cluster::set_z_scores(_clusters_);
88
89 for (int i = 0; i < 5; i++) {
90 ASSERT_FALSE(validator.coneValidator(&_clusters_[i], _plane_));
91 }
92}
93
98TEST_F(ZScoreValidatorTest, PerfectZScoreWith1Outlier2) {
99 auto validator = ZScoreValidator(0, 1, 0, 1);
100
101 for (int i = 0; i < 20; i++) {
102 add_cluster(-1, 0);
103 add_cluster(1, 0);
104 add_cluster(-1, 1);
105 add_cluster(1, 1);
106 }
107 add_cluster(8, 8);
108 Cluster::set_z_scores(_clusters_);
109
110 ASSERT_TRUE(validator.coneValidator(&_clusters_[0], _plane_));
111 ASSERT_TRUE(validator.coneValidator(&_clusters_[1], _plane_));
112 ASSERT_TRUE(validator.coneValidator(&_clusters_[2], _plane_));
113 ASSERT_TRUE(validator.coneValidator(&_clusters_[3], _plane_));
114 ASSERT_FALSE(validator.coneValidator(&_clusters_[80], _plane_));
115}
static void set_z_scores(std::vector< Cluster > &clusters)
Set the z scores object on every cluster of the vector.
Definition cluster.cpp:94
The Plane class represents a 3D plane defined by its equation ax + by + cz + d = 0.
Definition plane.hpp:12
The ZScoreValidator class is responsible for validating cones based on the approximation of z-score o...
Fixture for testing the ZScoreValidatorTest class.
void add_cluster(float centroid_x, float centroid_y)
std::vector< Cluster > _clusters_
void SetUp() override
Set up the test fixtures.
TEST_F(ZScoreValidatorTest, SinglePointPerfectZScores)
Test case to validate the a vector with only one cluster.