extern crate jagged_array;
extern crate serde_json;
use std::iter::FromIterator;
use jagged_array::Jagged2;
#[test]
fn test_sized() {
let a = Jagged2::from_iter(vec![
vec![1, 2, 3],
vec![4],
vec![5, 6, 7, 8],
vec![],
]);
assert_eq!(a.len(), 4);
assert_eq!(a.flat_len(), 8);
assert_eq!(a[[0, 0]], 1);
assert_eq!(a[[0, 1]], 2);
assert_eq!(a.get([0, 2]), Some(&3));
assert_eq!(a.get([0, 3]), None);
assert_eq!(a[[1, 0]], 4);
assert_eq!(a.get([1, 1]), None);
assert_eq!(a[[2, 3]], 8);
assert_eq!(a.get([2, 4]), None);
assert_eq!(a.get([2, 11]), None);
assert_eq!(a.get([3, 0]), None);
assert_eq!(a.get([3, 3]), None);
assert_eq!(a.get([1234, 44]), None);
assert_eq!(a.get([-1isize as usize, 0]), None);
assert_eq!(a.get([0, -1isize as usize]), None);
}
#[test]
fn test_zero_sized() {
let a = Jagged2::from_iter(vec![
vec![(), ()],
vec![()],
vec![],
vec![(), (), ()],
]);
assert_eq!(a.len(), 4);
assert_eq!(a.flat_len(), 6);
assert_eq!(a[[0, 0]], ());
assert_eq!(a[[0, 1]], ());
assert_eq!(a.get([0, 2]), None);
assert_eq!(a.get([2, 0]), None);
assert_eq!(a.get([3, 3]), None);
assert_eq!(a.get([1234, 44]), None);
assert_eq!(a.get([-1isize as usize, 0]), None);
assert_eq!(a.get([0, -1isize as usize]), None);
}
#[test]
fn test_empty() {
fn test_empty_for(a: Jagged2<u16>) {
assert_eq!(a.len(), 0);
assert_eq!(a.flat_len(), 0);
assert_eq!(a.get([0, 0]), None);
assert_eq!(a.get_row(0), None);
assert_eq!(a.as_flat_slice(), &[] as &[u16]);
}
test_empty_for(Default::default());
test_empty_for(Jagged2::from_iter(
(0..0).map(|_| (0..0))
));
}
#[test]
fn test_clone_eq() {
let a = Jagged2::from_iter(vec![
vec![1, 2],
vec![],
vec![3],
]);
let b = Jagged2::from_iter(vec![
vec![1, 2],
vec![6],
vec![3],
]);
let c = Jagged2::from_iter(vec![
vec![0, 2],
vec![],
vec![3],
]);
let d = Jagged2::from_iter(vec![
vec![1, 2],
vec![],
vec![3],
vec![]
]);
let e = a.clone();
assert_ne!(a, b);
assert_ne!(a, c);
assert_ne!(a, d);
assert_ne!(b, c);
assert_ne!(b, d);
assert_ne!(c, d);
assert_eq!(a, e);
}
#[test]
fn test_serde() {
let a = Jagged2::from_iter(vec![
vec![1, 2],
vec![],
vec![3],
]);
let s = serde_json::to_string(&a).unwrap();
assert_eq!(s, "[[1,2],[],[3]]");
let b: Jagged2<u32> = serde_json::from_str(&s).unwrap();
assert_eq!(a.len(), b.len());
assert_eq!(a.get_row(0), b.get_row(0));
assert_eq!(a.get_row(1), b.get_row(1));
assert_eq!(a.get_row(2), b.get_row(2));
}