regression tests ...

This commit is contained in:
Robert Larice 2012-12-17 18:45:31 +01:00 committed by rlar
parent 7c5e10e2c5
commit a8619e1756
11 changed files with 504 additions and 1 deletions

View File

@ -5,7 +5,8 @@ SUBDIRS = \
bsim4 \
bsimsoi \
hisim \
hisimhv1
hisimhv1 \
regression
if XSPICE_WANTED
SUBDIRS += xspice
@ -31,6 +32,7 @@ DIST_SUBDIRS = \
mesa \
mos6 \
polezero \
regression \
resistance \
sensitivity \
transient \

View File

@ -0,0 +1,5 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = pwl-src
MAINTAINERCLEANFILES = Makefile.in

View File

@ -0,0 +1,14 @@
## Process this file with automake to produce Makefile.in
TESTS = \
vsrc-pwl-1.cir \
vsrc-pwl-2.cir \
isrc-pwl-1.cir
TESTS_ENVIRONMENT = SPICE_SCRIPTS=$(srcdir) $(SHELL) $(top_srcdir)/tests/bin/check.sh "$(top_builddir)/src/ngspice -r foobaz"
EXTRA_DIST = \
$(TESTS) \
$(TESTS:.cir=.out)
MAINTAINERCLEANFILES = Makefile.in

View File

@ -0,0 +1,99 @@
check-vsrc
.control
begin
if $argc ne 4
echo "Error: usage: vv seq td ..pass vectors vv seq and time, and td"
goto bottom
end
set vv = $argv[1]
set seq = $argv[2]
set td = $argv[3]
echo "checking $vv"
set expected_hits = $argv[4]
let vv_length = length( time )
let seq_length = length( $seq )
define match(x,gold,relerr) abs(x-gold) <= abs(relerr*gold)
*--------------------
* compare golden seq with actual voltage
let m = 0
let k = 0
while k < vv_length
let tmp_t = time [k]
let tmp_v = $vv [k]
while tmp_t >= $seq [m+2] + $td
let m = m + 2
end
let t0 = $seq [m+0] + $td
let v0 = $seq [m+1]
let t1 = $seq [m+2] + $td
let v1 = $seq [m+3]
if tmp_t <= t0
let vgold = v0
else
let vgold = v0 + ((v1 - v0)/(t1 - t0)) * (tmp_t - t0)
end
if not match(tmp_v, vgold, 1.0e-9)
echo "ERROR: v[ $&k ] @ $&tmp_t is $&tmp_v expected $&vgold"
end
let k = k + 1
end
*--------------------
* now search for the breakpoint hits
let m = 0
let k = 0
let hit = 0
while k < vv_length and m < seq_length
let tmp_t = time [k]
let tmp_s = $seq [m] + $td;
if match(tmp_t, tmp_s, 1e-9)
let hit = hit + 1
echo "INFO: hit at $&tmp_s"
end
if tmp_t <= tmp_s
let k = k + 1
else
let m = m + 2
end
end
if hit ne $expected_hits
echo "error: breakpoint hits mismatch, actual $&hit, expected $expected_hits"
else
echo "info: breakpoint seem to be ok"
end
echo ""
label bottom
* Local Variables:
* mode: spice
* End:
end

View File

@ -0,0 +1,79 @@
isrc-pwl-1
* (compile (concat "../../../../w32/src/ngspice -b " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../../w32/src/ngspice -b " buffer-file-name) t)
*
* broken, stept nicht wo er soll
* wenn r=0 td=15 ...
* in vsrcacct war td nicht berücksichtigt
*
* was ist die semantic von r genau, laut doku muss das exact matchen zu einem punkt
*
* case VSRC_TD:
* here->VSRCrdelay = value->rValue;
* break;
* case VSRC_R: {
* double end_time;
* here->VSRCr = value->rValue;
* here->VSRCrGiven = TRUE;
*
* here->VSRCrBreakpt = i; der index des matchenden elements ...
* if kleiner erster punkt dann erster punkt
*
* repeat_time = 0, ...
* repeat_time = (end_time - breakpt_time)* ++num_repeat;
* also der rest von punkten wird wiederhohlt
* wie genau ?? der punkt wird exact über den endpunkt gesetzt, step !! ?
* FIXME,
* teste varianten mit step in zero time, auch an repeat grenze ...
* manual example ?
* v2 1 0 pwl(0 -7 10ns -7 11ns -3 17ns -3 18ns -7 50ns -7) r=0 td=15ns
i1 1 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18.0 1us 18.0)
i2 2 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18.0 1us 18.0) r=0 td=15ns
i3 3 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 30ns 10.0) r=10ns
r1 1 0 1
r2 2 0 1
r3 3 0 1
.control
tran 200ps 100ns
*--------------------
* setup the tests
* wegen eines bugs, müssen die check-vsrc am schluss kommen (bug-2)
* FIXME, how to append vectoren ?
let vv1 = -v(1)
let seq1 = @i1[pwl]
let td1 = 0
let vv2 = -v(2)
let seq2 = @i2[pwl]
let td2 = 15ns
let vv3 = -v(3)
let td3 = 0
compose seq3 values
+ 0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 30ns 10.0
+ 31ns 11.0 37ns 11.0 50ns 10.0
+ 51ns 11.0 57ns 11.0 70ns 10.0
+ 71ns 11.0 77ns 11.0 90ns 10.0
+ 91ns 11.0 97ns 11.0 110ns 10.0
+ 111ns 11.0 117ns 11.0 130ns 10.0
check-vsrc.sp vv1 seq1 td1 5
check-vsrc.sp vv2 seq2 td2 5
check-vsrc.sp vv3 seq3 td3 16
.endc
.end

