Skip to content

Commit 8b4cc47

Browse files
authored
Origin accepts Numbers as arguments and converts them to Int (#229)
1 parent b74ae55 commit 8b4cc47

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/origin.jl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ julia> OffsetArray(a, OffsetArrays.Origin(0)) # short notation for `Origin(0, 0)
2323
3 4
2424
```
2525
"""
26-
struct Origin{T<:Union{Tuple, Int}}
26+
struct Origin{T<:Union{Tuple{Vararg{Int}}, Int}}
2727
index::T
2828
end
29-
Origin(I::NTuple{N, Int}) where N = Origin{typeof(I)}(I)
30-
Origin(I::CartesianIndex) = Origin(I.I)
31-
Origin(I1::Int, In::Int...) = Origin((I1, In...))
29+
Origin(I::Tuple{Vararg{Int}}) = Origin{typeof(I)}(I)
30+
Origin(I::Tuple{Vararg{Number}}) = Origin(map(Int, I))
31+
Origin(I::CartesianIndex) = Origin(Tuple(I))
32+
Origin(I::Number...) = Origin(I)
3233
# Origin(0) != Origin((0, )) but they work the same with broadcasting
33-
Origin(n::Int) = Origin{Int}(n)
34+
Origin(n::Number) = Origin{Int}(Int(n))
3435

3536
(o::Origin)(A::AbstractArray) = o.index .- first.(axes(A))
3637

test/origin.jl

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ using OffsetArrays: Origin
55
@test Origin(0) != Origin((0, ))
66
@test Origin(CartesianIndex(1, 2)) === Origin((1, 2)) === Origin(1, 2)
77

8+
@test Origin(Int32.((1,2))) == Origin(Int64.((1,2)))
9+
@test Origin(Int32.((1,2))...) == Origin(Int64.((1,2))...) == Origin((1.0, 2.0))
10+
@test Origin(Int32(1)) == Origin(Int64(1)) == Origin(1.0)
11+
@test_throws Exception Origin(1.5)
12+
13+
# 0d
14+
A = OffsetArray(zeros())
15+
B = OffsetArray(zeros(), Origin())
16+
@test axes(A) == axes(B)
17+
818
# 1d
919
v = [1, 2]
1020
@test get_origin(OffsetArray(v, Origin(2))) == (2, )
@@ -27,7 +37,7 @@ using OffsetArrays: Origin
2737
oa = OffsetArray(a, -3, -3, -3)
2838
@test get_origin(OffsetArray(oa, Origin(0))) == (0, 0, 0)
2939
@test get_origin(OffsetArray(oa, Origin(1, 2, 3))) == (1, 2, 3)
30-
40+
3141
# Scalar broadcasting
3242
let
3343
a = [ [1,2,3], [4,5,6] ]

0 commit comments

Comments
 (0)