1 /*
2 * Software License Agreement (BSD License)
3 *
4 * Point Cloud Library (PCL) - www.pointclouds.org
5 * Copyright (c) 2014-, Open Perception, Inc.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of the copyright holder(s) nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 */
35
36 #include <pcl/test/gtest.h>
37
38 #include <pcl/common/copy_point.h>
39
TEST(CopyPointTest,SameTypeWithoutColor)40 TEST (CopyPointTest, SameTypeWithoutColor)
41 {
42 {
43 pcl::PointXYZ p1 (1, 2, 3), p2 (4, 5, 6);
44 pcl::copyPoint (p1, p2);
45 EXPECT_FLOAT_EQ (p1.x, p2.x);
46 EXPECT_FLOAT_EQ (p1.y, p2.y);
47 EXPECT_FLOAT_EQ (p1.z, p2.z);
48 }
49 {
50 pcl::Normal p1 (1, 2, 3), p2 (4, 5, 6);
51 pcl::copyPoint (p1, p2);
52 EXPECT_FLOAT_EQ (p1.normal_x, p2.normal_x);
53 EXPECT_FLOAT_EQ (p1.normal_y, p2.normal_y);
54 EXPECT_FLOAT_EQ (p1.normal_z, p2.normal_z);
55 }
56 }
57
TEST(CopyPointTest,SameTypeWithColor)58 TEST (CopyPointTest, SameTypeWithColor)
59 {
60 {
61 pcl::PointXYZRGBA p1, p2;
62 p1.getVector3fMap () << 1, 2, 3; p1.rgba = 0xFF0000FF;
63 pcl::copyPoint (p1, p2);
64 EXPECT_FLOAT_EQ (p1.x, p2.x);
65 EXPECT_FLOAT_EQ (p1.y, p2.y);
66 EXPECT_FLOAT_EQ (p1.z, p2.z);
67 EXPECT_EQ (p1.rgba, p2.rgba);
68 }
69 }
70
TEST(CopyPointTest,DifferentTypesWithoutColor)71 TEST (CopyPointTest, DifferentTypesWithoutColor)
72 {
73 {
74 pcl::PointXYZ p1 (1, 2, 3);
75 pcl::PointXYZL p2;
76 p2.getVector3fMap () << 4, 5, 5; p2.label = 1;
77 pcl::copyPoint (p1, p2);
78 EXPECT_FLOAT_EQ (p1.x, p2.x);
79 EXPECT_FLOAT_EQ (p1.y, p2.y);
80 EXPECT_FLOAT_EQ (p1.z, p2.z);
81 EXPECT_EQ (1, p2.label);
82 }
83 {
84 pcl::PointXY p1; p1.x = 1; p1.y = 2;
85 pcl::PointWithRange p2; p2.getVector3fMap () << 4, 5, 6; p2.range = 8;
86 pcl::copyPoint (p1, p2);
87 EXPECT_FLOAT_EQ (p1.x, p2.x);
88 EXPECT_FLOAT_EQ (p1.y, p2.y);
89 EXPECT_FLOAT_EQ (6, p2.z);
90 EXPECT_FLOAT_EQ (8, p2.range);
91 }
92 }
93
TEST(CopyPointTest,DifferentTypesOneWithColorAnotherWithout)94 TEST (CopyPointTest, DifferentTypesOneWithColorAnotherWithout)
95 {
96 // Source without color
97 {
98 pcl::PointXYZ p1 (1, 2, 3);
99 pcl::PointXYZRGB p2;
100 p2.getVector3fMap () << 4, 5, 5; p2.rgba = 0xFFFF00;
101 pcl::copyPoint (p1, p2);
102 EXPECT_FLOAT_EQ (p1.x, p2.x);
103 EXPECT_FLOAT_EQ (p1.y, p2.y);
104 EXPECT_FLOAT_EQ (p1.z, p2.z);
105 EXPECT_EQ (0xFFFF00, p2.rgba);
106 }
107 // Target without color
108 {
109 pcl::PointXYZRGBNormal p1; p1.getVector3fMap () << 1, 2, 3; p1.rgba = 0xFF0000;
110 pcl::PointWithRange p2; p2.getVector3fMap () << 4, 5, 6; p2.range = 8;
111 pcl::copyPoint (p1, p2);
112 EXPECT_FLOAT_EQ (p1.x, p2.x);
113 EXPECT_FLOAT_EQ (p1.y, p2.y);
114 EXPECT_FLOAT_EQ (p1.z, p2.z);
115 EXPECT_FLOAT_EQ (8, p2.range);
116 }
117 }
118
TEST(CopyPointTest,DifferentTypesWithDifferentColor)119 TEST (CopyPointTest, DifferentTypesWithDifferentColor)
120 {
121 {
122 pcl::RGB p1;
123 pcl::PointXYZRGB p2; p2.getVector3fMap () << 4, 5, 6; p2.r = 7; p2.g = 8; p2.b = 9, p2.a = 10;
124 pcl::copyPoint (p1, p2);
125 EXPECT_EQ (p1.rgba, p2.rgba);
126 EXPECT_FLOAT_EQ (4, p2.x);
127 EXPECT_FLOAT_EQ (5, p2.y);
128 EXPECT_FLOAT_EQ (6, p2.z);
129 }
130 {
131 pcl::PointXYZRGBNormal p1; p1.getVector3fMap () << 1, 2, 3; p1.r = 7; p1.g = 8; p1.b = 9;
132 pcl::PointXYZRGBL p2; p2.getVector3fMap () << 4, 5, 6; p2.r = 3; p2.g = 2; p2.b = 1; p2.label = 8;
133 pcl::copyPoint (p1, p2);
134 EXPECT_FLOAT_EQ (p1.x, p2.x);
135 EXPECT_FLOAT_EQ (p1.y, p2.y);
136 EXPECT_FLOAT_EQ (p1.z, p2.z);
137 EXPECT_EQ (p1.rgba, p2.rgba);
138 EXPECT_EQ (8, p2.label);
139 }
140 {
141 pcl::PointXYZRGBA p1; p1.getVector3fMap () << 1, 2, 3; p1.rgba = 0xFF00FF;
142 pcl::PointXYZRGB p2; p2.getVector3fMap () << 4, 5, 6; p2.rgba = 0x00FF00;
143 pcl::copyPoint (p1, p2);
144 EXPECT_FLOAT_EQ (p1.x, p2.x);
145 EXPECT_FLOAT_EQ (p1.y, p2.y);
146 EXPECT_FLOAT_EQ (p1.z, p2.z);
147 EXPECT_EQ (p1.rgba, p2.rgba);
148 }
149 }
150
TEST(CopyPointTest,DifferentTypesWithSameColor)151 TEST (CopyPointTest, DifferentTypesWithSameColor)
152 {
153 {
154 pcl::RGB p1;
155 pcl::PointXYZRGBA p2; p2.getVector3fMap () << 4, 5, 6; p2.r = 7; p2.g = 8; p2.b = 9, p2.a = 10;
156 pcl::copyPoint (p1, p2);
157 EXPECT_EQ (p1.rgba, p2.rgba);
158 EXPECT_FLOAT_EQ (4, p2.x);
159 EXPECT_FLOAT_EQ (5, p2.y);
160 EXPECT_FLOAT_EQ (6, p2.z);
161 }
162 {
163 pcl::PointXYZRGBNormal p1; p1.getVector3fMap () << 1, 2, 3; p1.r = 7; p1.g = 8; p1.b = 9;
164 pcl::PointXYZRGB p2; p2.getVector3fMap () << 4, 5, 6; p2.r = 3; p2.g = 2; p2.b = 1;
165 pcl::copyPoint (p1, p2);
166 EXPECT_FLOAT_EQ (p1.x, p2.x);
167 EXPECT_FLOAT_EQ (p1.y, p2.y);
168 EXPECT_FLOAT_EQ (p1.z, p2.z);
169 EXPECT_EQ (p1.rgba, p2.rgba);
170 }
171 }
172
173 int
main(int argc,char ** argv)174 main (int argc, char **argv)
175 {
176 try
177 {
178 ::testing::InitGoogleTest (&argc, argv);
179 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
180 return RUN_ALL_TESTS ();
181 }
182 catch (std::exception& e)
183 {
184 std::cerr << "Unhandled exception: " << e.what () << "\n";
185 }
186 return 1;
187 }
188
189