Skip to content

Commit b49e95c

Browse files
authored
Merge pull request #392 from AbeZbm/add-tests
Add some missing tests
2 parents dc2499e + 3b12ff6 commit b49e95c

File tree

3 files changed

+615
-0
lines changed

3 files changed

+615
-0
lines changed

src/map/slice.rs

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,4 +630,123 @@ mod tests {
630630
}
631631
}
632632
}
633+
634+
#[test]
635+
fn slice_new() {
636+
let slice: &Slice<i32, i32> = Slice::new();
637+
assert!(slice.is_empty());
638+
assert_eq!(slice.len(), 0);
639+
}
640+
641+
#[test]
642+
fn slice_new_mut() {
643+
let slice: &mut Slice<i32, i32> = Slice::new_mut();
644+
assert!(slice.is_empty());
645+
assert_eq!(slice.len(), 0);
646+
}
647+
648+
#[test]
649+
fn slice_get_index_mut() {
650+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
651+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
652+
653+
{
654+
let (key, value) = slice.get_index_mut(0).unwrap();
655+
assert_eq!(*key, 0);
656+
assert_eq!(*value, 0);
657+
658+
*value = 11;
659+
}
660+
661+
assert_eq!(slice[0], 11);
662+
663+
{
664+
let result = slice.get_index_mut(11);
665+
assert!(result.is_none());
666+
}
667+
}
668+
669+
#[test]
670+
fn slice_split_first() {
671+
let slice: &mut Slice<i32, i32> = Slice::new_mut();
672+
let result = slice.split_first();
673+
assert!(result.is_none());
674+
675+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
676+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
677+
678+
{
679+
let (first, rest) = slice.split_first().unwrap();
680+
assert_eq!(first, (&0, &0));
681+
assert_eq!(rest.len(), 9);
682+
}
683+
assert_eq!(slice.len(), 10);
684+
}
685+
686+
#[test]
687+
fn slice_split_first_mut() {
688+
let slice: &mut Slice<i32, i32> = Slice::new_mut();
689+
let result = slice.split_first_mut();
690+
assert!(result.is_none());
691+
692+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
693+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
694+
695+
{
696+
let (first, rest) = slice.split_first_mut().unwrap();
697+
assert_eq!(first, (&0, &mut 0));
698+
assert_eq!(rest.len(), 9);
699+
700+
*first.1 = 11;
701+
}
702+
assert_eq!(slice.len(), 10);
703+
assert_eq!(slice[0], 11);
704+
}
705+
706+
#[test]
707+
fn slice_split_last() {
708+
let slice: &mut Slice<i32, i32> = Slice::new_mut();
709+
let result = slice.split_last();
710+
assert!(result.is_none());
711+
712+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
713+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
714+
715+
{
716+
let (last, rest) = slice.split_last().unwrap();
717+
assert_eq!(last, (&9, &81));
718+
assert_eq!(rest.len(), 9);
719+
}
720+
assert_eq!(slice.len(), 10);
721+
}
722+
723+
#[test]
724+
fn slice_split_last_mut() {
725+
let slice: &mut Slice<i32, i32> = Slice::new_mut();
726+
let result = slice.split_last_mut();
727+
assert!(result.is_none());
728+
729+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
730+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
731+
732+
{
733+
let (last, rest) = slice.split_last_mut().unwrap();
734+
assert_eq!(last, (&9, &mut 81));
735+
assert_eq!(rest.len(), 9);
736+
737+
*last.1 = 100;
738+
}
739+
740+
assert_eq!(slice.len(), 10);
741+
assert_eq!(slice[slice.len() - 1], 100);
742+
}
743+
744+
#[test]
745+
fn slice_get_range() {
746+
let mut map: IndexMap<i32, i32> = (0..10).map(|i| (i, i * i)).collect();
747+
let slice: &mut Slice<i32, i32> = map.as_mut_slice();
748+
let subslice = slice.get_range(3..6).unwrap();
749+
assert_eq!(subslice.len(), 3);
750+
assert_eq!(subslice, &[(3, 9), (4, 16), (5, 25)]);
751+
}
633752
}

src/map/tests.rs

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,226 @@ fn iter_default() {
593593
assert_default::<IntoValues<K, V>>();
594594
}
595595

