Skip to content

Commit 7608595

Browse files
committed
Add support for minmax and bswap for Fixed
Although `minmax` has been available, but this specializes it.
1 parent c2131d8 commit 7608595

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

src/FixedPointNumbers.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ floattype(::Type{X}) where {T <: LongInts, X <: FixedPoint{T}} = BigFloat
116116

117117
float(x::FixedPoint) = convert(floattype(x), x)
118118

119+
function minmax(x::X, y::X) where {X <: FixedPoint}
120+
a, b = minmax(reinterpret(x), reinterpret(y))
121+
X(a,0), X(b,0)
122+
end
123+
124+
bswap(x::X) where {X <: FixedPoint} = sizeof(X) == 1 ? x : X(bswap(x.i), 0)
125+
119126
for f in (:zero, :oneunit, :one, :eps, :rawone, :rawtype, :floattype)
120127
@eval begin
121128
$f(x::FixedPoint) = $f(typeof(x))

src/normed.jl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,6 @@ isfinite(x::Normed) = true
269269
isnan(x::Normed) = false
270270
isinf(x::Normed) = false
271271

272-
bswap(x::Normed{UInt8,f}) where {f} = x
273-
bswap(x::Normed) = typeof(x)(bswap(reinterpret(x)),0)
274-
275-
function minmax(x::T, y::T) where {T <: Normed}
276-
a, b = minmax(reinterpret(x), reinterpret(y))
277-
T(a,0), T(b,0)
278-
end
279-
280272
# Iteration
281273
# The main subtlety here is that iterating over N0f8(0):N0f8(1) will wrap around
282274
# unless we iterate using a wider type

test/fixed.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,11 @@ end
180180
end
181181
end
182182

183+
@testset "low-level arithmetic" begin
184+
@test bswap(Q0f7(0.5)) === Q0f7(0.5)
185+
@test bswap(Q0f15(0.5)) === reinterpret(Q0f15, signed(0x0040))
186+
end
187+
183188
@testset "Promotion within Fixed" begin
184189
@test @inferred(promote(Q0f7(0.25), Q0f7(0.75))) ===
185190
(Q0f7(0.25), Q0f7(0.75))

0 commit comments

Comments
 (0)