Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Murmur3 gives out different hash values for the same input #7

Open
KingBoomie opened this issue Sep 1, 2019 · 1 comment
Open

Murmur3 gives out different hash values for the same input #7

KingBoomie opened this issue Sep 1, 2019 · 1 comment
Assignees

Comments

@KingBoomie
Copy link

KingBoomie commented Sep 1, 2019

Running in jshell

import com.sangupta.murmur.Murmur3;

byte[] data2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1};
Murmur3.hash_x64_128(data2, data2.length, 0);
Murmur3.hash_x64_128(data2, data2.length, 0);
Murmur3.hash_x64_128(data2, data2.length, 0);

Murmur3.hash_x64_128(data2, data2.length, 0);

returns

import com.sangupta.murmur.Murmur3
field byte[] data2 = byte[17] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 }
Murmur3.hash_x64_128(data2, data2.length, 0); = long[2] { 2108477303888159446, 3080087960434196035 }
Murmur3.hash_x64_128(data2, data2.length, 0); = long[2] { -5533461732917773897, -8684579065263202028 }
Murmur3.hash_x64_128(data2, data2.length, 0); = long[2] { -5533461732917773897, -8684579065263202028 }
Murmur3.hash_x64_128(data2, data2.length, 0); = long[2] { -5533461732917773897, -8684579065263202028 }

Expected all return values to be equal.
running OracleJDK 12.0.2.

@sangupta
Copy link
Owner

sangupta commented Sep 15, 2019

@KingBoomie The byte-array is modified after the first run of the hash pass:

@Test
public void test() {
	byte[] data2 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1};
	byte[] data3 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1};

	final long seed = new Random().nextLong();		
	long[] initial = Murmur3.hash_x64_128(data2, data2.length, seed);
	
	System.out.println(Arrays.toString(data2));
	Assert.assertArrayEquals(data2, data3); // this fails
}

The data2 is modified to:

[-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1]

I will debug further to see why this happens.

@sangupta sangupta self-assigned this Sep 15, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants