@@ -401,3 +401,45 @@ fn test_hash_uint() {
401
401
assert hash_u64( val as u64 ) != hash_uint ( val as uint ) ;
402
402
assert hash_u32( val as u32 ) == hash_uint ( val as uint ) ;
403
403
}
404
+
405
+ #[ test]
406
+ fn test_hash_idempotent ( ) {
407
+ let val64 = 0xdeadbeef_deadbeef_u64 ;
408
+ assert hash_u64( val64) == hash_u64 ( val64) ;
409
+ let val32 = 0xdeadbeef_u32 ;
410
+ assert hash_u32( val32) == hash_u32 ( val32) ;
411
+ }
412
+
413
+ #[ test]
414
+ fn test_hash_no_bytes_dropped_64 ( ) {
415
+ let val = 0xdeadbeef_deadbeef_u64 ;
416
+
417
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 0 ) ) ;
418
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 1 ) ) ;
419
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 2 ) ) ;
420
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 3 ) ) ;
421
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 4 ) ) ;
422
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 5 ) ) ;
423
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 6 ) ) ;
424
+ assert hash_u64( val) != hash_u64 ( zero_byte ( val, 7 ) ) ;
425
+
426
+ fn zero_byte ( val : u64 , byte : uint ) -> u64 {
427
+ assert 0 <= byte; assert byte < 8 ;
428
+ val & !( 0xff << ( byte * 8 ) )
429
+ }
430
+ }
431
+
432
+ #[ test]
433
+ fn test_hash_no_bytes_dropped_32 ( ) {
434
+ let val = 0xdeadbeef_u32 ;
435
+
436
+ assert hash_u32( val) != hash_u32 ( zero_byte ( val, 0 ) ) ;
437
+ assert hash_u32( val) != hash_u32 ( zero_byte ( val, 1 ) ) ;
438
+ assert hash_u32( val) != hash_u32 ( zero_byte ( val, 2 ) ) ;
439
+ assert hash_u32( val) != hash_u32 ( zero_byte ( val, 3 ) ) ;
440
+
441
+ fn zero_byte ( val : u32 , byte : uint ) -> u32 {
442
+ assert 0 <= byte; assert byte < 4 ;
443
+ val & !( 0xff << ( byte * 8 ) )
444
+ }
445
+ }
0 commit comments