View File

@ -0,0 +1,51 @@
Circuit: isrc-pwl-1
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000
No. of Data Rows : 571
Circuit: check-vsrc
checking vv1
info: hit at 0
info: hit at 1E-08
info: hit at 1.1E-08
info: hit at 1.7E-08
info: hit at 1.8E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv2
info: hit at 1.5E-08
info: hit at 2.5E-08
info: hit at 2.6E-08
info: hit at 3.2E-08
info: hit at 3.3E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv3
info: hit at 0
info: hit at 1E-08
info: hit at 1.1E-08
info: hit at 1.7E-08
info: hit at 3E-08
info: hit at 3.1E-08
info: hit at 3.7E-08
info: hit at 5E-08
info: hit at 5.1E-08
info: hit at 5.7E-08
info: hit at 7E-08
info: hit at 7.1E-08
info: hit at 7.7E-08
info: hit at 9E-08
info: hit at 9.1E-08
info: hit at 9.7E-08
info: breakpoint seem to be ok
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000

View File

@ -0,0 +1 @@
set noacct

View File

@ -0,0 +1,85 @@
vsrc-pwl-1
* (compile (concat "../../../../w32/src/ngspice -b " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../../w32/src/ngspice -b " buffer-file-name) t)
*
* broken, stept nicht wo er soll
* wenn r=0 td=15 ...
* in vsrcacct war td nicht berücksichtigt
*
* was ist die semantic von r genau, laut doku muss das exact matchen zu einem punkt
*
* case VSRC_TD:
* here->VSRCrdelay = value->rValue;
* break;
* case VSRC_R: {
* double end_time;
* here->VSRCr = value->rValue;
* here->VSRCrGiven = TRUE;
*
* here->VSRCrBreakpt = i; der index des matchenden elements ...
* if kleiner erster punkt dann erster punkt
*
* repeat_time = 0, ...
* repeat_time = (end_time - breakpt_time)* ++num_repeat;
* also der rest von punkten wird wiederhohlt
* wie genau ?? der punkt wird exact über den endpunkt gesetzt, step !! ?
* FIXME,
* teste varianten mit step in zero time, auch an repeat grenze ...
* manual example ?
* v2 1 0 pwl(0 -7 10ns -7 11ns -3 17ns -3 18ns -7 50ns -7) r=0 td=15ns
v1 1 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18.0 1us 18.0)
v2 2 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18.0 1us 18.0) r=0 td=15ns
v3 3 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 30ns 10.0) r=10ns
v4 4 0 dc=0 pwl(0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18.0 60ns 18.0) r=0 td=15ns
.control
tran 200ps 100ns
*--------------------
* setup the tests
* wegen eines bugs, müssen die check-vsrc am schluss kommen (bug-2)
* FIXME, how to append vectoren ?
let vv1 = v(1)
let seq1 = @v1[pwl]
let td1 = 0
let vv2 = v(2)
let seq2 = @v2[pwl]
let td2 = 15ns
let vv3 = v(3)
let td3 = 0
compose seq3 values
+ 0 10.0 10ns 10.0 11ns 11.0 17ns 11.0 30ns 10.0
+ 31ns 11.0 37ns 11.0 50ns 10.0
+ 51ns 11.0 57ns 11.0 70ns 10.0
+ 71ns 11.0 77ns 11.0 90ns 10.0
+ 91ns 11.0 97ns 11.0 110ns 10.0
+ 111ns 11.0 117ns 11.0 130ns 10.0
let vv4 = v(4)
let td4 = 15ns
compose seq4 values
+ 0ns 10.0 10ns 10.0 11ns 11.0 17ns 11.0 18ns 18 60ns 18.0
+ 60ns 10.0 70ns 10.0 71ns 11.0 77ns 11.0 78ns 18 120ns 18.0
check-vsrc.sp vv1 seq1 td1 5
check-vsrc.sp vv2 seq2 td2 5
check-vsrc.sp vv3 seq3 td3 16
check-vsrc.sp vv4 seq4 td4 10
.endc
.end

