mirror of
https://github.com/bloeys/nset.git
synced 2025-12-29 06:28:19 +00:00
Bug in IsEq
This commit is contained in:
11
nset.go
11
nset.go
@ -289,10 +289,13 @@ func (n *NSet[T]) IsEq(otherSet *NSet[T]) bool {
|
|||||||
b1 := &n.Buckets[i]
|
b1 := &n.Buckets[i]
|
||||||
b2 := &otherSet.Buckets[i]
|
b2 := &otherSet.Buckets[i]
|
||||||
|
|
||||||
bucketsEqual := (b1.StorageUnitCount == 0 && b2.StorageUnitCount == 0) || bytes.Equal(
|
// The .Data[0] will panic if either unit count is zero, so these checks
|
||||||
unsafe.Slice((*byte)(unsafe.Pointer(&b1.Data[0])), len(b1.Data)*int(unsafe.Sizeof(b1.Data[0]))),
|
// both avoid that panic and provide an early exit
|
||||||
unsafe.Slice((*byte)(unsafe.Pointer(&b2.Data[0])), len(b2.Data)*int(unsafe.Sizeof(b2.Data[0]))),
|
bucketsEqual := (b1.StorageUnitCount == 0 && b2.StorageUnitCount == 0) ||
|
||||||
)
|
(b1.StorageUnitCount == b2.StorageUnitCount && bytes.Equal(
|
||||||
|
unsafe.Slice((*byte)(unsafe.Pointer(&b1.Data[0])), len(b1.Data)*int(unsafe.Sizeof(b1.Data[0]))),
|
||||||
|
unsafe.Slice((*byte)(unsafe.Pointer(&b2.Data[0])), len(b2.Data)*int(unsafe.Sizeof(b2.Data[0]))),
|
||||||
|
))
|
||||||
|
|
||||||
if !bucketsEqual {
|
if !bucketsEqual {
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user