1use primitive_types::{H128, H160, H256, H512, U128, U256, U512};
2
3use super::BigNumber;
4
5macro_rules! from {
6 ($type:ty) => {
7 impl From<$type> for BigNumber {
8 fn from(value: $type) -> Self {
9 BigNumber::new(format!("{:#x}", value))
10 }
11 }
12 };
13}
14
15from!(U128);
16from!(U256);
17from!(U512);
18from!(H128);
19from!(H160);
20from!(H256);
21from!(H512);
22from!(isize);
23from!(i8);
24from!(i16);
25from!(i32);
26from!(i64);
27from!(i128);
28from!(usize);
29from!(u8);
30from!(u16);
31from!(u32);
32from!(u64);
33from!(u128);
34
35#[cfg(test)]
36mod tests {
37 use primitive_types::{H256, U128, U256};
38 use wasm_bindgen_test::*;
39
40 use super::BigNumber;
41
42 #[wasm_bindgen_test]
43 fn primitive_uint() {
44 let value = U256::MAX - U256::from(U128::MAX);
45 let bignumber = BigNumber::from(value.clone());
46
47 assert_eq!(U256::try_from(bignumber).unwrap(), value);
48 }
49
50 #[wasm_bindgen_test]
51 fn primitive_hash() {
52 let value = H256::from(
53 <[u8; 32]>::try_from([[u8::MAX; 8], [0; 8], [0; 8], [u8::MAX; 8]].concat()).unwrap(),
54 );
55 let bignumber = BigNumber::from(value.clone());
56
57 assert_eq!(H256::try_from(bignumber).unwrap(), value);
58 }
59
60 #[wasm_bindgen_test]
61 fn std_uint() {
62 let value = u128::MAX - u64::MAX as u128;
63 let bignumber = BigNumber::from(value.clone());
64
65 assert_eq!(u128::try_from(bignumber).unwrap(), value);
66 }
67
68 #[wasm_bindgen_test]
69 fn std_int() {
70 let value = i128::MAX - i64::MAX as i128;
71 let bignumber = BigNumber::from(value.clone());
72
73 assert_eq!(i128::try_from(bignumber).unwrap(), value);
74 }
75}