|
3 | 3 | ** Copyright Contributors to the OpenEXR Project.
|
4 | 4 | */
|
5 | 5 |
|
| 6 | +#if (defined(_WIN32) || defined(_WIN64)) |
| 7 | +# ifdef NOMINMAX |
| 8 | +# undef NOMINMAX |
| 9 | +# endif |
| 10 | +# define NOMINMAX |
| 11 | +#endif |
| 12 | + |
6 | 13 | #include <openexr.h>
|
7 | 14 |
|
8 | 15 | #include "base_units.h"
|
|
14 | 21 |
|
15 | 22 | #include <ImfSystemSpecific.h>
|
16 | 23 | #include "../../lib/OpenEXRCore/internal_cpuid.h"
|
| 24 | +#include "../../lib/OpenEXRCore/internal_coding.h" |
17 | 25 |
|
18 | 26 | void
|
19 | 27 | testBase (const std::string& tempdir)
|
20 | 28 | {
|
21 |
| - int maj, min, patch; |
| 29 | + int major, minor, patch; |
22 | 30 | const char* extra;
|
23 | 31 | const char* compextra = COMP_EXTRA;
|
24 | 32 |
|
25 |
| - exr_get_library_version (&maj, &min, &patch, &extra); |
26 |
| - if (maj != COMP_MAJ || min != COMP_MIN || patch != COMP_PATCH || |
| 33 | + exr_get_library_version (&major, &minor, &patch, &extra); |
| 34 | + if (major != COMP_MAJ || minor != COMP_MIN || patch != COMP_PATCH || |
27 | 35 | !strcmp (extra, compextra))
|
28 | 36 | {
|
29 |
| - std::cerr << "ERROR testing library, wrong library version: " << maj |
30 |
| - << "." << min << "." << patch; |
| 37 | + std::cerr << "ERROR testing library, wrong library version: " << major |
| 38 | + << "." << minor << "." << patch; |
31 | 39 | if (extra[0] != '\0') std::cerr << "-" << extra;
|
32 | 40 | std::cerr << " vs compiled in " << COMP_MAJ << "." << COMP_MIN << "."
|
33 | 41 | << COMP_PATCH;
|
34 | 42 | if (compextra[0] != '\0') std::cerr << "-" << compextra;
|
35 | 43 | std::cerr << std::endl;
|
36 | 44 | EXRCORE_TEST (false);
|
37 | 45 | }
|
38 |
| - std::cout << "Testing OpenEXR library version: " << maj << "." << min << "." |
| 46 | + std::cout << "Testing OpenEXR library version: " << major << "." << minor << "." |
39 | 47 | << patch;
|
40 | 48 | if (extra[0] != '\0') std::cout << "-" << extra;
|
41 | 49 | std::cout << std::endl;
|
42 | 50 |
|
43 |
| - exr_get_library_version (NULL, &min, &patch, &extra); |
44 |
| - exr_get_library_version (&maj, NULL, &patch, &extra); |
45 |
| - exr_get_library_version (&maj, &min, NULL, &extra); |
46 |
| - exr_get_library_version (&maj, &min, &patch, NULL); |
| 51 | + exr_get_library_version (NULL, &minor, &patch, &extra); |
| 52 | + exr_get_library_version (&major, NULL, &patch, &extra); |
| 53 | + exr_get_library_version (&major, &minor, NULL, &extra); |
| 54 | + exr_get_library_version (&major, &minor, &patch, NULL); |
47 | 55 | }
|
48 | 56 |
|
49 | 57 | void
|
@@ -298,6 +306,36 @@ testBaseLimits (const std::string& tempdir)
|
298 | 306 | }
|
299 | 307 | exr_set_default_maximum_image_size (0, 0);
|
300 | 308 | exr_set_default_maximum_tile_size (0, 0);
|
| 309 | + |
| 310 | + exr_set_default_zip_compression_level (4); |
| 311 | + exr_get_default_zip_compression_level (&mxw); |
| 312 | + EXRCORE_TEST (mxw == 4); |
| 313 | + |
| 314 | + exr_set_default_zip_compression_level (-1); |
| 315 | + exr_get_default_zip_compression_level (&mxw); |
| 316 | + EXRCORE_TEST (mxw == -1); |
| 317 | + exr_set_default_zip_compression_level (-2); |
| 318 | + exr_get_default_zip_compression_level (&mxw); |
| 319 | + EXRCORE_TEST (mxw == -1); |
| 320 | + |
| 321 | + exr_set_default_zip_compression_level (15); |
| 322 | + exr_get_default_zip_compression_level (&mxw); |
| 323 | + EXRCORE_TEST (mxw == 9); |
| 324 | + exr_set_default_zip_compression_level (-1); |
| 325 | + |
| 326 | + float dcq; |
| 327 | + exr_set_default_dwa_compression_quality (23.f); |
| 328 | + exr_get_default_dwa_compression_quality (&dcq); |
| 329 | + EXRCORE_TEST (dcq == 23.f); |
| 330 | + |
| 331 | + exr_set_default_dwa_compression_quality (-1.f); |
| 332 | + exr_get_default_dwa_compression_quality (&dcq); |
| 333 | + EXRCORE_TEST (dcq == 0.f); |
| 334 | + |
| 335 | + exr_set_default_dwa_compression_quality (200.f); |
| 336 | + exr_get_default_dwa_compression_quality (&dcq); |
| 337 | + EXRCORE_TEST (dcq == 100.f); |
| 338 | + exr_set_default_dwa_compression_quality (45.f); |
301 | 339 | }
|
302 | 340 |
|
303 | 341 | void
|
@@ -337,4 +375,34 @@ void testCPUIdent (const std::string& tempdir)
|
337 | 375 | << "CPU Id test sse2 mismatch: " << hsse2 << " vs " << (int)id.sse2 << std::endl;
|
338 | 376 | EXRCORE_TEST (false);
|
339 | 377 | }
|
| 378 | + |
| 379 | +#if defined(__x86_64__) || defined(_M_X64) |
| 380 | + if (has_native_half () != (hf16c && havx)) |
| 381 | + { |
| 382 | + std::cerr << "CPU Id test has native half mismatch" << std::endl; |
| 383 | + EXRCORE_TEST (false); |
| 384 | + } |
| 385 | +#else |
| 386 | + has_native_half (); |
| 387 | +#endif |
| 388 | +} |
| 389 | + |
| 390 | +void testHalf (const std::string& tempdir) |
| 391 | +{ |
| 392 | + EXRCORE_TEST (half_to_float (0) == 0.f); |
| 393 | + EXRCORE_TEST (float_to_half (0.f) == 0); |
| 394 | + EXRCORE_TEST (float_to_half_int (0.f) == 0); |
| 395 | + EXRCORE_TEST (half_to_float_int (0) == 0); |
| 396 | + EXRCORE_TEST (half_to_uint (0) == 0); |
| 397 | + EXRCORE_TEST (half_to_uint (0x8000) == 0); |
| 398 | + EXRCORE_TEST (float_to_uint (0) == 0); |
| 399 | + EXRCORE_TEST (float_to_uint (-1.f) == 0); |
| 400 | + EXRCORE_TEST (float_to_uint_int (0) == 0); |
| 401 | + |
| 402 | + EXRCORE_TEST (uint_to_half (0) == 0); |
| 403 | + EXRCORE_TEST (uint_to_half (128344) == 0x7c00); |
| 404 | + |
| 405 | + EXRCORE_TEST (uint_to_float (0) == 0.f); |
| 406 | + EXRCORE_TEST (uint_to_float_int (0) == 0); |
340 | 407 | }
|
| 408 | + |
0 commit comments