#!/bin/sh # # Example Script to run tests and check results. # # This is an example script for running QA tests on a # model and then checking the simulated results against # reference results. A separate target is defined for each # variant of the model. The program runQaTests.pl runs the # tests, and that program expects a perl module SIMULATOR.pm # to be provided for each simulator that is tested. # Examples of these are provided. # qaSpecFile="qaSpec" qaResultsDirectory="results" testProgramName="$(dirname $0)/runQaTests.pl" if [ -z "$testProgramFlags" ] ; then testProgramFlags="-nw" fi #testProgramFlags="-d -V" help() { cat <<-EOF Valid targets are: all run tests and compare results for all simulators ngspice run tests and compare results ngspice hspice run tests and compare results hspice clean remove all previously generated simulation results NOTE: if test results exist they are not resimulated NOTE: to force resimulation run "make clean" first EOF } run_test() { simname="$1" localPlatform=`${testProgramName} -platform` localVersion=`${testProgramName} ${testProgramFlags} -sv -s ${simname} ${qaSpecFile}` echo "" echo "******" echo "****** ${qaSpecFile} tests for ${simname}" echo "****** (for version ${localVersion} on platform ${localPlatform})" echo "******" for test in `${testProgramName} -lt -s ${simname} ${qaSpecFile}` ; do echo "" echo "****** Checking test (${simname}): ${test}" for variant in `${testProgramName} -lv -s ${simname} ${qaSpecFile}` ; do ${testProgramName} \ ${testProgramFlags} \ -s ${simname} \ -r -t ${test} \ -var ${variant} \ --results=${qaResultsDirectory} \ ${qaSpecFile} done done for version in `ls -C1 ${qaResultsDirectory}/${simname}` ; do for platform in `ls -C1 ${qaResultsDirectory}/${simname}/${version}` ; do if [ "${version}" = "${localVersion}" -a "${platform}" = "${localPlatform}" ] then break fi echo "" echo "******" echo "****** Comparing previously run ${qaSpecFile} tests for ${simname}" echo "****** (for version ${version} on platform ${platform})" echo "******" for test in `${testProgramName} -lt -s ${simname} ${qaSpecFile}` ; do echo "" echo "****** Checking test (${simname}): ${test}" for variant in `${testProgramName} -lv -s ${simname} ${qaSpecFile}` ; do ${testProgramName} \ -c ${version} ${platform} \ -s ${simname} \ -t ${test} \ -var ${variant} \ --results=${qaResultsDirectory} \ ${qaSpecFile} done done done done } ##### ##### tests ##### ngspice() { run_test ngspice } hspice() { run_test hspice } ##### ##### clean ##### clean() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* rm -rf ${qaResultsDirectory}/hspice hspiceCkt* } clean_ngspice() { rm -rf ${qaResultsDirectory}/ngspice ngspiceCkt* } clean_hspice() { rm -rf ${qaResultsDirectory}/hspice hspiceCkt* } all() { ngspice hspice } while test $# -gt 0; do case "$1" in --srcdir=* | --executable=*) testProgramFlags="$testProgramFlags $1" shift ;; --results) qaResultsDirectory="$2" shift ; shift ;; -qa) qaSpecFile="$2" shift ; shift ;; *) break ;; esac done for arg in $@ ; do case "$arg" in all | clean | clean_ngspice | ngspice | clean_hspice | hspice) "$arg" ;; *) help ;; esac done