/*!
Assertions done on the type-level,mostly for tests.
*/
use TypeIdentity;
use PhantomData;
/// Struct used to assert that its type parameters are the same type.
///
/// This is most useful in tests,to make sure that types are the same.
///
/// # Example
///
/// ```
/// use core_extensions::type_asserts::AssertEq;
///
/// let _:AssertEq<u32,u32>;
/// let _=AssertEq::new( &0u32, &0u32 );
///
/// ```
///
/// # Non-compiling
///
/// ```compile_fail
/// use core_extensions::type_asserts::AssertEq;
///
/// let _:AssertEq<(),u32>;
/// let _=AssertEq::new( &(), &0u32 );
///
/// ```
///
/// ```compile_fail
/// use core_extensions::type_asserts::AssertEq;
///
/// let _:AssertEq<u32,()>;
/// let _=AssertEq::new( &0u32, &() );
///
/// ```
///
/// Struct used to assert that its type parameters are the same type.
///
/// # Example
///
/// ```
/// use core_extensions::type_asserts::AssertEq3;
///
/// let _:AssertEq3<u32,u32,u32>;
/// let _=AssertEq3::new( &0u32, &0u32, &0u32 );
///
/// ```
///
/// # Non-compiling
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq3;
/// let _:AssertEq3<(),u32,u32>;
/// let _=AssertEq3::new( &(), &0u32, &0u32 );
/// ```
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq3;
/// let _:AssertEq3<u32,(),u32>;
/// let _=AssertEq3::new( &0u32, &(), &0u32 );
/// ```
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq3;
/// let _:AssertEq3<u32,u32,()>;
/// let _=AssertEq3::new( &0u32, &0u32, &() );
/// ```
///
/// Struct used to assert that its type parameters are the same type.
///
/// # Example
///
/// ```
/// use core_extensions::type_asserts::AssertEq4;
///
/// let _:AssertEq4<u32,u32,u32,u32>;
/// let _=AssertEq4::new( &0u32, &0u32, &0u32, &0u32 );
///
/// ```
///
/// # Non-compiling
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq4;
/// let _:AssertEq4<(),u32,u32,u32>;
/// let _=AssertEq4::new( &(), &0u32, &0u32, &0u32 );
/// ```
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq4;
/// let _:AssertEq4<u32,(),u32,u32>;
/// let _=AssertEq4::new( &0u32, &(), &0u32, &0u32 );
/// ```
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq4;
/// let _:AssertEq4<u32,u32,(),u32>;
/// let _=AssertEq4::new( &0u32, &0u32, &(), &0u32 );
/// ```
///
/// ```compile_fail
/// # use core_extensions::type_asserts::AssertEq4;
/// let _:AssertEq4<u32,u32,u32,()>;
/// let _=AssertEq4::new( &0u32, &0u32, &0u32, &() );
/// ```
///
////////////////////////////////////////////////////////////////////////////////