@@ -395,6 +395,8 @@ def test_intersect(self, cls1, cls2, values1, values2, cow):
395
395
bm2 = cls2 (values2 , copy_on_write = cow )
396
396
self .assertEqual (bm1 .intersect (bm2 ), len (bm1 & bm2 ) > 0 )
397
397
398
+
399
+ class RangeTest (Util ):
398
400
@given (bitmap_cls , hyp_collection , st .booleans (), uint32 , uint32 )
399
401
def test_contains_range_arbitrary (self , cls , values , cow , start , end ):
400
402
bm = cls (values )
@@ -422,6 +424,32 @@ def test_contains_range(self, cls, cow, start, end):
422
424
self .assertTrue (bm .contains_range (start , middle ))
423
425
self .assertTrue (bm .contains_range (middle + 1 , end ))
424
426
427
+ @given (hyp_collection , st .booleans (), uint32 , uint32 )
428
+ def test_add_remove_range (self , values , cow , start , end ):
429
+ st .assume (start < end )
430
+ bm = BitMap (values , copy_on_write = cow )
431
+ # Empty range
432
+ original = BitMap (bm )
433
+ bm .update (range (end , start ))
434
+ self .assertEqual (bm , original )
435
+ bm .remove_range (end , start )
436
+ self .assertEqual (bm , original )
437
+ # Adding the range
438
+ bm .update (range (start , end ))
439
+ self .assertTrue (bm .contains_range (start , end ))
440
+ self .assertEqual (bm .intersection_cardinality (BitMap (range (start , end ), copy_on_write = cow )),
441
+ len (range (start , end )))
442
+ # Empty range (again)
443
+ original = BitMap (bm )
444
+ bm .remove_range (end , start )
445
+ self .assertEqual (bm , original )
446
+ self .assertEqual (bm .intersection_cardinality (BitMap (range (start , end ), copy_on_write = cow )),
447
+ len (range (start , end )))
448
+ # Removing the range
449
+ bm .remove_range (start , end )
450
+ self .assertFalse (bm .contains_range (start , end ))
451
+ self .assertEqual (bm .intersection_cardinality (BitMap (range (start , end ), copy_on_write = cow )), 0 )
452
+
425
453
426
454
class CardinalityTest (Util ):
427
455
0 commit comments