Skip to content

Commit fb205d2

Browse files
committed
Add generic isnull, unsafe_get methods
1 parent 8d2fac8 commit fb205d2

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

base/exports.jl

+1
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,7 @@ export
13241324

13251325
# nullable types
13261326
isnull,
1327+
unsafe_get,
13271328

13281329
# Macros
13291330
# parser internal

base/nullable.jl

+4
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ end
6161

6262
get(x::Nullable) = x.isnull ? throw(NullException()) : x.value
6363

64+
unsafe_get(x::Nullable) = x.value
65+
unsafe_get(x) = x
66+
6467
isnull(x::Nullable) = x.isnull
68+
isnull(x) = false
6569

6670

6771
## Operators

test/nullable.jl

+38
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,33 @@ for T in types
161161
@test get(x3, zero(T)) === one(T)
162162
end
163163

164+
# unsafe_get(x::Nullable)
165+
for T in types
166+
x1 = Nullable{T}()
167+
x2 = Nullable(zero(T))
168+
x3 = Nullable(one(T))
169+
a = rand(T)
170+
x4 = Nullable(a)
171+
172+
@test isa(unsafe_get(x1), T)
173+
@test unsafe_get(x2) === zero(T)
174+
@test unsafe_get(x3) === one(T)
175+
@test unsafe_get(x4) === a
176+
end
177+
178+
@test_throws UndefRefError unsafe_get(Nullable())
179+
180+
# unsafe_get(x)
181+
for T in types
182+
x2 = zero(T)
183+
x3 = one(T)
184+
x4 = rand(T)
185+
186+
@test unsafe_get(x2) === zero(T)
187+
@test unsafe_get(x3) === one(T)
188+
@test unsafe_get(x4) === x4
189+
end
190+
164191
# isnull(x::Nullable)
165192
for T in types
166193
x1 = Nullable{T}()
@@ -174,6 +201,17 @@ end
174201

175202
@test isnull(Nullable())
176203

204+
# isnull(x)
205+
for T in types
206+
x1 = zero(T)
207+
x2 = one(T)
208+
x3 = rand(T)
209+
210+
@test isnull(x1) === false
211+
@test isnull(x2) === false
212+
@test isnull(x3) === false
213+
end
214+
177215
# function =={S, T}(x::Nullable{S}, y::Nullable{T})
178216
for T in types
179217
x0 = Nullable()

0 commit comments

Comments
 (0)