From cfb7dc501b5c08eb81e56662b2c11c916eeff88c Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 29 Mar 2026 16:42:02 +0100 Subject: [PATCH] test: add calculate_price edge case tests - test_calculate_price_zero_reserve_a_fails - test_calculate_price_zero_reserve_b_fails - test_calculate_price_overflow_protection - test_calculate_price_after_swap --- contract/src/market.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/contract/src/market.rs b/contract/src/market.rs index 20d454fe..bbd877f9 100644 --- a/contract/src/market.rs +++ b/contract/src/market.rs @@ -552,6 +552,37 @@ mod market_tests { assert_eq!(price, 333_333); } + #[test] + fn test_calculate_price_zero_reserve_a_fails() { + let result = super::calculate_price(0, 1000); + assert!(matches!(result, Err(InsightArenaError::InvalidInput))); + } + + #[test] + fn test_calculate_price_zero_reserve_b_fails() { + let result = super::calculate_price(1000, 0); + assert!(matches!(result, Err(InsightArenaError::InvalidInput))); + } + + #[test] + fn test_calculate_price_overflow_protection() { + // reserve_b = i128::MAX / 2 causes overflow when multiplied by 1_000_000 + let result = super::calculate_price(1, i128::MAX / 2); + assert!(matches!(result, Err(InsightArenaError::Overflow))); + } + + #[test] + fn test_calculate_price_after_swap() { + // Initial: 1000/1000 -> price = 1_000_000 + let initial = super::calculate_price(1000, 1000).unwrap(); + assert_eq!(initial, 1_000_000); + + // After swap: reserve_a = 1100, reserve_b = 909 -> price changes + let after = super::calculate_price(1100, 909).unwrap(); + assert_eq!(after, 826_363); + assert!(after < initial); + } + /// Register a mock XLM token (Stellar Asset Contract) and return its address. fn register_token(env: &Env) -> Address { let token_admin = Address::generate(env);