eyeball-im 0.9.0

Observable collections based on the `im` crate.
use eyeball_im::ObservableVector;
use imbl::vector;

#[test]
#[should_panic]
fn zero_capacity() {
    let _ob: ObservableVector<i32> = ObservableVector::with_capacity(0);
}

#[test]
#[should_panic]
fn capacity_overflow() {
    let _ob: ObservableVector<usize> = ObservableVector::with_capacity(usize::MAX / 2);
}

#[test]
#[should_panic]
fn insert_out_of_range() {
    let mut ob: ObservableVector<i32> = ObservableVector::new();
    ob.insert(1, -1);
}

#[test]
#[should_panic]
fn set_out_of_range() {
    let mut ob = ObservableVector::<usize>::new();
    ob.append(vector![10, 20]);
    ob.set(2, 30);
}

#[test]
#[should_panic]
fn remove_out_of_range() {
    let mut ob: ObservableVector<i32> = ObservableVector::new();
    ob.remove(0);
}

#[test]
#[should_panic]
fn transaction_insert_out_of_range() {
    let mut ob = ObservableVector::new();
    let mut txn = ob.transaction();
    txn.insert(1, 1);
}

#[test]
#[should_panic]
fn transaction_set_out_of_range() {
    let mut ob = ObservableVector::new();
    let mut txn = ob.transaction();
    txn.set(0, 1);
}

#[test]
#[should_panic]
fn transaction_remove_out_of_range() {
    let mut ob: ObservableVector<i32> = ObservableVector::new();
    let mut txn = ob.transaction();
    txn.remove(0);
}

#[test]
#[should_panic]
fn transaction_entry_out_of_range() {
    let mut ob = ObservableVector::new();
    ob.append(vector![1]);
    let mut txn = ob.transaction();
    txn.entry(1);
}