fn extend_optimizations()

in shed/sorted_vector_map/src/map.rs [1144:1195]


    fn extend_optimizations() {
        // Initializing via extend will sort and take the values.
        let mut svm = SortedVectorMap::new();
        svm.extend(vec![(3, "three"), (2, "two"), (1, "one")]);

        assert_eq!(svm.keys().cloned().collect::<Vec<_>>(), vec![1, 2, 3]);
        assert_eq!(svm.first_key_value(), Some((&1, &"one")));

        // This also works if there are duplicates: the last value will be
        // taken.
        let mut svm = SortedVectorMap::new();
        svm.extend(vec![
            (3, "three"),
            (2, "two"),
            (1, "one"),
            (6, "six"),
            (4, "four"),
            (5, "five"),
            (1, "one again"),
            (6, "six again"),
        ]);
        assert_eq!(
            svm.keys().cloned().collect::<Vec<_>>(),
            vec![1, 2, 3, 4, 5, 6],
        );
        assert_eq!(svm.first_key_value(), Some((&1, &"one again")));
        assert_eq!(svm.pop_last(), Some((6, "six again")));

        // Extending with values that are all after the highest key will
        // efficiently append to the vector.
        svm.extend(vec![(9, "nine"), (7, "seven"), (8, "eight"), (6, "six")]);

        assert_eq!(
            svm.keys().cloned().collect::<Vec<_>>(),
            vec![1, 2, 3, 4, 5, 6, 7, 8, 9]
        );
        assert_eq!(svm.last_key_value(), Some((&9, &"nine")));

        // If there are duplicate values, then the last value will be taken.
        svm.extend(vec![
            (11, "eleven"),
            (12, "twelve"),
            (10, "ten"),
            (12, "twelve again"),
        ]);

        assert_eq!(
            svm.keys().cloned().collect::<Vec<_>>(),
            vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
        );
        assert_eq!(svm.last_key_value(), Some((&12, &"twelve again")));
    }