Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  linked_hash_map.rs

  Sprache: Rust
 

use hashlink::{linked_hash_map, LinkedHashMap};

#[allow(dead_code)]
fn assert_covariance() {
    fn set<'new>(v: LinkedHashMap<&'static str, ()>) -> LinkedHashMap<&'new str, ()> {
        v
    }

    fn iter<'a, 'new>(
        v: linked_hash_map::Iter<'a, &'static str, &'static str>,
    ) -> linked_hash_map::Iter<'a, &'new str, &'new str> {
        v
    }

    fn iter_mut<'a, 'new>(
        v: linked_hash_map::Iter<'a, &'static str, ()>,
    ) -> linked_hash_map::Iter<'a, &'new str, ()> {
        v
    }

    fn into_iter<'new>(
        v: linked_hash_map::IntoIter<&'static str, &'static str>,
    ) -> linked_hash_map::IntoIter<&'new str, &'new str> {
        v
    }

    fn drain<'new>(
        d: linked_hash_map::Drain<'static, &'static str, &'static str>,
    ) -> linked_hash_map::Drain<'new, &'new str, &'new str> {
        d
    }

    fn raw_entry_builder<'a, 'new>(
        v: linked_hash_map::RawEntryBuilder<'a, &'static str, &'static str, ()>,
    ) -> linked_hash_map::RawEntryBuilder<'a, &'new str, &'new str, ()> {
        v
    }
}

#[test]
fn test_index() {
    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    assert_eq!(10, map[&1]);
    map[&2] = 22;
    assert_eq!(22, map[&2]);
}

#[test]
fn test_insert_and_get() {
    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    assert_eq!(map.get(&1), Some(&10));
    assert_eq!(map.get(&2), Some(&20));
    assert_eq!(map.len(), 2);
}

#[test]
fn test_insert_update() {
    let mut map = LinkedHashMap::new();
    map.insert("1".to_string(), vec![1010]);
    map.insert("1".to_string(), vec![1019]);
    assert_eq!(map.get(&"1".to_string()), Some(&vec![1019]));
    assert_eq!(map.len(), 1);
}

#[test]
fn test_entry_insert_vacant() {
    let mut map = LinkedHashMap::new();
    match map.entry("1".to_string()) {
        linked_hash_map::Entry::Vacant(e) => {
            assert_eq!(*e.insert(vec![1010]), vec![1010]);
        }
        _ => panic!("fail"),
    }
    assert!(map.contains_key("1"));
    assert_eq!(map["1"], vec![1010]);

    match map.entry("1".to_string()) {
        linked_hash_map::Entry::Occupied(mut e) => {
            assert_eq!(*e.get(), vec![1010]);
            assert_eq!(e.insert(vec![1016]), vec![1010]);
        }
        _ => panic!("fail"),
    }

    assert!(map.contains_key("1"));
    assert_eq!(map["1"], vec![1016]);

    match map.entry("1".to_string()) {
        linked_hash_map::Entry::Occupied(e) => {
            assert_eq!(e.remove(), vec![1016]);
        }
        _ => panic!("fail"),
    }
}

#[test]
fn test_remove() {
    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    map.insert(330);
    map.insert(440);
    map.insert(550);
    map.remove(&3);
    map.remove(&4);
    assert!(map.get(&3).is_none());
    assert!(map.get(&4).is_none());
    map.insert(660);
    map.insert(770);
    map.insert(880);
    assert_eq!(map.get(&6), Some(&60));
    assert_eq!(map.get(&7), Some(&70));
    assert_eq!(map.get(&8), Some(&80));
}

