ngspice/tests/regression/pwl-src/check-vsrc.sp

100 lines
1.5 KiB
SourcePawn

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