diff --git a/src/vector_of_array.jl b/src/vector_of_array.jl index 352d4ae4..eef8625f 100644 --- a/src/vector_of_array.jl +++ b/src/vector_of_array.jl @@ -905,7 +905,9 @@ for (type, N_expr) in [ else unpacked = unpack_voa(bc, i) arr_type = StaticArraysCore.similar_type(dest[:, i]) - dest[:, i] = if length(unpacked) == 1 + dest[:, i] = if length(unpacked) == 1 && length(dest[:, i]) == 1 + arr_type(unpacked[1]) + elseif length(unpacked) == 1 fill(copy(unpacked), arr_type) else arr_type(unpacked[j] for j in eachindex(unpacked)) diff --git a/test/copy_static_array_test.jl b/test/copy_static_array_test.jl index 76b9668b..ffcfa52c 100644 --- a/test/copy_static_array_test.jl +++ b/test/copy_static_array_test.jl @@ -82,3 +82,35 @@ b = recursivecopy(a) @test a[1] == b[1] a[1] *= 2 @test a[1] != b[1] + +# Broadcasting when SVector{N} where N = 1 +a = [SVector(0.0) for _ in 1:2] +a_voa = VectorOfArray(a) +b_voa = copy(a_voa) +a_voa[1] = SVector(1.0) +a_voa[2] = SVector(1.0) +@. b_voa = a_voa +@test b_voa[1] == a_voa[1] +@test b_voa[2] == a_voa[2] + +a = [SVector(0.0) for _ in 1:2] +a_voa = VectorOfArray(a) +a_voa .= 1.0 +@test a_voa[1] == SVector(1.0) +@test a_voa[2] == SVector(1.0) + +# Broadcasting when SVector{N} where N > 1 +a = [SVector(0.0, 0.0) for _ in 1:2] +a_voa = VectorOfArray(a) +b_voa = copy(a_voa) +a_voa[1] = SVector(1.0, 1.0) +a_voa[2] = SVector(1.0, 1.0) +@. b_voa = a_voa +@test b_voa[1] == a_voa[1] +@test b_voa[2] == a_voa[2] + +a = [SVector(0.0, 0.0) for _ in 1:2] +a_voa = VectorOfArray(a) +a_voa .= 1.0 +@test a_voa[1] == SVector(1.0, 1.0) +@test a_voa[2] == SVector(1.0, 1.0)