wp-solana-pool-traits 0.1.1

Traits and utilities for Solana liquidity pool operations: PoolViewer, PoolInfuser, PositionViewer
Documentation
//! Tick math utilities re-exported from `solana-amm-math`.

pub use wp_solana_amm_math::{
    decrease_liquidity_quote, decrease_liquidity_quote_a, decrease_liquidity_quote_b,
    get_initializable_tick_index, get_tick_array_start_index, get_tick_index_in_array,
    increase_liquidity_quote, increase_liquidity_quote_a, increase_liquidity_quote_b,
    order_tick_indexes, tick_count, DecreaseLiquidityQuote, IncreaseLiquidityQuote, TickRange,
    TransferFee, RAYDIUM_TICK_ARRAY_SIZE, WHIRLPOOL_TICK_ARRAY_SIZE,
};

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_order_tick_indexes() {
        let range = order_tick_indexes(100, -100);
        assert_eq!(range.tick_lower_index, -100);
        assert_eq!(range.tick_upper_index, 100);

        let range = order_tick_indexes(-100, 100);
        assert_eq!(range.tick_lower_index, -100);
        assert_eq!(range.tick_upper_index, 100);
    }

    #[test]
    fn test_get_initializable_tick_index() {
        // Round down (default when remainder < half spacing)
        assert_eq!(get_initializable_tick_index(5, 64, None), 0);
        // Round up (default when remainder >= half spacing)
        assert_eq!(get_initializable_tick_index(33, 64, None), 64);
        // Explicit round down
        assert_eq!(get_initializable_tick_index(33, 64, Some(false)), 0);
        // Explicit round up
        assert_eq!(get_initializable_tick_index(33, 64, Some(true)), 64);
        // Negative ticks
        assert_eq!(get_initializable_tick_index(-33, 64, Some(false)), -64);
        assert_eq!(get_initializable_tick_index(-33, 64, Some(true)), 0);
        // Exact multiple
        assert_eq!(get_initializable_tick_index(128, 64, Some(true)), 128);
    }
}