cranpose-ui-layout 0.1.170

Layout contracts & policies for Cranpose
Documentation
use super::{Arrangement, LinearArrangement};

fn arranged(arrangement: LinearArrangement, density: f32, total: f32, sizes: &[f32]) -> Vec<f32> {
    let mut positions = vec![0.0; sizes.len()];
    arrangement.arrange(density, total, sizes, &mut positions);
    positions
}

#[test]
fn space_evenly_rounds_each_position_to_a_device_pixel() {
    let sizes = [10.0, 10.0, 10.0];
    assert_eq!(
        arranged(LinearArrangement::SpaceEvenly, 1.0, 100.0, &sizes),
        [18.0, 45.0, 73.0]
    );
    assert_eq!(
        arranged(LinearArrangement::SpaceEvenly, 2.0, 100.0, &sizes),
        [17.5, 45.0, 72.5]
    );
}

#[test]
fn center_sends_a_half_pixel_up_as_kotlin_does() {
    assert_eq!(
        arranged(LinearArrangement::Center, 1.0, 101.0, &[10.0]),
        [46.0]
    );
    assert_eq!(
        arranged(LinearArrangement::Center, 1.0, 9.0, &[10.0]),
        [0.0]
    );
}

#[test]
fn space_between_puts_a_lone_child_at_the_start() {
    assert_eq!(
        arranged(LinearArrangement::SpaceBetween, 1.0, 100.0, &[10.0]),
        [0.0]
    );
    assert_eq!(
        arranged(LinearArrangement::SpaceBetween, 1.0, 100.0, &[10.0, 10.0]),
        [0.0, 90.0]
    );
}

#[test]
fn space_around_and_end_follow_the_remaining_space() {
    assert_eq!(
        arranged(LinearArrangement::SpaceAround, 1.0, 100.0, &[10.0, 10.0]),
        [20.0, 70.0]
    );
    assert_eq!(
        arranged(LinearArrangement::End, 1.0, 100.0, &[10.0, 10.0]),
        [80.0, 90.0]
    );
    assert_eq!(
        arranged(LinearArrangement::Start, 1.0, 100.0, &[10.0, 10.0]),
        [0.0, 10.0]
    );
}

#[test]
fn spaced_by_puts_a_device_pixel_spacing_between_children() {
    assert_eq!(
        arranged(LinearArrangement::spaced_by(5.0), 1.0, 40.0, &[10.0, 10.0]),
        [0.0, 15.0]
    );
    assert_eq!(
        arranged(
            LinearArrangement::spaced_by(12.4),
            1.0,
            100.0,
            &[10.0, 10.0]
        ),
        [0.0, 22.0]
    );
    assert_eq!(LinearArrangement::spaced_by(12.4).spacing(1.0), 12.0);
    assert_eq!(LinearArrangement::spaced_by(-3.0).spacing(1.0), 0.0);
    assert_eq!(LinearArrangement::Center.spacing(1.0), 0.0);
}

#[test]
fn spaced_by_keeps_every_child_inside_the_container() {
    assert_eq!(
        arranged(
            LinearArrangement::spaced_by(12.0),
            1.0,
            100.0,
            &[95.0, 10.0]
        ),
        [0.0, 90.0]
    );
    assert_eq!(
        arranged(LinearArrangement::spaced_by(12.0), 1.0, 100.0, &[95.0, 0.0]),
        [0.0, 100.0]
    );
}