From 8ec8fc556c4b3acbfc67663ff855d5f8ffebf62d Mon Sep 17 00:00:00 2001 From: Matt Jaffee Date: Tue, 30 May 2017 16:00:17 -0500 Subject: [PATCH] intersectRunRun to use runAppendInterval this avoid situations where two runs which are adjacent don't get collapsed to a single run --- roaring/roaring.go | 7 ++++--- roaring/roaring_internal_test.go | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/roaring/roaring.go b/roaring/roaring.go index 7e23fae82..e9ba462f1 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -1684,19 +1684,20 @@ func intersectRunRun(a, b *container) *container { j++ } else if va.last > vb.last && va.start >= vb.start { // |--vb-|-|-va--| - output.runs = append(output.runs, interval32{start: va.start, last: vb.last}) + output.runAppendInterval(interval32{start: va.start, last: vb.last}) j++ } else if va.last > vb.last && va.start < vb.start { // |--va|--vb--|--| - output.runs = append(output.runs, vb) + output.runAppendInterval(vb) j++ } else if va.last <= vb.last && va.start >= vb.start { // |--vb|--va--|--| output.runs = append(output.runs, va) + output.runAppendInterval(va) i++ } else if va.last <= vb.last && va.start < vb.start { // |--va-|-|-vb--| - output.runs = append(output.runs, interval32{start: vb.start, last: va.last}) + output.runAppendInterval(interval32{start: vb.start, last: va.last}) i++ } } diff --git a/roaring/roaring_internal_test.go b/roaring/roaring_internal_test.go index 324d4f670..10458705c 100644 --- a/roaring/roaring_internal_test.go +++ b/roaring/roaring_internal_test.go @@ -413,7 +413,7 @@ func TestIntersectRunRun(t *testing.T) { { aruns: []interval32{{start: 1, last: 3}, {start: 5, last: 5}, {start: 7, last: 8}, {start: 9, last: 12}}, bruns: []interval32{{start: 5, last: 10}}, - exp: []interval32{{start: 5, last: 5}, {start: 7, last: 8}, {start: 9, last: 10}}, + exp: []interval32{{start: 5, last: 5}, {start: 7, last: 10}}, }, } for i, test := range tests {