#!/bin/sh

RUNS=1
COUNT=1000
C=0
R=0

ERRORS=0
MSG=""

TXT="$1"

if [ -z "$TXT" ] ; then
   TXT='test'
fi

echo '+-----------------------------------------------------------------------------+'
echo '| HEXDUMP test script v 1.1                                                   |'
echo '+-----------------------------------------------------------------------------+'
echo '| Using test string "'${TXT}'"'
echo '| Cycles: '${RUNS}
echo '| Executions per cycle: '${COUNT}
echo '+----------------------------------------------------------------------------->'


echo "Executing test 'echo'..."
C=0
R=0
ERRORS=0
while [ "$R" -lt "$RUNS" ] ; do
   # echo "  --> run `expr $R + 1` of $RUNS"
   C=0
   while [ "$C" -lt "$COUNT" ] ; do
      MSG=`echo "$TXT" | wc -c 2>/dev/null`
      [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
      C=`expr $C + 1`
   done
   sleep 1
   R=`expr $R + 1`
done
if [ "$ERRORS" -gt "0" ] ; then
   echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
else
   echo "   :) stable"
fi

echo '|-----------------------------------------------------------------------------|'

if [ "`which hexdump | cut -c1-5`" = "/usr/" ] ; then
   echo "Executing test 'echo ... | hexdump'..."
   C=0
   R=0
   ERRORS=0
   while [ "$R" -lt "$RUNS" ] ; do
      # echo "  --> run `expr $R + 1` of $RUNS"
      C=0
      while [ "$C" -lt "$COUNT" ] ; do
         MSG=`echo "$TXT" | hexdump 2>/dev/null`
         [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
         C=`expr $C + 1`
      done
      sleep 1
      R=`expr $R + 1`
   done
   if [ "$ERRORS" -gt "0" ] ; then
      echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
   else
      echo "   :) stable"
   fi

   echo '|-----------------------------------------------------------------------------|'

   echo "Executing test 'echo ... | hexdump -x'..."
   C=0
   R=0
   ERRORS=0
   while [ "$R" -lt "$RUNS" ] ; do
      # echo "  --> run `expr $R + 1` of $RUNS"
      C=0
      while [ "$C" -lt "$COUNT" ] ; do
         MSG=`echo "$TXT" | hexdump -x 2>/dev/null`
         [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
         C=`expr $C + 1`
      done
      sleep 1
      R=`expr $R + 1`
   done
   if [ "$ERRORS" -gt "0" ] ; then
      echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
   else
      echo "   :) stable"
   fi

   echo '|-----------------------------------------------------------------------------|'

   echo "Executing test 'echo ... | hexdump -x -s 1'..."
   C=0
   R=0
   ERRORS=0
   while [ "$R" -lt "$RUNS" ] ; do
      # echo "  --> run `expr $R + 1` of $RUNS"
      C=0
      while [ "$C" -lt "$COUNT" ] ; do
         MSG=`echo "$TXT" | hexdump -x -s 1 2>/dev/null`
         [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
         C=`expr $C + 1`
      done
      sleep 1
      R=`expr $R + 1`
   done
   if [ "$ERRORS" -gt "0" ] ; then
      echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
   else
      echo "   :) stable"
   fi

   echo '|-----------------------------------------------------------------------------|'

   if [ "`which iconv | cut -c1-5`" = "/usr/" ] ; then
      echo "Executing test 'echo ... | sed ... | iconv ... | hexdump -x -s 2'..."
      C=0
      R=0
      ERRORS=0
      while [ "$R" -lt "$RUNS" ] ; do
         # echo "  --> run `expr $R + 1` of $RUNS"
         C=0
         while [ "$C" -lt "$COUNT" ] ; do
            MSG=`echo "$TXT" | sed 's/\\\\/\\\\\\\\/g' | iconv -t utf-16 | hexdump -x -s 2 2>/dev/null`
            [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
            C=`expr $C + 1`
         done
         sleep 1
         R=`expr $R + 1`
      done
      if [ "$ERRORS" -gt "0" ] ; then
         echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
      else
         echo "   :) stable"
      fi

      echo '|-----------------------------------------------------------------------------|'
   fi
fi

if [ "`which xxd | cut -c1-5`" = "/usr/" ] ; then
   echo "Executing test 'echo ... | xxd -s 1'..."
   C=0
   R=0
   ERRORS=0
   while [ "$R" -lt "$RUNS" ] ; do
      # echo "  --> run `expr $R + 1` of $RUNS"
      C=0
      while [ "$C" -lt "$COUNT" ] ; do
         MSG=`echo "$TXT" | xxd -s 1 2>/dev/null`
         [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
         C=`expr $C + 1`
      done
      sleep 1
      R=`expr $R + 1`
   done
   if [ "$ERRORS" -gt "0" ] ; then
      echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
   else
      echo "   :) stable"
   fi

   echo '|-----------------------------------------------------------------------------|'
fi

if [ "`which od | cut -c1-5`" = "/usr/" ] ; then
   echo "Executing test 'echo ... | od -x -j 1'..."
   C=0
   R=0
   ERRORS=0
   while [ "$R" -lt "$RUNS" ] ; do
      # echo "  --> run `expr $R + 1` of $RUNS"
      C=0
      while [ "$C" -lt "$COUNT" ] ; do
         MSG=`echo "$TXT" | od -x -j 1 2>/dev/null`
         [ -n "$MSG" ] || ERRORS=`expr $ERRORS + 1`
         C=`expr $C + 1`
      done
      sleep 1
      R=`expr $R + 1`
   done
   if [ "$ERRORS" -gt "0" ] ; then
      echo "   :( $ERRORS / `expr $COUNT \* $RUNS` executions failed"
   else
      echo "   :) stable"
   fi
fi



