#!/bin/sh

# V="valgrind --error-limit=no --tool=memcheck -q --log-file=valgrind_%p.log --leak-check=full --show-leak-kinds=all"
V="valgrind --error-limit=no --tool=memcheck -q --log-file=valgrind_%p.log"

$V ../build/wildtype_demo                         > wildtype_demo.out
$V ../build/simple_demo                           > simple_demo.out
$V ../build/complex_demo                          > complex_demo_out.m
$V ../build/pthread_demo                          > pthread_demo.out

# NOTE: OpenMP will cause valgrind to report memory leaks.  These are not a
# problem.  They are malloc'ed objects that OpenMP intentionaly keeps until the
# application finishes.
$V ../build/openmp_demo                           > openmp_demo.out

$V ../build/pagerank_demo < Matrix/eye3                > pagerank_demo.out
$V ../build/pagerank_demo < Matrix/2blocks            >> pagerank_demo.out
$V ../build/pagerank_demo < Matrix/t1                 >> pagerank_demo.out
$V ../build/pagerank_demo < Matrix/bcsstk01           >> pagerank_demo.out
$V ../build/pagerank_demo < Matrix/bcsstk16           >> pagerank_demo.out
$V ../build/pagerank_demo < Matrix/fs_183_1           >> pagerank_demo.out
$V ../build/pagerank_demo < Matrix/west0067           >> pagerank_demo.out

$V ../build/mis_demo 1 4 4                        > mis_demo.out
$V ../build/mis_demo 0 5 5 30 1                  >> mis_demo.out
$V ../build/mis_demo < Matrix/eye3               >> mis_demo.out
$V ../build/mis_demo < Matrix/2blocks            >> mis_demo.out
$V ../build/mis_demo < Matrix/t1                 >> mis_demo.out
$V ../build/mis_demo < Matrix/t2                 >> mis_demo.out
$V ../build/mis_demo < Matrix/ash219             >> mis_demo.out
$V ../build/mis_demo < Matrix/bcsstk01           >> mis_demo.out
$V ../build/mis_demo < Matrix/bcsstk16           >> mis_demo.out
$V ../build/mis_demo < Matrix/fs_183_1           >> mis_demo.out
$V ../build/mis_demo < Matrix/ibm32a             >> mis_demo.out
$V ../build/mis_demo < Matrix/ibm32b             >> mis_demo.out
$V ../build/mis_demo < Matrix/lp_afiro           >> mis_demo.out
$V ../build/mis_demo < Matrix/mbeacxc            >> mis_demo.out
$V ../build/mis_demo < Matrix/west0067           >> mis_demo.out
$V ../build/mis_demo 1 200 200 0                 >> mis_demo.out
$V ../build/mis_demo 0 10000 10000 100000 0      >> mis_demo.out
$V ../build/mis_demo 0 10000 10000 100000 1      >> mis_demo.out
$V ../build/mis_demo 0 100000 100000 10000000 0  >> mis_demo.out
$V ../build/mis_demo 0 100000 100000 10000000 1  >> mis_demo.out

$V ../build/bfs_demo 1 4 4                        > bfs_demo.out
$V ../build/bfs_demo 0 5 5 30 1                  >> bfs_demo.out
$V ../build/bfs_demo < Matrix/eye3               >> bfs_demo.out
$V ../build/bfs_demo < Matrix/2blocks            >> bfs_demo.out
$V ../build/bfs_demo < Matrix/t1                 >> bfs_demo.out
$V ../build/bfs_demo < Matrix/t2                 >> bfs_demo.out
$V ../build/bfs_demo < Matrix/ash219             >> bfs_demo.out
$V ../build/bfs_demo < Matrix/bcsstk01           >> bfs_demo.out
$V ../build/bfs_demo < Matrix/bcsstk16           >> bfs_demo.out
$V ../build/bfs_demo < Matrix/fs_183_1           >> bfs_demo.out
$V ../build/bfs_demo < Matrix/ibm32a             >> bfs_demo.out
$V ../build/bfs_demo < Matrix/ibm32b             >> bfs_demo.out
$V ../build/bfs_demo < Matrix/lp_afiro           >> bfs_demo.out
$V ../build/bfs_demo < Matrix/mbeacxc            >> bfs_demo.out
$V ../build/bfs_demo < Matrix/west0067           >> bfs_demo.out
$V ../build/bfs_demo 1 200 200 0                 >> bfs_demo.out
$V ../build/bfs_demo 0 10000 10000 100000 0      >> bfs_demo.out
$V ../build/bfs_demo 0 10000 10000 100000 1      >> bfs_demo.out
$V ../build/bfs_demo 0 100000 100000 10000000 0  >> bfs_demo.out
$V ../build/bfs_demo 0 100000 100000 10000000 1  >> bfs_demo.out

$V ../build/tri_demo 1 4 4                        > tri_demo.out
$V ../build/tri_demo 0 5 5 30 1                  >> tri_demo.out
$V ../build/tri_demo < Matrix/eye3               >> tri_demo.out
$V ../build/tri_demo < Matrix/2blocks            >> tri_demo.out
$V ../build/tri_demo < Matrix/t1                 >> tri_demo.out
$V ../build/tri_demo < Matrix/t2                 >> tri_demo.out
$V ../build/tri_demo < Matrix/ash219             >> tri_demo.out
$V ../build/tri_demo < Matrix/bcsstk01           >> tri_demo.out
$V ../build/tri_demo < Matrix/bcsstk16           >> tri_demo.out
$V ../build/tri_demo < Matrix/fs_183_1           >> tri_demo.out
$V ../build/tri_demo < Matrix/ibm32a             >> tri_demo.out
$V ../build/tri_demo < Matrix/ibm32b             >> tri_demo.out
$V ../build/tri_demo < Matrix/lp_afiro           >> tri_demo.out
$V ../build/tri_demo < Matrix/mbeacxc            >> tri_demo.out
$V ../build/tri_demo < Matrix/west0067           >> tri_demo.out
$V ../build/tri_demo 1 200 200 0                 >> tri_demo.out
$V ../build/tri_demo 0 10000 10000 100000 0      >> tri_demo.out
$V ../build/tri_demo 0 10000 10000 100000 1      >> tri_demo.out
$V ../build/tri_demo 0 100000 100000 10000000 0  >> tri_demo.out
$V ../build/tri_demo 0 100000 100000 10000000 1  >> tri_demo.out

diff -I time Output/simple_demo.out       simple_demo.out
diff -I time Output/complex_demo_out.m    complex_demo_out.m
diff -I time Output/wildtype_demo.out     wildtype_demo.out
diff -I time Output/bfs_demo.out          bfs_demo.out
diff -I time Output/mis_demo.out          mis_demo.out
diff -I time -I rate -I usage Output/tri_demo.out tri_demo.out

echo "Comparing PageRank results:"
diff -I time -I " d:" Output/pagerank_demo.out     pagerank_demo.out
echo "Some mismatches are expected between dpagerank and ipagerank."
echo "number of mismatches between dpagerank and ipagerank in your tests: "
grep mismatch pagerank_demo.out | wc -l
echo "number of mismatches between dpagerank and ipagerank in Demo/Output: "
grep mismatch Output/pagerank_demo.out | wc -l
echo "Compare pthread_demo.out and openmp_demo.out with Output/* manually,"
echo "since the threads can print their results in random order."

exit 0
