bangle 0.5.0

Strongly-typed angles, specified in radians, degrees, rotations, or percentages.
Documentation
#[test]
fn basic_sanity() {
    let angle: Angle<Degrees> = Angle::new(90.0);
    assert_eq!(angle.value, 90.0);
}

#[test]
fn test_generic_to_radians() {
    let rotations: AngleInRotations = Angle::new(0.5);
    let degrees = generic_to_degrees(rotations);
    assert_ulps_eq!(degrees.value, 180.0);
}

#[test]
fn test_converted_doubler_to_degrees() {
    let rotations: AngleInRotations = Angle::new(0.5);
    let degrees = generic_doubler_to_degrees(rotations);
    assert_ulps_eq!(degrees.value, 360.0);
}

fn generic_doubler_to_degrees(angle: impl ConvertAngle) -> AngleInDegrees {
    let degrees = angle.convert();
    degrees * 2.0
}

fn generic_to_degrees<U>(angle: Angle<U>) -> AngleInDegrees
where
    U: AngleUnit,
{
    angle.as_degrees()
}

#[test]
fn default_value() {
    let angle = AngleInRadians::<f32>::default();
    assert_eq!(angle.value, 0.0);
}

#[test]
fn conversion_from_owned() {
    let radians = AngleInRadians::new(1.0);
    let degrees = AngleInDegrees::from_other(radians);
    let rotations = AngleInRotations::from_other(degrees);
    let percentage = AngleInPercentage::from_other(rotations);
    let radians = AngleInRadians::from_other(percentage);
    assert_ulps_eq!(radians.value, 1.0);
}

use approx::assert_ulps_eq;
use bangle::{
    Angle, AngleInDegrees, AngleInPercentage, AngleInRadians, AngleInRotations, AngleUnit,
    ConvertAngle, Degrees, FromOther,
};