Skip to content

Commit bfc1d91

Browse files
test(BaseParams): add unit tests for calc_wirearray_gmr
1 parent 6ea9f23 commit bfc1d91

1 file changed

Lines changed: 99 additions & 0 deletions

File tree

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
@testitem "calc_wirearray_gmr unit tests" setup = [defaults] begin
2+
using Measurements: measurement, value, uncertainty
3+
4+
@testset "Basic Functionality" begin
5+
# Example from docstring
6+
lay_rad = 0.05
7+
N = 7
8+
rad_wire = 0.002
9+
mu_r = 1.0
10+
gmr = calc_wirearray_gmr(lay_rad, N, rad_wire, mu_r)
11+
expected = exp((log(rad_wire * exp(-mu_r / 4) * N * lay_rad^(N - 1)) / N))
12+
@test isapprox(gmr, expected; atol=TEST_TOL)
13+
@test gmr > 0
14+
end
15+
16+
@testset "Edge Cases" begin
17+
# N = 1 (single wire)
18+
lay_rad = 0.05
19+
N = 1
20+
rad_wire = 0.002
21+
mu_r = 1.0
22+
gmr = calc_wirearray_gmr(lay_rad, N, rad_wire, mu_r)
23+
expected = rad_wire * exp(-mu_r / 4)
24+
@test isapprox(gmr, expected; atol=TEST_TOL)
25+
26+
# mu_r = 0 (non-magnetic)
27+
lay_rad = 0.05
28+
N = 7
29+
rad_wire = 0.002
30+
mu_r = 0.0
31+
gmr = calc_wirearray_gmr(lay_rad, N, rad_wire, mu_r)
32+
expected = exp((log(rad_wire * N * lay_rad^(N - 1)) / N))
33+
@test isapprox(gmr, expected; atol=TEST_TOL)
34+
35+
# rad_wire = 0 (degenerate wire)
36+
lay_rad = 0.05
37+
N = 7
38+
rad_wire = 0.0
39+
mu_r = 1.0
40+
gmr = calc_wirearray_gmr(lay_rad, N, rad_wire, mu_r)
41+
@test gmr == 0.0
42+
43+
# lay_rad = 0 (all wires at center)
44+
lay_rad = 0.0
45+
N = 7
46+
rad_wire = 0.002
47+
mu_r = 1.0
48+
gmr = calc_wirearray_gmr(lay_rad, N, rad_wire, mu_r)
49+
expected = exp((log(rad_wire * exp(-mu_r / 4) * N * 0.0^(N - 1)) / N))
50+
@test gmr == 0.0
51+
end
52+
53+
@testset "Numerical Consistency" begin
54+
# Float64
55+
gmr1 = calc_wirearray_gmr(0.05, 7, 0.002, 1.0)
56+
# Measurement{Float64}
57+
gmr2 = calc_wirearray_gmr(measurement(0.05, 1e-4), 7, 0.002, 1.0)
58+
@test isapprox(value(gmr2), gmr1; atol=TEST_TOL)
59+
@test uncertainty(gmr2) > 0
60+
end
61+
62+
@testset "Physical Behavior" begin
63+
# GMR increases with lay_rad
64+
gmr1 = calc_wirearray_gmr(0.01, 7, 0.002, 1.0)
65+
gmr2 = calc_wirearray_gmr(0.05, 7, 0.002, 1.0)
66+
@test gmr2 > gmr1
67+
# GMR decreases with mu_r
68+
gmr1 = calc_wirearray_gmr(0.05, 7, 0.002, 0.5)
69+
gmr2 = calc_wirearray_gmr(0.05, 7, 0.002, 2.0)
70+
@test gmr2 < gmr1
71+
end
72+
73+
@testset "Type Stability & Promotion" begin
74+
# All Float64
75+
gmr = calc_wirearray_gmr(0.05, 7, 0.002, 1.0)
76+
@test typeof(gmr) == Float64
77+
# All Measurement
78+
gmr = calc_wirearray_gmr(measurement(0.05, 1e-4), 7, measurement(0.002, 1e-5), measurement(1.0, 0.01))
79+
@test gmr isa Measurement{Float64}
80+
# Mixed: lay_rad as Measurement
81+
gmr = calc_wirearray_gmr(measurement(0.05, 1e-4), 7, 0.002, 1.0)
82+
@test gmr isa Measurement{Float64}
83+
# Mixed: rad_wire as Measurement
84+
gmr = calc_wirearray_gmr(0.05, 7, measurement(0.002, 1e-5), 1.0)
85+
@test gmr isa Measurement{Float64}
86+
# Mixed: mu_r as Measurement
87+
gmr = calc_wirearray_gmr(0.05, 7, 0.002, measurement(1.0, 0.01))
88+
@test gmr isa Measurement{Float64}
89+
end
90+
91+
@testset "Uncertainty Quantification" begin
92+
lay_rad = measurement(0.05, 1e-4)
93+
rad_wire = measurement(0.002, 1e-5)
94+
mu_r = measurement(1.0, 0.01)
95+
gmr = calc_wirearray_gmr(lay_rad, 7, rad_wire, mu_r)
96+
@test gmr isa Measurement{Float64}
97+
@test uncertainty(gmr) > 0
98+
end
99+
end

0 commit comments

Comments
 (0)