cranpose-ui-layout 0.9.5

Layout contracts & policies for Cranpose
Documentation
use super::{Alignment, HorizontalAlignment, VerticalAlignment, bias_offset};

#[test]
fn alignment_places_a_child_at_its_bias_on_a_device_pixel() {
    assert_eq!(HorizontalAlignment::Start.align(100.0, 41.0, 1.0), 0.0);
    assert_eq!(
        HorizontalAlignment::CenterHorizontally.align(100.0, 41.0, 1.0),
        30.0
    );
    assert_eq!(HorizontalAlignment::End.align(100.0, 41.0, 1.0), 59.0);
    assert_eq!(
        VerticalAlignment::CenterVertically.align(100.0, 41.0, 2.0),
        29.5
    );
    assert_eq!(VerticalAlignment::Bottom.align(50.0, 10.0, 1.0), 40.0);
}

#[test]
fn a_child_larger_than_its_space_overflows_both_ends_when_centred() {
    assert_eq!(
        HorizontalAlignment::CenterHorizontally.align(40.0, 60.0, 1.0),
        -10.0
    );
    assert_eq!(VerticalAlignment::Bottom.align(40.0, 60.0, 1.0), -20.0);
    assert_eq!(VerticalAlignment::Top.align(40.0, 60.0, 1.0), 0.0);
}

#[test]
fn a_bias_between_the_edges_is_rounded_half_up() {
    assert_eq!(bias_offset(-0.5, 101.0, 0.0, 1.0), 25.0);
    assert_eq!(bias_offset(0.0, 9.0, 10.0, 1.0), 0.0);
}

#[test]
fn the_nine_alignments_pair_each_edge_with_each_edge() {
    use HorizontalAlignment::{CenterHorizontally, End, Start};
    use VerticalAlignment::{Bottom, CenterVertically, Top};
    let expected = [
        (Alignment::TOP_START, Start, Top),
        (Alignment::TOP_CENTER, CenterHorizontally, Top),
        (Alignment::TOP_END, End, Top),
        (Alignment::CENTER_START, Start, CenterVertically),
        (Alignment::CENTER, CenterHorizontally, CenterVertically),
        (Alignment::CENTER_END, End, CenterVertically),
        (Alignment::BOTTOM_START, Start, Bottom),
        (Alignment::BOTTOM_CENTER, CenterHorizontally, Bottom),
        (Alignment::BOTTOM_END, End, Bottom),
    ];
    for (alignment, horizontal, vertical) in expected {
        assert_eq!(alignment, Alignment::new(horizontal, vertical));
    }
}