From 9cd4e4b026bd39275daf29d697aa56a8810a9bff Mon Sep 17 00:00:00 2001 From: DRC Date: Tue, 31 Jan 2012 07:56:44 +0000 Subject: [PATCH] Add more extensive TurboJPEG regression tests 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 | 27 ++++++ Makefile.am | 8 ++ configure.ac | 2 + testimages/nightshot_iso_100.bmp | Bin 0 -> 82998 bytes testimages/vgl_5674_0098.bmp | Bin 0 -> 34614 bytes testimages/vgl_6434_0018a.bmp | Bin 0 -> 34614 bytes testimages/vgl_6548_0026a.bmp | Bin 0 -> 36534 bytes tjbenchtest.in | 162 +++++++++++++++++++++++++++++++ tjexampletest.in | 116 ++++++++++++++++++++++ 9 files changed, 315 insertions(+) create mode 100644 testimages/nightshot_iso_100.bmp create mode 100644 testimages/vgl_5674_0098.bmp create mode 100644 testimages/vgl_6434_0018a.bmp create mode 100644 testimages/vgl_6548_0026a.bmp create mode 100755 tjbenchtest.in create mode 100755 tjexampletest.in diff --git a/BUILDING.txt b/BUILDING.txt index 730eaf7..0b3e055 100644 --- a/BUILDING.txt +++ b/BUILDING.txt @@ -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. diff --git a/Makefile.am b/Makefile.am index eaf9fe0..76ca6b9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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: diff --git a/configure.ac b/configure.ac index 440f454..2930c27 100644 --- a/configure.ac +++ b/configure.ac @@ -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 index 0000000000000000000000000000000000000000..5a2715165b38146091a7a7c199933267267ec464 GIT binary patch literal 82998 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Þ?3 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 I%3W^xKi*p;1^@s6 literal 0 HcmV?d00001 diff --git a/testimages/vgl_6434_0018a.bmp b/testimages/vgl_6434_0018a.bmp new file mode 100644 index 0000000000000000000000000000000000000000..25e77b76839e47411cebd6f215bc33ef0886add2 GIT binary patch literal 34614 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 b+*v7mm0}&H<@1(pe8}Jp2=iH-jK=&QzfoIe literal 0 HcmV?d00001 diff --git a/testimages/vgl_6548_0026a.bmp b/testimages/vgl_6548_0026a.bmp new file mode 100644 index 0000000000000000000000000000000000000000..41e35b59e0d27f6444d281d4f30400b413c49a2a GIT binary patch literal 36534 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/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 index 0000000..35105b9 --- /dev/null +++ b/tjexampletest.in @@ -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! -- 2.40.0