@@ -323,3 +323,62 @@ Deno.test(
323
323
assertEquals ( bidiFromArr , bidiFromIter ) ;
324
324
} ,
325
325
) ;
326
+
327
+ Deno . test (
328
+ "BidirectionalMap differentiates extant `undefined` from missing values, consistently with `Map`" ,
329
+ async ( t ) => {
330
+ let bidi : BidirectionalMap < number | undefined , number | undefined > ;
331
+
332
+ await t . step ( "delete" , ( ) => {
333
+ bidi = new BidirectionalMap ( [ [ 0 , undefined ] ] ) ;
334
+ assertEquals ( bidi . delete ( 0 ) , true ) ;
335
+ assertEquals ( bidi . delete ( 0 ) , false ) ;
336
+ assertEquals ( bidi . delete ( 1 ) , false ) ;
337
+ } ) ;
338
+
339
+ await t . step ( "deleteReverse" , ( ) => {
340
+ bidi = new BidirectionalMap ( [ [ undefined , 0 ] ] ) ;
341
+ assertEquals ( bidi . deleteReverse ( 0 ) , true ) ;
342
+ assertEquals ( bidi . deleteReverse ( 0 ) , false ) ;
343
+ assertEquals ( bidi . deleteReverse ( 1 ) , false ) ;
344
+ } ) ;
345
+
346
+ await t . step ( "has" , ( ) => {
347
+ bidi = new BidirectionalMap ( [ [ undefined , undefined ] ] ) ;
348
+ assertEquals ( bidi . has ( undefined ) , true ) ;
349
+ bidi . set ( 1 , undefined ) ;
350
+ // gets removed due to `undefined` value (reverse key) being overwritten
351
+ assertEquals ( bidi . has ( undefined ) , false ) ;
352
+ } ) ;
353
+
354
+ await t . step ( "hasReverse" , ( ) => {
355
+ bidi = new BidirectionalMap ( [ [ undefined , undefined ] ] ) ;
356
+ assertEquals ( bidi . hasReverse ( undefined ) , true ) ;
357
+ bidi . set ( undefined , 1 ) ;
358
+ // gets removed due to `undefined` key being overwritten
359
+ assertEquals ( bidi . hasReverse ( undefined ) , false ) ;
360
+ } ) ;
361
+
362
+ await t . step ( "set" , ( ) => {
363
+ bidi = new BidirectionalMap ( [ [ undefined , undefined ] ] ) ;
364
+ bidi . set ( undefined , 1 ) ;
365
+ assertEquals ( [ ...bidi ] , [ [ undefined , 1 ] ] ) ;
366
+
367
+ bidi = new BidirectionalMap ( [ [ undefined , undefined ] ] ) ;
368
+ bidi . set ( 1 , undefined ) ;
369
+ assertEquals ( [ ...bidi ] , [ [ 1 , undefined ] ] ) ;
370
+
371
+ bidi = new BidirectionalMap ( [ ] ) ;
372
+ bidi . set ( undefined , undefined ) ;
373
+ assertEquals ( [ ...bidi ] , [ [ undefined , undefined ] ] ) ;
374
+
375
+ bidi = new BidirectionalMap ( [ ] ) ;
376
+ bidi . set ( undefined , 1 ) ;
377
+ assertEquals ( [ ...bidi ] , [ [ undefined , 1 ] ] ) ;
378
+
379
+ bidi = new BidirectionalMap ( [ ] ) ;
380
+ bidi . set ( 1 , undefined ) ;
381
+ assertEquals ( [ ...bidi ] , [ [ 1 , undefined ] ] ) ;
382
+ } ) ;
383
+ } ,
384
+ ) ;
0 commit comments