comparison OrthancFramework/UnitTestsSources/ImageTests.cpp @ 4325:b96aedfa8cc1

unit tests now running in WebAssembly
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 24 Nov 2020 16:21:29 +0100
parents cb9aef006229
children d9473bd5ed43
comparison
equal deleted inserted replaced
4324:433e94d08e36 4325:b96aedfa8cc1
34 #include "../Sources/Images/JpegWriter.h" 34 #include "../Sources/Images/JpegWriter.h"
35 #include "../Sources/Images/PngReader.h" 35 #include "../Sources/Images/PngReader.h"
36 #include "../Sources/Images/PngWriter.h" 36 #include "../Sources/Images/PngWriter.h"
37 #include "../Sources/Images/PamReader.h" 37 #include "../Sources/Images/PamReader.h"
38 #include "../Sources/Images/PamWriter.h" 38 #include "../Sources/Images/PamWriter.h"
39 #include "../Sources/SystemToolbox.h"
40 #include "../Sources/Toolbox.h" 39 #include "../Sources/Toolbox.h"
41 #include "../Sources/TemporaryFile.h" 40
41 #if ORTHANC_SANDBOXED != 1
42 # include "../Sources/SystemToolbox.h"
43 # include "../Sources/TemporaryFile.h"
44 #endif
42 45
43 #include <stdint.h> 46 #include <stdint.h>
44 47
45 48
46 TEST(PngWriter, ColorPattern) 49 TEST(PngWriter, ColorPattern)
63 } 66 }
64 67
65 Orthanc::ImageAccessor accessor; 68 Orthanc::ImageAccessor accessor;
66 accessor.AssignReadOnly(Orthanc::PixelFormat_RGB24, width, height, pitch, &image[0]); 69 accessor.AssignReadOnly(Orthanc::PixelFormat_RGB24, width, height, pitch, &image[0]);
67 70
71 std::string f;
72
73 #if ORTHANC_SANDBOXED == 1
74 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
75 #else
68 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/ColorPattern.png", accessor); 76 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/ColorPattern.png", accessor);
69
70 std::string f, md5;
71 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/ColorPattern.png"); 77 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/ColorPattern.png");
78 #endif
79
80 std::string md5;
72 Orthanc::Toolbox::ComputeMD5(md5, f); 81 Orthanc::Toolbox::ComputeMD5(md5, f);
73 ASSERT_EQ("604e785f53c99cae6ea4584870b2c41d", md5); 82 ASSERT_EQ("604e785f53c99cae6ea4584870b2c41d", md5);
74 } 83 }
84
75 85
76 TEST(PngWriter, Gray8Pattern) 86 TEST(PngWriter, Gray8Pattern)
77 { 87 {
78 Orthanc::PngWriter w; 88 Orthanc::PngWriter w;
79 int width = 17; 89 int width = 17;
91 } 101 }
92 102
93 Orthanc::ImageAccessor accessor; 103 Orthanc::ImageAccessor accessor;
94 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale8, width, height, pitch, &image[0]); 104 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale8, width, height, pitch, &image[0]);
95 105
106 std::string f;
107
108 #if ORTHANC_SANDBOXED == 1
109 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
110 #else
96 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray8Pattern.png", accessor); 111 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray8Pattern.png", accessor);
97
98 std::string f, md5;
99 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray8Pattern.png"); 112 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray8Pattern.png");
113 #endif
114
115 std::string md5;
100 Orthanc::Toolbox::ComputeMD5(md5, f); 116 Orthanc::Toolbox::ComputeMD5(md5, f);
101 ASSERT_EQ("5a9b98bea3d0a6d983980cc38bfbcdb3", md5); 117 ASSERT_EQ("5a9b98bea3d0a6d983980cc38bfbcdb3", md5);
102 } 118 }
103 119
104 TEST(PngWriter, Gray16Pattern) 120 TEST(PngWriter, Gray16Pattern)
120 } 136 }
121 } 137 }
122 138
123 Orthanc::ImageAccessor accessor; 139 Orthanc::ImageAccessor accessor;
124 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]); 140 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]);
141
142 std::string f;
143
144 #if ORTHANC_SANDBOXED == 1
145 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
146 #else
125 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray16Pattern.png", accessor); 147 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray16Pattern.png", accessor);
126
127 std::string f, md5;
128 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray16Pattern.png"); 148 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray16Pattern.png");
149 #endif
150
151 std::string md5;
129 Orthanc::Toolbox::ComputeMD5(md5, f); 152 Orthanc::Toolbox::ComputeMD5(md5, f);
130 ASSERT_EQ("0785866a08bf0a02d2eeff87f658571c", md5); 153 ASSERT_EQ("0785866a08bf0a02d2eeff87f658571c", md5);
131 } 154 }
132 155
133 TEST(PngWriter, EndToEnd) 156 TEST(PngWriter, EndToEnd)
173 ASSERT_EQ(*p, v); 196 ASSERT_EQ(*p, v);
174 } 197 }
175 } 198 }
176 } 199 }
177 200
201 #if ORTHANC_SANDBOXED != 1
178 { 202 {
179 Orthanc::TemporaryFile tmp; 203 Orthanc::TemporaryFile tmp;
180 tmp.Write(s); 204 tmp.Write(s);
181 205
182 Orthanc::PngReader r2; 206 Orthanc::PngReader r2;
195 { 219 {
196 ASSERT_EQ(*p, v); 220 ASSERT_EQ(*p, v);
197 } 221 }
198 } 222 }
199 } 223 }
224 #endif
200 } 225 }
201 226
202 227
203 228
204 229
216 *p = value++; 241 *p = value++;
217 } 242 }
218 } 243 }
219 244
220 Orthanc::JpegWriter w; 245 Orthanc::JpegWriter w;
246 Orthanc::IImageWriter::WriteToMemory(w, s, img);
247
248 #if ORTHANC_SANDBOXED != 1
221 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/hello.jpg", img); 249 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/hello.jpg", img);
222
223 Orthanc::IImageWriter::WriteToMemory(w, s, img);
224 Orthanc::SystemToolbox::WriteFile(s, "UnitTestsResults/hello2.jpg"); 250 Orthanc::SystemToolbox::WriteFile(s, "UnitTestsResults/hello2.jpg");
225 251
226 std::string t; 252 std::string t;
227 Orthanc::SystemToolbox::ReadFile(t, "UnitTestsResults/hello.jpg"); 253 Orthanc::SystemToolbox::ReadFile(t, "UnitTestsResults/hello.jpg");
228 ASSERT_EQ(s.size(), t.size()); 254 ASSERT_EQ(s.size(), t.size());
229 ASSERT_EQ(0, memcmp(s.c_str(), t.c_str(), s.size())); 255 ASSERT_EQ(0, memcmp(s.c_str(), t.c_str(), s.size()));
230 } 256 #endif
231 257 }
232 { 258
233 Orthanc::JpegReader r1, r2; 259 {
234 r1.ReadFromFile("UnitTestsResults/hello.jpg"); 260 Orthanc::JpegReader r1;
261 r1.ReadFromMemory(s);
235 ASSERT_EQ(16u, r1.GetWidth()); 262 ASSERT_EQ(16u, r1.GetWidth());
236 ASSERT_EQ(16u, r1.GetHeight()); 263 ASSERT_EQ(16u, r1.GetHeight());
237 264
238 r2.ReadFromMemory(s); 265 #if ORTHANC_SANDBOXED != 1
266 Orthanc::JpegReader r2;
267 r2.ReadFromFile("UnitTestsResults/hello.jpg");
239 ASSERT_EQ(16u, r2.GetWidth()); 268 ASSERT_EQ(16u, r2.GetWidth());
240 ASSERT_EQ(16u, r2.GetHeight()); 269 ASSERT_EQ(16u, r2.GetHeight());
241 270 #endif
271
272 unsigned int value = 0;
242 for (unsigned int y = 0; y < r1.GetHeight(); y++) 273 for (unsigned int y = 0; y < r1.GetHeight(); y++)
243 { 274 {
244 const uint8_t* p1 = reinterpret_cast<const uint8_t*>(r1.GetConstRow(y)); 275 const uint8_t* p1 = reinterpret_cast<const uint8_t*>(r1.GetConstRow(y));
276 #if ORTHANC_SANDBOXED != 1
245 const uint8_t* p2 = reinterpret_cast<const uint8_t*>(r2.GetConstRow(y)); 277 const uint8_t* p2 = reinterpret_cast<const uint8_t*>(r2.GetConstRow(y));
246 for (unsigned int x = 0; x < r1.GetWidth(); x++) 278 #endif
247 { 279 for (unsigned int x = 0; x < r1.GetWidth(); x++, value++)
280 {
281 ASSERT_TRUE(*p1 == value ||
282 *p1 == value - 1 ||
283 *p1 == value + 1); // Be tolerant to differences of +-1
284
285 #if ORTHANC_SANDBOXED != 1
248 ASSERT_EQ(*p1, *p2); 286 ASSERT_EQ(*p1, *p2);
287 p2++;
288 #endif
289
290 p1++;
249 } 291 }
250 } 292 }
251 } 293 }
252 } 294 }
253 295
272 } 314 }
273 315
274 Orthanc::ImageAccessor accessor; 316 Orthanc::ImageAccessor accessor;
275 accessor.AssignReadOnly(Orthanc::PixelFormat_RGB24, width, height, pitch, &image[0]); 317 accessor.AssignReadOnly(Orthanc::PixelFormat_RGB24, width, height, pitch, &image[0]);
276 318
319 std::string f;
320
321 #if ORTHANC_SANDBOXED == 1
322 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
323 #else
277 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/ColorPattern.pam", accessor); 324 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/ColorPattern.pam", accessor);
278
279 std::string f, md5;
280 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/ColorPattern.pam"); 325 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/ColorPattern.pam");
326 #endif
327
328 std::string md5;
281 Orthanc::Toolbox::ComputeMD5(md5, f); 329 Orthanc::Toolbox::ComputeMD5(md5, f);
282 ASSERT_EQ("81a3441754e88969ebbe53e69891e841", md5); 330 ASSERT_EQ("81a3441754e88969ebbe53e69891e841", md5);
283 } 331 }
284 332
285 TEST(PamWriter, Gray8Pattern) 333 TEST(PamWriter, Gray8Pattern)
300 } 348 }
301 349
302 Orthanc::ImageAccessor accessor; 350 Orthanc::ImageAccessor accessor;
303 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale8, width, height, pitch, &image[0]); 351 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale8, width, height, pitch, &image[0]);
304 352
353 std::string f;
354
355 #if ORTHANC_SANDBOXED == 1
356 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
357 #else
305 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray8Pattern.pam", accessor); 358 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray8Pattern.pam", accessor);
306
307 std::string f, md5;
308 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray8Pattern.pam"); 359 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray8Pattern.pam");
360 #endif
361
362 std::string md5;
309 Orthanc::Toolbox::ComputeMD5(md5, f); 363 Orthanc::Toolbox::ComputeMD5(md5, f);
310 ASSERT_EQ("7873c408d26a9d11dd1c1de5e69cc0a3", md5); 364 ASSERT_EQ("7873c408d26a9d11dd1c1de5e69cc0a3", md5);
311 } 365 }
312 366
313 TEST(PamWriter, Gray16Pattern) 367 TEST(PamWriter, Gray16Pattern)
329 } 383 }
330 } 384 }
331 385
332 Orthanc::ImageAccessor accessor; 386 Orthanc::ImageAccessor accessor;
333 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]); 387 accessor.AssignReadOnly(Orthanc::PixelFormat_Grayscale16, width, height, pitch, &image[0]);
388
389 std::string f;
390
391 #if ORTHANC_SANDBOXED == 1
392 Orthanc::IImageWriter::WriteToMemory(w, f, accessor);
393 #else
334 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray16Pattern.pam", accessor); 394 Orthanc::IImageWriter::WriteToFile(w, "UnitTestsResults/Gray16Pattern.pam", accessor);
335
336 std::string f, md5;
337 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray16Pattern.pam"); 395 Orthanc::SystemToolbox::ReadFile(f, "UnitTestsResults/Gray16Pattern.pam");
396 #endif
397
398 std::string md5;
338 Orthanc::Toolbox::ComputeMD5(md5, f); 399 Orthanc::Toolbox::ComputeMD5(md5, f);
339 ASSERT_EQ("b268772bf28f3b2b8520ff21c5e3dcb6", md5); 400 ASSERT_EQ("b268772bf28f3b2b8520ff21c5e3dcb6", md5);
340 } 401 }
341 402
342 TEST(PamWriter, EndToEnd) 403 TEST(PamWriter, EndToEnd)
405 ASSERT_EQ(v, *p); 466 ASSERT_EQ(v, *p);
406 } 467 }
407 } 468 }
408 } 469 }
409 470
471 #if ORTHANC_SANDBOXED != 1
410 { 472 {
411 Orthanc::TemporaryFile tmp; 473 Orthanc::TemporaryFile tmp;
412 tmp.Write(s); 474 tmp.Write(s);
413 475
414 Orthanc::PamReader r2(true); 476 Orthanc::PamReader r2(true);
428 { 490 {
429 ASSERT_EQ(*p, v); 491 ASSERT_EQ(*p, v);
430 } 492 }
431 } 493 }
432 } 494 }
433 495 #endif
496
497 #if ORTHANC_SANDBOXED != 1
434 { 498 {
435 Orthanc::TemporaryFile tmp; 499 Orthanc::TemporaryFile tmp;
436 tmp.Write(s); 500 tmp.Write(s);
437 501
438 // true means "enforce alignment by using a temporary buffer" 502 // true means "enforce alignment by using a temporary buffer"
453 { 517 {
454 ASSERT_EQ(*p, v); 518 ASSERT_EQ(*p, v);
455 } 519 }
456 } 520 }
457 } 521 }
458 522 #endif
459 } 523 }