diff --git a/tests/bin/ngspice.pm b/tests/bin/ngspice.pm index cbd30bbf3..b467c44ef 100644 --- a/tests/bin/ngspice.pm +++ b/tests/bin/ngspice.pm @@ -6,15 +6,49 @@ # # Rel Date Who Comments # ==== ========== ============= ======== +# 1.1 07/05/17 Dietmar Warning Version detection included # 1.0 05/13/11 Dietmar Warning Initial version # package simulate; +if (defined($main::simulatorCommand)) { + $simulatorCommand=$main::simulatorCommand; +} else { + $simulatorCommand="ngspice"; +} $netlistFile="ngspiceCkt"; use strict; sub version { - return("26"); # the version only seems to be printed in interactive mode + my($version,$vaVersion); + $version="unknown"; + $vaVersion="unknown"; + if (!open(OF,">$simulate::netlistFile")) { + die("ERROR: cannot open file $simulate::netlistFile, stopped"); + } + print OF "version test"; + print OF "r1 1 0 1"; + print OF "v1 1 0 1"; + print OF ".control"; + print OF "version"; + print OF ".endc"; + print OF ".end"; + close(OF); + if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { + die("ERROR: cannot run $simulate::simulatorCommand, stopped"); + } + while () { + chomp; + # Check whether this line is the one we are looking for. + # Also the term in parenthesis "()" stores the number to $1 which we can reuse later. + if (m/.+ngspice-([0-9]+)/) { + # Simple read the stored group from the matching in the if clause + $version=$1; + last; + } + } + close(SIMULATE); + return($version,$vaVersion); } sub runNoiseTest { @@ -77,8 +111,8 @@ sub runNoiseTest { # Run simulations and get the results # - if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { - die("ERROR: cannot run $main::simulatorCommand, stopped"); + if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { + die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inData=0; while () { @@ -203,8 +237,8 @@ sub runAcTest { # Run simulations and get the results # - if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { - die("ERROR: cannot run $main::simulatorCommand, stopped"); + if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { + die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inData=0; while () { @@ -340,8 +374,8 @@ sub runDcTest { # Run simulations and get the results # - if (!open(SIMULATE,"$main::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { - die("ERROR: cannot run $main::simulatorCommand, stopped"); + if (!open(SIMULATE,"$simulate::simulatorCommand < $simulate::netlistFile 2>/dev/null|")) { + die("ERROR: cannot run $simulate::simulatorCommand, stopped"); } $inResults=0; while () { diff --git a/tests/bin/runQaTests.pl b/tests/bin/runQaTests.pl index d03276aee..c193603d8 100755 --- a/tests/bin/runQaTests.pl +++ b/tests/bin/runQaTests.pl @@ -32,7 +32,6 @@ Options: -nw do not print warning messages -platform prints the hardware platform and operating system version -p plot results (limited, only standard test variant) - -P plot results (complete, for all test variants) -r re-use previously simulated results if they exist (default is to resimulate, even if results exist) -sv prints the simulator version being run @@ -70,6 +69,7 @@ undef($qaSpecFile); undef(@Setup); undef(@Test); undef(@Variants); +undef(@TestVariants); $debug=0; $verbose=0; $reallyVerbose=0; @@ -98,6 +98,7 @@ undef($acClip);undef($acNdigit);undef($acRelTol); undef($noiseClip);undef($noiseNdigit);undef($noiseRelTol); undef($mFactor);undef($shrinkPercent);undef($scaleFactor);undef(%TestSpec); undef($refrnceDirectory); +undef($simulatorCommand); # # These are the tolerances used to compare results @@ -230,9 +231,13 @@ if (!$onlyDoComparison) { # if (!$onlyDoComparison) { - $version=&simulate::version(); + ($version,$vaVersion)=&simulate::version(); if ($onlyDoSimulatorVersion) { - print $version;exit(0); + if ($vaVersion eq "unknown") { + print $version;exit(0); + } else { + print $version,$vaVersion;exit(0); + } } } $qaSpecFile=$ARGV[0]; @@ -297,7 +302,7 @@ if ($reallyVerbose) { $flag=""; } foreach $test (@Test) { - next if (!$doTest{$test}); + next if (%doTest && !$doTest{$test}); if ($verbose) {print "\n****** Running test ($simulatorName): $test"} @@ -305,13 +310,13 @@ foreach $test (@Test) { undef($outputAc); undef($outputNoise); &modelQa::processTestSpec(@{$TestSpec{$test}}); - foreach $variant (@Variants) { + foreach $variant (@TestVariants) { if ($variant eq "standard") { $refFile="$refrnceDirectory/$test.standard"; } else { $refFile="$resultsDirectory/$test.standard"; } - next if (!$doVariant{$variant}); + next if (%doVariant && !$doVariant{$variant}); $simFile="$resultsDirectory/$test.$variant"; if ($outputDc) { if (($forceSimulation || ! -r $simFile) && !$onlyDoComparison) { diff --git a/tests/bin/run_cmc_check b/tests/bin/run_cmc_check index 968e915a5..830bd49ee 100755 --- a/tests/bin/run_cmc_check +++ b/tests/bin/run_cmc_check @@ -45,7 +45,7 @@ run_test() { simname="$1" localPlatform=`${testProgramName} -platform` - localVersion=`${testProgramName} -sv -s ${simname} ${qaSpecFile}` + localVersion=`${testProgramName} ${testProgramFlags} -sv -s ${simname} ${qaSpecFile}` echo "" echo "******"