@@ -1681,34 +1681,6 @@ mod verify {
1681
1681
}
1682
1682
}
1683
1683
1684
- // Verify `unchecked_{shl, shr}`
1685
- macro_rules! generate_unchecked_shift_harness {
1686
- ( $type: ty, $method: ident, $harness_name: ident) => {
1687
- #[ kani:: proof_for_contract( $type:: $method) ]
1688
- pub fn $harness_name( ) {
1689
- let num1: $type = kani:: any:: <$type>( ) ;
1690
- let num2: u32 = kani:: any:: <u32 >( ) ;
1691
-
1692
- unsafe {
1693
- num1. $method( num2) ;
1694
- }
1695
- }
1696
- } ;
1697
- }
1698
-
1699
- macro_rules! generate_unchecked_neg_harness {
1700
- ( $type: ty, $harness_name: ident) => {
1701
- #[ kani:: proof_for_contract( $type:: unchecked_neg) ]
1702
- pub fn $harness_name( ) {
1703
- let num1: $type = kani:: any:: <$type>( ) ;
1704
-
1705
- unsafe {
1706
- num1. unchecked_neg( ) ;
1707
- }
1708
- }
1709
- } ;
1710
- }
1711
-
1712
1684
/// A macro to generate Kani proof harnesses for the `carrying_mul` method,
1713
1685
///
1714
1686
/// The macro creates multiple harnesses for different ranges of input values,
@@ -1810,63 +1782,6 @@ mod verify {
1810
1782
}
1811
1783
}
1812
1784
1813
- // `unchecked_add` proofs
1814
- //
1815
- // Target types:
1816
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
1817
- //
1818
- // Target contracts:
1819
- // Preconditions: No overflow should occur
1820
- // #[requires(!self.overflowing_add(rhs).1)]
1821
- //
1822
- // Target function:
1823
- // pub const unsafe fn unchecked_add(self, rhs: Self) -> Self
1824
- generate_unchecked_math_harness ! ( i8 , unchecked_add, checked_unchecked_add_i8) ;
1825
- generate_unchecked_math_harness ! ( i16 , unchecked_add, checked_unchecked_add_i16) ;
1826
- generate_unchecked_math_harness ! ( i32 , unchecked_add, checked_unchecked_add_i32) ;
1827
- generate_unchecked_math_harness ! ( i64 , unchecked_add, checked_unchecked_add_i64) ;
1828
- generate_unchecked_math_harness ! ( i128 , unchecked_add, checked_unchecked_add_i128) ;
1829
- generate_unchecked_math_harness ! ( isize , unchecked_add, checked_unchecked_add_isize) ;
1830
- generate_unchecked_math_harness ! ( u8 , unchecked_add, checked_unchecked_add_u8) ;
1831
- generate_unchecked_math_harness ! ( u16 , unchecked_add, checked_unchecked_add_u16) ;
1832
- generate_unchecked_math_harness ! ( u32 , unchecked_add, checked_unchecked_add_u32) ;
1833
- generate_unchecked_math_harness ! ( u64 , unchecked_add, checked_unchecked_add_u64) ;
1834
- generate_unchecked_math_harness ! ( u128 , unchecked_add, checked_unchecked_add_u128) ;
1835
- generate_unchecked_math_harness ! ( usize , unchecked_add, checked_unchecked_add_usize) ;
1836
-
1837
- // `unchecked_neg` proofs
1838
- //
1839
- // Target types:
1840
- // i{8,16,32,64,128,size} -- 6 types in total
1841
- //
1842
- // Target contracts:
1843
- // #[requires(self != $SelfT::MIN)]
1844
- //
1845
- // Target function:
1846
- // pub const unsafe fn unchecked_neg(self) -> Self
1847
- generate_unchecked_neg_harness ! ( i8 , checked_unchecked_neg_i8) ;
1848
- generate_unchecked_neg_harness ! ( i16 , checked_unchecked_neg_i16) ;
1849
- generate_unchecked_neg_harness ! ( i32 , checked_unchecked_neg_i32) ;
1850
- generate_unchecked_neg_harness ! ( i64 , checked_unchecked_neg_i64) ;
1851
- generate_unchecked_neg_harness ! ( i128 , checked_unchecked_neg_i128) ;
1852
- generate_unchecked_neg_harness ! ( isize , checked_unchecked_neg_isize) ;
1853
-
1854
- // `unchecked_mul` proofs
1855
- //
1856
- // Target types:
1857
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total, with different interval checks for each.
1858
- // Total types of checks including intervals -- 36
1859
- //
1860
- // Target contracts:
1861
- // Preconditions: No overflow should occur
1862
- // #[requires(!self.overflowing_mul(rhs).1)]
1863
- //
1864
- // Target function:
1865
- // pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self
1866
- // exponential state spaces for 32,64 and 128, hence provided limited range for verification.
1867
- generate_unchecked_math_harness ! ( i8 , unchecked_mul, checked_unchecked_mul_i8) ;
1868
- generate_unchecked_math_harness ! ( i16 , unchecked_mul, checked_unchecked_mul_i16) ;
1869
-
1870
1785
// ====================== i32 Harnesses ======================
1871
1786
generate_unchecked_mul_intervals ! (
1872
1787
i32 ,
@@ -2008,80 +1923,6 @@ mod verify {
2008
1923
usize :: MAX
2009
1924
) ;
2010
1925
2011
- // unchecked_shr proofs
2012
- //
2013
- // Target types:
2014
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
2015
- //
2016
- // Target contracts:
2017
- // #[requires(rhs < <$ActualT>::BITS)]
2018
- //
2019
- // Target function:
2020
- // pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self
2021
- generate_unchecked_shift_harness ! ( i8 , unchecked_shr, checked_unchecked_shr_i8) ;
2022
- generate_unchecked_shift_harness ! ( i16 , unchecked_shr, checked_unchecked_shr_i16) ;
2023
- generate_unchecked_shift_harness ! ( i32 , unchecked_shr, checked_unchecked_shr_i32) ;
2024
- generate_unchecked_shift_harness ! ( i64 , unchecked_shr, checked_unchecked_shr_i64) ;
2025
- generate_unchecked_shift_harness ! ( i128 , unchecked_shr, checked_unchecked_shr_i128) ;
2026
- generate_unchecked_shift_harness ! ( isize , unchecked_shr, checked_unchecked_shr_isize) ;
2027
- generate_unchecked_shift_harness ! ( u8 , unchecked_shr, checked_unchecked_shr_u8) ;
2028
- generate_unchecked_shift_harness ! ( u16 , unchecked_shr, checked_unchecked_shr_u16) ;
2029
- generate_unchecked_shift_harness ! ( u32 , unchecked_shr, checked_unchecked_shr_u32) ;
2030
- generate_unchecked_shift_harness ! ( u64 , unchecked_shr, checked_unchecked_shr_u64) ;
2031
- generate_unchecked_shift_harness ! ( u128 , unchecked_shr, checked_unchecked_shr_u128) ;
2032
- generate_unchecked_shift_harness ! ( usize , unchecked_shr, checked_unchecked_shr_usize) ;
2033
-
2034
- // `unchecked_shl` proofs
2035
- //
2036
- // Target types:
2037
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
2038
- //
2039
- // Target contracts:
2040
- // #[requires(shift < Self::BITS)]
2041
- //
2042
- // Target function:
2043
- // pub const unsafe fn unchecked_shl(self, shift: u32) -> Self
2044
- //
2045
- // This function performs an unchecked bitwise left shift operation.
2046
- generate_unchecked_shift_harness ! ( i8 , unchecked_shl, checked_unchecked_shl_i8) ;
2047
- generate_unchecked_shift_harness ! ( i16 , unchecked_shl, checked_unchecked_shl_i16) ;
2048
- generate_unchecked_shift_harness ! ( i32 , unchecked_shl, checked_unchecked_shl_i32) ;
2049
- generate_unchecked_shift_harness ! ( i64 , unchecked_shl, checked_unchecked_shl_i64) ;
2050
- generate_unchecked_shift_harness ! ( i128 , unchecked_shl, checked_unchecked_shl_i128) ;
2051
- generate_unchecked_shift_harness ! ( isize , unchecked_shl, checked_unchecked_shl_isize) ;
2052
- generate_unchecked_shift_harness ! ( u8 , unchecked_shl, checked_unchecked_shl_u8) ;
2053
- generate_unchecked_shift_harness ! ( u16 , unchecked_shl, checked_unchecked_shl_u16) ;
2054
- generate_unchecked_shift_harness ! ( u32 , unchecked_shl, checked_unchecked_shl_u32) ;
2055
- generate_unchecked_shift_harness ! ( u64 , unchecked_shl, checked_unchecked_shl_u64) ;
2056
- generate_unchecked_shift_harness ! ( u128 , unchecked_shl, checked_unchecked_shl_u128) ;
2057
- generate_unchecked_shift_harness ! ( usize , unchecked_shl, checked_unchecked_shl_usize) ;
2058
-
2059
- // `unchecked_sub` proofs
2060
- //
2061
- // Target types:
2062
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
2063
- //
2064
- // Target contracts:
2065
- // Preconditions: No overflow should occur
2066
- // #[requires(!self.overflowing_sub(rhs).1)]
2067
- //
2068
- // Target function:
2069
- // pub const unsafe fn unchecked_sub(self, rhs: Self) -> Self
2070
- //
2071
- // This function performs an unchecked subtraction operation.
2072
- generate_unchecked_math_harness ! ( i8 , unchecked_sub, checked_unchecked_sub_i8) ;
2073
- generate_unchecked_math_harness ! ( i16 , unchecked_sub, checked_unchecked_sub_i16) ;
2074
- generate_unchecked_math_harness ! ( i32 , unchecked_sub, checked_unchecked_sub_i32) ;
2075
- generate_unchecked_math_harness ! ( i64 , unchecked_sub, checked_unchecked_sub_i64) ;
2076
- generate_unchecked_math_harness ! ( i128 , unchecked_sub, checked_unchecked_sub_i128) ;
2077
- generate_unchecked_math_harness ! ( isize , unchecked_sub, checked_unchecked_sub_isize) ;
2078
- generate_unchecked_math_harness ! ( u8 , unchecked_sub, checked_unchecked_sub_u8) ;
2079
- generate_unchecked_math_harness ! ( u16 , unchecked_sub, checked_unchecked_sub_u16) ;
2080
- generate_unchecked_math_harness ! ( u32 , unchecked_sub, checked_unchecked_sub_u32) ;
2081
- generate_unchecked_math_harness ! ( u64 , unchecked_sub, checked_unchecked_sub_u64) ;
2082
- generate_unchecked_math_harness ! ( u128 , unchecked_sub, checked_unchecked_sub_u128) ;
2083
- generate_unchecked_math_harness ! ( usize , unchecked_sub, checked_unchecked_sub_usize) ;
2084
-
2085
1926
// Part_2 `carrying_mul` proofs
2086
1927
//
2087
1928
// ====================== u8 Harnesses ======================
@@ -2172,55 +2013,6 @@ mod verify {
2172
2013
( u64 :: MAX / 2 ) + 10u64
2173
2014
) ;
2174
2015
2175
- // Part_2 `wrapping_shl` proofs
2176
- //
2177
- // Target types:
2178
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
2179
- //
2180
- // Target contracts:
2181
- // #[ensures(|result| *result == self << (rhs & (Self::BITS - 1)))]
2182
- //
2183
- // Target function:
2184
- // pub const fn wrapping_shl(self, rhs: u32) -> Self
2185
- //
2186
- // This function performs an panic-free bitwise left shift operation.
2187
- generate_wrapping_shift_harness ! ( i8 , wrapping_shl, checked_wrapping_shl_i8) ;
2188
- generate_wrapping_shift_harness ! ( i16 , wrapping_shl, checked_wrapping_shl_i16) ;
2189
- generate_wrapping_shift_harness ! ( i32 , wrapping_shl, checked_wrapping_shl_i32) ;
2190
- generate_wrapping_shift_harness ! ( i64 , wrapping_shl, checked_wrapping_shl_i64) ;
2191
- generate_wrapping_shift_harness ! ( i128 , wrapping_shl, checked_wrapping_shl_i128) ;
2192
- generate_wrapping_shift_harness ! ( isize , wrapping_shl, checked_wrapping_shl_isize) ;
2193
- generate_wrapping_shift_harness ! ( u8 , wrapping_shl, checked_wrapping_shl_u8) ;
2194
- generate_wrapping_shift_harness ! ( u16 , wrapping_shl, checked_wrapping_shl_u16) ;
2195
- generate_wrapping_shift_harness ! ( u32 , wrapping_shl, checked_wrapping_shl_u32) ;
2196
- generate_wrapping_shift_harness ! ( u64 , wrapping_shl, checked_wrapping_shl_u64) ;
2197
- generate_wrapping_shift_harness ! ( u128 , wrapping_shl, checked_wrapping_shl_u128) ;
2198
- generate_wrapping_shift_harness ! ( usize , wrapping_shl, checked_wrapping_shl_usize) ;
2199
-
2200
- // Part_2 `wrapping_shr` proofs
2201
- //
2202
- // Target types:
2203
- // i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
2204
- //
2205
- // Target contracts:
2206
- // #[ensures(|result| *result == self >> (rhs & (Self::BITS - 1)))]
2207
- // Target function:
2208
- // pub const fn wrapping_shr(self, rhs: u32) -> Self {
2209
- //
2210
- // This function performs an panic-free bitwise right shift operation.
2211
- generate_wrapping_shift_harness ! ( i8 , wrapping_shr, checked_wrapping_shr_i8) ;
2212
- generate_wrapping_shift_harness ! ( i16 , wrapping_shr, checked_wrapping_shr_i16) ;
2213
- generate_wrapping_shift_harness ! ( i32 , wrapping_shr, checked_wrapping_shr_i32) ;
2214
- generate_wrapping_shift_harness ! ( i64 , wrapping_shr, checked_wrapping_shr_i64) ;
2215
- generate_wrapping_shift_harness ! ( i128 , wrapping_shr, checked_wrapping_shr_i128) ;
2216
- generate_wrapping_shift_harness ! ( isize , wrapping_shr, checked_wrapping_shr_isize) ;
2217
- generate_wrapping_shift_harness ! ( u8 , wrapping_shr, checked_wrapping_shr_u8) ;
2218
- generate_wrapping_shift_harness ! ( u16 , wrapping_shr, checked_wrapping_shr_u16) ;
2219
- generate_wrapping_shift_harness ! ( u32 , wrapping_shr, checked_wrapping_shr_u32) ;
2220
- generate_wrapping_shift_harness ! ( u64 , wrapping_shr, checked_wrapping_shr_u64) ;
2221
- generate_wrapping_shift_harness ! ( u128 , wrapping_shr, checked_wrapping_shr_u128) ;
2222
- generate_wrapping_shift_harness ! ( usize , wrapping_shr, checked_wrapping_shr_usize) ;
2223
-
2224
2016
// `f{16,32,64,128}::to_int_unchecked` proofs
2225
2017
//
2226
2018
// Target integer types:
0 commit comments