#! /bin/bash
# This script tests: pgmnoise
# Also requires: pgmhist pamvalidate pamfile

echo "Test 1."
echo "Should print: 2132901423 10015" # (Mersenne Twister)
#                   1663614689 10015 (Glibc rand())
#                   3516404574 10015 (MAC OS rand())
pgmnoise --randomseed=0 100 100 | cksum


echo "Test 2."
# Output is similar to that of Test 2. of random-generator.test
# The lowest four decimal digits are printed.

pgmnoise --randomseed=5489 -maxval=9999 -plain 5 20


echo "Test 3."
for maxval in `seq 16` 255 65535
  do
  echo ${maxval}
  pgmnoise -maxval=${maxval} -randomseed=1 -plain 16 1 | tr '\n' ' '
  done
echo

echo "Test 4."
# Check for maxval violation
for maxval in `seq 16` 30 31 32 254 255 256 65534 65535
  do
  echo -n ${maxval} " "
  pgmnoise -maxval=${maxval} -randomseed=1 -plain ${maxval} 10 | \
    pamvalidate | pamfile
  done

echo "Test 5."
echo "Should print four identical lines"
# width height values do not affect random number sequence
for xysize in "1 10000" "100 100" "250 40" "1000 10"
  do pgmnoise --randomseed=0 ${xysize} | pgmhist -mach | cksum
  done


tmpdir=${tmpdir:-/tmp}
messages=${tmpdir}/messages

echo "Test 6."
echo "First column should be 2^n - 1"
# The "pool" method of generating pixvals is used iff maxval is
# a power of 2 minus 1: 1, 3, 7, 15, 31 ...
for maxval in `seq 35; seq 60 69; seq 120 129; seq 250 259`
  do
  pgmnoise -maxval=${maxval} -randomseed=1 -verbose 1 1 > /dev/null \
  2> ${messages}
  awk -v mval=${maxval} '/method/ && /pool/ { print mval, $0 }' ${messages}
  done

  rm ${messages}


echo "Test Invalid"

test_out=${tmpdir}/test_out

echo 1>&2
echo "Invalid command-line arguments." 1>&2
echo "Error messages should appear below the line." 1>&2
echo "-----------------------------------------------------------" 1>&2

pgmnoise 0 0  > ${test_out} || \
  echo -n "Expected failure 1"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise 0 1  > ${test_out} || \
  echo -n "Expected failure 2"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise 1 0  > ${test_out} || \
  echo -n "Expected failure 3"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise      > ${test_out} || \
  echo -n "Expected failure 4"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise 1    > ${test_out} || \
  echo -n "Expected failure 5"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise 100 -1 > ${test_out} || \
  echo -n "Expected failure 6"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise -randomseed=-1 100 100  > ${test_out} || \
  echo -n "Expected failure 7"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise -maxval=-1 100 100  > ${test_out} || \
  echo -n "Expected failure 8"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise -maxval=0 100 100  > ${test_out} || \
  echo -n "Expected failure 9"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}

pgmnoise -maxval=$((256 * 256 * 256 * 256)) 10 10 > ${test_out} || \
  echo -n "Expected failure 10"
  test -s ${test_out}; echo " "$?
  rm -f ${test_out}
