@@ -351,6 +351,7 @@ mod test {
351
351
use std:: rand:: RngUtil ;
352
352
use std:: vec;
353
353
354
+ use cryptoutil:: { add_bytes_to_bits, add_bytes_to_bits_tuple} ;
354
355
use digest:: Digest ;
355
356
356
357
/// Feed 1,000,000 'a's into the digest with varying input sizes and check that the result is
@@ -375,4 +376,50 @@ mod test {
375
376
376
377
assert ! ( expected == result_str) ;
377
378
}
379
+
380
+ // A normal addition - no overflow occurs
381
+ #[ test]
382
+ fn test_add_bytes_to_bits_ok ( ) {
383
+ assert ! ( add_bytes_to_bits:: <u64 >( 100 , 10 ) == 180 ) ;
384
+ }
385
+
386
+ // A simple failure case - adding 1 to the max value
387
+ #[ test]
388
+ #[ should_fail]
389
+ fn test_add_bytes_to_bits_overflow ( ) {
390
+ add_bytes_to_bits :: < u64 > ( Bounded :: max_value ( ) , 1 ) ;
391
+ }
392
+
393
+ // A normal addition - no overflow occurs (fast path)
394
+ #[ test]
395
+ fn test_add_bytes_to_bits_tuple_ok ( ) {
396
+ assert ! ( add_bytes_to_bits_tuple:: <u64 >( ( 5 , 100 ) , 10 ) == ( 5 , 180 ) ) ;
397
+ }
398
+
399
+ // The low order value overflows into the high order value
400
+ #[ test]
401
+ fn test_add_bytes_to_bits_tuple_ok2 ( ) {
402
+ assert ! ( add_bytes_to_bits_tuple:: <u64 >( ( 5 , Bounded :: max_value( ) ) , 1 ) == ( 6 , 7 ) ) ;
403
+ }
404
+
405
+ // The value to add is too large to be converted into bits without overflowing its type
406
+ #[ test]
407
+ fn test_add_bytes_to_bits_tuple_ok3 ( ) {
408
+ assert ! ( add_bytes_to_bits_tuple:: <u64 >( ( 5 , 0 ) , 0x4000000000000001 ) == ( 7 , 8 ) ) ;
409
+ }
410
+
411
+ // A simple failure case - adding 1 to the max value
412
+ #[ test]
413
+ #[ should_fail]
414
+ fn test_add_bytes_to_bits_tuple_overflow ( ) {
415
+ add_bytes_to_bits_tuple :: < u64 > ( ( Bounded :: max_value ( ) , Bounded :: max_value ( ) ) , 1 ) ;
416
+ }
417
+
418
+ // The value to add is too large to convert to bytes without overflowing its type, but the high
419
+ // order value from this conversion overflows when added to the existing high order value
420
+ #[ test]
421
+ #[ should_fail]
422
+ fn test_add_bytes_to_bits_tuple_overflow2 ( ) {
423
+ add_bytes_to_bits_tuple :: < u64 > ( ( Bounded :: max_value :: < u64 > ( ) - 1 , 0 ) , 0x8000000000000000 ) ;
424
+ }
378
425
}
0 commit comments