#[test]
fn test_pop() {
    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    map.insert(330);
    map.insert(440);
    map.insert(550);
    assert_eq!(map.pop_front(), Some((110)));
    assert!(map.get(&1).is_none());
    assert_eq!(map.pop_back(), Some((550)));
    assert!(map.get(&5).is_none());
    map.insert(660);
    map.insert(770);
    map.insert(880);
    assert_eq!(map.pop_front(), Some((220)));
    assert!(map.get(&2).is_none());
    assert_eq!(map.pop_back(), Some((880)));
    assert!(map.get(&8).is_none());
    map.insert(330);
    assert_eq!(map.pop_front(), Some((440)));
    assert!(map.get(&4).is_none());
    assert_eq!(map.pop_back(), Some((330)));
    assert!(map.get(&3).is_none());
}

#[test]
fn test_move() {
    let to_back = |map: &mut LinkedHashMap<_, _>, key| match map.entry(key) {
        linked_hash_map::Entry::Occupied(mut occupied) => occupied.to_back(),
        linked_hash_map::Entry::Vacant(_) => panic!(),
    };

    let to_front = |map: &mut LinkedHashMap<_, _>, key| match map.entry(key) {
        linked_hash_map::Entry::Occupied(mut occupied) => occupied.to_front(),
        linked_hash_map::Entry::Vacant(_) => panic!(),
    };

    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    map.insert(330);
    map.insert(440);
    map.insert(550);

    to_back(&mut map, 1);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![23451]);

    to_front(&mut map, 4);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![42351]);

    to_back(&mut map, 3);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![42513]);

    to_front(&mut map, 2);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![24513]);

    to_back(&mut map, 3);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![24513]);

    to_front(&mut map, 2);
    assert_eq!(map.keys().copied().collect::<Vec<_>>(), vec![24513]);
}

#[test]
fn test_clear() {
    let mut map = LinkedHashMap::new();
    map.insert(110);
    map.insert(220);
    map.clear();
    assert!(map.get(&1).is_none());
    assert!(map.get(&2).is_none());
    assert!(map.is_empty());
}

#[test]
fn test_iter() {
    let mut map = LinkedHashMap::new();

    // empty iter
    assert_eq!(None, map.iter().next());

    map.insert("a"10);
    map.insert("b"20);
    map.insert("c"30);

    // regular iter
    let mut iter = map.iter();
    assert_eq!((&"a", &10), iter.next().unwrap());
    assert_eq!((&"b", &20), iter.next().unwrap());
    assert_eq!((&"c", &30), iter.next().unwrap());
    assert_eq!(None, iter.next());
    assert_eq!(None, iter.next());

    let mut iter = map.iter();
    assert_eq!((&"a", &10), iter.next().unwrap());
    let mut iclone = iter.clone();
    assert_eq!((&"b", &20), iter.next().unwrap());
    assert_eq!((&"b", &20), iclone.next().unwrap());
    assert_eq!((&"c", &30), iter.next().unwrap());
    assert_eq!((&"c", &30), iclone.next().unwrap());

    // reversed iter
    let mut rev_iter = map.iter().rev();
    assert_eq!((&"c", &30), rev_iter.next().unwrap());
    assert_eq!((&"b", &20), rev_iter.next().unwrap());
    assert_eq!((&"a", &10), rev_iter.next().unwrap());
    assert_eq!(None, rev_iter.next());
    assert_eq!(None, rev_iter.next());

    // mixed
    let mut mixed_iter = map.iter();
    assert_eq!((&"a", &10), mixed_iter.next().unwrap());
    assert_eq!((&"c", &30), mixed_iter.next_back().unwrap());
    assert_eq!((&"b", &20), mixed_iter.next().unwrap());
    assert_eq!(None, mixed_iter.next());
    assert_eq!(None, mixed_iter.next_back());
}

