#!/bin/sh
# PCP QA Test No. 849
# pmie extensions for string-valued expressions
#
# Copyright (c) 2016 Ken McDonell.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.product
. ./common.filter
. ./common.check

status=1	# failure is the default!
$sudo rm -rf $tmp $tmp.* $seq.full
trap "cd $here; rm -rf $tmp $tmp.*; exit \$status" 0 1 2 3 15

_filter()
{
    sed \
	-e 's/[A-Z][a-z][a-z] [A-Z][a-z][a-z]  *[0-9][0-9]* [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/DATE/' \
	-e 's/DATE [12][0-9][0-9][0-9]/DATE/' \
	-e '/evaluator exiting/s/pmie([0-9][0-9]*)/pmie(PID)/' \
	-e '/Performance Co-Pilot Inference Engine/s/Version .*/Version .../'
}

# mapping to 0x0 -> (nil) needed for C compilers that don't do the
# (nil) translation automatically for a printf %p
#
_filter2()
{
    sed \
	-e 's/0x0\([ (]\)/(nil)\1/g' \
	-e 's/0x0$/(nil)/' \
	-e "s@$tmp@TMP@g" \
    | $PCP_AWK_PROG '
$1 == "pmie:"		{ print; next }
/failed: /		{ print; next }
$1 == "bundle:"	{ skip=1 }
skip == 1		{ if ($1 == "Rule:") skip = 0 }
skip == 1		{ next }
			{ print }' >$tmp.tmp
    tr ' =' '\012' <$tmp.tmp \
    | grep '0x' \
    | $PCP_AWK_PROG >$tmp.sed '
BEGIN	{ n = 0 }
    	{ if (seen[$1] == 1) next
	  printf "s/%s/ADDR%03d/\n",$1,n
	  n++
	  seen[$1] = 1
	}'
    sed -f $tmp.sed <$tmp.tmp
}

# real QA test starts here
echo "Error cases ..."

cat <<'End-of-File' >$tmp.pmie.00
sample.long.ten == "foo" -> print "blah";
End-of-File

for x in $tmp.pmie.*
do
    echo | tee -a $seq.full
    echo "Test: `echo $x | sed -e "s;$tmp.pmie.;;"`" | tee -a $seq.full
    cat $x | tee -a $seq.full >>$seq.full
    pmie -Dappl0,appl1 -c $x -t 2 -T 1sec >$tmp.out 2>$tmp.err
    echo "=== pmie output ===" >>$seq.full
    cat $tmp.out >>$seq.full
    echo >>$seq.full
    echo "=== pmie errors ===" >>$seq.full
    cat $tmp.err >>$seq.full

    _filter2 <$tmp.err | _filter
    _filter <$tmp.out
done

# success, all done
status=0

exit
