Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e84b53f

Browse files
committed
Do not use rangeHash when rangeDiff is 0
1 parent 03b79e9 commit e84b53f

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/library/scala/util/hashing/MurmurHash3.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private[hashing] class MurmurHash3 {
136136
while (it.hasNext) {
137137
h = mix(h, prev)
138138
val hash = it.next().##
139-
if(rangeDiff != hash - prev) {
139+
if(rangeDiff != hash - prev || rangeDiff == 0) {
140140
h = mix(h, hash)
141141
i += 1
142142
while (it.hasNext) {
@@ -173,7 +173,7 @@ private[hashing] class MurmurHash3 {
173173
while (i < l) {
174174
h = mix(h, prev)
175175
val hash = a(i).##
176-
if(rangeDiff != hash - prev) {
176+
if(rangeDiff != hash - prev || rangeDiff == 0) {
177177
h = mix(h, hash)
178178
i += 1
179179
while (i < l) {
@@ -252,7 +252,7 @@ private[hashing] class MurmurHash3 {
252252
while (i < l) {
253253
h = mix(h, prev)
254254
val hash = a(i).##
255-
if(rangeDiff != hash - prev) {
255+
if(rangeDiff != hash - prev || rangeDiff == 0) {
256256
h = mix(h, hash)
257257
i += 1
258258
while (i < l) {
@@ -292,7 +292,7 @@ private[hashing] class MurmurHash3 {
292292
rangeDiff = hash - prev
293293
rangeState = 2
294294
case 2 =>
295-
if(rangeDiff != hash - prev) rangeState = 3
295+
if(rangeDiff != hash - prev || rangeDiff == 0) rangeState = 3
296296
case _ =>
297297
}
298298
prev = hash

test/junit/scala/util/hashing/MurmurHash3Test.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,16 @@ class MurmurHash3Test {
5656
assertEquals(r5, r6)
5757
assertEquals(r5.hashCode, r6.hashCode)
5858
}
59+
60+
@Test
61+
def testEqualArray(): Unit = {
62+
val z1 = (1 to 1).map(_ => 0).toArray
63+
val z2 = (1 to 2).map(_ => 0).toArray
64+
val z3 = (1 to 3).map(_ => 0).toArray
65+
val z4 = (1 to 4).map(_ => 0).toArray
66+
Seq(z1, z2, z3, z4).foreach(z => check(z.toIndexedSeq.hashCode(), z))
67+
Seq(z1, z2, z3, z4).sliding(2).foreach{ case Seq(a, b) =>
68+
assertNotEquals(a.toIndexedSeq.hashCode(), b.toIndexedSeq.hashCode())
69+
}
70+
}
5971
}

0 commit comments

Comments
 (0)