1* test "sens dc" 2 3* The "sens" analysis does express "sensitivity" as 4* S = (d out) / (d parameter) 5* instead of the normalized 6* S = ((d out)/out) / ((d parameter)/parameter) 7* 8* here: 9* v(1) = (R / m_R) * (m_i1 * i1) 10* 11* S[R] = (d v(1))/(d R) = m_i1 * i1 / m_R = 42m 12* S[i1] = (d v(1))/(d i1) = m_i1 * R1 / m_R = 1k 13* S[m_R] = (d v(1))/(d m_R) = -R * i1 *m_i1/m_R^2 = -42 14* S[m_i1] = (d v(1))/(d m_i1) = R * i1 / m_R = 42 15 16i1 0 1 dc=42mA 17r1 1 0 1k 18 19.control 20 21* express our "golden" expectations: 22setplot new 23set gold = $curplot 24let i1 = 1k 25let i1_m = 42.0 26let r1 = 42m 27let r1_m = -42.0 28let r1_scale = 42.0 29 30* run a "sens" analysis 31sens v(1) dc 32 33strcmp __flag $curplot $gold 34if $__flag = 0 35 echo "ERROR: sens failed to execute" 36 quit 1 37end 38 39* compare results with "golden" expectation 40 41define mismatch(a,b,err) abs(a-b)>err*abs(b) 42 43let total_count = 0 44let fail_count = 0 45 46foreach n i1 i1_m r1 r1_m r1_scale 47 set n_test = "$n" 48 set n_gold = "{$gold}.$n" 49 if mismatch($n_test, $n_gold, 1e-3) 50 let s_test = $n_test 51 let s_gold = $n_gold 52 echo "ERROR, test failure, s[$n] = $&s_test but should be $&s_gold" 53 let fail_count = fail_count + 1 54 end 55 let total_count = total_count + 1 56end 57 58if fail_count > 0 59 echo "ERROR: $&fail_count of $&total_count tests failed" 60 quit 1 61else 62 echo "INFO: $&fail_count of $&total_count tests failed" 63 quit 0 64end 65 66.endc 67 68.end 69