whirlwind 0.1.1

Collection of thread-safe, asynchronous data structures.
Documentation
use whirlwind::*;

#[tokio::test]
async fn test_shardmap() {
    let map = ShardMap::new();
    map.insert("foo", "bar").await;
    assert_eq!(map.len().await, 1);
    assert_eq!(map.contains_key(&"foo").await, true);
    assert_eq!(map.contains_key(&"bar").await, false);
    assert_eq!(map.get(&"foo").await.unwrap().value(), &"bar");
    assert!(map.get(&"bar").await.is_none());
    assert_eq!(map.remove(&"foo").await, Some("bar"));
    assert_eq!(map.len().await, 0);
    assert_eq!(map.contains_key(&"foo").await, false);
}

#[tokio::test]
async fn test_shardmap_clone() {
    let map = ShardMap::new();
    map.insert("foo", "bar").await;
    let map2 = map.clone();
    assert_eq!(map2.len().await, 1);
    assert_eq!(map2.contains_key(&"foo").await, true);
    assert_eq!(map2.contains_key(&"bar").await, false);
    assert_eq!(map2.get(&"foo").await.unwrap().value(), &"bar");
    assert!(map2.get(&"bar").await.is_none());
    assert_eq!(map2.remove(&"foo").await, Some("bar"));
    assert_eq!(map2.len().await, 0);
    assert_eq!(map2.contains_key(&"foo").await, false);
}

#[tokio::test]
async fn test_shardmap_shards() {
    let map = ShardMap::with_shards(4);
    map.insert("foo", "bar").await;
    assert_eq!(map.len().await, 1);
    assert_eq!(map.contains_key(&"foo").await, true);
    assert_eq!(map.contains_key(&"bar").await, false);
    assert_eq!(map.get(&"foo").await.unwrap().value(), &"bar");
    assert!(map.get(&"bar").await.is_none());
    assert_eq!(map.remove(&"foo").await, Some("bar"));
    assert_eq!(map.len().await, 0);
    assert_eq!(map.contains_key(&"foo").await, false);
}

#[tokio::test]
async fn test_shardmap_len() {
    let map = ShardMap::new();
    map.insert("foo", "bar").await;
    assert_eq!(map.len().await, 1);
    map.insert("foo2", "bar2").await;
    assert_eq!(map.len().await, 2);
    map.remove(&"foo").await;
    assert_eq!(map.len().await, 1);
    map.remove(&"foo2").await;
    assert_eq!(map.len().await, 0);
}

#[tokio::test]
async fn test_shardmap_is_empty() {
    let map = ShardMap::new();
    assert_eq!(map.is_empty().await, true);
    map.insert("foo", "bar").await;
    assert_eq!(map.is_empty().await, false);
    map.remove(&"foo").await;
    assert_eq!(map.is_empty().await, true);
}