Documentation
use cidrs::{Cidr, CidrRoutingTable, Ipv4Cidr};

#[test]
fn ipv4_basic_insert() {
    let mut table = CidrRoutingTable::new();
    let cidr1 = Cidr::V4(Ipv4Cidr::new([192, 168, 0, 0], 16).unwrap());
    let cidr2 = Cidr::V4(Ipv4Cidr::new([192, 168, 1, 0], 24).unwrap());

    assert_eq!(table.len(), 0);
    table.insert(cidr1, 1);
    assert_eq!(table.len(), 1);
    table.insert(cidr2, 2);
    assert_eq!(table.len(), 2);
}

#[test]
fn ipv4_insert_existing() {
    let mut table = CidrRoutingTable::new();
    let cidr = Cidr::V4(Ipv4Cidr::new([192, 168, 0, 0], 16).unwrap());

    assert_eq!(table.len(), 0);
    table.insert(cidr, 1);
    assert_eq!(table.len(), 1);
    table.insert(cidr, 2);
    assert_eq!(table.len(), 1);
}

#[test]
fn ipv4_basic_remove() {
    let mut table = CidrRoutingTable::new();
    let cidr1 = Cidr::V4(Ipv4Cidr::new([192, 168, 0, 0], 16).unwrap());
    let cidr2 = Cidr::V4(Ipv4Cidr::new([192, 168, 1, 0], 24).unwrap());

    table.insert(cidr1, 1);
    table.insert(cidr2, 2);
    assert_eq!(table.len(), 2);

    table.remove(cidr1);
    assert_eq!(table.len(), 1);

    table.remove(cidr2);
    assert_eq!(table.len(), 0);
}

#[test]
fn ipv4_remove_non_existing() {
    let mut table = CidrRoutingTable::new();
    let cidr1 = Cidr::V4(Ipv4Cidr::new([192, 168, 0, 0], 16).unwrap());
    let cidr2 = Cidr::V4(Ipv4Cidr::new([192, 168, 1, 0], 24).unwrap());

    table.insert(cidr1, 1);
    assert_eq!(table.len(), 1);

    table.remove(cidr2);
    assert_eq!(table.len(), 1);

    table.remove(cidr1);
    assert_eq!(table.len(), 0);

    table.remove(cidr1);
    assert_eq!(table.len(), 0);
}