From 6b2c8e26a2c1f24dff0ce307b6e35f36f7109d9c Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Fri, 31 Jan 2025 09:44:02 -0500 Subject: [PATCH] fixing issue 467 --- roaring_test.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ runcontainer.go | 4 +-- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/roaring_test.go b/roaring_test.go index 520da6ab..2665b14d 100644 --- a/roaring_test.go +++ b/roaring_test.go @@ -3236,3 +3236,77 @@ func BenchmarkArrayUnionThreshold(b *testing.B) { }) } } + +func TestIssue467CaseSmall(t *testing.T) { + b := New() + b.AddRange(0, 16385) + b.AddRange(16385, 20482) + b.AddRange(20482, 27862) + b.AddRange(27862, 44247) + b.AddRange(45576, 61961) + b.AddRange(61961, 66058) + b.AddRange(66058, 67247) + b.AddRange(68819, 73028) + b.AddRange(73028, 89413) + b.AddRange(92266, 108651) + b.AddRange(108651, 113772) + b.AddRange(113772, 118757) + b.AddRange(118757, 132098) + b.RunOptimize() + require.NoError(t, b.Validate()) +} + +func TestIssue467CaseLarge(t *testing.T) { + b := New() + b.RemoveRange(0, 16385) + b.RemoveRange(16385, 20482) + b.RemoveRange(20482, 27862) + b.AddRange(0, 16385) + b.AddRange(16385, 20482) + b.AddRange(20482, 27862) + b.RemoveRange(27862, 44247) + b.RemoveRange(44247, 45576) + b.RemoveRange(45576, 61961) + b.RemoveRange(61961, 66058) + b.RemoveRange(66058, 67247) + b.AddRange(27862, 44247) + b.AddRange(45576, 61961) + b.AddRange(44247, 45576) + b.AddRange(61961, 66058) + b.AddRange(66058, 67247) + b.RemoveRange(67247, 68819) + b.RemoveRange(68819, 73028) + b.RemoveRange(73028, 89413) + b.RemoveRange(89413, 92266) + b.RemoveRange(92266, 108651) + b.RemoveRange(108651, 113772) + b.RemoveRange(113772, 118757) + b.AddRange(68819, 73028) + b.AddRange(73028, 89413) + b.AddRange(92266, 108651) + b.AddRange(89413, 92266) + b.AddRange(108651, 113772) + b.AddRange(113772, 118757) + b.RemoveRange(118757, 132098) + b.AddRange(118757, 132098) + b.RemoveRange(132098, 137544) + b.AddRange(132098, 137544) + b.RemoveRange(137544, 153929) + b.RemoveRange(153929, 155151) + b.RemoveRange(155151, 162078) + b.RemoveRange(162078, 167119) + b.RemoveRange(167119, 181012) + b.RemoveRange(181012, 197397) + b.RemoveRange(197397, 201244) + b.RemoveRange(201244, 217629) + b.RemoveRange(217629, 222750) + b.RemoveRange(222750, 227708) + b.RemoveRange(227708, 235777) + b.RemoveRange(235777, 252162) + b.RemoveRange(252162, 256259) + b.AddRange(252162, 256259) + b.AddRange(227708, 235777) + b.AddRange(235777, 252162) + b.RunOptimize() + require.NoError(t, b.Validate()) +} diff --git a/runcontainer.go b/runcontainer.go index 30917701..d5250a0e 100644 --- a/runcontainer.go +++ b/runcontainer.go @@ -1504,8 +1504,8 @@ func (iv interval16) isNonContiguousDisjoint(b interval16) bool { return false } - nonContiguous1 := iv.start == b.last()+1 || iv.last() == b.start+1 - nonContiguous2 := b.start == iv.last()+1 || b.last() == iv.start+1 + nonContiguous1 := uint32(iv.start) == uint32(b.last())+1 || uint32(iv.last()) == uint32(b.start)+1 + nonContiguous2 := uint32(b.start) == uint32(iv.last())+1 || uint32(b.last()) == uint32(iv.start)+1 if nonContiguous1 || nonContiguous2 { return false }