Skip to content

Commit 5eaea84

Browse files
authored
chore: more overflow tests (#287)
1 parent ef0f85b commit 5eaea84

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

common/src/asset.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]

contract/market/tests/collateral.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,18 @@ async fn collateral_withdrawal(#[future(awt)] worker: Worker<Sandbox>) {
6464

6565
assert_eq!(withdrawn + collateral_deposit, total);
6666
}
67+
68+
#[rstest]
69+
#[tokio::test]
70+
#[should_panic = "attempt to subtract with overflow"]
71+
async fn excessive_collateral_withdrawal(#[future(awt)] worker: Worker<Sandbox>) {
72+
setup_test!(worker extract(c) accounts(borrow_user_1, borrow_user_2));
73+
74+
c.collateralize(&borrow_user_1, 1_000_000).await;
75+
c.collateralize(&borrow_user_2, 1_000_000).await;
76+
77+
let balance_before = c.collateral_asset.balance_of(borrow_user_1.id()).await;
78+
eprintln!("Balance before: {balance_before}");
79+
80+
c.withdraw_collateral(&borrow_user_1, 1_000_000 + 1).await;
81+
}

0 commit comments

Comments
 (0)