mirror of
https://github.com/rosenpass/rosenpass.git
synced 2026-02-27 22:13:12 -08:00
chore: Documentation and unit tests for rosenpass_util::controlflow
This commit is contained in:
@@ -2,6 +2,17 @@
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// A simple for loop to repeat a $body a number of times
|
/// 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 {
|
macro_rules! repeat {
|
||||||
($times:expr, $body:expr) => {
|
($times:expr, $body:expr) => {
|
||||||
for _ in 0..($times) {
|
for _ in 0..($times) {
|
||||||
@@ -12,6 +23,23 @@ macro_rules! repeat {
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// Return unless the condition $cond is true, with return value $val, if given.
|
/// 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 {
|
macro_rules! return_unless {
|
||||||
($cond:expr) => {
|
($cond:expr) => {
|
||||||
if !($cond) {
|
if !($cond) {
|
||||||
@@ -27,6 +55,23 @@ macro_rules! return_unless {
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// Return if the condition $cond is true, with return value $val, if given.
|
/// 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 {
|
macro_rules! return_if {
|
||||||
($cond:expr) => {
|
($cond:expr) => {
|
||||||
if $cond {
|
if $cond {
|
||||||
@@ -42,6 +87,27 @@ macro_rules! return_if {
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// Break unless the condition is true, from the loop with label $val, if given.
|
/// 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 {
|
macro_rules! break_if {
|
||||||
($cond:expr) => {
|
($cond:expr) => {
|
||||||
if $cond {
|
if $cond {
|
||||||
@@ -57,6 +123,25 @@ macro_rules! break_if {
|
|||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
/// Continue if the condition is true, in the loop with label $val, if given.
|
/// 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 {
|
macro_rules! continue_if {
|
||||||
($cond:expr) => {
|
($cond:expr) => {
|
||||||
if $cond {
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user