api3-common 0.0.1

The common crate for API3 DAPI Server contracts
Documentation
use std::cmp::Ord;

/// sort an array of U256
pub fn sort<T>(array: &[T]) -> Vec<T>
where
    T: Clone + Ord,
{
    let mut array = array.to_vec();
    array.sort();
    array
}

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

    #[test]
    fn already_sorted() {
        let numbers = vec![U256::from(1_i128), U256::from(2_i128), U256::from(3_i128)];
        let result = sort(&numbers);
        assert_eq!(result, numbers);
    }

    #[test]
    fn unsorted() {
        let numbers = vec![U256::from(2_i128), U256::from(1_i128), U256::from(3_i128)];
        let result = sort(&numbers);
        let expected = vec![U256::from(1_i128), U256::from(2i128), U256::from(3_i128)];
        assert_eq!(result, expected);
    }

    #[test]
    fn large_numbers() {
        let numbers = vec![
            U256::from(212837128371931812_u128),
            U256::from(u128::MAX),
            U256::from(51623219381273_u128),
        ];
        let result = sort(&numbers);
        let expected = vec![
            U256::from(51623219381273_u128),
            U256::from(212837128371931812_u128),
            U256::from(u128::MAX),
        ];
        assert_eq!(result, expected);
    }

    #[test]
    fn max_numbers() {
        let numbers = vec![U256::MAX, U256::from([u8::MAX; 32])];
        let result = sort(&numbers);
        let expected = vec![U256::from([u8::MAX; 32]), U256::MAX];
        assert_eq!(result, expected);
    }
}