use std::collections::HashSet;
use crate::{
Result,
commands::{GenericCommands, SScanOptions, SetCommands},
tests::get_test_client,
};
use serial_test::serial;
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sadd() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
let len = client.sadd("key", ["value1", "value2", "value3"]).await?;
assert_eq!(3, len);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn scard() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let len = client.scard("key").await?;
assert_eq!(3, len);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sdiff() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let members: HashSet<String> = client.sdiff(["key1", "key2", "key3"]).await?;
assert_eq!(2, members.len());
assert!(members.contains("b"));
assert!(members.contains("d"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sdiffstore() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3", "key4"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let len = client.sdiffstore("key4", ["key1", "key2", "key3"]).await?;
assert_eq!(2, len);
let members: HashSet<String> = client.smembers("key4").await?;
assert_eq!(2, members.len());
assert!(members.contains("b"));
assert!(members.contains("d"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sinter() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let members: HashSet<String> = client.sinter(["key1", "key2", "key3"]).await?;
assert_eq!(1, members.len());
assert!(members.contains("c"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sintercard() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let len = client.sintercard(["key1", "key2", "key3"], 0).await?;
assert_eq!(1, len);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sinterstore() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3", "key4"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let len = client.sinterstore("key4", ["key1", "key2", "key3"]).await?;
assert_eq!(1, len);
let members: HashSet<String> = client.smembers("key4").await?;
assert_eq!(1, members.len());
assert!(members.contains("c"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sismember() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let result = client.sismember("key", "value1").await?;
assert!(result);
let result = client.sismember("key", "value4").await?;
assert!(!result);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn smembers() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let members: HashSet<String> = client.smembers("key").await?;
assert_eq!(3, members.len());
assert!(members.contains("value1"));
assert!(members.contains("value2"));
assert!(members.contains("value3"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn smismember() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let result: Vec<bool> = client.smismember("key", ["value1", "value4"]).await?;
assert_eq!(2, result.len());
assert!(result[0]);
assert!(!result[1]);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn smove() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2"]).await?;
client.sadd("key1", ["value1", "value2", "value3"]).await?;
client.sadd("key2", ["value4", "value5", "value6"]).await?;
let result = client.smove("key1", "key2", "value3").await?;
assert!(result);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn spop() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let result: HashSet<String> = client.spop("key", 2).await?;
assert_eq!(2, result.len());
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn srandmember() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let result: HashSet<String> = client.srandmember("key", 2).await?;
assert_eq!(2, result.len());
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn srem() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let result = client.srem("key", ["value1", "value2", "value4"]).await?;
assert_eq!(2, result);
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sscan() -> Result<()> {
let client = get_test_client().await?;
client.del("key").await?;
client.sadd("key", ["value1", "value2", "value3"]).await?;
let (cursor, members): (u64, Vec<String>) = client
.sscan(
"key",
0,
SScanOptions::default().match_pattern("value*").count(3),
)
.await?;
assert_eq!(0, cursor);
assert_eq!(3, members.len());
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sunion() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let members: HashSet<String> = client.sunion(["key1", "key2", "key3"]).await?;
assert_eq!(5, members.len());
assert!(members.contains("a"));
assert!(members.contains("b"));
assert!(members.contains("c"));
assert!(members.contains("d"));
assert!(members.contains("e"));
Ok(())
}
#[cfg_attr(feature = "tokio-runtime", tokio::test)]
#[cfg_attr(feature = "async-std-runtime", async_std::test)]
#[serial]
async fn sunionstore() -> Result<()> {
let client = get_test_client().await?;
client.del(["key1", "key2", "key3", "key4"]).await?;
client.sadd("key1", ["a", "b", "c", "d"]).await?;
client.sadd("key2", "c").await?;
client.sadd("key3", ["a", "c", "e"]).await?;
let len = client.sunionstore("key4", ["key1", "key2", "key3"]).await?;
assert_eq!(5, len);
let members: HashSet<String> = client.smembers("key4").await?;
assert_eq!(5, members.len());
assert!(members.contains("a"));
assert!(members.contains("b"));
assert!(members.contains("c"));
assert!(members.contains("d"));
assert!(members.contains("e"));
Ok(())
}