diff --git a/Project.toml b/Project.toml index f105351b..488a7b4a 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "OpenCL" uuid = "08131aa3-fb12-5dee-8b74-c09406e224a2" -version = "0.10.6" +version = "0.10.7" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" diff --git a/src/device/random.jl b/src/device/random.jl index 9b9917fe..aa2cf7dc 100644 --- a/src/device/random.jl +++ b/src/device/random.jl @@ -232,3 +232,6 @@ end @device_override @inline function Random.randexp(rng::AbstractRNG, ::Type{T}) where {T <: Union{Float16, Float32}} @invoke Random.randexp(rng::AbstractRNG, T::Type{<:AbstractFloat}) end + +@device_override Random.Sampler(::Type{<:AbstractRNG}, r::AbstractUnitRange{T}, + ::Random.Repetition) where {T<:Union{Int64, UInt64}} = Random.SamplerRangeFast(r) diff --git a/test/device/random.jl b/test/device/random.jl index 7a40df54..6fef3926 100644 --- a/test/device/random.jl +++ b/test/device/random.jl @@ -135,3 +135,24 @@ end @test Array(a) == Array(b) end end + +@testset "rand(::AbstractRange{$T}), seed $seed" for T in (Int32, Int64, UInt32, UInt64), seed in (nothing, #=missing,=# 1234) + function kernel(A::AbstractArray{T}, seed) where {T} + apply_seed(seed) + tid = get_global_id(1) + A[tid] = rand(T(10):T(20)) + return + end + + a = OpenCL.zeros(T, n) + b = OpenCL.zeros(T, n) + + @opencl global_size=n local_size=n kernel(a, seed) + @opencl global_size=n local_size=n kernel(b, seed) + + if seed === nothing || seed === missing + @test Array(a) != Array(b) + else + @test Array(a) == Array(b) + end +end