txmap 2.2.2

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

pub(crate) fn empty_typed_map<K, V>() -> TxMap<K, V>
where
    K: Hash + Eq,
{
    TxMap::new(Shards::_8)
}

pub(crate) fn empty_map() -> TxMap<String, u64> {
    TxMap::new(Shards::_8)
}

pub(crate) fn map_alice(alice: u64) -> TxMap<String, u64> {
    let map = empty_typed_map();
    map.insert(ALICE.into(), alice);
    map
}

pub(crate) fn map_alice_bob(alice: u64, bob: u64) -> TxMap<String, u64> {
    let map = empty_typed_map();
    map.insert(ALICE.into(), alice);
    map.insert(BOB.into(), bob);
    map
}

pub(crate) fn map_alice_bob_chuck(alice: u64, bob: u64, chuck: u64) -> TxMap<String, u64> {
    let map = empty_typed_map();
    map.insert(ALICE.into(), alice);
    map.insert(BOB.into(), bob);
    map.insert(CHUCK.into(), chuck);
    map
}

pub(crate) fn map_alice_bob_chuck_dave(
    alice: u64,
    bob: u64,
    chuck: u64,
    dave: u64,
) -> TxMap<String, u64> {
    let map = empty_typed_map();
    map.insert(ALICE.into(), alice);
    map.insert(BOB.into(), bob);
    map.insert(CHUCK.into(), chuck);
    map.insert(DAVE.into(), dave);
    map
}

pub(crate) fn random_names<const C: usize>() -> [String; C] {
    assert!(C <= 4);
    let rng = &mut rand::rng();
    let mut vec = vec![ALICE.into(), BOB.into(), CHUCK.into(), DAVE.into()];
    vec.shuffle(rng);
    vec.truncate(C);
    vec.try_into().unwrap()
}