@@ -467,6 +467,83 @@ benchmark_image_span_passing()
467467
468468
469469
470+ void
471+ test_image_span_within_span ()
472+ {
473+ print (" \n test_image_span_within_span\n " );
474+
475+ const int nchans = 3 , xres = 5 , yres = 7 , zres = 11 ;
476+ const int chstride = sizeof (float ), xstride = chstride * nchans,
477+ ystride = xstride * xres, zstride = ystride * yres;
478+ float array[nchans * xres * yres * zres];
479+ cspan<float > aspan (array);
480+ // It better worrk with the same origin and default strides
481+ OIIO_CHECK_ASSERT (
482+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
483+ chstride, xstride, ystride, zstride),
484+ aspan));
485+ // Make sure too big are recognized
486+ OIIO_CHECK_FALSE (
487+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
488+ chstride + 1 , xstride, ystride,
489+ zstride),
490+ aspan));
491+ OIIO_CHECK_FALSE (
492+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
493+ chstride, xstride + 1 , ystride,
494+ zstride),
495+ aspan));
496+ OIIO_CHECK_FALSE (
497+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
498+ chstride, xstride, ystride + 1 ,
499+ zstride),
500+ aspan));
501+ OIIO_CHECK_FALSE (
502+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
503+ chstride, xstride, ystride,
504+ zstride + 1 ),
505+ aspan));
506+ // Make sure negagive strides used CORRECTLY are recognized
507+ OIIO_CHECK_FALSE (
508+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
509+ -chstride, xstride, ystride, zstride),
510+ aspan));
511+ OIIO_CHECK_FALSE (
512+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
513+ chstride, -xstride, ystride, zstride),
514+ aspan));
515+ OIIO_CHECK_FALSE (
516+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
517+ chstride, xstride, -ystride, zstride),
518+ aspan));
519+ OIIO_CHECK_FALSE (
520+ image_span_within_span (image_span (array, nchans, xres, yres, zres,
521+ chstride, xstride, ystride, -zstride),
522+ aspan));
523+ // Make sure negagive strides used CORRECTLY are recognized
524+ OIIO_CHECK_ASSERT (
525+ image_span_within_span (image_span (array + nchans - 1 , nchans, xres,
526+ yres, zres, -chstride, xstride,
527+ ystride, zstride),
528+ aspan));
529+ OIIO_CHECK_ASSERT (
530+ image_span_within_span (image_span (array + (xres - 1 ) * nchans, nchans,
531+ xres, yres, zres, chstride, -xstride,
532+ ystride, zstride),
533+ aspan));
534+ OIIO_CHECK_ASSERT (
535+ image_span_within_span (image_span (array + (yres - 1 ) * xres * nchans,
536+ nchans, xres, yres, zres, chstride,
537+ xstride, -ystride, zstride),
538+ aspan));
539+ OIIO_CHECK_ASSERT (image_span_within_span (
540+ image_span (array + (zres - 1 ) * xres * yres * nchans, nchans, xres,
541+ yres, zres, chstride, xstride, ystride, -zstride),
542+ aspan));
543+ }
544+
545+
546+
470547int
471548main (int /* argc*/ , char * /* argv*/ [])
472549{
@@ -496,6 +573,8 @@ main(int /*argc*/, char* /*argv*/[])
496573 test_image_span_convert_image<uint16_t , half>();
497574 test_image_span_convert_image<half, uint16_t >();
498575
576+ test_image_span_within_span ();
577+
499578 benchmark_image_span_passing ();
500579
501580 return unit_test_failures;
0 commit comments