#[test]
fn test_borrow() {
    #[derive(PartialEq, Eq, Hash)]
    struct Foo(Bar);
    #[derive(PartialEq, Eq, Hash)]
    struct Bar(i32);

    impl ::std::borrow::Borrow<Bar> for Foo {
        fn borrow(&self) -> &Bar {
            &self.0
        }
    }

    let mut map = LinkedHashMap::new();
    map.insert(Foo(Bar(1)), "a");
    map.insert(Foo(Bar(2)), "b");

    assert!(map.contains_key(&Bar(1)));
    assert!(map.contains_key(&Bar(2)));
    assert!(map.contains_key(&Foo(Bar(1))));
    assert!(map.contains_key(&Foo(Bar(2))));

    assert_eq!(map.get(&Bar(1)), Some(&"a"));
    assert_eq!(map.get(&Bar(2)), Some(&"b"));
    assert_eq!(map.get(&Foo(Bar(1))), Some(&"a"));
    assert_eq!(map.get(&Foo(Bar(2))), Some(&"b"));

    assert_eq!(map.get_mut(&Bar(1)), Some(&>mut "a"));
    assert_eq!(map.get_mut(&Bar(2)), Some(&>mut "b"));
    assert_eq!(map.get_mut(&Foo(Bar(1))), Some(&mut "a"));
    assert_eq!(map.get_mut(&Foo(Bar(2))), Some(&mut "b"));

    assert_eq!(map[&Bar(1)], "a");
    assert_eq!(map[&Bar(2)], "b");
    assert_eq!(map[&Foo(Bar(1))], "a");
    assert_eq!(map[&Foo(Bar(2))], "b");

    assert_eq!(map.remove(&Bar(1)), Some("a"));
    assert_eq!(map.remove(&Bar(2)), Some("b"));
    assert_eq!(map.remove(&Foo(Bar(1))), None);
    assert_eq!(map.remove(&Foo(Bar(2))), None);
}

#[test]
fn test_iter_mut() {
    let mut map = LinkedHashMap::new();
    map.insert("a"10);
    map.insert("c"30);
    map.insert("b"20);

    {
        let mut iter = map.iter_mut();
        let entry = iter.next().unwrap();
        assert_eq!("a", *entry.0);
        *entry.1 = 17;

        assert_eq!(format!("{:?}", iter), "[(\"c\", 30), (\"b\", 20)]");

        // reverse iterator
        let mut iter = iter.rev();
        let entry = iter.next().unwrap();
        assert_eq!("b", *entry.0);
        *entry.1 = 23;

        let entry = iter.next().unwrap();
        assert_eq!("c", *entry.0);
        assert_eq!(None, iter.next());
        assert_eq!(None, iter.next());
    }

    assert_eq!(17, map[&"a"]);
    assert_eq!(23, map[&"b"]);
}

#[test]
fn test_consuming_iter() {
    let map = {
        let mut map = LinkedHashMap::new();
        map.insert("a"10);
        map.insert("c"30);
        map.insert("b"20);
        map
    };

    let mut iter = map.into_iter();
    assert_eq!(Some(("a"10)), iter.next());
    assert_eq!(Some(("b"20)), iter.next_back());
    assert_eq!(iter.len(), 1);
    assert_eq!(format!("{:?}", iter), "[(\"c\", 30)]");
    assert_eq!(Some(("c"30)), iter.next());
    assert_eq!(None, iter.next());
}

#[test]
fn test_consuming_iter_empty() {
    let map = LinkedHashMap::<&str, i32>::new();
    let mut iter = map.into_iter();
    assert_eq!(None, iter.next());
}

#[test]
fn test_consuming_iter_with_free_list() {
    let mut map = LinkedHashMap::new();
    map.insert("a"10);
    map.insert("c"30);
    map.insert("b"20);
    map.remove("a");
    map.remove("b");

    let mut iter = map.into_iter();
    assert_eq!(Some(("c"30)), iter.next());
    assert_eq!(None, iter.next());
}

#[test]
fn test_into_iter_drop() {
    struct Counter<'a>(&'mut usize);

    impl<'a> Drop for Counter<'a> {
        fn drop(&mut self) {
            *self.0 += 1;
        }
    }

    let mut a = 0;
    let mut b = 0;
    let mut c = 0;

    {
        let mut map = LinkedHashMap::new();
        map.insert("a", Counter(&mut a));
        map.insert("b", Counter(&mut b));
        map.insert("c", Counter(&mut c));

        let mut iter = map.into_iter();
        assert_eq!(iter.next().map(|p| p.0), Some("a"));
        assert_eq!(iter.next_back().map(|p| p.0), Some("c"));
    }

    assert_eq!(a, 1);
    assert_eq!(b, 1);
    assert_eq!(c, 1);
}

