@@ -1651,6 +1651,19 @@ mod verify {
16511651 }
16521652 }
16531653
1654+ macro_rules! generate_unchecked_neg_harness {
1655+ ( $type: ty, $harness_name: ident) => {
1656+ #[ kani:: proof_for_contract( $type:: unchecked_neg) ]
1657+ pub fn $harness_name( ) {
1658+ let num1: $type = kani:: any:: <$type>( ) ;
1659+
1660+ unsafe {
1661+ num1. unchecked_neg( ) ;
1662+ }
1663+ }
1664+ } ;
1665+ }
1666+
16541667 /// A macro to generate Kani proof harnesses for the `carrying_mul` method,
16551668 ///
16561669 /// The macro creates multiple harnesses for different ranges of input values,
@@ -1763,6 +1776,23 @@ mod verify {
17631776 generate_unchecked_math_harness ! ( u128 , unchecked_add, checked_unchecked_add_u128) ;
17641777 generate_unchecked_math_harness ! ( usize , unchecked_add, checked_unchecked_add_usize) ;
17651778
1779+ // `unchecked_neg` proofs
1780+ //
1781+ // Target types:
1782+ // i{8,16,32,64,128,size} -- 6 types in total
1783+ //
1784+ // Target contracts:
1785+ // #[requires(self != $SelfT::MIN)]
1786+ //
1787+ // Target function:
1788+ // pub const unsafe fn unchecked_neg(self) -> Self
1789+ generate_unchecked_neg_harness ! ( i8 , checked_unchecked_neg_i8) ;
1790+ generate_unchecked_neg_harness ! ( i16 , checked_unchecked_neg_i16) ;
1791+ generate_unchecked_neg_harness ! ( i32 , checked_unchecked_neg_i32) ;
1792+ generate_unchecked_neg_harness ! ( i64 , checked_unchecked_neg_i64) ;
1793+ generate_unchecked_neg_harness ! ( i128 , checked_unchecked_neg_i128) ;
1794+ generate_unchecked_neg_harness ! ( isize , checked_unchecked_neg_isize) ;
1795+
17661796 // `unchecked_mul` proofs
17671797 //
17681798 // Target types:
0 commit comments