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/liblas.hpp>
18
liblas::Header m_default;
21
typedef test_group<lasheader_data> tg;
22
typedef tg::object to;
24
tg test_group_lasheader("liblas::Header");
26
// Test default constructor
31
test_default_header(m_default);
34
// Test copy constructor
41
Header copy_of_default(m_default);
42
test_default_header(copy_of_default);
44
std::string sig("LASF and garbage");
48
h1.SetFileSignature(sig);
49
ensure_not(h1.GetFileSignature() == sig);
50
ensure_equals(h1.GetFileSignature().size(), std::string::size_type(4));
51
ensure_equals(h1.GetFileSignature(), Header::FileSignature);
55
ensure_not(h2.GetFileSignature() == sig);
56
ensure_equals(h2.GetFileSignature().size(), std::string::size_type(4));
57
ensure_equals(h2.GetFileSignature(), Header::FileSignature);
61
// Test assignment operator
68
Header copy_of_default;
69
copy_of_default = m_default;
70
test_default_header(copy_of_default);
74
// Test Get/SetFileSignature
81
std::string sig("LASF and garbage");
84
h1.SetFileSignature(sig);
86
ensure_not(h1.GetFileSignature() == sig);
87
ensure_equals(h1.GetFileSignature().size(), std::string::size_type(4));
88
ensure_equals(h1.GetFileSignature(), Header::FileSignature);
93
ensure_not(h2.GetFileSignature() == sig);
94
ensure_equals(h2.GetFileSignature().size(), std::string::size_type(4));
95
ensure_equals(h2.GetFileSignature(), Header::FileSignature);
98
// Test Get/SetFileSourceId
103
using liblas::Header;
104
using boost::uint16_t;
106
uint16_t const id1 = 1;
107
uint16_t const id2 = 65535;
108
uint16_t const overflowed = 0;
111
h1.SetFileSourceId(id1);
112
ensure_equals(h1.GetFileSourceId(), id1);
113
h1.SetFileSourceId(id2);
114
ensure_equals(h1.GetFileSourceId(), id2);
117
# pragma warning(push)
118
# pragma warning(disable: 4305) // truncation from 'int' to 'boost::uint16_t'
119
# pragma warning(disable: 4309) // conditional expression is constant.
122
// Likely compiler warning: truncation from int to boost::uint16_t
123
h1.SetFileSourceId(id2 + 1);
124
ensure_equals(h1.GetFileSourceId(), overflowed);
127
# pragma warning(push)
137
ensure_equals(h.GetReserved(), 0);
139
ensure_equals(h.GetReserved(), 1);
142
// Test Set/GetProjectId
147
std::string strid("030B4A82-1B7C-11CF-9D53-00AA003C9CB6");
148
liblas::guid id(strid.c_str());
153
ensure_not(h.GetProjectId().is_null());
154
ensure_equals(h.GetProjectId(), id);
157
// Test handling minor/major version
164
h.SetVersionMajor(1);
165
h.SetVersionMinor(0);
166
ensure_equals(h.GetVersionMajor(), 1);
167
ensure_equals(h.GetVersionMinor(), 0);
169
h.SetVersionMajor(1);
170
h.SetVersionMinor(1);
171
ensure_equals(h.GetVersionMajor(), 1);
172
ensure_equals(h.GetVersionMinor(), 1);
176
h.SetVersionMajor(2);
177
ensure("std::out_of_range was not thrown", false);
179
catch (std::out_of_range const& e)
181
ensure(e.what(), true);
186
h.SetVersionMinor(4);
187
ensure("std::out_of_range was not thrown", false);
189
catch (std::out_of_range const& e)
191
ensure(e.what(), true);
195
// Test Get/SetSystemId
200
using liblas::Header;
202
std::string sysid1("Short Sys Id"); // 12 bytes
203
std::string::size_type const len1 = sysid1.size();
204
std::string sysid2("Long System Identifier - XXX YYY"); // 32 bytes
205
std::string::size_type const len2 = sysid2.size();
209
h.SetSystemId(sysid1);
210
ensure_equals(h.GetSystemId(), sysid1);
211
ensure_equals(h.GetSystemId().size(), len1);
212
ensure_equals(h.GetSystemId(true).size(), std::string::size_type(32));
214
h.SetSystemId(sysid2);
215
ensure_equals(h.GetSystemId(), sysid2);
216
ensure_equals(h.GetSystemId().size(), len2);
217
ensure_equals(h.GetSystemId(true).size(), std::string::size_type(32));
220
// Test Get/SetSoftwareId
225
using liblas::Header;
227
std::string softid1("Short Soft Id"); // 13 bytes
228
std::string::size_type const len1 = softid1.size();
229
std::string softid2("Long Software Identifier - XX YY"); // 32 bytes
230
std::string::size_type const len2 = softid2.size();
233
h.SetSoftwareId(softid1);
234
ensure_equals(h.GetSoftwareId(), softid1);
235
ensure_equals(h.GetSoftwareId().size(), len1);
236
ensure_equals(h.GetSoftwareId(true).size(), std::string::size_type(32));
238
h.SetSoftwareId(softid2);
239
ensure_equals(h.GetSoftwareId(), softid2);
240
ensure_equals(h.GetSoftwareId().size(), len2);
241
ensure_equals(h.GetSoftwareId(true).size(), std::string::size_type(32));
244
// Test GetPointRecordsByReturnCount
249
typedef ::liblas::Header::RecordsByReturnArray::size_type size_type;
250
typedef ::boost::uint32_t count_type;
253
// NOTE: The committee in its infinite stupidity decided to increase the size of this array to 7 at 1.3.
254
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
255
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
257
h.SetPointRecordsByReturnCount(0, 100);
258
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
259
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
260
ensure_equals(h.GetPointRecordsByReturnCount().at(0), count_type(100));
262
h.SetPointRecordsByReturnCount(1, 101);
263
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
264
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
265
ensure_equals(h.GetPointRecordsByReturnCount().at(1), count_type(101));
267
h.SetPointRecordsByReturnCount(2, 102);
268
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
269
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
270
ensure_equals(h.GetPointRecordsByReturnCount().at(2), count_type(102));
272
h.SetPointRecordsByReturnCount(3, 103);
273
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
274
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
275
ensure_equals(h.GetPointRecordsByReturnCount().at(3), count_type(103));
277
h.SetPointRecordsByReturnCount(4, 104);
278
ensure(h.GetPointRecordsByReturnCount().size() >= 5);
279
ensure(h.GetPointRecordsByReturnCount().size() <= 7);
280
ensure_equals(h.GetPointRecordsByReturnCount().at(4), count_type(104));
285
h.SetPointRecordsByReturnCount(8, 500);
286
ensure("std::out_of_range not thrown", false);
288
catch (std::out_of_range const& e)
290
ensure(e.what(), true);
300
liblas::SpatialReference srs = h.GetSRS();
302
ensure_equals(srs.GetProj4(), "");
303
ensure_equals(srs.GetWKT(), "");