#!/bin/bash
set -eu
unique_inorder_values=$(seq 100)
unique_first_10=$(echo "$unique_inorder_values" | head -10)
unique_last_10=$(echo "$unique_inorder_values" | tail -10 | tac)
dup_out_of_order_values=$(seq 100; seq 100)
dup_inorder_values=$(echo "$dup_out_of_order_values" | sort -n)
dup_first_10=$(echo "$dup_inorder_values" | head -10)
dup_last_10=$(echo "$dup_inorder_values" | tail -10 | tac)
rnd_values=$(echo "$dup_inorder_values" | sort -R)
fail=False
function compare
{
fn="$1"
echo "Checking $fn" 1>&2
input="$2"
expected_output="$3"
actual_output=$(echo "$input" | eval "$fn" 2>&1)
if [ "$expected_output" != "$actual_output" ]
then
echo "$fn failed:" 1>&2
echo "Expected: $expected_output" 1>&2
echo "Got: $actual_output" 1>&2
fail=True
else
fail=False
fi
}
for kind in '--use-bisect' '--use-treap' '--use-heap' '--use-rbtree' '--use-fibonacci-heap'
do
for input in "$dup_inorder_values" "$rnd_values"
do
compare "./highest -n 10 $kind" "$input" "$dup_last_10"
compare "./highest -n 10 -r $kind" "$input" "$dup_first_10"
case "$kind" in
"--use-heap") ;;
'--use-fibonacci-heap') ;;
*)
compare "./highest -n 10 --disallow-duplicates $kind" "$input" "$unique_last_10"
compare "./highest -n 10 --disallow-duplicates -r $kind" "$input" "$unique_first_10"
;;
esac
done
done
if [ "$fail" = True ]
then
exit 1
else
exit 0
fi