|
19 | 19 |
|
20 | 20 |
|
21 | 21 | class CPUProcessorTest(unittest.TestCase): |
22 | | - FLOAT_DELTA = 1e+5 |
| 22 | + FLOAT_DELTA = 1e-5 |
23 | 23 | UINT_DELTA = 1 |
24 | 24 |
|
25 | 25 | @classmethod |
@@ -391,79 +391,53 @@ def test_apply_rgb_buffer_column_major(self): |
391 | 391 | return |
392 | 392 |
|
393 | 393 | for arr, cpu_proc_fwd, cpu_proc_inv in [ |
394 | | - ( |
395 | | - self.float_rgb_2d, |
396 | | - self.default_cpu_proc_fwd, |
397 | | - self.default_cpu_proc_inv |
398 | | - ), |
399 | | - ( |
400 | | - self.float_rgb_3d, |
401 | | - self.default_cpu_proc_fwd, |
402 | | - self.default_cpu_proc_inv |
403 | | - ), |
404 | | - ( |
405 | | - self.half_rgb_2d, |
406 | | - self.half_cpu_proc_fwd, |
407 | | - self.half_cpu_proc_inv |
408 | | - ), |
409 | | - ( |
410 | | - self.half_rgb_3d, |
411 | | - self.half_cpu_proc_fwd, |
412 | | - self.half_cpu_proc_inv |
413 | | - ), |
414 | | - ( |
415 | | - self.uint16_rgb_2d, |
416 | | - self.uint16_cpu_proc_fwd, |
417 | | - self.uint16_cpu_proc_inv |
418 | | - ), |
419 | | - ( |
420 | | - self.uint16_rgb_3d, |
421 | | - self.uint16_cpu_proc_fwd, |
422 | | - self.uint16_cpu_proc_inv |
423 | | - ), |
424 | | - ( |
425 | | - self.uint8_rgb_2d, |
426 | | - self.uint8_cpu_proc_fwd, |
427 | | - self.uint8_cpu_proc_inv |
428 | | - ), |
429 | | - ( |
430 | | - self.uint8_rgb_3d, |
431 | | - self.uint8_cpu_proc_fwd, |
432 | | - self.uint8_cpu_proc_inv |
433 | | - ), |
| 394 | + (self.float_rgb_2d, self.default_cpu_proc_fwd, self.default_cpu_proc_inv), |
| 395 | + (self.float_rgb_3d, self.default_cpu_proc_fwd, self.default_cpu_proc_inv), |
| 396 | + (self.half_rgb_2d, self.half_cpu_proc_fwd, self.half_cpu_proc_inv), |
| 397 | + (self.half_rgb_3d, self.half_cpu_proc_fwd, self.half_cpu_proc_inv), |
| 398 | + (self.uint16_rgb_2d, self.uint16_cpu_proc_fwd, self.uint16_cpu_proc_inv), |
| 399 | + (self.uint16_rgb_3d, self.uint16_cpu_proc_fwd, self.uint16_cpu_proc_inv), |
| 400 | + (self.uint8_rgb_2d, self.uint8_cpu_proc_fwd, self.uint8_cpu_proc_inv), |
| 401 | + (self.uint8_rgb_3d, self.uint8_cpu_proc_fwd, self.uint8_cpu_proc_inv), |
434 | 402 | ]: |
435 | | - # Transpose to column-major format and |
436 | | - # Process duplicate array |
| 403 | + # Transpose to F-order (column-major) |
437 | 404 | arr_copy = arr.copy().T |
438 | 405 |
|
439 | | - cpu_proc_fwd.applyRGB(arr_copy) |
440 | | - for i in range(arr_copy.size): |
| 406 | + # Expect runtime error for non-C-contiguous array |
| 407 | + with self.assertRaises(RuntimeError): |
| 408 | + cpu_proc_fwd.applyRGB(arr_copy) |
| 409 | + |
| 410 | + # Convert back to C-order and retry |
| 411 | + arr_copy_c = np.ascontiguousarray(arr_copy) |
| 412 | + cpu_proc_fwd.applyRGB(arr_copy_c) |
| 413 | + |
| 414 | + # Check forward transform |
| 415 | + for i in range(arr_copy_c.size): |
441 | 416 | if arr.dtype in (np.float32, np.float16): |
442 | 417 | self.assertAlmostEqual( |
443 | | - arr_copy.flat[i], |
| 418 | + arr_copy_c.flat[i], |
444 | 419 | arr.flat[i] * 0.5, |
445 | 420 | delta=self.FLOAT_DELTA |
446 | 421 | ) |
447 | 422 | else: |
448 | 423 | self.assertAlmostEqual( |
449 | | - arr_copy.flat[i], |
| 424 | + arr_copy_c.flat[i], |
450 | 425 | arr.flat[i] // 2, |
451 | 426 | delta=self.UINT_DELTA |
452 | 427 | ) |
453 | 428 |
|
454 | | - # Inverse transform roundtrips values in place |
455 | | - cpu_proc_inv.applyRGB(arr_copy) |
456 | | - |
457 | | - for i in range(arr_copy.size): |
| 429 | + # Inverse transform |
| 430 | + cpu_proc_inv.applyRGB(arr_copy_c) |
| 431 | + for i in range(arr_copy_c.size): |
458 | 432 | if arr.dtype in (np.float32, np.float16): |
459 | 433 | self.assertAlmostEqual( |
460 | | - arr_copy.flat[i], |
| 434 | + arr_copy_c.flat[i], |
461 | 435 | arr.flat[i], |
462 | 436 | delta=self.FLOAT_DELTA |
463 | 437 | ) |
464 | 438 | else: |
465 | 439 | self.assertAlmostEqual( |
466 | | - arr_copy.flat[i], |
| 440 | + arr_copy_c.flat[i], |
467 | 441 | arr.flat[i], |
468 | 442 | delta=self.UINT_DELTA |
469 | 443 | ) |
|
0 commit comments