diff --git a/util/src/controlflow.rs b/util/src/controlflow.rs index fa372b1..e00aa8e 100644 --- a/util/src/controlflow.rs +++ b/util/src/controlflow.rs @@ -2,6 +2,17 @@ #[macro_export] /// A simple for loop to repeat a $body a number of times +/// +/// # Examples +/// +/// ``` +/// use rosenpass_util::repeat; +/// let mut sum = 0; +/// repeat!(10, { +/// sum += 1; +/// }); +/// assert_eq!(sum, 10); +/// ``` macro_rules! repeat { ($times:expr, $body:expr) => { for _ in 0..($times) { @@ -12,6 +23,23 @@ macro_rules! repeat { #[macro_export] /// Return unless the condition $cond is true, with return value $val, if given. +/// +/// # Examples +/// +/// ``` +/// use rosenpass_util::return_unless; +/// fn test_fn() -> i32 { +/// return_unless!(true, 1); +/// 0 +/// } +/// assert_eq!(test_fn(), 0); + +/// fn test_fn2() -> i32 { +/// return_unless!(false, 1); +/// 0 +/// } +/// assert_eq!(test_fn2(), 1); +/// ``` macro_rules! return_unless { ($cond:expr) => { if !($cond) { @@ -27,6 +55,23 @@ macro_rules! return_unless { #[macro_export] /// Return if the condition $cond is true, with return value $val, if given. +/// +/// # Examples +/// +/// ``` +/// use rosenpass_util::return_if; +/// fn test_fn() -> i32 { +/// return_if!(true, 1); +/// 0 +/// } +/// assert_eq!(test_fn(), 1); + +/// fn test_fn2() -> i32 { +/// return_if!(false, 1); +/// 0 +/// } +/// assert_eq!(test_fn2(), 0); +/// ``` macro_rules! return_if { ($cond:expr) => { if $cond { @@ -42,6 +87,27 @@ macro_rules! return_if { #[macro_export] /// Break unless the condition is true, from the loop with label $val, if given. +/// +/// # Examples +/// +/// ``` +/// use rosenpass_util::break_if; +/// let mut sum = 0; +/// for i in 0..10 { +/// break_if!(i == 5); +/// sum += 1; +/// } +/// assert_eq!(sum, 5); + +/// let mut sum = 0; +/// 'one: for _ in 0..10 { +/// for j in 0..20 { +/// break_if!(j == 5, 'one); +/// sum += 1; +/// } +/// } +/// assert_eq!(sum, 5); +/// ``` macro_rules! break_if { ($cond:expr) => { if $cond { @@ -57,6 +123,25 @@ macro_rules! break_if { #[macro_export] /// Continue if the condition is true, in the loop with label $val, if given. +/// +/// # Examples +/// +/// ``` +/// use rosenpass_util::continue_if; +/// let mut sum = 0; +/// for i in 0..10 { +/// continue_if!(i == 5); +/// sum += 1; +/// } +/// assert_eq!(sum, 9); + +/// let mut sum = 0; +/// 'one: for i in 0..10 { +/// continue_if!(i == 5, 'one); +/// sum += 1; +/// } +/// assert_eq!(sum, 9); +/// ``` macro_rules! continue_if { ($cond:expr) => { if $cond { @@ -69,81 +154,3 @@ macro_rules! continue_if { } }; } - -#[cfg(test)] -mod tests { - #[test] - fn test_repeat() { - let mut sum = 0; - repeat!(10, { - sum += 1; - }); - assert_eq!(sum, 10); - } - - #[test] - fn test_return_unless() { - fn test_fn() -> i32 { - return_unless!(true, 1); - 0 - } - assert_eq!(test_fn(), 0); - - fn test_fn2() -> i32 { - return_unless!(false, 1); - 0 - } - assert_eq!(test_fn2(), 1); - } - - #[test] - fn test_return_if() { - fn test_fn() -> i32 { - return_if!(true, 1); - 0 - } - assert_eq!(test_fn(), 1); - - fn test_fn2() -> i32 { - return_if!(false, 1); - 0 - } - assert_eq!(test_fn2(), 0); - } - - #[test] - fn test_break_if() { - let mut sum = 0; - for i in 0..10 { - break_if!(i == 5); - sum += 1; - } - assert_eq!(sum, 5); - - let mut sum = 0; - 'one: for _ in 0..10 { - for j in 0..20 { - break_if!(j == 5, 'one); - sum += 1; - } - } - assert_eq!(sum, 5); - } - - #[test] - fn test_continue_if() { - let mut sum = 0; - for i in 0..10 { - continue_if!(i == 5); - sum += 1; - } - assert_eq!(sum, 9); - - let mut sum = 0; - 'one: for i in 0..10 { - continue_if!(i == 5, 'one); - sum += 1; - } - assert_eq!(sum, 9); - } -}