parameterized_test::create!() macro

This small crate provides a parameterized_test::create!() macro to simplify creating repeated tests with different arguments.

Inspired by Chris Morgan's StackOverflow post and originally documented in this answer, this macro works by dynamically generating a new macro which, in turn, generates separate tests for each test case passed to the generated macro.

Note: the exact API is still in development and may change in subsequent (pre-1.0) releases.

Syntax

parameterized_test::create() expects four arguments:

Example

This example creates two test cases, tests::even::bad_case and tests::even::good_case.

```rust use parameterized_test::create;

[cfg(test)]

mod tests { use super::*;

parameterized_test::create!{ even, n, { assert_eq!(n % 2, 0); } }
even! {
    bad_case:  1, // this test case will fail
    good_case: 2,
}

} ```

Tests can also specify multiple parameters:

```rust use parameterized_test::create;

[cfg(test)]

mod tests { use super::*;

parameterized_test::create!{ commutative, (i, j, k), {
  assert_eq!(i, j);
  assert_eq!(j, k);
  assert_eq!(k, i); 
}}
commutative! {
    small: (1, 1, 1),
    large: (100, 100, 100),
}

} ```

The ? operator is also supported, similar to standalone tests:

```rust use parameterized_test::create;

[cfg(test)]

mod tests { use super::*;

parameterized_test::create!{ socket, path, {
  let socket: SocketAddr = fs::read_to_string(path)?.parse()?;
  assert_eq!(socket.is_ipv6(), true);
}}

socket! { relative: "foo.txt", absolute: "/tmp/bar.txt", } } ```