596+
#[test]
597+
fn get_index_mut2() {
598+
let mut map: IndexMap<i32, i32> = IndexMap::new();
599+
map.insert(1, 2);
600+
map.insert(3, 4);
601+
map.insert(5, 6);
602+
603+
{
604+
let (key, value) = map.get_index_mut2(0).unwrap();
605+
assert_eq!(*key, 1);
606+
assert_eq!(*value, 2);
607+
608+
*value = 7;
609+
}
610+
assert_eq!(map[0], 7);
611+
612+
{
613+
let (key, _) = map.get_index_mut2(0).unwrap();
614+
*key = 8;
615+
}
616+
assert_eq!(map.get_index(0).unwrap().0, &8);
617+
}
618+
619+
#[test]
620+
fn shift_shift_remove_index() {
621+
let mut map: IndexMap<i32, i32> = IndexMap::new();
622+
map.insert(1, 2);
623+
map.insert(3, 4);
624+
map.insert(5, 6);
625+
map.insert(7, 8);
626+
map.insert(9, 10);
627+
628+
let result = map.shift_remove_index(1);
629+
assert_eq!(result, Some((3, 4)));
630+
assert_eq!(map.len(), 4);
631+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8), (9, 10)]);
632+
633+
let result = map.shift_remove_index(1);
634+
assert_eq!(result, Some((5, 6)));
635+
assert_eq!(map.len(), 3);
636+
assert_eq!(map.as_slice(), &[(1, 2), (7, 8), (9, 10)]);
637+
638+
let result = map.shift_remove_index(2);
639+
assert_eq!(result, Some((9, 10)));
640+
assert_eq!(map.len(), 2);
641+
assert_eq!(map.as_slice(), &[(1, 2), (7, 8)]);
642+
643+
let result = map.shift_remove_index(2);
644+
assert_eq!(result, None);
645+
assert_eq!(map.len(), 2);
646+
assert_eq!(map.as_slice(), &[(1, 2), (7, 8)]);
647+
}
648+
649+
#[test]
650+
fn shift_remove_entry() {
651+
let mut map: IndexMap<i32, i32> = IndexMap::new();
652+
map.insert(1, 2);
653+
map.insert(3, 4);
654+
map.insert(5, 6);
655+
map.insert(7, 8);
656+
map.insert(9, 10);
657+
658+
let result = map.shift_remove_entry(&3);
659+
assert_eq!(result, Some((3, 4)));
660+
assert_eq!(map.len(), 4);
661+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8), (9, 10)]);
662+
663+
let result = map.shift_remove_entry(&9);
664+
assert_eq!(result, Some((9, 10)));
665+
assert_eq!(map.len(), 3);
666+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8)]);
667+
668+
let result = map.shift_remove_entry(&9);
669+
assert_eq!(result, None);
670+
assert_eq!(map.len(), 3);
671+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8)]);
672+
}
673+
674+
#[test]
675+
fn shift_remove_full() {
676+
let mut map: IndexMap<i32, i32> = IndexMap::new();
677+
map.insert(1, 2);
678+
map.insert(3, 4);
679+
map.insert(5, 6);
680+
map.insert(7, 8);
681+
map.insert(9, 10);
682+
683+
let result = map.shift_remove_full(&3);
684+
assert_eq!(result, Some((1, 3, 4)));
685+
assert_eq!(map.len(), 4);
686+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8), (9, 10)]);
687+
688+
let result = map.shift_remove_full(&9);
689+
assert_eq!(result, Some((3, 9, 10)));
690+
assert_eq!(map.len(), 3);
691+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8)]);
692+
693+
let result = map.shift_remove_full(&9);
694+
assert_eq!(result, None);
695+
assert_eq!(map.len(), 3);
696+
assert_eq!(map.as_slice(), &[(1, 2), (5, 6), (7, 8)]);
697+
}
698+
699+
#[test]
700+
fn sorted_unstable_by() {
701+
let mut map: IndexMap<i32, i32> = IndexMap::new();
702+
map.extend(vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]);
703+
let sorted = map.sorted_unstable_by(|_a, b, _c, d| d.cmp(&b));
704+
705+
assert_eq!(
706+
sorted.as_slice(),
707+
&[(5, 50), (4, 40), (3, 30), (2, 20), (1, 10)]
708+
);
709+
}
710+
711+
#[test]
712+
fn into_boxed_slice() {
713+
let mut map: IndexMap<i32, i32> = IndexMap::new();
714+
for i in 0..5 {
715+
map.insert(i, i * 10);
716+
}
717+
let boxed_slice: Box<Slice<i32, i32>> = map.into_boxed_slice();
718+
assert_eq!(boxed_slice.len(), 5);
719+
assert_eq!(
720+
boxed_slice.as_ref(),
721+
&[(0, 0), (1, 10), (2, 20), (3, 30), (4, 40)]
722+
);
723+
}
724+
725+
#[test]
726+
fn last_mut() {
727+
let mut map: IndexMap<&str, i32> = IndexMap::new();
728+
729+
let last_entry = map.last_mut();
730+
assert_eq!(last_entry, None);
731+
732+
map.insert("key1", 1);
733+
map.insert("key2", 2);
734+
map.insert("key3", 3);
735+
let last_entry = map.last_mut();
736+
assert_eq!(last_entry, Some((&"key3", &mut 3)));
737+
738+
*last_entry.unwrap().1 = 4;
739+
assert_eq!(map.get("key3"), Some(&4));
740+
}
741+
742+
#[test]
743+
#[should_panic = "index out of bounds"]
744+
fn insert_before_oob() {
745+
let mut map: IndexMap<char, ()> = IndexMap::new();
746+
let _ = map.insert_before(0, 'a', ());
747+
let _ = map.insert_before(1, 'b', ());
748+
map.insert_before(3, 'd', ());
749+
}
750+
751+
#[test]
752+
fn clear() {
753+
let mut map: IndexMap<i32, i32> = IndexMap::new();
754+
map.extend(vec![(1, 10), (2, 20), (3, 30), (4, 40), (5, 50)]);
755+
map.clear();
756+
assert_eq!(map.len(), 0);
757+
}
758+
759+
#[test]
760+
fn get_range() {
761+
let mut index_map: IndexMap<i32, i32> = IndexMap::new();
762+
index_map.insert(1, 10);
763+
index_map.insert(2, 20);
764+
index_map.insert(3, 30);
765+
index_map.insert(4, 40);
766+
index_map.insert(5, 50);
767+
768+
let result = index_map.get_range(2..2);
769+
assert!(result.unwrap().is_empty());
770+
771+
let result = index_map.get_range(4..2);
772+
assert!(result.is_none());
773+
774+
let result = index_map.get_range(2..4);
775+
let slice: &Slice<i32, i32> = result.unwrap();
776+
assert_eq!(slice.len(), 2);
777+
assert_eq!(slice, &[(3, 30), (4, 40)]);
778+
}
779+
780+
#[test]
781+
fn get_range_mut() {
782+
let mut index_map: IndexMap<i32, i32> = IndexMap::new();
783+
index_map.insert(1, 10);
784+
index_map.insert(2, 20);
785+
index_map.insert(3, 30);
786+
index_map.insert(4, 40);
787+
index_map.insert(5, 50);
788+
789+
let result = index_map.get_range_mut(2..2);
790+
assert!(result.unwrap().is_empty());
791+
792+
let result = index_map.get_range_mut(4..2);
793+
assert!(result.is_none());
794+
795+
let result = index_map.get_range_mut(2..4);
796+
let slice: &mut Slice<i32, i32> = result.unwrap();
797+
assert_eq!(slice.len(), 2);
798+
assert_eq!(slice, &mut [(3, 30), (4, 40)]);
799+
800+
for i in 0..slice.len() {
801+
slice[i] += 1;
802+
}
803+
assert_eq!(slice, &mut [(3, 31), (4, 41)]);
804+
}
805+
806+
#[test]
807+
#[should_panic = "index out of bounds"]
808+
fn shift_insert_oob() {
809+
let mut map: IndexMap<u32, u32> = IndexMap::new();
810+
map.shift_insert(0, 1, 10);
811+
map.shift_insert(1, 2, 20);
812+
map.shift_insert(2, 3, 30);
813+
map.shift_insert(5, 4, 40);
814+
}
815+
596816
#[test]
597817
fn test_binary_search_by() {
598818
// adapted from std's test for binary_search

0 commit comments

Comments
 (0)