add the test_thumbnail script too

This commit is contained in:
John Cupitt 2014-11-20 14:36:04 +00:00
parent fcc790f6c0
commit 3d1469179c
4 changed files with 83 additions and 14 deletions

View File

@ -1,8 +1,17 @@
EXTRA_DIST = \ EXTRA_DIST = \
images \ images \
variables.sh.in variables.sh.in \
test_cli.sh \
test_formats.sh \
test_seq.sh \
test_thumbnail.sh \
test_threading.sh \
test_arithmetic.py \
test_colour.py \
test_conversion.py
# don't run test_thumbnail.sh by default, it takes ages
TESTS = \ TESTS = \
test_cli.sh \ test_cli.sh \
test_formats.sh \ test_formats.sh \
@ -12,3 +21,7 @@ TESTS = \
test_colour.py \ test_colour.py \
test_conversion.py test_conversion.py
clean-local:
-rm -rf tmp
-rm -f *.pyc

View File

@ -40,8 +40,6 @@ save_load() {
# is a difference beyond a threshold? return 0 (meaning all ok) or 1 (meaning # is a difference beyond a threshold? return 0 (meaning all ok) or 1 (meaning
# error, or outside threshold) # error, or outside threshold)
#
# use bc since bash does not support fp math
break_threshold() { break_threshold() {
diff=$1 diff=$1
threshold=$2 threshold=$2
@ -56,7 +54,7 @@ test_difference() {
vips subtract $before $after $tmp/difference.v vips subtract $before $after $tmp/difference.v
vips abs $tmp/difference.v $tmp/abs.v vips abs $tmp/difference.v $tmp/abs.v
dif=`vips max $tmp/abs.v` dif=$(vips max $tmp/abs.v)
if break_threshold $dif $threshold; then if break_threshold $dif $threshold; then
echo "save / load difference is $dif" echo "save / load difference is $dif"
@ -106,9 +104,9 @@ test_raw() {
echo -n "testing $(basename $in) raw ... " echo -n "testing $(basename $in) raw ... "
vips copy $in $tmp/before.v vips copy $in $tmp/before.v
width=`vipsheader -f Xsize $tmp/before.v` width=$(vipsheader -f width $tmp/before.v)
height=`vipsheader -f Ysize $tmp/before.v` height=$(vipsheader -f height $tmp/before.v)
bands=`vipsheader -f Bands $tmp/before.v` bands=$(vipsheader -f bands $tmp/before.v)
vips rawsave $tmp/before.v $tmp/raw vips rawsave $tmp/before.v $tmp/raw
vips rawload $tmp/raw $tmp/after.v $width $height $bands vips rawload $tmp/raw $tmp/after.v $width $height $bands

View File

@ -2,14 +2,12 @@
# set -x # set -x
source variables.sh . ./variables.sh
chain=1 chain=1
# im_benchmark needs a labq # im_benchmark needs a labq
vips im_sRGB2XYZ $image $tmp/t1.v vips colourspace $image $tmp/t3.v labq
vips im_XYZ2Lab $tmp/t1.v $tmp/t2.v
vips im_Lab2LabQ $tmp/t2.v $tmp/t3.v
for tile in 10 64 128 512; do for tile in 10 64 128 512; do
# benchmark includes a dither which will vary with tile size # benchmark includes a dither which will vary with tile size
@ -22,9 +20,9 @@ for tile in 10 64 128 512; do
vips --vips-concurrency=$cpus \ vips --vips-concurrency=$cpus \
--vips-tile-width=$tile --vips-tile-height=$tile \ --vips-tile-width=$tile --vips-tile-height=$tile \
im_benchmarkn $tmp/t3.v $tmp/t7.v $chain im_benchmarkn $tmp/t3.v $tmp/t7.v $chain
vips im_subtract $tmp/t5.v $tmp/t7.v $tmp/t8.v vips subtract $tmp/t5.v $tmp/t7.v $tmp/t8.v
vips im_abs $tmp/t8.v $tmp/t9.v vips abs $tmp/t8.v $tmp/t9.v
max=`vips im_max $tmp/t9.v` max=$(vips max $tmp/t9.v)
if [ $max -gt 0 ]; then if [ $max -gt 0 ]; then
break break
fi fi

60
test/test_thumbnail.sh Executable file
View File

@ -0,0 +1,60 @@
#!/bin/sh
# resize a 1000x1000 image to every size in [500,1000] with every interpolator
# and check for black lines
# see https://github.com/jcupitt/libvips/issues/131
# set -x
. ./variables.sh
# make a 1000x1000 mono test image
echo building test image ...
vips extract_band $image $tmp/t1.v 1
vips replicate $tmp/t1.v $tmp/t2.v 2 2
vips extract_area $tmp/t2.v $tmp/t1.v 10 10 1000 1000
# is a difference beyond a threshold? return 0 (meaning all ok) or 1 (meaning
# error, or outside threshold)
break_threshold() {
diff=$1
threshold=$2
return $(echo "$diff > $threshold" | bc -l)
}
for interp in nearest bilinear bicubic lbb nohalo vsqbs; do
size=1000
while [ $size -gt 499 ]; do
echo -n "testing $interp, size to $size ... "
vipsthumbnail $tmp/t1.v -o $tmp/t2.v --size $size --interpolator $interp
if [ $(vipsheader -f width $tmp/t2.v) -ne $size ]; then
echo failed -- bad size
exit
fi
if [ $(vipsheader -f height $tmp/t2.v) -ne $size ]; then
echo failed -- bad size
exit
fi
vips project $tmp/t2.v $tmp/cols.v $tmp/rows.v
min=$(vips min $tmp/cols.v)
if break_threshold $min 0; then
echo failed -- has a black column
exit
fi
min=$(vips min $tmp/rows.v)
if break_threshold $min 0; then
echo failed -- has a black row
exit
fi
echo ok
size=$(($size-1))
done
done