Skip to content

Commit 5d0802e

Browse files
authored
Add reverse for SArray and MArray (#910)
* Reverse for SArray and MArray * fix test on older julia versions * define reverse for StaticArrays * version bump to v1.2.1
1 parent d03a5e6 commit 5d0802e

File tree

8 files changed

+20
-4
lines changed

8 files changed

+20
-4
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "StaticArrays"
22
uuid = "90137ffa-7385-5640-81b9-e52037218182"
3-
version = "1.2.0"
3+
version = "1.2.1"
44

55
[deps]
66
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/abstractarray.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,11 @@ reshape(a::Array, ::Size{S}) where {S} = SizedArray{Tuple{S...}}(a)
209209
@inline copy(a::StaticArray) = typeof(a)(Tuple(a))
210210
@inline copy(a::SizedArray) = typeof(a)(copy(a.data))
211211

212-
@inline reverse(v::StaticVector) = typeof(v)(_reverse(v))
212+
@inline reverse(v::StaticArray) = typeof(v)(_reverse(v))
213213

214-
@generated function _reverse(v::StaticVector{N,T}) where {N,T}
215-
return Expr(:tuple, (:(v[$i]) for i = N:(-1):1)...)
214+
@generated function _reverse(v::StaticArray{N}) where {N}
215+
L = tuple_prod(N)
216+
return Expr(:tuple, (:(v[$i]) for i = L:(-1):1)...)
216217
end
217218

218219
@generated function Base.rot180(A::SMatrix{M,N}) where {M,N}

test/MMatrix.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@
9191
@test size(typeof(m), 2) === 2
9292

9393
@test length(m) === 4
94+
95+
@test reverse(m) == reverse(reverse(collect(m), dims = 2), dims = 1)
9496
end
9597

9698
@testset "setindex!" begin

test/MVector.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@
7171
@test size(typeof(v), 2) === 1
7272

7373
@test length(v) === 3
74+
75+
@test reverse(v) == reverse(collect(v), dims = 1)
7476
end
7577

7678
@testset "setindex!" begin

test/SArray.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@
149149
@test (@inferred view(m, CartesianIndex(1, 1))) === Scalar(m[1, 1])
150150
@test (@inferred view(m, CartesianIndex(1, 1, 1))) === Scalar(m[1, 1])
151151
@test (@inferred view(m, 1, 1, CartesianIndex(1))) === Scalar(m[1, 1])
152+
153+
@test reverse(m) == reverse(reverse(collect(m), dims = 2), dims = 1)
152154
end
153155

154156
@testset "promotion" begin

test/SMatrix.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,7 @@
108108
@test length(m) === 4
109109

110110
@test_throws Exception m[1] = 1
111+
112+
@test reverse(m) == reverse(reverse(collect(m), dims = 2), dims = 1)
111113
end
112114
end

test/SVector.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@
9090
@test (@inferred view(v, 1, CartesianIndex(1))) === Scalar(v[1])
9191
@test (@inferred view(v, SVector{2,Int}(1,2))) === @SArray [11, 12]
9292
@test (@inferred view(v, SOneTo(2))) === @SArray [11, 12]
93+
94+
@test reverse(v) == reverse(collect(v), dims = 1)
9395
end
9496

9597
@testset "CartesianIndex" begin

test/SizedArray.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,11 @@
234234
@test isa(x5, SizedArray{Tuple{24},Float64,1,1,<:SubArray{Float64,1}})
235235
@test x5 == view(Array(x5), :)
236236
end
237+
238+
@testset "reverse" begin
239+
x = SizedArray{Tuple{4,3,2}}(rand(4, 3, 2))
240+
@test reverse(x) == reverse(reverse(reverse(collect(x), dims = 3), dims = 2), dims = 1)
241+
end
237242
end
238243

239244
struct OVector <: AbstractVector{Int} end

0 commit comments

Comments
 (0)