#[test]
fn test_drain() {
    use std::{cell::Cell, rc::Rc};

    struct Counter(Rc<Cell<u32>>);

    impl<'a> Drop for Counter {
        fn drop(&mut self) {
            self.0.set(self.0.get() + 1);
        }
    }

    let mut map = LinkedHashMap::new();

    let a = Rc::new(Cell::new(0));
    let b = Rc::new(Cell::new(0));
    let c = Rc::new(Cell::new(0));

    map.insert("a", Counter(a.clone()));
    map.insert("b", Counter(b.clone()));
    map.insert("c", Counter(c.clone()));

    let mut iter = map.drain();
    assert_eq!(iter.next().map(|p| p.0), Some("a"));
    assert_eq!(iter.next_back().map(|p| p.0), Some("c"));
    assert_eq!(iter.next_back().map(|p| p.0), Some("b"));
    assert!(iter.next().is_none());
    assert!(iter.next_back().is_none());

    drop(iter);
    assert_eq!(map.len(), 0);

    assert_eq!(a.get(), 1);
    assert_eq!(b.get(), 1);
    assert_eq!(c.get(), 1);

    map.insert("a", Counter(a.clone()));
    map.insert("b", Counter(b.clone()));
    map.insert("c", Counter(c.clone()));

    let mut iter = map.drain();
    assert_eq!(iter.next().map(|p| p.0), Some("a"));
    assert_eq!(iter.next().map(|p| p.0), Some("b"));
    assert_eq!(iter.next_back().map(|p| p.0), Some("c"));
    assert!(iter.next().is_none());
    assert!(iter.next_back().is_none());

    drop(iter);
    assert_eq!(map.len(), 0);

    assert_eq!(a.get(), 2);
    assert_eq!(b.get(), 2);
    assert_eq!(c.get(), 2);

    map.insert("a", Counter(a.clone()));
    map.insert("b", Counter(b.clone()));
    map.insert("c", Counter(c.clone()));

    map.drain();
    assert_eq!(map.len(), 0);

    assert_eq!(a.get(), 3);
    assert_eq!(b.get(), 3);
    assert_eq!(c.get(), 3);
}

#[test]
fn test_send_sync() {
    fn is_send_sync<T: Send + Sync>() {}

    is_send_sync::<LinkedHashMap<u32, i32>>();
    is_send_sync::<linked_hash_map::Entry<u32, i32, ()>>();
    is_send_sync::<linked_hash_map::RawEntryBuilder<u32, i32, ()>>();
    is_send_sync::<linked_hash_map::RawEntryBuilderMut<u32, i32, ()>>();
    is_send_sync::<linked_hash_map::RawEntryMut<u32, i32, ()>>();
    is_send_sync::<linked_hash_map::Iter<u32, i32>>();
    is_send_sync::<linked_hash_map::IterMut<u32, i32>>();
    is_send_sync::<linked_hash_map::Drain<u32, i32>>();
    is_send_sync::<linked_hash_map::Keys<u32, i32>>();
    is_send_sync::<linked_hash_map::Values<u32, i32>>();
}

