MurmurHash { public static long hash64( final byte[] data, int length, int seed) { final long m = 0xc6a4a7935bd1e995L; final int r = 47; long h = (seed&0xffffffffl)^(length*m); int length8 = length/8; for (int i=0; i<length8; i++) { final int i8 = i*8; long k = ((long)data[i8+0]&0xff) +(((long)data[i8+1]&0xff)<<8) +(((long)data[i8+2]&0xff)<<16) +(((long)data[i8+3]&0xff)<<24) +(((long)data[i8+4]&0xff)<<32) +(((long)data[i8+5]&0xff)<<40) +(((long)data[i8+6]&0xff)<<48) +(((long)data[i8+7]&0xff)<<56); k *= m; k ^= k >>> r; k *= m; h ^= k; h *= m; } switch (length%8) { case 7: h ^= (long)(data[(length&~7)+6]&0xff) << 48; case 6: h ^= (long)(data[(length&~7)+5]&0xff) << 40; case 5: h ^= (long)(data[(length&~7)+4]&0xff) << 32; case 4: h ^= (long)(data[(length&~7)+3]&0xff) << 24; case 3: h ^= (long)(data[(length&~7)+2]&0xff) << 16; case 2: h ^= (long)(data[(length&~7)+1]&0xff) << 8; case 1: h ^= (long)(data[length&~7]&0xff); h *= m; }; h ^= h >>> r; h *= m; h ^= h >>> r; return h; }  static int hash32( final byte[] data, int length, int seed); static int hash32( final byte[] data, int length); static int hash32( final String text); static int hash32( final String text, int from, int length); static long hash64( final byte[] data, int length, int seed); static long hash64( final byte[] data, int length); static long hash64( final String text); static long hash64( final String text, int from, int length);  }
@Test public void testHash64ByteArrayIntInt() { for (int i=0; i<input.length; i++) { long hash = MurmurHash.hash64( input[i], input[i].length, 0x344d1f5c); assertTrue( String.format( "Unexpected hash64 result for example %d: 0x%016x instead of 0x%016x", i, hash, results64_seed[i]), hash == results64_seed[ i]); } }
@Test public void testHash64ByteArrayInt() { for (int i=0; i<input.length; i++) { long hash = MurmurHash.hash64( input[i], input[i].length); assertTrue( String.format( "Unexpected hash64 result for example %d: 0x%016x instead of 0x%016x", i, hash, results64_standard[i]), hash == results64_standard[ i]); } }
@Test public void testHash64String() { long hash = MurmurHash.hash64( text); assertTrue( hash == 0x0920e0c1b7eeb261l); }
@Test public void testHash64StringIntInt() { long hash = MurmurHash.hash64( text, 2, text.length()-4); assertTrue( hash == 0xa8b33145194985a2l); }