Skip to content

Commit c2ca098

Browse files
committed
treeset: fix a bug in Subset where some non-subsets could trigger panic
1 parent f96040c commit c2ca098

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

treeset.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,8 @@ func (s *TreeSet[T, C]) Subset(o *TreeSet[T, C]) bool {
383383
next:
384384
for ; idxO < o.Size(); idxO++ {
385385
nextO := <-iterO
386-
for ; idxS < s.Size(); idxS++ {
386+
for idxS < s.Size() {
387+
idxS++
387388
nextS := <-iterS
388389
cmp := s.compare(nextS, nextO)
389390
switch {

treeset_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,12 @@ func TestTreeSet_Subset(t *testing.T) {
321321
t2 := TreeSetFrom[int, Compare[int]]([]int{6, 7, 8, 9, 10}, Cmp[int])
322322
must.False(t, t1.Subset(t2))
323323
})
324+
325+
t.Run("exhaust s1", func(t *testing.T) {
326+
s1 := TreeSetFrom[string, Compare[string]]([]string{"a", "b", "c", "d", "e"}, Cmp[string])
327+
s2 := TreeSetFrom[string, Compare[string]]([]string{"a", "z"}, Cmp[string])
328+
must.False(t, s1.Subset(s2))
329+
})
324330
}
325331

326332
func TestTreeSet_Union(t *testing.T) {

0 commit comments

Comments
 (0)