ansiq-core 0.1.0

Core reactive primitives, element contracts, styles, and shared runtime-facing types for Ansiq.
Documentation
use ansiq_core::Rect;

#[test]
fn shrink_moves_origin_even_when_rect_collapses() {
    let rect = Rect::new(2, 3, 2, 2).shrink(1);

    assert_eq!(rect, Rect::new(3, 4, 0, 0));
}

#[test]
fn intersection_returns_the_overlap_between_two_rects() {
    let overlap = Rect::new(0, 0, 4, 4).intersection(Rect::new(2, 1, 4, 4));

    assert_eq!(overlap, Some(Rect::new(2, 1, 2, 3)));
}

#[test]
fn contains_and_union_cover_nested_and_overlapping_rects() {
    let outer = Rect::new(0, 0, 6, 6);
    let inner = Rect::new(2, 2, 2, 2);
    let merged = Rect::new(0, 0, 4, 4).union(Rect::new(2, 2, 4, 3));

    assert!(outer.contains(inner));
    assert_eq!(merged, Rect::new(0, 0, 6, 5));
}

#[test]
fn can_merge_rect_allows_axis_aligned_adjacent_regions_but_not_corner_contacts() {
    let top = Rect::new(0, 0, 12, 2);
    let below = Rect::new(0, 2, 12, 1);
    let left = Rect::new(0, 0, 4, 3);
    let right = Rect::new(4, 0, 2, 3);
    let corner = Rect::new(12, 2, 2, 2);

    assert!(top.can_merge_rect(below));
    assert!(left.can_merge_rect(right));
    assert!(!top.can_merge_rect(corner));
}