Skip to content

Commit bc1ce58

Browse files
authored
Implement isinf and isfinite for Point and Vec (#215)
* Implement `isinf` and `isfinite` for `Point` and `Vec` Also cleans up the implementation to use the functions directly and avoid anonymous functions. * Add tests * Fix `isfinite`
1 parent 4885d07 commit bc1ce58

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/fixed_arrays.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,9 @@ const Mat = SMatrix
123123
const VecTypes{N,T} = Union{StaticVector{N,T},NTuple{N,T}}
124124
const Vecf{N} = Vec{N,Float32}
125125
const Pointf{N} = Point{N,Float32}
126-
Base.isnan(p::Union{AbstractPoint,Vec}) = any(x -> isnan(x), p)
126+
Base.isnan(p::Union{AbstractPoint,Vec}) = any(isnan, p)
127+
Base.isinf(p::Union{AbstractPoint,Vec}) = any(isinf, p)
128+
Base.isfinite(p::Union{AbstractPoint,Vec}) = all(isfinite, p)
127129

128130
for i in 1:4
129131
for T in [:Point, :Vec]

test/fixed_arrays.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,20 @@ end
1414
@test [T(0, 0), T(5, 0)] == x .- T(2, 3)
1515
end
1616
end
17+
18+
@testset "finite, nan, inf tests" begin
19+
for T in (Vec, Point)
20+
@testset "$T" begin
21+
nan_point = T(Float64.((1.0, 2.0, 3.0, NaN)))
22+
inf_point = T(Float64.((1.0, 2.0, Inf, 4.0)))
23+
@test isinf(inf_point)
24+
@test !isinf(nan_point)
25+
@test isnan(nan_point)
26+
@test !isnan(inf_point)
27+
@test !isfinite(nan_point)
28+
@test !isfinite(inf_point)
29+
@test !isfinite(nan_point + inf_point)
30+
@test isfinite(T(1, 2, 3))
31+
end
32+
end
33+
end

0 commit comments

Comments
 (0)