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));
}
}