txmap 3.1.5

A concurrent transactional hash map for Rust with fine-grained locking, internal mutability and composable transactions
Documentation
use crate::tests::{creators::*, data::*};

#[test]
fn iter_empty_map() {
    let map = empty_map();
    let mut count = 0;
    for _ in map.iter() {
        count += 1;
    }
    assert_eq!(count, 0);
}

#[test]
fn iter_single_entry() {
    let map = map_alice(42);
    let mut entries: Vec<(String, u64)> = map.iter().map(|(k, v)| (k.clone(), *v)).collect();
    entries.sort();
    assert_eq!(entries, vec![(ALICE.into(), 42)]);
}

#[test]
fn iter_multiple_entries() {
    let map = map_alice_bob_chuck(10, 20, 30);
    let mut entries: Vec<(String, u64)> = map.iter().map(|(k, v)| (k.clone(), *v)).collect();
    entries.sort();
    assert_eq!(
        entries,
        vec![(ALICE.into(), 10), (BOB.into(), 20), (CHUCK.into(), 30),]
    );
}

#[test]
fn iter_matches_len() {
    let map = map_alice_bob_chuck_dave(1, 2, 3, 4);
    let count = map.iter().count();
    assert_eq!(count, map.len());
}

#[test]
fn iter_via_into_iterator() {
    let map = map_alice_bob(100, 200);
    let mut entries: Vec<(String, u64)> = map.iter().map(|(k, v)| (k.clone(), *v)).collect();
    entries.sort();
    assert_eq!(entries, vec![(ALICE.into(), 100), (BOB.into(), 200),]);
}

#[test]
fn iter_size_hint() {
    let map = map_alice_bob_chuck(1, 2, 3);
    let mut iter = map.iter();
    assert_eq!(iter.size_hint(), (3, Some(3)));
    iter.next();
    assert_eq!(iter.size_hint(), (2, Some(2)));
    iter.next();
    assert_eq!(iter.size_hint(), (1, Some(1)));
    iter.next();
    assert_eq!(iter.size_hint(), (0, Some(0)));
    assert!(iter.next().is_none());
}

#[test]
fn for_loop_syntax() {
    let map = map_alice_bob(5, 10);
    let mut sum = 0u64;
    for (_k, v) in &map {
        sum += *v;
    }
    assert_eq!(sum, 15);
}