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