From 50d95ba309451fb8f0deb66ce0757ac21e0939ac Mon Sep 17 00:00:00 2001 From: huiyuxie Date: Mon, 28 Oct 2024 10:46:46 -1000 Subject: [PATCH] Fix again --- src/vector_of_array.jl | 4 +++- test/copy_static_array_test.jl | 14 +++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/vector_of_array.jl b/src/vector_of_array.jl index a9b72e5f..eef8625f 100644 --- a/src/vector_of_array.jl +++ b/src/vector_of_array.jl @@ -905,8 +905,10 @@ 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)) end diff --git a/test/copy_static_array_test.jl b/test/copy_static_array_test.jl index c0aea1d2..ffcfa52c 100644 --- a/test/copy_static_array_test.jl +++ b/test/copy_static_array_test.jl @@ -83,7 +83,7 @@ b = recursivecopy(a) a[1] *= 2 @test a[1] != b[1] -# Broadcasting when SVector{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) @@ -93,6 +93,12 @@ a_voa[2] = SVector(1.0) @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) @@ -102,3 +108,9 @@ 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)