Skip to content

Commit fea7a20

Browse files
Merge pull request #579 from ChrisRackauckas-Claude/fix-zero-structarray
Preserve container type in zero(VectorOfArray) via rewrap
2 parents 25b5e64 + 5ddceee commit fea7a20

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

src/vector_of_array.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ end
945945

946946
function Base.zero(VA::AbstractVectorOfArray)
947947
T = typeof(VA)
948-
u_zero = [zero(u) for u in VA.u]
948+
u_zero = rewrap(VA.u, [zero(u) for u in VA.u])
949949
fields = [fname == :u ? u_zero : _copyfield(VA, fname) for fname in fieldnames(T)]
950950
return T(fields...)
951951
end

test/copy_static_array_test.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,13 @@ x_immutablefv = [ImmutableFV(1.0, 2.0)]
131131
for vec in [x_staticvector, x_structarray, x_mutablefv, x_immutablefv]
132132
@test typeof(similar(VectorOfArray(vec))) === typeof(VectorOfArray(vec))
133133
end
134+
135+
# Test that zero(VectorOfArray) preserves StructArray container type (via rewrap)
136+
let
137+
sa = StructArray{SVector{2, Float64}}((Float64[1.0, 2.0], Float64[3.0, 4.0]))
138+
voa = VectorOfArray(sa)
139+
z = zero(voa)
140+
@test z.u isa StructArray
141+
@test all(iszero, z.u[1])
142+
@test all(iszero, z.u[2])
143+
end

0 commit comments

Comments
 (0)