245 jbyte vector[256]; 246 jbyte hashes[4 * 256]; 247 248 for (int i = 0; i < 256; i++) { 249 vector[i] = (jbyte) i; 250 } 251 252 // Hash subranges {}, {0}, {0,1}, {0,1,2}, ..., {0,...,255} 253 for (int i = 0; i < 256; i++) { 254 juint hash = murmur3_32(256 - i, vector, i); 255 hashes[i * 4] = (jbyte) hash; 256 hashes[i * 4 + 1] = (jbyte)(hash >> 8); 257 hashes[i * 4 + 2] = (jbyte)(hash >> 16); 258 hashes[i * 4 + 3] = (jbyte)(hash >> 24); 259 } 260 261 // hash to get const result. 262 juint final_hash = murmur3_32(hashes, 4*256); 263 264 assert (MURMUR3_32_X86_CHECK_VALUE == final_hash, 265 err_msg( 266 "Calculated hash result not as expected. Expected %08X got %08X\n", 267 MURMUR3_32_X86_CHECK_VALUE, 268 final_hash)); 269 } 270 271 void AltHashing::testEquivalentHashes() { 272 juint jbytes, jchars, ints; 273 274 // printf("testEquivalentHashes\n"); 275 276 jbytes = murmur3_32(TWO_BYTE, 2); 277 jchars = murmur3_32(ONE_CHAR, 1); 278 assert (jbytes == jchars, 279 err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); 280 281 jbytes = murmur3_32(FOUR_BYTE, 4); 282 jchars = murmur3_32(TWO_CHAR, 2); 283 ints = murmur3_32(ONE_INT, 1); 284 assert ((jbytes == jchars) && (jbytes == ints), 285 err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); 286 287 jbytes = murmur3_32(SIX_BYTE, 6); 288 jchars = murmur3_32(THREE_CHAR, 3); 289 assert (jbytes == jchars, 290 err_msg("Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars)); 291 292 jbytes = murmur3_32(EIGHT_BYTE, 8); 293 jchars = murmur3_32(FOUR_CHAR, 4); 294 ints = murmur3_32(TWO_INT, 2); 295 assert ((jbytes == jchars) && (jbytes == ints), 296 err_msg("Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints)); 297 } 298 299 // Returns true if the alternate hashcode is correct 300 void AltHashing::test_alt_hash() { 301 testMurmur3_32_ByteArray(); 302 testEquivalentHashes(); 303 } 304 #endif // PRODUCT | 245 jbyte vector[256]; 246 jbyte hashes[4 * 256]; 247 248 for (int i = 0; i < 256; i++) { 249 vector[i] = (jbyte) i; 250 } 251 252 // Hash subranges {}, {0}, {0,1}, {0,1,2}, ..., {0,...,255} 253 for (int i = 0; i < 256; i++) { 254 juint hash = murmur3_32(256 - i, vector, i); 255 hashes[i * 4] = (jbyte) hash; 256 hashes[i * 4 + 1] = (jbyte)(hash >> 8); 257 hashes[i * 4 + 2] = (jbyte)(hash >> 16); 258 hashes[i * 4 + 3] = (jbyte)(hash >> 24); 259 } 260 261 // hash to get const result. 262 juint final_hash = murmur3_32(hashes, 4*256); 263 264 assert (MURMUR3_32_X86_CHECK_VALUE == final_hash, 265 "Calculated hash result not as expected. Expected %08X got %08X\n", 266 MURMUR3_32_X86_CHECK_VALUE, 267 final_hash); 268 } 269 270 void AltHashing::testEquivalentHashes() { 271 juint jbytes, jchars, ints; 272 273 // printf("testEquivalentHashes\n"); 274 275 jbytes = murmur3_32(TWO_BYTE, 2); 276 jchars = murmur3_32(ONE_CHAR, 1); 277 assert (jbytes == jchars, 278 "Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars); 279 280 jbytes = murmur3_32(FOUR_BYTE, 4); 281 jchars = murmur3_32(TWO_CHAR, 2); 282 ints = murmur3_32(ONE_INT, 1); 283 assert ((jbytes == jchars) && (jbytes == ints), 284 "Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints); 285 286 jbytes = murmur3_32(SIX_BYTE, 6); 287 jchars = murmur3_32(THREE_CHAR, 3); 288 assert (jbytes == jchars, 289 "Hashes did not match. b:%08x != c:%08x\n", jbytes, jchars); 290 291 jbytes = murmur3_32(EIGHT_BYTE, 8); 292 jchars = murmur3_32(FOUR_CHAR, 4); 293 ints = murmur3_32(TWO_INT, 2); 294 assert ((jbytes == jchars) && (jbytes == ints), 295 "Hashes did not match. b:%08x != c:%08x != i:%08x\n", jbytes, jchars, ints); 296 } 297 298 // Returns true if the alternate hashcode is correct 299 void AltHashing::test_alt_hash() { 300 testMurmur3_32_ByteArray(); 301 testEquivalentHashes(); 302 } 303 #endif // PRODUCT |