@@ -584,6 +584,102 @@ mod tests {
584584 let deserialized: BorrowAssetAmount = serde_json:: from_str ( & serialized) . unwrap ( ) ;
585585 assert_eq ! ( deserialized, amount) ;
586586 }
587+
588+ #[ test]
589+ fn checked_add ( ) {
590+ let v = BorrowAssetAmount :: new ( 0 ) . checked_add ( BorrowAssetAmount :: new ( 0 ) ) ;
591+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 0 ) ) ) ;
592+ let v = BorrowAssetAmount :: new ( 0 ) . checked_add ( BorrowAssetAmount :: new ( 100 ) ) ;
593+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 100 ) ) ) ;
594+ let v = BorrowAssetAmount :: new ( 100 ) . checked_add ( BorrowAssetAmount :: new ( 0 ) ) ;
595+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 100 ) ) ) ;
596+ let v = BorrowAssetAmount :: new ( 100 ) . checked_add ( BorrowAssetAmount :: new ( 100 ) ) ;
597+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 200 ) ) ) ;
598+ let v = BorrowAssetAmount :: new ( 1 ) . checked_add ( BorrowAssetAmount :: new ( u128:: MAX ) ) ;
599+ assert_eq ! ( v, None ) ;
600+ }
601+
602+ #[ test]
603+ fn checked_sub ( ) {
604+ let v = BorrowAssetAmount :: new ( 0 ) . checked_sub ( BorrowAssetAmount :: new ( 0 ) ) ;
605+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 0 ) ) ) ;
606+ let v = BorrowAssetAmount :: new ( 0 ) . checked_sub ( BorrowAssetAmount :: new ( 100 ) ) ;
607+ assert_eq ! ( v, None ) ;
608+ let v = BorrowAssetAmount :: new ( 100 ) . checked_sub ( BorrowAssetAmount :: new ( 0 ) ) ;
609+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 100 ) ) ) ;
610+ let v = BorrowAssetAmount :: new ( 100 ) . checked_sub ( BorrowAssetAmount :: new ( 100 ) ) ;
611+ assert_eq ! ( v, Some ( BorrowAssetAmount :: new( 0 ) ) ) ;
612+ let v = BorrowAssetAmount :: new ( 1 ) . checked_sub ( BorrowAssetAmount :: new ( u128:: MAX - 33 ) ) ;
613+ assert_eq ! ( v, None ) ;
614+ }
615+
616+ #[ test]
617+ fn saturating_add ( ) {
618+ let v = BorrowAssetAmount :: new ( 0 ) . saturating_add ( BorrowAssetAmount :: new ( 0 ) ) ;
619+ assert_eq ! ( v, BorrowAssetAmount :: new( 0 ) ) ;
620+ let v = BorrowAssetAmount :: new ( 0 ) . saturating_add ( BorrowAssetAmount :: new ( 100 ) ) ;
621+ assert_eq ! ( v, BorrowAssetAmount :: new( 100 ) ) ;
622+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_add ( BorrowAssetAmount :: new ( 0 ) ) ;
623+ assert_eq ! ( v, BorrowAssetAmount :: new( 100 ) ) ;
624+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_add ( BorrowAssetAmount :: new ( 100 ) ) ;
625+ assert_eq ! ( v, BorrowAssetAmount :: new( 200 ) ) ;
626+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_add ( BorrowAssetAmount :: new ( u128:: MAX - 33 ) ) ;
627+ assert_eq ! ( v, BorrowAssetAmount :: new( u128 :: MAX ) ) ;
628+ }
629+
630+ #[ test]
631+ fn saturating_sub ( ) {
632+ let v = BorrowAssetAmount :: new ( 0 ) . saturating_sub ( BorrowAssetAmount :: new ( 0 ) ) ;
633+ assert_eq ! ( v, BorrowAssetAmount :: new( 0 ) ) ;
634+ let v = BorrowAssetAmount :: new ( 0 ) . saturating_sub ( BorrowAssetAmount :: new ( 100 ) ) ;
635+ assert_eq ! ( v, BorrowAssetAmount :: new( 0 ) ) ;
636+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_sub ( BorrowAssetAmount :: new ( 0 ) ) ;
637+ assert_eq ! ( v, BorrowAssetAmount :: new( 100 ) ) ;
638+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_sub ( BorrowAssetAmount :: new ( 100 ) ) ;
639+ assert_eq ! ( v, BorrowAssetAmount :: new( 0 ) ) ;
640+ let v = BorrowAssetAmount :: new ( 100 ) . saturating_sub ( BorrowAssetAmount :: new ( u128:: MAX - 33 ) ) ;
641+ assert_eq ! ( v, BorrowAssetAmount :: new( 0 ) ) ;
642+ }
643+
644+ #[ test]
645+ #[ should_panic = "overflow" ]
646+ fn overflow_unwrap_add ( ) {
647+ let _ =
648+ BorrowAssetAmount :: new ( 100 ) . unwrap_add ( BorrowAssetAmount :: new ( u128:: MAX ) , "overflow" ) ;
649+ }
650+
651+ #[ test]
652+ #[ should_panic = "overflow" ]
653+ fn overflow_unwrap_sub ( ) {
654+ let _ =
655+ BorrowAssetAmount :: new ( 100 ) . unwrap_sub ( BorrowAssetAmount :: new ( u128:: MAX ) , "overflow" ) ;
656+ }
657+
658+ #[ test]
659+ #[ should_panic = "attempt to add with overflow" ]
660+ fn overflow_add ( ) {
661+ let _ = BorrowAssetAmount :: new ( u128:: MAX ) + BorrowAssetAmount :: new ( 1 ) ;
662+ }
663+
664+ #[ test]
665+ #[ should_panic = "attempt to add with overflow" ]
666+ fn overflow_add_assign ( ) {
667+ let mut v = BorrowAssetAmount :: new ( u128:: MAX ) ;
668+ v += BorrowAssetAmount :: new ( 1 ) ;
669+ }
670+
671+ #[ test]
672+ #[ should_panic = "attempt to subtract with overflow" ]
673+ fn overflow_sub ( ) {
674+ let _ = BorrowAssetAmount :: new ( 0 ) - BorrowAssetAmount :: new ( 1 ) ;
675+ }
676+
677+ #[ test]
678+ #[ should_panic = "attempt to subtract with overflow" ]
679+ fn overflow_sub_assign ( ) {
680+ let mut v = BorrowAssetAmount :: new ( 1 ) ;
681+ v -= BorrowAssetAmount :: new ( u128:: MAX ) ;
682+ }
587683}
588684
589685#[ derive( Clone , Debug ) ]
0 commit comments