affbe5f5创建于 2025年3月25日历史提交
scope-3, subckt scopes
* (exec-spice "ngspice -b %s" t)

* ----
* (/ 1 (+ (/ 1.0 2 3 3) (/ 1.0 2 3 5)))

.param foo = 2k

i1001_t  n1001_t 0  -1mA
x1001_t  n1001_t 0  sub1 foo='foo*3'

v1001_g  n1001_g 0  11.25v

* ----
* (/ 1 (+ (/ 1.0 2 4 11) (/ 1.0 2 4 13)))
i1002_t  n1002_t 0  -1mA
x1002_t  n1002_t 0  sub2 foo='foo*4'

v1002_g  n1002_g 0  47.666666666666666

* ----

i1003_t  n1003_t 0  -1mA
x1003_t  n1003_t 0  sub foo=3k

v1003_g  n1003_g 0  33.0v

* ----

.subckt  sub1  n1 n2 foo=5k
.subckt  sub   n1 n2 foo=10k
R1   n1 n2   'foo'
.ends
X1   n1 n2  sub foo='3*foo'
R1   n1 n2  '5*foo'
.ends

.subckt  sub   n1 n2 foo=17k
R1   n1 n2  'foo*11'
.ends

.subckt  sub2  n1 n2 foo=121k
.subckt  sub   n1 n2 foo=117k
R1   n1 n2   'foo'
.ends
X1   n1 n2  sub foo='11*foo'
R1   n1 n2  'foo*13'
.ends


.control

define mismatch(a,b,err) abs(a-b)>err

op

let total_count = 0
let fail_count = 0

let tests = 1001 + vector(3)

foreach n $&tests
  set n_test = "n{$n}_t"
  set n_gold = "n{$n}_g"
  if mismatch(v($n_test), v($n_gold), 1e-9)
    let v_test = v($n_test)
    let v_gold = v($n_gold)
    echo "ERROR, test failure, v($n_test) = $&v_test but should be $&v_gold"
    let fail_count = fail_count + 1
  end
  let total_count = total_count + 1
end

if fail_count > 0
  echo "ERROR: $&fail_count of $&total_count tests failed"
  quit 1
else
  echo "INFO: $&fail_count of $&total_count tests failed"
  quit 0
end

.endc

.end