3
// (C) Copyright Mateusz Loskot 2008, mateusz@loskot.net
4
// Distributed under the BSD License
5
// (See accompanying file LICENSE.txt or copy at
6
// http://www.opensource.org/licenses/bsd-license.php)
8
#include <liblas/laspoint.hpp>
9
#include <liblas/lascolor.hpp>
10
#include <liblas/exception.hpp>
11
#include <tut/tut.hpp>
20
liblas::LASPoint m_default;
23
typedef test_group<laspoint_data> tg;
24
typedef tg::object to;
26
tg test_group_laspoint("liblas::LASPoint");
28
// Test default construction
33
test_default_point(m_default);
36
// Test copy constructor
41
liblas::LASPoint p(m_default);
43
test_default_point(p);
46
// Test assignment operator
54
test_default_point(p);
57
// Test equal-to operator
64
ensure("points are not equal", m_default == p);
67
// Test not-equal-to operator
73
p.SetCoordinates(1.123, 2.456, 3.789);
75
ensure("points are equal", m_default != p);
78
// Test Get/SetReturnNumber
83
ensure_equals("invalid default return number",
84
m_default.GetReturnNumber(), 0);
86
liblas::uint16_t const num1 = 7;
87
m_default.SetReturnNumber(num1);
88
ensure_equals("invalid return number",
89
m_default.GetReturnNumber(), num1);
91
liblas::uint16_t const num2 = 3;
92
m_default.SetReturnNumber(num2);
93
ensure_equals("invalid return number",
94
m_default.GetReturnNumber(), num2);
98
liblas::uint16_t const outofrange = 8;
99
m_default.SetReturnNumber(outofrange);
100
m_default.Validate(); // throws
102
// XXX - mloskot: Flag gets reset because of value overflow,
103
// so in-range value is returned.
104
//ensure("std::invalid_point_data not thrown", false);
106
catch (liblas::invalid_point_data const& e)
108
ensure_equals(e.who() & liblas::LASPoint::eReturnNumber,
109
liblas::LASPoint::eReturnNumber);
113
// Test Get/SetNumberOfReturns
118
ensure_equals("invalid default number of returns",
119
m_default.GetNumberOfReturns(), 0);
121
liblas::uint16_t const num1 = 7;
122
m_default.SetNumberOfReturns(num1);
123
ensure_equals("invalid number of returns",
124
m_default.GetNumberOfReturns(), num1);
126
liblas::uint16_t const num2 = 3;
127
m_default.SetNumberOfReturns(num2);
128
ensure_equals("invalid number of returns",
129
m_default.GetNumberOfReturns(), num2);
133
liblas::uint16_t const outofrange = 8;
134
m_default.SetNumberOfReturns(outofrange);
135
m_default.Validate(); // throws
137
// XXX - mloskot: Flag gets reset because of value overflow,
138
// so in-range value is returned.
139
//ensure("std::invalid_point_data not thrown", false);
141
catch (liblas::invalid_point_data const& e)
143
ensure_equals(e.who() & liblas::LASPoint::eNumberOfReturns,
144
liblas::LASPoint::eNumberOfReturns);
148
// Test Get/SetScanDirection
153
ensure_equals("invalid default scan direction flag",
154
m_default.GetScanDirection(), 0);
156
liblas::uint16_t const positive = 1;
157
m_default.SetScanDirection(positive);
158
ensure_equals("invalid scan direction flag",
159
m_default.GetScanDirection(), positive);
161
liblas::uint16_t const negative = 0;
162
m_default.SetScanDirection(negative);
163
ensure_equals("invalid scan direction flag",
164
m_default.GetScanDirection(), negative);
168
liblas::uint16_t const outofrange = 2;
169
m_default.SetScanDirection(outofrange);
170
m_default.Validate(); // throws
172
// XXX - mloskot: Flag gets reset because of value overflow,
173
// so in-range value is returned.
174
//ensure("std::invalid_point_data not thrown", false);
176
catch (liblas::invalid_point_data const& e)
178
ensure_equals(e.who() & liblas::LASPoint::eScanDirection,
179
liblas::LASPoint::eScanDirection);
183
// Test Get/SetFlightLineEdge
188
ensure_equals("invalid default edge of flight line",
189
m_default.GetFlightLineEdge(), 0);
191
liblas::uint16_t const endofscan = 1;
192
m_default.SetFlightLineEdge(endofscan);
193
ensure_equals("invalid edge of flight line",
194
m_default.GetFlightLineEdge(), endofscan);
196
liblas::uint16_t const notendofscan = 0;
197
m_default.SetFlightLineEdge(notendofscan);
198
ensure_equals("invalid edge of flight line",
199
m_default.GetFlightLineEdge(), notendofscan);
203
liblas::uint16_t const outofrange = 2;
204
m_default.SetFlightLineEdge(outofrange);
205
m_default.Validate(); // throws
207
// XXX - mloskot: Flag gets reset because of value overflow,
208
// so in-range value is returned.
209
//ensure("std::invalid_point_data not thrown", false);
211
catch (liblas::invalid_point_data const& e)
213
ensure_equals(e.who() & liblas::LASPoint::eFlightLineEdge,
214
liblas::LASPoint::eFlightLineEdge);
218
// Test Get/SetScanFlags
223
std::bitset<8> zeros;
224
std::bitset<8> bits = m_default.GetScanFlags();
226
ensure_equals("invalid default scan flags", bits, zeros);
228
m_default.SetReturnNumber(3);
229
m_default.SetNumberOfReturns(7);
230
m_default.SetScanDirection(0);
231
m_default.SetFlightLineEdge(1);
233
std::bitset<8> expected(std::string("10111011"));
234
bits = m_default.GetScanFlags();
236
ensure_equals("invalid scan flags pattern", bits, expected);
238
liblas::LASPoint copy(m_default);
239
bits = copy.GetScanFlags();
241
ensure_equals("invalid copy of scan flags pattern", bits, expected);
244
// Test Get/SetClassification
249
ensure_equals("invalid default classification",
250
m_default.GetClassification(), 0);
252
liblas::uint8_t const begclass = 0;
253
m_default.SetClassification(begclass);
254
ensure_equals("invalid classification",
255
m_default.GetClassification(), begclass);
257
liblas::uint8_t const endclass = 31;
258
m_default.SetClassification(endclass);
259
ensure_equals("invalid classification",
260
m_default.GetClassification(), endclass);
263
// Test Get/SetScanAngleRank
268
ensure_equals("invalid default scan angle rank",
269
m_default.GetScanAngleRank(), 0);
271
liblas::int8_t const rank1 = -90;
272
m_default.SetScanAngleRank(rank1);
273
ensure_equals("invalid scan angle rank",
274
m_default.GetScanAngleRank(), rank1);
276
liblas::int8_t const rank2 = 90;
277
m_default.SetScanAngleRank(rank2);
278
ensure_equals("invalid scan angle rank",
279
m_default.GetScanAngleRank(), rank2);
283
liblas::int8_t const outofrange = 91;
284
m_default.SetScanAngleRank(outofrange);
285
m_default.Validate(); // throws
287
ensure("invalid_point_data not thrown", false);
289
catch (liblas::invalid_point_data const& e)
291
ensure_equals(e.who() & liblas::LASPoint::eScanAngleRank,
292
liblas::LASPoint::eScanAngleRank);
296
// Test Get/SetUserData
301
ensure_equals("invalid default user data value",
302
m_default.GetUserData(), 0);
304
liblas::uint8_t const data = 7; // dummy value
305
m_default.SetUserData(data);
307
ensure_equals("invalid user data value",
308
m_default.GetUserData(), data);
316
ensure_equals("invalid default time",
317
m_default.GetTime(), 0);
319
double const time = 3.14; // dummy value
320
m_default.SetTime(time);
322
ensure_equals("invalid time",
323
m_default.GetTime(), time);
326
// Test IsValid method
333
liblas::uint16_t const outofrange = 8;
334
p.SetReturnNumber(outofrange);
335
// XXX: Bit flag overflowed, so point data recognized as valid
336
//ensure_not(p.IsValid());
341
liblas::uint16_t const outofrange = 8;
342
p.SetNumberOfReturns(outofrange);
343
// XXX: Bit flag overflowed, so point data recognized as valid
344
//ensure_not(p.IsValid());
349
liblas::uint16_t const outofrange = 2;
350
p.SetScanDirection(outofrange);
351
// XXX: Bit flag overflowed, so point data recognized as valid
352
//ensure_not(p.IsValid());
357
liblas::uint16_t const outofrange = 2;
358
p.SetFlightLineEdge(outofrange);
359
// XXX: Bit flag overflowed, so point data recognized as valid
360
//ensure_not(p.IsValid());
365
liblas::int8_t const outofrange = 91;
366
p.SetScanAngleRank(outofrange);
367
ensure_not(p.IsValid());
376
ensure_equals("invalid default red color",
377
m_default.GetColor().GetRed(), 0);
379
ensure_equals("invalid default green color",
380
m_default.GetColor().GetGreen(), 0);
382
ensure_equals("invalid default blue color",
383
m_default.GetColor().GetBlue(), 0);
385
liblas::LASColor color;
390
m_default.SetColor(color);
392
ensure_equals("invalid set red color",
393
m_default.GetColor().GetRed(), 211);
395
ensure_equals("invalid set green color",
396
m_default.GetColor().GetGreen(), 211);
398
ensure_equals("invalid set blue color",
399
m_default.GetColor().GetBlue(), 211);
401
liblas::LASPoint p = m_default;
403
ensure_equals("invalid copied red color",
404
p.GetColor().GetRed(), 211);
406
ensure_equals("invalid copied green color",
407
p.GetColor().GetGreen(), 211);
409
ensure_equals("invalid copied blue color",
410
p.GetColor().GetBlue(), 211);