Skip to content

Commit f755052

Browse files
committed
Refuse Unitful conversion when preferunits has been called
1 parent 137cf5d commit f755052

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

ext/DynamicQuantitiesUnitfulExt.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@ end
1313
# This lets the user override the preferred units:
1414
function unitful_equivalences()
1515
si_units = (length=u"m", mass=u"kg", time=u"s", current=u"A", temperature=u"K", luminosity=u"cd", amount=u"mol")
16-
return NamedTuple((k => Unitful.upreferred(si_units[k]) for k in keys(si_units)))
16+
for k in keys(si_units)
17+
if Unitful.upreferred(si_units[k]) !== si_units[k]
18+
error("Found custom `Unitful.preferunits`. This is not supported when interfacing Unitful and DynamicQuantities: you must leave the default `Unitful.upreferred`, which is the SI base units.")
19+
end
20+
end
21+
return NamedTuple((k => si_units[k] for k in keys(si_units)))
1722
end
1823

1924
Base.convert(::Type{Unitful.Quantity}, x::DynamicQuantities.Quantity) =

test/test_unitful.jl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,13 @@ import Ratios: SimpleRatio
66
import SaferIntegers: SafeInt16
77
using Test
88

9-
# Try to work with different preferred units:
10-
Unitful.preferunits(u"km")
11-
129
risapprox(x::Unitful.Quantity, y::Unitful.Quantity; kws...) =
1310
let (xfloat, yfloat) = (Unitful.ustrip Unitful.upreferred).((x, y))
1411
return isapprox(xfloat, yfloat; kws...)
1512
end
1613

17-
factor_for_preferred_units = 1e-3
18-
1914
for T in [DEFAULT_VALUE_TYPE, Float16, Float32, Float64], R in [DEFAULT_DIM_TYPE, Rational{Int16}, Rational{Int32}, SimpleRatio{Int}, SimpleRatio{SafeInt16}]
20-
x = DynamicQuantities.Quantity(T(0.2*factor_for_preferred_units), R, length=1, amount=2, current=-1 // 2, luminosity=2 // 5)
15+
x = DynamicQuantities.Quantity(T(0.2), R, length=1, amount=2, current=-1 // 2, luminosity=2 // 5)
2116
x_unitful = T(0.2)u"m*mol^2*A^(-1//2)*cd^(2//5)"
2217

2318
@test risapprox(convert(Unitful.Quantity, x), x_unitful; atol=1e-6)

0 commit comments

Comments
 (0)