#!/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 \*\*\* $*
	$*
}

IMAGE=vgl_6548_0026a.bmp
WIDTH=128
HEIGHT=95
IMGDIR=@CMAKE_CURRENT_SOURCE_DIR@/testimages
OUTDIR=`mktemp -d /tmp/__croptest_output.XXXXXX`
EXEDIR=@CMAKE_CURRENT_BINARY_DIR@

if [ -d $OUTDIR ]; then
	rm -rf $OUTDIR
fi
mkdir -p $OUTDIR

exec >$EXEDIR/croptest.log

echo "============================================================"
echo "$IMAGE ($WIDTH x $HEIGHT)"
echo "============================================================"
echo

for PROGARG in "" -progressive; do

	cp $IMGDIR/$IMAGE $OUTDIR
	basename=`basename $IMAGE .bmp`
	echo "------------------------------------------------------------"
	echo "Generating test images"
	echo "------------------------------------------------------------"
	echo
	runme $EXEDIR/cjpeg $PROGARG -grayscale -outfile $OUTDIR/${basename}_GRAY.jpg $IMGDIR/${basename}.bmp
	runme $EXEDIR/cjpeg $PROGARG -sample 2x2 -outfile $OUTDIR/${basename}_420.jpg $IMGDIR/${basename}.bmp
	runme $EXEDIR/cjpeg $PROGARG -sample 2x1 -outfile $OUTDIR/${basename}_422.jpg $IMGDIR/${basename}.bmp
	runme $EXEDIR/cjpeg $PROGARG -sample 1x2 -outfile $OUTDIR/${basename}_440.jpg $IMGDIR/${basename}.bmp
	runme $EXEDIR/cjpeg $PROGARG -sample 1x1 -outfile $OUTDIR/${basename}_444.jpg $IMGDIR/${basename}.bmp
	echo

	for NSARG in "" -nosmooth; do

		for COLORSARG in "" "-colors 256 -dither none -onepass"; do

			for Y in {0..16}; do

				for H in {1..16}; do

					X=$(( (Y*16)%128 ))
					W=$(( WIDTH-X-7 ))
					if [ $Y -le 15 ]; then
						CROPSPEC="${W}x${H}+${X}+${Y}"
					else
						Y2=$(( HEIGHT-H ));
						CROPSPEC="${W}x${H}+${X}+${Y2}"
					fi

					echo "------------------------------------------------------------"
					echo $PROGARG $NSARG $COLORSARG -crop $CROPSPEC
					echo "------------------------------------------------------------"
					echo
					for samp in GRAY 420 422 440 444; do
						$EXEDIR/djpeg $NSARG $COLORSARG -rgb -outfile $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}.jpg
						convert -crop $CROPSPEC $OUTDIR/${basename}_${samp}_full.ppm $OUTDIR/${basename}_${samp}_ref.ppm
						runme $EXEDIR/djpeg $NSARG $COLORSARG -crop $CROPSPEC -rgb -outfile $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}.jpg
						runme cmp $OUTDIR/${basename}_${samp}.ppm $OUTDIR/${basename}_${samp}_ref.ppm
					done
					echo

				done

			done

		done

	done

done

echo SUCCESS!
