From cf5627e0987250027d28b1696115eb94d3f6e55a Mon Sep 17 00:00:00 2001 From: Alexander Plavin Date: Sat, 25 Mar 2023 23:37:58 +0300 Subject: [PATCH] rand() returns structarray --- Project.toml | 1 + src/StructArrays.jl | 1 + src/structarray.jl | 3 +++ test/runtests.jl | 6 ++++++ 4 files changed, 11 insertions(+) diff --git a/Project.toml b/Project.toml index c672e08d..4ea80548 100644 --- a/Project.toml +++ b/Project.toml @@ -6,6 +6,7 @@ version = "0.6.15" Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" DataAPI = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" diff --git a/src/StructArrays.jl b/src/StructArrays.jl index 129dcd82..88e57462 100644 --- a/src/StructArrays.jl +++ b/src/StructArrays.jl @@ -1,6 +1,7 @@ module StructArrays using Base: tail +import Random export StructArray, StructVector, LazyRow, LazyRows export collect_structarray diff --git a/src/structarray.jl b/src/structarray.jl index ee361c39..7e17df05 100644 --- a/src/structarray.jl +++ b/src/structarray.jl @@ -478,6 +478,9 @@ for type in ( end end +Random.rand(r::Random.AbstractRNG, X::StructArray, dims::Random.Dims) = + Random.rand!(r, similar(X, Random.gentype(X), dims), X) + function showfields(io::IO, fields::NTuple{N, Any}) where N print(io, "(") for (i, field) in enumerate(fields) diff --git a/test/runtests.jl b/test/runtests.jl index c1443111..df2b31e3 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -428,6 +428,12 @@ end @test isempty(s.b) end +@testset "rand" begin + s = StructVector(a = [1, 2, 3], b = ["a", "b", "c"]) + @test rand(s)::NamedTuple ∈ s + @test rand(s, 2)::StructVector ⊆ s +end + @testset "constructor from existing array" begin v = rand(ComplexF64, 5, 3) t = @inferred StructArray(v)