#!/bin/sh

trap 'rm stdout* && exit' INT EXIT

N=0
P=0
F=0
esc=$(printf '\033')

echo "" > failed

run_test()
{
	echo "==> \"$1\" \"$2\" $3"
	day=$(echo $3 | sed 's/^0*//g')
	script -c "/usr/src/usr.bin/cal/$1" stdout > /dev/null 2>&1
	script -c "/usr/bin/$2" stdout.expected > /dev/null 2>&1
	sed -i '/^Script/d' stdout*
	[ -n $day ] && sed -Ei "s/${esc}\[7m( *${day})${esc}\[27m/\1/g" stdout
	diff -up stdout stdout.expected
	if [ $? -ne 0 ]
	then
		echo $1 >> failed
		F=$((F+1))
	else
		P=$((P+1))
	fi
	N=$((N+1))
}

# Leap years repeat every 28 years, non-leap years more frequently
for y in $(seq 2000 2028)
do
	for m in $(seq -w 12)
	do
		for d in $(seq -w 31)
		do
			d=$(date -ujf %Y-%m-%d +%d $y-$m-$d)
			j=$(date -ujf %Y-%m-%d +%j $y-$m-$d)
			TERM=xterm-256color
			# without highlight
			run_test "cal $m $y" "cal $m $y" 0
			run_test "cal -m $m $y" "cal -m $m $y" 0
			run_test "cal -w $m $y" "cal -w $m $y" 0
			run_test "cal -mw $m $y" "cal -mw $m $y" 0
			run_test "cal -j $m $y" "cal -j $m $y" 0
			run_test "cal -jm $m $y" "cal -jm $m $y" 0
			run_test "cal -y $y" "cal -y $y" 0
			run_test "cal -ym $y" "cal -ym $y" 0
			run_test "cal -yw $y" "cal -yw $y" 0
			run_test "cal -ymw $y" "cal -ymw $y" 0
			run_test "cal -yj $y" "cal -yj $y" 0
			run_test "cal -yjm $y" "cal -yjm $y" 0

			# with highlight
			run_test "cal -h$y-$m-$d $m $y" "cal $m $y" $d
			run_test "cal -mh$y-$m-$d $m $y" "cal -m $m $y" $d
			run_test "cal -wh$y-$m-$d $m $y" "cal -w $m $y" $d
			run_test "cal -mwh$y-$m-$d $m $y" "cal -mw $m $y" $d
			run_test "cal -jh$y-$m-$d $m $y" "cal -j $m $y" $j
			run_test "cal -jmh$y-$m-$d $m $y" "cal -jm $m $y" $j
			run_test "cal -yh$y-$m-$d $y" "cal -y $y" $d
			run_test "cal -ymh$y-$m-$d $y" "cal -ym $y" $d
			run_test "cal -ywh$y-$m-$d $y" "cal -yw $y" $d
			run_test "cal -ymwh$y-$m-$d $y" "cal -ymw $y" $d
			run_test "cal -yjh$y-$m-$d $y" "cal -yj $y" $j
			run_test "cal -yjmh$y-$m-$d $y" "cal -yjm $y" $j

			TERM=dumb
			run_test "cal -h$y-$m-$d $m $y" "cal $m $y" $d
			run_test "cal -mh$y-$m-$d $m $y" "cal -m $m $y" $d
			run_test "cal -wh$y-$m-$d $m $y" "cal -w $m $y" $d
			run_test "cal -mwh$y-$m-$d $m $y" "cal -mw $m $y" $d
			run_test "cal -jh$y-$m-$d $m $y" "cal -j $m $y" $j
			run_test "cal -jmh$y-$m-$d $m $y" "cal -jm $m $y" $j
			run_test "cal -yh$y-$m-$d $y" "cal -y $y" $d
			run_test "cal -ymh$y-$m-$d $y" "cal -ym $y" $d
			run_test "cal -ywh$y-$m-$d $y" "cal -yw $y" $d
			run_test "cal -ymwh$y-$m-$d $y" "cal -ymw $y" $d
			run_test "cal -yjh$y-$m-$d $y" "cal -yj $y" $j
			run_test "cal -yjmh$y-$m-$d $y" "cal -yjm $y" $j
		done
	done
done

printf "Tests:\t%s\nPassed:\t%s\nFailed:\t%s\n\n" $N $P $F
