1use std::cmp::Ord;
2
3pub 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}