#!/bin/bash

if [ -z "$RUNLTTV" ]; then
	RUNLTTV=~/devel/lttv/runlttv
fi

function error() {
	echo "$0: $@" >/dev/stderr
}

function usage() {
	echo "Usage: $0 [ -N pattern_name ] [ -n pattern_count ] PATTERN TRACE_PARENT_DIR"
}

if [ ! -x "$RUNLTTV" ]; then
	echo "$0: $RUNLTTV not executable. Edit \$RUNLTTV to point to your lttv source directory." >/dev/stderr
	exit 1;
fi

while getopts ":n:N:" options; do
	case "$options" in
		n) expected_count=$OPTARG;;
		N) name=$OPTARG;;
		h) usage;
		   exit 0;;
		\?) usage
			exit 1;;
		*) usage
			exit 1;;
	esac
done
shift $(($OPTIND - 1))

pattern=$1
if [ -z "$pattern" ]; then
	error "no pattern specified"
	usage
	exit 1
fi

if [ -z "$2" ]; then
	error "no trace directory specified"
	usage
	exit 1
fi
traces=$(find "$2" -mindepth 1 -maxdepth 1 -type d)

echo -n "Analyzing trace ($name): "

cnt=$($RUNLTTV -m text "$traces" | grep "$pattern" | wc -l)
if [ -z "$expected_count" ]; then
	if [ "$cnt" -eq "0" ]; then
		echo "ERROR"
		echo "Did not find at least one instance of this event ($cnt)"
		exit 1
	else
		echo "Success"
		exit 0
	fi
else 
	if [ "$cnt" -ne "$expected_count" ]; then
		echo "ERROR"
		echo "Expected: $expected_count"
		echo "In trace: $cnt"
		exit 1
	else
		echo "Success"
		exit 0
	fi
fi
