From 06b1b1db3c7599aad54843534334052d171c7b3c Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Fri, 10 Jun 2022 22:13:13 +0200 Subject: [PATCH 1/3] Add one constructor for Uint types --- CHANGELOG.md | 4 ++++ packages/std/src/math/uint128.rs | 21 ++++++++++++++++++++ packages/std/src/math/uint256.rs | 30 +++++++++++++++++++++++++++++ packages/std/src/math/uint512.rs | 33 ++++++++++++++++++++++++++++++++ packages/std/src/math/uint64.rs | 15 +++++++++++++++ 5 files changed, 103 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e30584dcb..045d57213b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ and this project adheres to ## [Unreleased] +### Added + +- cosmwasm-std: Add `Uint{64,128,256,512}::one`. + ## [1.0.0] - 2022-05-14 ### Added diff --git a/packages/std/src/math/uint128.rs b/packages/std/src/math/uint128.rs index 33723f9dbd..c896dbe512 100644 --- a/packages/std/src/math/uint128.rs +++ b/packages/std/src/math/uint128.rs @@ -49,6 +49,12 @@ impl Uint128 { Uint128(0) } + /// Creates a Uint128(1) + #[inline] + pub const fn one() -> Self { + Self(1) + } + /// Returns a copy of the internal data pub const fn u128(&self) -> u128 { self.0 @@ -502,6 +508,21 @@ mod tests { use super::*; use crate::{from_slice, to_vec}; + #[test] + fn uint128_zero_and_one_works() { + let zero = Uint128::zero(); + assert_eq!( + zero.to_be_bytes(), + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] + ); + + let one = Uint128::one(); + assert_eq!( + one.to_be_bytes(), + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] + ); + } + #[test] fn uint128_convert_into() { let original = Uint128(12345); diff --git a/packages/std/src/math/uint256.rs b/packages/std/src/math/uint256.rs index 0bb423826e..af1c5abdb3 100644 --- a/packages/std/src/math/uint256.rs +++ b/packages/std/src/math/uint256.rs @@ -66,6 +66,15 @@ impl Uint256 { Uint256(U256::zero()) } + /// Creates a Uint256(1) + #[inline] + pub const fn one() -> Self { + Self::from_be_bytes([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, + ]) + } + pub const fn from_be_bytes(data: [u8; 32]) -> Self { let words: [u64; 4] = [ u64::from_le_bytes([ @@ -611,6 +620,27 @@ mod tests { assert_eq!(be_bytes, resulting_bytes); } + #[test] + fn uint256_zero_and_one_works() { + let zero = Uint256::zero(); + assert_eq!( + zero.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 + ] + ); + + let one = Uint256::one(); + assert_eq!( + one.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1 + ] + ); + } + #[test] fn uint256_from_be_bytes() { let a = Uint256::from_be_bytes([ diff --git a/packages/std/src/math/uint512.rs b/packages/std/src/math/uint512.rs index 6a1069aa9e..f9c3155705 100644 --- a/packages/std/src/math/uint512.rs +++ b/packages/std/src/math/uint512.rs @@ -66,6 +66,16 @@ impl Uint512 { Uint512(U512::zero()) } + /// Creates a Uint512(1) + #[inline] + pub const fn one() -> Self { + Self::from_be_bytes([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, + ]) + } + pub const fn from_be_bytes(data: [u8; 64]) -> Self { let words: [u64; 8] = [ u64::from_le_bytes([ @@ -573,6 +583,29 @@ mod tests { assert_eq!(be_bytes, resulting_bytes); } + #[test] + fn uint512_zero_and_one_works() { + let zero = Uint512::zero(); + assert_eq!( + zero.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + ] + ); + + let one = Uint512::one(); + assert_eq!( + one.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1 + ] + ); + } + #[test] fn uint512_endianness() { let be_bytes = [ diff --git a/packages/std/src/math/uint64.rs b/packages/std/src/math/uint64.rs index 906e58f3c1..a0456df4b2 100644 --- a/packages/std/src/math/uint64.rs +++ b/packages/std/src/math/uint64.rs @@ -45,6 +45,12 @@ impl Uint64 { Uint64(0) } + /// Creates a Uint64(1) + #[inline] + pub const fn one() -> Self { + Self(1) + } + /// Returns a copy of the internal data pub const fn u64(&self) -> u64 { self.0 @@ -456,6 +462,15 @@ mod tests { use super::*; use crate::{from_slice, to_vec}; + #[test] + fn uint64_zero_and_one_works() { + let zero = Uint64::zero(); + assert_eq!(zero.to_be_bytes(), [0, 0, 0, 0, 0, 0, 0, 0,]); + + let one = Uint64::one(); + assert_eq!(one.to_be_bytes(), [0, 0, 0, 0, 0, 0, 0, 1]); + } + #[test] fn uint64_convert_into() { let original = Uint64(12345); From 81af6eef22daf87a2653b1c2f656d284c4abb859 Mon Sep 17 00:00:00 2001 From: Jakub Bogucki Date: Sat, 11 Jun 2022 00:52:45 +0200 Subject: [PATCH 2/3] Add couple tests despite I shouldn't probablt add them --- packages/std/src/math/uint128.rs | 9 +++++++++ packages/std/src/math/uint256.rs | 12 ++++++++++++ packages/std/src/math/uint512.rs | 13 +++++++++++++ 3 files changed, 34 insertions(+) diff --git a/packages/std/src/math/uint128.rs b/packages/std/src/math/uint128.rs index c896dbe512..b8942a4469 100644 --- a/packages/std/src/math/uint128.rs +++ b/packages/std/src/math/uint128.rs @@ -508,6 +508,15 @@ mod tests { use super::*; use crate::{from_slice, to_vec}; + #[test] + fn uint128_one_works() { + let one = Uint128::one(); + assert_eq!( + one.to_be_bytes(), + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] + ); + } + #[test] fn uint128_zero_and_one_works() { let zero = Uint128::zero(); diff --git a/packages/std/src/math/uint256.rs b/packages/std/src/math/uint256.rs index af1c5abdb3..9ee6bc584d 100644 --- a/packages/std/src/math/uint256.rs +++ b/packages/std/src/math/uint256.rs @@ -605,6 +605,18 @@ mod tests { use super::*; use crate::{from_slice, to_vec}; + #[test] + fn uin256_one_works() { + let one = Uint256::one(); + assert_eq!( + one.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ] + ); + } + #[test] fn uint256_construct() { let num = Uint256::new([1; 32]); diff --git a/packages/std/src/math/uint512.rs b/packages/std/src/math/uint512.rs index f9c3155705..5b7db397b8 100644 --- a/packages/std/src/math/uint512.rs +++ b/packages/std/src/math/uint512.rs @@ -566,6 +566,19 @@ mod tests { use super::*; use crate::{from_slice, to_vec}; + #[test] + fn uin512_one_works() { + let one = Uint512::one(); + assert_eq!( + one.to_be_bytes(), + [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1 + ] + ); + } + #[test] fn uint512_construct() { let num = Uint512::new([1; 64]); From 83965b2f34f93ed97bd1c807cdb674f7d04f181e Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Sat, 11 Jun 2022 11:11:14 +0200 Subject: [PATCH 3/3] Organize uint new/zero/one tests --- packages/std/src/math/uint128.rs | 16 +++++----------- packages/std/src/math/uint256.rs | 21 ++++++--------------- packages/std/src/math/uint512.rs | 20 +++++--------------- packages/std/src/math/uint64.rs | 7 +++++-- 4 files changed, 21 insertions(+), 43 deletions(-) diff --git a/packages/std/src/math/uint128.rs b/packages/std/src/math/uint128.rs index b8942a4469..11d214bddd 100644 --- a/packages/std/src/math/uint128.rs +++ b/packages/std/src/math/uint128.rs @@ -509,22 +509,16 @@ mod tests { use crate::{from_slice, to_vec}; #[test] - fn uint128_one_works() { - let one = Uint128::one(); - assert_eq!( - one.to_be_bytes(), - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] - ); - } - - #[test] - fn uint128_zero_and_one_works() { + fn uint128_zero_works() { let zero = Uint128::zero(); assert_eq!( zero.to_be_bytes(), - [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,] + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] ); + } + #[test] + fn uint128_one_works() { let one = Uint128::one(); assert_eq!( one.to_be_bytes(), diff --git a/packages/std/src/math/uint256.rs b/packages/std/src/math/uint256.rs index 9ee6bc584d..a4b7c4b002 100644 --- a/packages/std/src/math/uint256.rs +++ b/packages/std/src/math/uint256.rs @@ -606,19 +606,7 @@ mod tests { use crate::{from_slice, to_vec}; #[test] - fn uin256_one_works() { - let one = Uint256::one(); - assert_eq!( - one.to_be_bytes(), - [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, - ] - ); - } - - #[test] - fn uint256_construct() { + fn uint256_new_works() { let num = Uint256::new([1; 32]); let a: [u8; 32] = num.to_be_bytes(); assert_eq!(a, [1; 32]); @@ -633,7 +621,7 @@ mod tests { } #[test] - fn uint256_zero_and_one_works() { + fn uint256_zero_works() { let zero = Uint256::zero(); assert_eq!( zero.to_be_bytes(), @@ -642,13 +630,16 @@ mod tests { 0, 0, 0, 0 ] ); + } + #[test] + fn uin256_one_works() { let one = Uint256::one(); assert_eq!( one.to_be_bytes(), [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1 + 0, 0, 0, 1, ] ); } diff --git a/packages/std/src/math/uint512.rs b/packages/std/src/math/uint512.rs index 5b7db397b8..a8779b7c91 100644 --- a/packages/std/src/math/uint512.rs +++ b/packages/std/src/math/uint512.rs @@ -567,20 +567,7 @@ mod tests { use crate::{from_slice, to_vec}; #[test] - fn uin512_one_works() { - let one = Uint512::one(); - assert_eq!( - one.to_be_bytes(), - [ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1 - ] - ); - } - - #[test] - fn uint512_construct() { + fn uint512_new_works() { let num = Uint512::new([1; 64]); let a: [u8; 64] = num.to_be_bytes(); assert_eq!(a, [1; 64]); @@ -597,7 +584,7 @@ mod tests { } #[test] - fn uint512_zero_and_one_works() { + fn uint512_zero_works() { let zero = Uint512::zero(); assert_eq!( zero.to_be_bytes(), @@ -607,7 +594,10 @@ mod tests { 0, 0, 0, 0, 0, 0, 0, 0 ] ); + } + #[test] + fn uin512_one_works() { let one = Uint512::one(); assert_eq!( one.to_be_bytes(), diff --git a/packages/std/src/math/uint64.rs b/packages/std/src/math/uint64.rs index a0456df4b2..cfe437f995 100644 --- a/packages/std/src/math/uint64.rs +++ b/packages/std/src/math/uint64.rs @@ -463,10 +463,13 @@ mod tests { use crate::{from_slice, to_vec}; #[test] - fn uint64_zero_and_one_works() { + fn uint64_zero_works() { let zero = Uint64::zero(); - assert_eq!(zero.to_be_bytes(), [0, 0, 0, 0, 0, 0, 0, 0,]); + assert_eq!(zero.to_be_bytes(), [0, 0, 0, 0, 0, 0, 0, 0]); + } + #[test] + fn uint64_one_works() { let one = Uint64::one(); assert_eq!(one.to_be_bytes(), [0, 0, 0, 0, 0, 0, 0, 1]); }