]> granicus.if.org Git - libjpeg-turbo/commitdiff
Add more extensive TurboJPEG regression tests
authorDRC <dcommander@users.sourceforge.net>
Tue, 31 Jan 2012 07:56:44 +0000 (07:56 +0000)
committerDRC <dcommander@users.sourceforge.net>
Tue, 31 Jan 2012 07:56:44 +0000 (07:56 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/libjpeg-turbo/code/branches/1.2.x@762 632fc199-4ca6-4c93-a231-07263d6284db

BUILDING.txt
Makefile.am
configure.ac
testimages/nightshot_iso_100.bmp [new file with mode: 0644]
testimages/vgl_5674_0098.bmp [new file with mode: 0644]
testimages/vgl_6434_0018a.bmp [new file with mode: 0644]
testimages/vgl_6548_0026a.bmp [new file with mode: 0644]
tjbenchtest.in [new file with mode: 0755]
tjexampletest.in [new file with mode: 0755]

index 730eaf725cbe846ebbf4f3fe074c16f66075d2ed..0b3e055f8d09faf1ca2971cdb6301999b6491121 100644 (file)
@@ -694,3 +694,30 @@ configuration you built (such as {build_directory}\Debug\ or
 
 Building a Windows installer requires the Nullsoft Install System
 (http://nsis.sourceforge.net/.)  makensis.exe should be in your PATH.
+
+
+*******************************************************************************
+**     Regression testing
+*******************************************************************************
+
+The most common way to test libjpeg-turbo is by invoking 'make test' on
+Unix/Linux platforms or 'ctest' on Windows platforms, once the build has
+completed.  This runs a series of tests to ensure that mathematical
+compatibility has been maintained between libjpeg-turbo and libjpeg v6b.  This
+also invokes the TurboJPEG unit tests, which ensure that the colorspace
+extensions, YUV encoding, decompression scaling, and other features of the
+TurboJPEG C and Java APIs are working properly (and, by extension, that the
+equivalent features of the underlying libjpeg API are also working.)
+
+Invoking 'make testclean' or 'nmake testclean' (if using NMake) or building
+the 'testclean' target (if using the Visual Studio IDE) will clean up the
+output images generated by 'make test'.
+
+On Unix/Linux platforms, more extensive tests of the TurboJPEG/OSS C and Java
+wrappers can be run by invoking 'make tjtest'.  These extended TurboJPEG tests
+essentially iterate through all of the available features of the TurboJPEG APIs
+that are not covered by the TurboJPEG unit tests (this includes the lossless
+transform options) and compare the images generated by each feature to images
+generated using the equivalent feature in the libjpeg API.  The extended
+TurboJPEG tests are meant to test for regressions in the TurboJPEG wrappers,
+not in the underlying libjpeg-turbo library.
index eaf9fe0550357823e89d3a90a5da063e9a234bc7..76ca6b92f8d19b524220b60e8ea259619386f23e 100644 (file)
@@ -236,6 +236,14 @@ testclean:
        rm -f *_440_*.jpg
        rm -f *_440.yuv
 
+
+tjtest:
+       sh ./tjbenchtest
+if WITH_JAVA
+       sh ./tjexampletest
+endif
+
+
 if X86_64
 
 install-exec-hook:
index 440f454ec071c2bbb21f888a30be8e8fbcf3d1c9..2930c27ccbc5a34ebfab4129283d3e641a073768 100644 (file)
@@ -368,6 +368,8 @@ AC_CONFIG_FILES([pkgscripts/Info.plist:release/Info.plist.in])
 AC_CONFIG_FILES([pkgscripts/uninstall:release/uninstall.in])
 AC_CONFIG_FILES([pkgscripts/makesunpkg:release/makesunpkg.in])
 AC_CONFIG_FILES([pkgscripts/pkginfo:release/pkginfo.in])
+AC_CONFIG_FILES([tjbenchtest])
+AC_CONFIG_FILES([tjexampletest])
 AC_CONFIG_FILES([libjpeg.map])
 AC_CONFIG_FILES([Makefile simd/Makefile])
 AC_CONFIG_FILES([java/Makefile])
diff --git a/testimages/nightshot_iso_100.bmp b/testimages/nightshot_iso_100.bmp
new file mode 100644 (file)
index 0000000..5a27151
Binary files /dev/null and b/testimages/nightshot_iso_100.bmp differ
diff --git a/testimages/vgl_5674_0098.bmp b/testimages/vgl_5674_0098.bmp
new file mode 100644 (file)
index 0000000..d74ea64
Binary files /dev/null and b/testimages/vgl_5674_0098.bmp differ
diff --git a/testimages/vgl_6434_0018a.bmp b/testimages/vgl_6434_0018a.bmp
new file mode 100644 (file)
index 0000000..25e77b7
Binary files /dev/null and b/testimages/vgl_6434_0018a.bmp differ
diff --git a/testimages/vgl_6548_0026a.bmp b/testimages/vgl_6548_0026a.bmp
new file mode 100644 (file)
index 0000000..41e35b5
Binary files /dev/null and b/testimages/vgl_6548_0026a.bmp differ
diff --git a/tjbenchtest.in b/tjbenchtest.in
new file mode 100755 (executable)
index 0000000..0e8f963
--- /dev/null
@@ -0,0 +1,162 @@
+#!/bin/bash
+
+set -u
+set -e
+trap onexit INT
+trap onexit TERM
+trap onexit EXIT
+
+onexit()
+{
+       if [ -d $OUTDIR ]; then
+               rm -rf $OUTDIR
+       fi
+}
+
+runme()
+{
+       echo \*\*\* $*
+       $*
+}
+
+EXT=bmp
+IMAGES="vgl_5674_0098.${EXT} vgl_6434_0018a.${EXT} vgl_6548_0026a.${EXT} nightshot_iso_100.${EXT}"
+IMGDIR=@srcdir@/testimages
+OUTDIR=__tjbenchtest_output
+EXEDIR=.
+BMPARG=
+if [ "$EXT" = "bmp" ]; then BMPARG=-bmp; fi
+
+if [ -d $OUTDIR ]; then
+       rm -rf $OUTDIR
+fi
+mkdir -p $OUTDIR
+
+exec >$EXEDIR/tjbenchtest.log
+
+# Standard tests
+for image in $IMAGES; do
+
+       cp $IMGDIR/$image $OUTDIR
+       basename=`basename $image .${EXT}`
+       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_GRAY_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_420_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_422_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.${EXT} >$OUTDIR/${basename}_444_cjpeg.jpg
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/djpeg -rgb $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg.${EXT}
+       done
+       for samp in 420 422; do
+               $EXEDIR/djpeg -nosmooth $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
+       done
+
+       # Compression
+       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -quiet -benchtime 0.01
+       for s in GRAY 420 422 444; do
+               runme cmp $OUTDIR/${basename}_${s}_Q95.jpg $OUTDIR/${basename}_${s}_cjpeg.jpg
+       done
+
+       # Tiled compression & decompression
+       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01
+       for samp in GRAY 444; do
+               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg.${EXT}
+                       rm $i
+               done
+       done
+       runme $EXEDIR/tjbench $OUTDIR/$image 95 -rgb -tile -quiet -benchtime 0.01 -fastupsample
+       for samp in 420 422; do
+               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
+                       rm $i
+               done
+       done
+
+       # Tiled decompression
+       for samp in GRAY 444; do
+               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01
+               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg.${EXT}
+                       rm $i
+               done
+       done
+       for samp in 420 422; do
+               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -tile -quiet -benchtime 0.01 -fastupsample
+               for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                       $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                       runme cmp $i $OUTDIR/${basename}_${samp}_djpeg_nosmooth.${EXT}
+                       rm $i
+               done
+       done
+
+       # Scaled decompression
+       for scale in 2 4 8; do
+               for samp in GRAY 420 422 444; do
+                       $EXEDIR/djpeg -rgb -scale 1/${scale} $BMPARG $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_1_${scale}_djpeg.${EXT}
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -scale 1/${scale} -quiet -benchtime 0.01
+                       runme cmp $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT} $OUTDIR/${basename}_${samp}_1_${scale}_djpeg.${EXT}
+                       rm $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT}
+               done
+       done
+
+       # Transforms
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/jpegtran -flip horizontal -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg
+               $EXEDIR/jpegtran -flip vertical -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg
+               $EXEDIR/jpegtran -transpose -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg
+               $EXEDIR/jpegtran -transverse -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 90 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 180 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg
+               $EXEDIR/jpegtran -rotate 270 -trim $OUTDIR/${basename}_${samp}_Q95.jpg >$OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg
+       done
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444; do
+                       $EXEDIR/djpeg -rgb $BMPARG $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
+                               rm $i
+                       done
+               done
+               for samp in 420 422; do
+                       $EXEDIR/djpeg -nosmooth -rgb $BMPARG $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -fastupsample
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_${samp}_${xform}_jpegtran.${EXT}
+                               rm $i
+                       done
+               done
+       done
+
+       # Grayscale transform
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -tile -quiet -benchtime 0.01 -grayscale
+                       for i in $OUTDIR/${basename}_${samp}_Q95_[0-9]*[0-9]x[0-9]*[0-9].${EXT} \
+                               $OUTDIR/${basename}_${samp}_Q95_full.${EXT}; do
+                               runme cmp $i $OUTDIR/${basename}_GRAY_${xform}_jpegtran.${EXT}
+                               rm $i
+                       done
+               done
+       done
+
+       # Transforms with scaling
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       for scale in 2 4 8; do
+                               $EXEDIR/djpeg -rgb -scale 1/${scale} $BMPARG $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.${EXT}
+                               runme $EXEDIR/tjbench $OUTDIR/${basename}_${samp}_Q95.jpg $BMPARG -$xform -scale 1/${scale} -quiet -benchtime 0.01
+                               runme cmp $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT} $OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.${EXT}
+                               rm $OUTDIR/${basename}_${samp}_Q95_1_${scale}.${EXT}
+                       done
+               done
+       done
+
+done
+
+echo SUCCESS!
diff --git a/tjexampletest.in b/tjexampletest.in
new file mode 100755 (executable)
index 0000000..35105b9
--- /dev/null
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+set -u
+set -e
+trap onexit INT
+trap onexit TERM
+trap onexit EXIT
+
+onexit()
+{
+       if [ -d $OUTDIR ]; then
+               rm -rf $OUTDIR
+       fi
+}
+
+runme()
+{
+       echo \*\*\* $*
+       $*
+}
+
+IMAGES="vgl_5674_0098.bmp vgl_6434_0018a.bmp vgl_6548_0026a.bmp nightshot_iso_100.bmp"
+IMGDIR=@srcdir@/testimages
+OUTDIR=__tjexampletest_output
+EXEDIR=.
+JAVA="@JAVA@ -cp java/turbojpeg.jar -Djava.library.path=.libs"
+
+if [ -d $OUTDIR ]; then
+       rm -rf $OUTDIR
+fi
+mkdir -p $OUTDIR
+
+exec >$EXEDIR/tjexampletest.log
+
+for image in $IMAGES; do
+
+       cp $IMGDIR/$image $OUTDIR
+       basename=`basename $image .bmp`
+       $EXEDIR/cjpeg -quality 95 -dct fast -grayscale $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_GRAY_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x2 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_420_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 2x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_422_cjpeg.jpg
+       $EXEDIR/cjpeg -quality 95 -dct fast -sample 1x1 $IMGDIR/${basename}.bmp >$OUTDIR/${basename}_444_cjpeg.jpg
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_djpeg.bmp
+       done
+
+       # Compression
+       for samp in GRAY 420 422 444; do
+               runme $JAVA TJExample $OUTDIR/$image $OUTDIR/${basename}_${samp}.jpg -q 95 -samp ${samp}
+               runme cmp $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_cjpeg.jpg
+       done
+
+       # Decompression
+       for samp in 420 GRAY 420 422 444; do
+               runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}.bmp
+               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}.bmp $OUTDIR/${basename}_${samp}_djpeg.bmp
+               rm $OUTDIR/${basename}_${samp}.bmp
+       done
+
+       # Scaled decompression
+       for scale in 2 4 8; do
+               for samp in GRAY 420 422 444; do
+                       $EXEDIR/djpeg -rgb -bmp -scale 1/${scale} $OUTDIR/${basename}_${samp}_cjpeg.jpg >$OUTDIR/${basename}_${samp}_1_${scale}_djpeg.bmp
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_1_${scale}.bmp -scale 1/${scale}
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_1_${scale}.bmp $OUTDIR/${basename}_${samp}_1_${scale}_djpeg.bmp
+                       rm $OUTDIR/${basename}_${samp}_1_${scale}.bmp
+               done
+       done
+
+       # Transforms
+       for samp in GRAY 420 422 444; do
+               $EXEDIR/jpegtran -crop 70x60+16+16 -flip horizontal -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_hflip_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -flip vertical -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_vflip_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -transpose -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_transpose_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -transverse -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_transverse_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 90 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot90_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 180 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot180_jpegtran.jpg
+               $EXEDIR/jpegtran -crop 70x60+16+16 -rotate 270 -trim $OUTDIR/${basename}_${samp}.jpg >$OUTDIR/${basename}_${samp}_rot270_jpegtran.jpg
+       done
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 420 422 444; do
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -crop 16,16,70x60
+                       runme cmp $OUTDIR/${basename}_${samp}_${xform}.jpg $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg
+                       $EXEDIR/djpeg -rgb -bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -crop 16,16,70x60
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}.bmp $OUTDIR/${basename}_${samp}_${xform}_jpegtran.bmp
+                       rm $OUTDIR/${basename}_${samp}_${xform}.bmp
+               done
+       done
+
+       # Grayscale transform
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.jpg -$xform -grayscale -crop 16,16,70x60
+                       runme cmp $OUTDIR/${basename}_${samp}_${xform}.jpg $OUTDIR/${basename}_GRAY_${xform}_jpegtran.jpg
+                       runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}.bmp -$xform -grayscale -crop 16,16,70x60
+                       runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}.bmp $OUTDIR/${basename}_GRAY_${xform}_jpegtran.bmp
+                       rm $OUTDIR/${basename}_${samp}_${xform}.bmp
+               done
+       done
+
+       # Transforms with scaling
+       for xform in hflip vflip transpose transverse rot90 rot180 rot270; do
+               for samp in GRAY 444 422 420; do
+                       for scale in 2 4 8; do
+                               $EXEDIR/djpeg -rgb -bmp -scale 1/${scale} $OUTDIR/${basename}_${samp}_${xform}_jpegtran.jpg >$OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.bmp
+                               runme $JAVA TJExample $OUTDIR/${basename}_${samp}.jpg $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp -$xform -scale 1/${scale} -crop 16,16,70x60
+                               runme cmp -i 54:54 $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp $OUTDIR/${basename}_${samp}_${xform}_1_${scale}_jpegtran.bmp
+                               rm $OUTDIR/${basename}_${samp}_${xform}_1_${scale}.bmp
+                       done
+               done
+       done
+
+done
+
+echo SUCCESS!