Files
excache/test/excache/set_test.exs
T

64 lines
2.9 KiB
Elixir

defmodule Excache.SetTest do
use Excache.Test.ServerCase, async: false
test "set operations", %{conn: conn} do
assert {3, conn} = Client.command(conn, ["SADD", "tags", "x", "y", "z"])
assert {0, conn} = Client.command(conn, ["SADD", "tags", "x"])
assert {3, conn} = Client.command(conn, ["SCARD", "tags"])
assert {1, conn} = Client.command(conn, ["SISMEMBER", "tags", "y"])
assert {0, conn} = Client.command(conn, ["SISMEMBER", "tags", "nope"])
{members, conn} = Client.command(conn, ["SMEMBERS", "tags"])
assert Enum.sort(members) == ["x", "y", "z"]
assert {1, _conn} = Client.command(conn, ["SREM", "tags", "y"])
end
test "SINTER, SUNION and SDIFF across multiple sets", %{conn: conn} do
assert {3, conn} = Client.command(conn, ["SADD", "a", "1", "2", "3"])
assert {3, conn} = Client.command(conn, ["SADD", "b", "2", "3", "4"])
{inter, conn} = Client.command(conn, ["SINTER", "a", "b"])
assert Enum.sort(inter) == ["2", "3"]
{union, conn} = Client.command(conn, ["SUNION", "a", "b"])
assert Enum.sort(union) == ["1", "2", "3", "4"]
{diff, conn} = Client.command(conn, ["SDIFF", "a", "b"])
assert diff == ["1"]
{diff_missing, conn} = Client.command(conn, ["SDIFF", "a", "missing-set"])
assert Enum.sort(diff_missing) == ["1", "2", "3"]
assert {{:simple, "OK"}, conn} = Client.command(conn, ["SET", "notaset", "v"])
assert {{:error, "WRONGTYPE" <> _}, _conn} = Client.command(conn, ["SINTER", "a", "notaset"])
end
test "SINTERSTORE, SUNIONSTORE and SDIFFSTORE persist the computed set", %{conn: conn} do
assert {3, conn} = Client.command(conn, ["SADD", "src-a", "1", "2", "3"])
assert {3, conn} = Client.command(conn, ["SADD", "src-b", "2", "3", "4"])
assert {2, conn} = Client.command(conn, ["SINTERSTORE", "dest-inter", "src-a", "src-b"])
{inter, conn} = Client.command(conn, ["SMEMBERS", "dest-inter"])
assert Enum.sort(inter) == ["2", "3"]
assert {4, conn} = Client.command(conn, ["SUNIONSTORE", "dest-union", "src-a", "src-b"])
{union, conn} = Client.command(conn, ["SMEMBERS", "dest-union"])
assert Enum.sort(union) == ["1", "2", "3", "4"]
assert {1, conn} = Client.command(conn, ["SDIFFSTORE", "dest-diff", "src-a", "src-b"])
assert {["1"], conn} = Client.command(conn, ["SMEMBERS", "dest-diff"])
assert {0, conn} = Client.command(conn, ["SDIFFSTORE", "dest-empty", "src-a", "src-a"])
assert {0, _conn} = Client.command(conn, ["EXISTS", "dest-empty"])
end
test "SINTERSTORE overwrites any prior value at the destination key", %{conn: conn} do
assert {{:simple, "OK"}, conn} = Client.command(conn, ["SET", "dest", "stale"])
assert {2, conn} = Client.command(conn, ["SADD", "src-a", "x", "y"])
assert {1, conn} = Client.command(conn, ["SADD", "src-b", "x"])
assert {1, conn} = Client.command(conn, ["SINTERSTORE", "dest", "src-a", "src-b"])
assert {["x"], _conn} = Client.command(conn, ["SMEMBERS", "dest"])
end
end