api3_common/util/
sort.rs

1use std::cmp::Ord;
2
3/// sort an array of U256
4pub fn sort<T>(array: &[T]) -> Vec<T>
5where
6    T: Clone + Ord,
7{
8    let mut array = array.to_vec();
9    array.sort();
10    array
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16    use crate::abi::U256;
17
18    #[test]
19    fn already_sorted() {
20        let numbers = vec![U256::from(1_i128), U256::from(2_i128), U256::from(3_i128)];
21        let result = sort(&numbers);
22        assert_eq!(result, numbers);
23    }
24
25    #[test]
26    fn unsorted() {
27        let numbers = vec![U256::from(2_i128), U256::from(1_i128), U256::from(3_i128)];
28        let result = sort(&numbers);
29        let expected = vec![U256::from(1_i128), U256::from(2i128), U256::from(3_i128)];
30        assert_eq!(result, expected);
31    }
32
33    #[test]
34    fn large_numbers() {
35        let numbers = vec![
36            U256::from(212837128371931812_u128),
37            U256::from(u128::MAX),
38            U256::from(51623219381273_u128),
39        ];
40        let result = sort(&numbers);
41        let expected = vec![
42            U256::from(51623219381273_u128),
43            U256::from(212837128371931812_u128),
44            U256::from(u128::MAX),
45        ];
46        assert_eq!(result, expected);
47    }
48
49    #[test]
50    fn max_numbers() {
51        let numbers = vec![U256::MAX, U256::from([u8::MAX; 32])];
52        let result = sort(&numbers);
53        let expected = vec![U256::from([u8::MAX; 32]), U256::MAX];
54        assert_eq!(result, expected);
55    }
56}