natural-derive 0.4.0

Proc macros for naturally deriving basic trait impls for new types.
Documentation
use natural_derive::*;

#[derive(
    Debug,
    PartialEq,
    Eq,
    New,
    Inner,
    From,
    Add,
    AddAssign,
    Sub,
    SubAssign,
    Mul,
    MulAssign,
    MulScalar,
    MulAssignScalar,
    Div,
    DivAssign,
    DivScalar,
    DivAssignScalar,
    Rem,
    RemAssign,
    RemScalar,
    RemAssignScalar,
)]
struct SomeUnit(u32);

#[test]
fn test_new() {
    assert_eq!(SomeUnit::new(42), SomeUnit(42));
}

#[test]
fn test_inner() {
    assert_eq!(*SomeUnit::new(42).inner(), 42);
}

#[test]
fn test_from() {
    let kelvin: SomeUnit = 42.into();
    assert_eq!(kelvin, SomeUnit(42));
}

#[test]
fn test_add() {
    let kelvin = SomeUnit(42) + SomeUnit(1);
    assert_eq!(kelvin, SomeUnit(43));
}

#[test]
fn test_add_assign() {
    let mut kelvin = SomeUnit(42);
    kelvin += SomeUnit(1);
    assert_eq!(kelvin, SomeUnit(43));
}

#[test]
fn test_sub() {
    let kelvin = SomeUnit(42) - SomeUnit(42);
    assert_eq!(kelvin, SomeUnit(0));
}

#[test]
fn test_sub_assign() {
    let mut kelvin = SomeUnit(42);
    kelvin -= SomeUnit(42);
    assert_eq!(kelvin, SomeUnit(0));
}

#[test]
fn test_mul() {
    let kelvin = SomeUnit(42) * SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(84));
}

#[test]
fn test_mul_assign() {
    let mut kelvin = SomeUnit(42);
    kelvin *= SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(84));
}

#[test]
fn test_mul_scalar() {
    let kelvin = SomeUnit(42) * 2;
    assert_eq!(kelvin, SomeUnit(84));
}

#[test]
fn test_mul_assign_scalar() {
    let mut kelvin = SomeUnit(42);
    kelvin *= 2;
    assert_eq!(kelvin, SomeUnit(84));
}

#[test]
fn test_div() {
    let kelvin = SomeUnit(42) / SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(21));
}

#[test]
fn test_div_assign() {
    let mut kelvin = SomeUnit(42);
    kelvin /= SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(21));
}

#[test]
fn test_div_scalar() {
    let kelvin = SomeUnit(42) / 2;
    assert_eq!(kelvin, SomeUnit(21));
}

#[test]
fn test_div_assign_scalar() {
    let mut kelvin = SomeUnit(42);
    kelvin /= 2;
    assert_eq!(kelvin, SomeUnit(21));
}

#[test]
fn test_rem() {
    let kelvin = SomeUnit(42) % SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(0));
}

#[test]
fn test_rem_assign() {
    let mut kelvin = SomeUnit(42);
    kelvin %= SomeUnit(2);
    assert_eq!(kelvin, SomeUnit(0));
}

#[test]
fn test_rem_scalar() {
    let kelvin = SomeUnit(42) % 2;
    assert_eq!(kelvin, SomeUnit(0));
}

#[test]
fn test_rem_assign_scalar() {
    let mut kelvin = SomeUnit(42);
    kelvin %= 2;
    assert_eq!(kelvin, SomeUnit(0));
}