Skip to content

Commit 29f9a67

Browse files
committed
Test all dimensionful functions
1 parent 9221092 commit 29f9a67

File tree

1 file changed

+75
-10
lines changed

1 file changed

+75
-10
lines changed

test/unittests.jl

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,17 @@ end
10901090
end
10911091
end
10921092

1093-
@testset "Dimensionless functions" begin
1093+
function is_input_valid(f, x)
1094+
try
1095+
f(x)
1096+
catch e
1097+
e isa DomainError && return false
1098+
rethrow(e)
1099+
end
1100+
return true
1101+
end
1102+
1103+
@testset "Assorted dimensionless functions" begin
10941104
functions = (
10951105
:sin, :cos, :tan, :sinh, :cosh, :tanh, :asin, :acos,
10961106
:asinh, :acosh, :atanh, :sec, :csc, :cot, :asec, :acsc, :acot, :sech, :csch,
@@ -1099,15 +1109,6 @@ end
10991109
:log, :log2, :log10, :log1p, :exp, :exp2, :exp10, :expm1, :frexp, :exponent,
11001110
:atan, :atand
11011111
)
1102-
function is_input_valid(f, x)
1103-
try
1104-
f(x)
1105-
catch e
1106-
e isa DomainError && return false
1107-
rethrow(e)
1108-
end
1109-
return true
1110-
end
11111112
for Q in (Quantity, GenericQuantity), D in (Dimensions, SymbolicDimensions), f in functions
11121113
# Only test on valid domain
11131114
valid_inputs = filter(
@@ -1132,3 +1133,67 @@ end
11321133
end
11331134
end
11341135
end
1136+
1137+
@testset "Assorted dimensionful functions" begin
1138+
functions = (
1139+
:float, :abs, :real, :imag, :conj, :adjoint, :unsigned,
1140+
:nextfloat, :prevfloat, :identity, :transpose,
1141+
:copysign, :flipsign, :mod, :modf,
1142+
:floor, :trunc, :ceil, :significand,
1143+
:ldexp, :round
1144+
)
1145+
for Q in (Quantity, GenericQuantity), D in (Dimensions, SymbolicDimensions), f in functions
1146+
T = f in (:abs, :real, :imag, :conj) ? ComplexF64 : Float64
1147+
if f == :modf # Functions that return multiple outputs
1148+
for x in 5rand(T, 3) .- 2.5
1149+
dim = convert(D, dimension(u"m/s"))
1150+
qx_dimensions = Q(x, dim)
1151+
num_outputs = 2
1152+
for i=1:num_outputs
1153+
@eval @test $f($qx_dimensions)[$i] == $Q($f($x)[$i], $dim)
1154+
end
1155+
end
1156+
elseif f in (:copysign, :flipsign, :rem, :mod) # Functions that need multiple inputs
1157+
for x in 5rand(T, 3) .- 2.5
1158+
for y in 5rand(T, 3) .- 2.5
1159+
dim = convert(D, dimension(u"m/s"))
1160+
qx_dimensions = Q(x, dim)
1161+
qy_dimensions = Q(y, dim)
1162+
@eval @test $f($qx_dimensions, $qy_dimensions) == $Q($f($x, $y), $dim)
1163+
end
1164+
end
1165+
elseif f == :unsigned
1166+
for x in 5rand(-10:10, 3)
1167+
dim = convert(D, dimension(u"m/s"))
1168+
qx_dimensions = Q(x, dim)
1169+
@eval @test $f($qx_dimensions) == $Q($f($x), $dim)
1170+
end
1171+
elseif f == :round
1172+
for x in 5rand(T, 3) .- 2.5
1173+
dim = convert(D, dimension(u"m/s"))
1174+
qx_dimensions = Q(x, dim)
1175+
@eval @test $f($qx_dimensions) == $Q($f($x), $dim)
1176+
@eval @test $f(Int32, $qx_dimensions) == $Q($f(Int32, $x), $dim)
1177+
end
1178+
elseif f == :ldexp
1179+
for x in 5rand(T, 3) .- 2.5
1180+
dim = convert(D, dimension(u"m/s"))
1181+
qx_dimensions = Q(x, dim)
1182+
for i=1:3
1183+
@eval @test $f($qx_dimensions, $i) == $Q($f($x, $i), $dim)
1184+
end
1185+
end
1186+
else
1187+
# Only test on valid domain
1188+
valid_inputs = filter(
1189+
x -> is_input_valid(eval(f), x),
1190+
5rand(T, 100) .- 2.5
1191+
)
1192+
for x in valid_inputs[1:3]
1193+
dim = convert(D, dimension(u"m/s"))
1194+
qx_dimensions = Q(x, dim)
1195+
@eval @test $f($qx_dimensions) == $Q($f($x), $dim)
1196+
end
1197+
end
1198+
end
1199+
end

0 commit comments

Comments
 (0)