View File

@ -0,0 +1,67 @@
Circuit: vsrc-pwl-1
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000
No. of Data Rows : 586
Circuit: check-vsrc
checking vv1
info: hit at 0
info: hit at 1E-08
info: hit at 1.1E-08
info: hit at 1.7E-08
info: hit at 1.8E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv2
info: hit at 1.5E-08
info: hit at 2.5E-08
info: hit at 2.6E-08
info: hit at 3.2E-08
info: hit at 3.3E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv3
info: hit at 0
info: hit at 1E-08
info: hit at 1.1E-08
info: hit at 1.7E-08
info: hit at 3E-08
info: hit at 3.1E-08
info: hit at 3.7E-08
info: hit at 5E-08
info: hit at 5.1E-08
info: hit at 5.7E-08
info: hit at 7E-08
info: hit at 7.1E-08
info: hit at 7.7E-08
info: hit at 9E-08
info: hit at 9.1E-08
info: hit at 9.7E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv4
info: hit at 1.5E-08
info: hit at 2.5E-08
info: hit at 2.6E-08
info: hit at 3.2E-08
info: hit at 3.3E-08
info: hit at 7.5E-08
info: hit at 8.5E-08
info: hit at 8.6E-08
info: hit at 9.2E-08
info: hit at 9.3E-08
info: breakpoint seem to be ok
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000

View File

@ -0,0 +1,54 @@
vsrc-pwl-2
* (compile (concat "../../../../w32/src/ngspice -b " buffer-file-name) t)
* (compile (concat "valgrind --track-origins=yes --leak-check=full --show-reachable=yes ../../../../w32/src/ngspice -b " buffer-file-name) t)
*
* emhasize `step' response
* geht im prinzip, aber es gibt nicht automatisch sampels
* kurz vor der jeweiligen discontinuity
* print.. zeigt die richtigen werte,
* aber plot linearinterpoliert schaut nicht so aus wie man es gerne hätte
v1 1 0 dc=0 pwl(0 10.0 11ns 10.0 11ns 11.0 18ns 11.0 18ns 18.0 1us 18.0)
v2 2 0 dc=0 pwl(0 10.0 11ns 10.0 11ns 11.0 18ns 11.0 18ns 18.0 1us 18.0) r=0 td=15ns
v3 3 0 dc=0 pwl(0 10.0 11ns 10.0 11ns 11.0 18ns 11.0 18ns 10.0 31ns 10.0 31ns 11.0) r=11ns
.control
tran 200ps 100ns
reset
tran 200ps 100ns
**--------------------
** setup the tests
** wegen eines bugs, müssen die check-vsrc am schluss kommen (bug-2)
** FIXME, how to append vectoren ?
*
let vv1 = v(1)
let seq1 = @v1[pwl]
let td1 = 0
*
*
let vv2 = v(2)
let seq2 = @v2[pwl]
let td2 = 15ns
*
*
let vv3 = v(3)
let td3 = 0
compose seq3 values
+ 0 10.0 11ns 10.0 11ns 11.0 18ns 11.0 18ns 10.0 31ns 10.0
+ 31ns 11.0 38ns 11.0 38ns 10.0 51ns 10.0
+ 51ns 11.0 58ns 11.0 58ns 10.0 71ns 10.0
+ 71ns 11.0 78ns 11.0 78ns 10.0 91ns 10.0
+ 91ns 11.0 98ns 11.0 98ns 10.0 111ns 10.0
+ 111ns 11.0 118ns 11.0 118ns 10.0 131ns 10.0
check-vsrc.sp vv1 seq1 td1 3
check-vsrc.sp vv2 seq2 td2 3
check-vsrc.sp vv3 seq3 td3 11
.endc
.end

View File

@ -0,0 +1,46 @@
Circuit: vsrc-pwl-2
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000
No. of Data Rows : 547
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000
No. of Data Rows : 547
Circuit: check-vsrc
checking vv1
info: hit at 0
info: hit at 1.1E-08
info: hit at 1.8E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv2
info: hit at 1.5E-08
info: hit at 2.6E-08
info: hit at 3.3E-08
info: breakpoint seem to be ok
Circuit: check-vsrc
checking vv3
info: hit at 0
info: hit at 1.1E-08
info: hit at 1.8E-08
info: hit at 3.1E-08
info: hit at 3.8E-08
info: hit at 5.1E-08
info: hit at 5.8E-08
info: hit at 7.1E-08
info: hit at 7.8E-08
info: hit at 9.1E-08
info: hit at 9.8E-08
info: breakpoint seem to be ok
Doing analysis at TEMP = 27.000000 and TNOM = 27.000000