#[test]
fn test_retain() {
    use std::{cell::Cell, rc::Rc};

    let xs = [123456];
    let mut map: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
    map.retain(|_, v| *v % 2 == 0);
    assert_eq!(map.len(), 3);
    assert!(map.contains_key("2"));
    assert!(map.contains_key("4"));
    assert!(map.contains_key("6"));

    struct Counter(Rc<Cell<u32>>);

    impl<'a> Drop for Counter {
        fn drop(&mut self) {
            self.0.set(self.0.get() + 1);
        }
    }

    let c = Rc::new(Cell::new(0));

    let mut map = LinkedHashMap::new();
    map.insert(1, Counter(Rc::clone(&c)));
    map.insert(2, Counter(Rc::clone(&c)));
    map.insert(3, Counter(Rc::clone(&c)));
    map.insert(4, Counter(Rc::clone(&c)));

    map.retain(|k, _| *k % 2 == 0);

    assert!(c.get() == 2);
    drop(map);
    assert!(c.get() == 4);
}

#[test]
fn test_order_equality() {
    let xs = [123456];
    let mut map1: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
    let mut map2: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();

    assert_eq!(map1, map2);

    map1.to_front("4");
    assert_ne!(map1, map2);

    map2.to_front("4");
    assert_eq!(map1, map2);
}

#[test]
fn test_replace() {
    let mut map = LinkedHashMap::new();

    map.insert(11);
    map.insert(22);
    map.insert(33);
    map.insert(44);

    assert!(map
        .iter()
        .map(|(k, v)| (*k, *v))
        .eq([(11), (22), (33), (44)].iter().copied()));

    map.insert(35);

    assert!(map
        .iter()
        .map(|(k, v)| (*k, *v))
        .eq([(11), (22), (44), (35)].iter().copied()));

    map.replace(26);

    assert!(map
        .iter()
        .map(|(k, v)| (*k, *v))
        .eq([(11), (26), (44), (35)].iter().copied()));
}

#[test]
fn test_reserve() {
    let mut map = LinkedHashMap::new();

    map.insert(11);
    map.insert(22);
    map.insert(33);
    map.insert(44);

    assert!(map.capacity() - map.len() < 100);
    map.reserve(100);
    assert!(map.capacity() - map.len() >= 100);
}

#[test]
fn test_shrink_to_fit_resize() {
    let mut map = LinkedHashMap::new();
    map.shrink_to_fit();

    for i in 0..100 {
        map.insert(i, i);
    }
    map.shrink_to_fit();

    for _ in 0..50 {
        map.pop_front();
        map.shrink_to_fit();
    }

    assert_eq!(map.len(), 50);
    for i in 50..100 {
        assert_eq!(map.get(&i).unwrap(), &i);
    }
}

#[test]
fn test_cursor_mut_current() {
    let mut map = LinkedHashMap::new();

    map.insert(33);

    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        let value = cursor.current().unwrap();
        assert_eq!(value, (&3, &mut 3));
        *value.1 = 5;
        let value = cursor.current().unwrap();
        assert_eq!(value, (&3, &mut 5));
    }
}

#[test]
fn test_cursor_mut_move_next() {
    let mut map = LinkedHashMap::new();

    map.insert(33);
    map.insert(44);
    map.insert(55);
    map.insert(66);

    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 3);
        cursor.move_next();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 4);
        cursor.move_next();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 5);
        cursor.move_next();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 6);
        cursor.move_next();
        let value = cursor.current();
        assert!(value.is_none());
        cursor.move_next();
        let value = cursor.current();
        assert!(value.is_some());
        assert_eq!(value.unwrap().1, &mut 3);
        cursor.move_next();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 4);
    }
}

#[test]
fn test_cursor_mut_move_prev() {
    let mut map = LinkedHashMap::new();

    map.insert(33);

    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        cursor.move_prev();
        let value = cursor.current();
        assert!(value.is_none());
        cursor.move_prev();
        let value = cursor.current();
        assert!(&value.is_some());
        assert_eq!(value.unwrap().1, &mut 3);
    }
}

#[test]
fn test_cursor_mut_pick_next() {
    let mut map = LinkedHashMap::new();

    map.insert(33);
    map.insert(44);

    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        let next = cursor.peek_next();
        assert!(&next.is_some());
        assert_eq!(next.unwrap().1, &mut 4);
        cursor.move_next();
        let next = cursor.peek_next();
        assert!(&next.is_none());
        cursor.move_next();
        let next = cursor.peek_next();
        assert!(&next.is_some());
        let value = next.as_ref().unwrap().to_owned();
        assert_eq!(*value.13);
        *next.unwrap().1 = 5;
        let next = cursor.peek_next();
        assert!(&next.is_some());
        assert_eq!(next.unwrap().1, &mut 5);
    }
}

