typed_test_gen 0.1.4

Macros to help generate tests from functions with generic type parameters.
Documentation
#![deny(warnings)]
use std::collections::HashMap;
use std::fmt::Debug;
use typed_test_gen::test_with;

struct MockStruct {
    _a: u32,
}

enum MockEnum {
    _FirstVariant,
    _SecondVariant,
    _ThirdVariant,
}

union MockUnion {
    _a: u32,
    _b: u64,
}

struct MockGenericStruct<T> {
    _a: T,
}

mod module {
    pub struct MockStructInModule {
        _a: u32,
    }

    pub struct MockGenericStructInModule<T> {
        _a: T,
    }
}

#[test_with(
    u32,
    String,
    MockStruct,
    MockEnum,
    MockUnion,
    HashMap<u32, u32>,
    MockGenericStruct<u32>,
    MockGenericStruct<u64>,
    module::MockStructInModule,
    module::MockGenericStructInModule<u32>,
    module::MockGenericStructInModule<u64>,
    MockGenericStruct<module::MockGenericStructInModule<u32>>
)]
fn test_struct<T>() {
    assert!(true);
}

#[test_with(
    u32,
    String,
    MockStruct,
    MockEnum,
    MockUnion,
    HashMap<u32, u32>,
    MockGenericStruct<u32>,
    MockGenericStruct<u64>,
    module::MockStructInModule,
    module::MockGenericStructInModule<u32>,
    module::MockGenericStructInModule<u64>,
    MockGenericStruct<module::MockGenericStructInModule<u32>>
)]
#[should_panic]
fn test_struct_fail<T>() {
    assert!(false);
}

#[test_with(
    u32,
    String,
    MockStruct,
    MockEnum,
    MockUnion,
    HashMap<u32, u32>,
    MockGenericStruct<u32>,
    MockGenericStruct<u64>,
    module::MockStructInModule,
    module::MockGenericStructInModule<u32>,
    module::MockGenericStructInModule<u64>,
    MockGenericStruct<module::MockGenericStructInModule<u32>>
)]
#[ignore]
fn test_ignored<T>() {
    unreachable!("This test should actually be ignored");
}

#[test_with(u32)]
fn with_result<T>() -> Result<(), T> {
    Ok(())
}

#[test_with(u32)]
#[should_panic]
fn fails_with_result<T: Default>() -> Result<(), T> {
    Err(T::default())
}

#[test_with(HashMap<u32, u32>)]
fn test_with_many_generics<T: Default + PartialEq + Debug>() {
    assert_eq!(T::default(), T::default())
}