diff --git a/src/unrolled.rs b/src/unrolled.rs index 3a91d8b..a43dbc7 100644 --- a/src/unrolled.rs +++ b/src/unrolled.rs @@ -509,8 +509,8 @@ impl UnrolledList bool { - self.node_iter().all(Self::does_node_satisfy_invariant) + pub fn assert_invariants(&self) { + assert!(self.node_iter().all(Self::does_node_satisfy_invariant)) } pub fn get(&self, mut index: usize) -> Option<&T> { @@ -1175,6 +1175,9 @@ impl FromIterator = UnrolledList; + type SmallRcList = UnrolledList; #[test] fn check_size() { @@ -1358,6 +1362,26 @@ mod iterator_tests { left.assert_list_invariants(); } + #[test] + fn empty_node_appending_coalescing_works() { + // 0/4: [] + let left: SmallRcList = SmallRcList::new(); + + // 4/4: [2, 3, 4, 5] + // 2/8: [0, 1] + let right: SmallRcList<_> = (0..6).collect::>().reverse(); + + assert_eq!(right.node_iter().count(), 2); + + // 6/8: [0, 1, 2, 3, 4, 5] + let left = left.append(right); + + assert_eq!(left.node_iter().count(), 1); + assert!(!left.is_empty()); + assert_eq!(*left.get(5).unwrap(), 0); + left.assert_invariants(); + } + #[test] fn length() { let list: RcList<_> = (0..300).into_iter().collect();