1
use crate::{
2
    swap::{ensure_minimum_output, ensure_support_funds_preserved},
3
    ContractError,
4
};
5

            
6
use cosmwasm_std::Coin;
7
use injective_math::FPDecimal;
8

            
9
#[test]
10
2
fn support_floor_accepts_an_authorized_input_debit() {
11
2
    assert!(ensure_support_funds_preserved("usdt", FPDecimal::from(100u128), FPDecimal::from(100u128)).is_ok());
12
2
    assert!(ensure_support_funds_preserved("usdt", FPDecimal::from(100u128), FPDecimal::from(101u128)).is_ok());
13
2
}
14

            
15
#[test]
16
2
fn support_floor_rejects_any_debit_beyond_the_authorized_input() {
17
2
    let result = ensure_support_funds_preserved("usdt", FPDecimal::from(100u128), FPDecimal::must_from_str("99.999999999999999999"));
18
2

            
19
2
    assert!(matches!(
20
2
        result,
21
        Err(ContractError::SupportFundsConsumed {
22
2
            denom,
23
2
            minimum_remaining,
24
2
            actual_remaining,
25
2
        }) if denom == "usdt"
26
2
            && minimum_remaining == FPDecimal::from(100u128)
27
2
            && actual_remaining == FPDecimal::must_from_str("99.999999999999999999")
28
    ));
29
2
}
30

            
31
#[test]
32
2
fn minimum_output_is_checked_against_integer_bank_units() {
33
2
    let output = Coin::new(10u128, "atom");
34
2
    let minimum = FPDecimal::must_from_str("10.5");
35
2

            
36
2
    assert!(matches!(
37
2
        ensure_minimum_output(&output, minimum),
38
2
        Err(ContractError::MinOutputAmountNotReached(value)) if value == minimum
39
    ));
40
2
    assert!(ensure_minimum_output(&output, FPDecimal::from(10u128)).is_ok());
41
2
}