txmap 0.1.0

A concurrent transactional hash map with fine-grained locking and internal mutability
Documentation
#[cfg(test)]
mod tests {
    use crate::{
        builders::builder_traits::{IntoTransaction, TxOpBuilder, TxResultBuilder},
        result::TxResult,
        tests::{
            creators::creators::empty_map,
            data::data::{ALICE, BOB, CHUCK},
        },
    };

    #[test]
    fn get_returns_transformed_value() {
        let map = empty_map();
        map.insert(ALICE.into(), 7);
        let result = map
            .transaction()
            .modify(ALICE.into(), |_k, v| *v += 3)
            .get(ALICE.into(), |_k, v| *v * 2)
            .into_transaction()
            .execute();
        assert_eq!(result, TxResult::Completed(Some(20)));
    }

    #[test]
    fn get_returns_option_via_map_finisher() {
        let map = empty_map();
        map.insert(ALICE.into(), 10);
        let result = map
            .transaction()
            .modify(ALICE.into(), |_k, v| *v *= 2)
            .get_copied(ALICE.into())
            .into_transaction()
            .execute();
        assert_eq!(result, TxResult::Completed(Some(20)));
    }

    #[test]
    fn get_all_returns_multiple_values() {
        let map = empty_map();
        map.insert(ALICE.into(), 10);
        map.insert(BOB.into(), 20);
        let result = map
            .transaction()
            .modify(ALICE.into(), |_k, v| *v += 0)
            .modify(BOB.into(), |_k, v| *v += 0)
            .modify(CHUCK.into(), |_k, v| *v += 0)
            .get_all_copied([ALICE.into(), BOB.into(), CHUCK.into()])
            .into_transaction()
            .execute();
        assert_eq!(result, TxResult::Completed(vec![Some(10), Some(20), None]));
    }
}