Skip to content

Commit 9a5acef

Browse files
committed
Fix isinteger at the input limits
1 parent f5a8aa3 commit 9a5acef

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

src/FixedPointDecimals.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ Base.@pure promote_rule{T, f, U, g}(::Type{FD{T, f}}, ::Type{FD{U, g}}) =
271271
<={T <: FD}(x::T, y::T) = x.i <= y.i
272272

273273
# predicates and traits
274-
isinteger{T, f}(x::FD{T, f}) = rem(x.i, T(10)^f) == 0
274+
isinteger{T, f}(x::FD{T, f}) = rem(x.i, coefficient(FD{T, f})) == 0
275275
typemin{T, f}(::Type{FD{T, f}}) = reinterpret(FD{T, f}, typemin(T))
276276
typemax{T, f}(::Type{FD{T, f}}) = reinterpret(FD{T, f}, typemax(T))
277277
eps{T <: FD}(::Type{T}) = reinterpret(T, 1)

test/runtests.jl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,26 @@ end
458458
end
459459
end
460460

461+
@testset "isinteger" begin
462+
@testset "overflow" begin
463+
# Note: After overflow `Int8(10)^6 == 64`
464+
@test !isinteger(reinterpret(FD{Int8,6}, 64)) # 0.000064
465+
end
466+
467+
@testset "limits of $T" for T in CONTAINER_TYPES
468+
f = FixedPointDecimals.max_exp10(T)
469+
470+
max_fd = typemax(FD{T,f})
471+
min_fd = typemin(FD{T,f})
472+
473+
@test !isinteger(max_fd)
474+
@test isinteger(trunc(max_fd))
475+
476+
@test isinteger(min_fd) == (min_fd == zero(min_fd))
477+
@test isinteger(trunc(min_fd))
478+
end
479+
end
480+
461481
@testset "round" begin
462482
@testset "to Int" begin
463483
@test round(Int, FD2(-0.51)) === -1

0 commit comments

Comments
 (0)