@@ -246,95 +246,77 @@ defmodule Module.Types.DescrTest do
246
246
247
247
describe "map operations" do
248
248
test "get field" do
249
- assert map_get! ( closed_map ( a: integer ( ) ) , :a ) == integer ( )
250
- assert map_get! ( dynamic ( ) , :a ) == dynamic ( )
249
+ assert map_get ( closed_map ( a: integer ( ) ) , :a ) == { false , integer ( ) }
250
+ assert map_get ( dynamic ( ) , :a ) == { true , dynamic ( ) }
251
251
252
252
assert intersection ( dynamic ( ) , open_map ( a: integer ( ) ) )
253
- |> map_get! ( :a ) == intersection ( integer ( ) , dynamic ( ) )
253
+ |> map_get ( :a ) == { false , intersection ( integer ( ) , dynamic ( ) ) }
254
254
255
- assert open_map ( my_map: open_map ( foo: integer ( ) ) )
256
- |> intersection ( open_map ( my_map: open_map ( bar: boolean ( ) ) ) )
257
- |> map_get! ( : my_map)
258
- |> equal? ( open_map ( foo: integer ( ) , bar: boolean ( ) ) )
255
+ { false , value_type } =
256
+ open_map ( my_map: open_map ( foo: integer ( ) ) )
257
+ |> intersection ( open_map ( my_map: open_map ( bar: boolean ( ) ) ) )
258
+ |> map_get ( :my_map )
259
259
260
- assert map_get! ( union ( closed_map ( a: integer ( ) ) , closed_map ( a: atom ( ) ) ) , :a ) ==
261
- union ( integer ( ) , atom ( ) )
260
+ assert equal? ( value_type , open_map ( foo: integer ( ) , bar: boolean ( ) ) )
262
261
263
- assert map_get! ( union ( closed_map ( a: integer ( ) ) , closed_map ( b : atom ( ) ) ) , :a ) == integer ( )
264
- assert map_get! ( term ( ) , :a ) == term ( )
262
+ assert map_get ( union ( closed_map ( a: integer ( ) ) , closed_map ( a : atom ( ) ) ) , :a ) ==
263
+ { false , union ( integer ( ) , atom ( ) ) }
265
264
266
- assert closed_map ( a: union ( integer ( ) , atom ( ) ) )
267
- |> difference ( open_map ( a: integer ( ) ) )
268
- |> map_get! ( :a )
269
- |> equal? ( atom ( ) )
265
+ assert map_get ( union ( closed_map ( a: integer ( ) ) , closed_map ( b: atom ( ) ) ) , :a ) ==
266
+ { true , integer ( ) }
270
267
271
- assert closed_map ( a: integer ( ) , b: atom ( ) )
272
- |> difference ( closed_map ( a: integer ( ) , b: atom ( [ :foo ] ) ) )
273
- |> map_get! ( :a )
274
- |> equal? ( integer ( ) )
268
+ assert map_get ( term ( ) , :a ) == { true , term ( ) }
275
269
276
- assert closed_map ( a: integer ( ) )
277
- |> difference ( closed_map ( a: atom ( ) ) )
278
- |> map_get! ( :a )
279
- |> equal? ( integer ( ) )
270
+ { false , value_type } =
271
+ closed_map ( a: union ( integer ( ) , atom ( ) ) )
272
+ |> difference ( open_map ( a: integer ( ) ) )
273
+ |> map_get ( :a )
280
274
281
- assert open_map ( a: integer ( ) , b: atom ( ) )
282
- |> union ( closed_map ( a: tuple ( ) ) )
283
- |> map_get! ( :a )
284
- |> equal? ( union ( integer ( ) , tuple ( ) ) )
275
+ assert equal? ( value_type , atom ( ) )
276
+
277
+ { false , value_type } =
278
+ closed_map ( a: integer ( ) , b: atom ( ) )
279
+ |> difference ( closed_map ( a: integer ( ) , b: atom ( [ :foo ] ) ) )
280
+ |> map_get ( :a )
281
+
282
+ assert equal? ( value_type , integer ( ) )
283
+
284
+ { false , value_type } =
285
+ closed_map ( a: integer ( ) )
286
+ |> difference ( closed_map ( a: atom ( ) ) )
287
+ |> map_get ( :a )
288
+
289
+ assert equal? ( value_type , integer ( ) )
290
+
291
+ { false , value_type } =
292
+ open_map ( a: integer ( ) , b: atom ( ) )
293
+ |> union ( closed_map ( a: tuple ( ) ) )
294
+ |> map_get ( :a )
295
+
296
+ assert equal? ( value_type , union ( integer ( ) , tuple ( ) ) )
297
+
298
+ { false , value_type } =
299
+ closed_map ( a: atom ( ) )
300
+ |> difference ( closed_map ( a: atom ( [ :foo , :bar ] ) ) )
301
+ |> difference ( closed_map ( a: atom ( [ :bar ] ) ) )
302
+ |> map_get ( :a )
285
303
286
- assert closed_map ( a: atom ( ) )
287
- |> difference ( closed_map ( a: atom ( [ :foo , :bar ] ) ) )
288
- |> difference ( closed_map ( a: atom ( [ :bar ] ) ) )
289
- |> map_get! ( :a )
290
- |> equal? ( intersection ( atom ( ) , negation ( atom ( [ :foo , :bar ] ) ) ) )
304
+ assert equal? ( value_type , intersection ( atom ( ) , negation ( atom ( [ :foo , :bar ] ) ) ) )
291
305
292
306
assert closed_map ( a: union ( atom ( ) , pid ( ) ) , b: integer ( ) , c: tuple ( ) )
293
307
|> difference ( open_map ( a: atom ( ) , b: integer ( ) ) )
294
308
|> difference ( open_map ( a: atom ( ) , c: tuple ( ) ) )
295
- |> map_get! ( :a ) == pid ( )
309
+ |> map_get ( :a ) == { false , pid ( ) }
296
310
297
311
assert closed_map ( a: union ( atom ( [ :foo ] ) , pid ( ) ) , b: integer ( ) , c: tuple ( ) )
298
312
|> difference ( open_map ( a: atom ( [ :foo ] ) , b: integer ( ) ) )
299
313
|> difference ( open_map ( a: atom ( ) , c: tuple ( ) ) )
300
- |> map_get! ( :a ) == pid ( )
314
+ |> map_get ( :a ) == { false , pid ( ) }
301
315
302
316
assert closed_map ( a: union ( atom ( [ :foo , :bar , :baz ] ) , integer ( ) ) )
303
317
|> difference ( open_map ( a: atom ( [ :foo , :bar ] ) ) )
304
318
|> difference ( open_map ( a: atom ( [ :foo , :baz ] ) ) )
305
- |> map_get! ( :a ) == integer ( )
306
- end
307
-
308
- test "key presence" do
309
- assert map_has_key? ( closed_map ( a: integer ( ) ) , :a )
310
- refute map_has_key? ( closed_map ( a: integer ( ) ) , :b )
311
- refute map_has_key? ( open_map ( ) , :a )
312
- refute map_has_key? ( closed_map ( a: union ( integer ( ) , not_set ( ) ) ) , :a )
313
- refute map_has_key? ( union ( closed_map ( a: integer ( ) ) , closed_map ( b: atom ( ) ) ) , :a )
314
- assert map_has_key? ( union ( closed_map ( a: integer ( ) ) , closed_map ( a: atom ( ) ) ) , :a )
315
- assert map_has_key? ( intersection ( dynamic ( ) , closed_map ( a: integer ( ) ) ) , :a )
316
- refute map_has_key? ( intersection ( dynamic ( ) , closed_map ( a: integer ( ) ) ) , :b )
317
-
318
- refute map_may_have_key? ( closed_map ( foo: integer ( ) ) , :bar )
319
- assert map_may_have_key? ( closed_map ( foo: integer ( ) ) , :foo )
320
- assert map_may_have_key? ( dynamic ( ) , :foo )
321
- refute map_may_have_key? ( intersection ( dynamic ( ) , open_map ( foo: not_set ( ) ) ) , :foo )
322
- end
323
-
324
- test "type-checking map access" do
325
- # dynamic() and %{..., :a => integer(), b: not_set()}
326
- t = intersection ( dynamic ( ) , open_map ( a: integer ( ) , c: not_set ( ) ) )
327
-
328
- assert subtype? ( map_get! ( t , :a ) , integer ( ) )
329
- assert map_get! ( t , :b ) == dynamic ( )
330
-
331
- assert map_has_key? ( t , :a )
332
- refute map_has_key? ( t , :b )
333
- refute map_has_key? ( t , :c )
334
-
335
- assert map_may_have_key? ( t , :a )
336
- assert map_may_have_key? ( t , :b )
337
- refute map_may_have_key? ( t , :c )
319
+ |> map_get ( :a ) == { false , integer ( ) }
338
320
end
339
321
end
340
322
0 commit comments