cranpose-liquid 0.1.162

Liquid UI — cranpose's first-party glass component library (iOS-26-style materials, spring motion)
Documentation
use super::*;

#[test]
fn pointer_position_is_the_clamped_lens_center() {
    let width = 100.0;
    assert_eq!(segment_lens_left(50.0, width, 3), 0.0);
    assert_eq!(segment_lens_left(150.0, width, 3), 100.0);
    assert_eq!(segment_lens_left(250.0, width, 3), 200.0);
    assert_eq!(segment_lens_left(-50.0, width, 3), 0.0);
    assert_eq!(segment_lens_left(400.0, width, 3), 200.0);
}

#[test]
fn raised_lens_lifts_in_depth_without_becoming_a_wide_worm() {
    let resting = segmented_lens_base_size(120.0, 0.0);
    let raised = segmented_lens_base_size(120.0, 1.0);
    assert_eq!(resting.width, 120.0 * MARKER_WIDTH_FACTOR);
    assert!(resting.height > SEGMENT_HEIGHT + TRACK_PADDING * 2.0);
    assert!(raised.width < resting.width * 1.10);
    assert!(raised.height > resting.height * 1.20);
    assert!(segmented_strain(crate::dynamics::STRETCH_MAX) < 1.20);
}

#[test]
fn a_scope_records_what_each_segment_announces() {
    let drawn = Rc::new(std::cell::Cell::new(0u32));
    let counted = Rc::clone(&drawn);
    let segments = collect_segments(|scope| {
        scope.segment("Sending");
        scope.segment_content("Received", move |selected| {
            counted.set(counted.get() + u32::from(selected));
        });
    });

    assert_eq!(segments.len(), 2);
    assert_eq!(segments[0].description, "Sending");
    assert_eq!(segments[1].description, "Received");
    assert_eq!(drawn.get(), 0);
    (segments[1].content)(true);
    assert_eq!(drawn.get(), 1);
}

#[test]
fn a_control_with_no_segments_declares_none() {
    assert!(collect_segments(|_| {}).is_empty());
}