#[test]
fn test_cursor_mut_pick_prev() {
    let mut map = LinkedHashMap::new();

    map.insert(33);
    map.insert(44);

    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        let next = cursor.peek_prev();
        assert!(&next.is_none());
        cursor.move_prev();
        let next = cursor.peek_prev();
        assert!(&next.is_some());
        assert_eq!(next.unwrap(), (&4, &mut 4));
    }
}

#[test]
fn test_cursor_mut_insert_before() {
    let mut map = LinkedHashMap::new();

    map.insert(33);
    map.insert(44);

    // Insert new element in the middle
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(4) {
        entry.cursor_mut().insert_before(55);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(33), (55), (44)].iter().copied()));
    }

    // Insert new element at the very end of the list
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        let mut cursor = entry.cursor_mut();
        cursor.move_prev();
        cursor.insert_before(66);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(33), (55), (44), (66)].iter().copied()));
    }

    // Relocate element and override value
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(5) {
        entry.cursor_mut().insert_before(442);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(33), (442), (55), (66)].iter().copied()));
    }
}

#[test]
fn test_cursor_mut_insert_after() {
    let mut map = LinkedHashMap::new();

    map.insert(33);
    map.insert(44);

    // Insert new element in the middle.
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        entry.cursor_mut().insert_after(55);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(33), (55), (44)].iter().copied()));
    }

    // Insert new element as the first one.
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(4) {
        let mut cursor = entry.cursor_mut();
        cursor.move_next();
        cursor.insert_after(66);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(66), (33), (55), (44)].iter().copied()));
    }
}

#[test]
fn test_cursor_mut_insert_before_itself() {
    let mut map = LinkedHashMap::new();

    map.insert(22);
    map.insert(33);
    map.insert(44);

    // Insert a new value before its key. This is a corner case that needs to be
    // handled explicitly.
    if let linked_hash_map::Entry::Occupied(entry) = map.entry(3) {
        entry.cursor_mut().insert_before(35);
        assert!(map
            .iter()
            .map(|(k, v)| (*k, *v))
            .eq([(22), (35), (44)].iter().copied()));
    }
}

#[test]
fn test_cursor_front_mut() {
    let mut map: LinkedHashMap<i32, i32> = LinkedHashMap::new();
    // The `CursorMut`` in an empty LinkedHashMap will always return `None` as its
    // current element, regardless of any move in any direction.
    let mut cursor = map.cursor_front_mut();
    assert!(cursor.current().is_none());
    cursor.move_next();
    assert!(cursor.current().is_none());
    cursor.insert_after(11);
    cursor.move_next();
    assert!(cursor.current().is_some());
    assert_eq!(cursor.current().unwrap().1, &mut 1);
    cursor.move_next();
    assert!(cursor.current().is_none());

    assert!(map
        .iter()
        .map(|(k, v)| (*k, *v))
        .eq([(11)].iter().copied()));

    map.insert(22);
    map.insert(33);

    let mut cursor = map.cursor_front_mut();
    assert!(cursor.current().is_some());
    assert_eq!(cursor.current().unwrap().1, &mut 1);
}

#[test]
fn test_cursor_back_mut() {
    let mut map: LinkedHashMap<i32, i32> = LinkedHashMap::new();

    map.insert(11);
    map.insert(22);
    map.insert(33);

    let mut cursor = map.cursor_back_mut();
    assert!(cursor.current().is_some());
    assert_eq!(cursor.current().unwrap().1, &mut 3);
}

Messung V0.5 in Prozent
C=75 H=98 G=87

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet am  2026-06-22) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik