//! Simple test to verify that the bbox replacement from bbox::BBox to bounding_box::Aabb2 works correctly

use bounding_box::Aabb2;

#[test]
fn test_bbox_replacement() {
    // Test basic construction
    let bbox1 = Aabb2::from_xywh(10.0, 20.0, 100.0, 200.0);
    assert_eq!(bbox1.x1(), 10.0);
    assert_eq!(bbox1.y1(), 20.0);
    assert_eq!(bbox1.x2(), 110.0);
    assert_eq!(bbox1.y2(), 220.0);

    // Test from coordinates
    let bbox2 = Aabb2::from_x1y1x2y2(10.0, 20.0, 110.0, 220.0);
    assert_eq!(bbox2.x1(), 10.0);
    assert_eq!(bbox2.y1(), 20.0);
    assert_eq!(bbox2.x2(), 110.0);
    assert_eq!(bbox2.y2(), 220.0);

    // Test equality
    assert_eq!(bbox1.x1(), bbox2.x1());
    assert_eq!(bbox1.y1(), bbox2.y1());
    assert_eq!(bbox1.x2(), bbox2.x2());
    assert_eq!(bbox1.y2(), bbox2.y2());

    // Test contains
    let smaller = Aabb2::from_xywh(20.0, 30.0, 50.0, 100.0);
    assert!(bbox1.contains_bbox(&smaller));

    // Test padding
    let padded = bbox1.padding(10.0);
    assert_eq!(padded.x1(), 5.0);
    assert_eq!(padded.y1(), 15.0);
    assert_eq!(padded.x2(), 115.0);
    assert_eq!(padded.y2(), 225.0);

    // Test scale
    let scaled = bbox1.scale(nalgebra::Vector2::new(2.0, 2.0));
    assert_eq!(scaled.x1(), -40.0);
    assert_eq!(scaled.y1(), -80.0);
    assert_eq!(scaled.x2(), 160.0);
    assert_eq!(scaled.y2(), 320.0);

    println!("All bbox replacement tests passed!");
}

#[test]
fn test_integer_bbox() {
    // Test with integer types
    let bbox = Aabb2::from_xywh(1, 2, 10, 20);
    assert_eq!(bbox.x1(), 1);
    assert_eq!(bbox.y1(), 2);
    assert_eq!(bbox.x2(), 11);
    assert_eq!(bbox.y2(), 22);

    let area = bbox.area();
    assert_eq!(area, 200);
}

fn main() {
    test_bbox_replacement();
    test_integer_bbox();
    println!("Test completed successfully!");
}
