@@ -120,8 +120,8 @@ public void WrongTypeForVectorSetOpsOnNonVectorSetKeys()
120120 exc = ClassicAssert . Throws < RedisServerException > ( ( ) => db . Execute ( "VINFO" , [ "foo" ] ) ) ;
121121 break ;
122122 case RespCommand . VISMEMBER :
123- // TODO: Implement when VISMEMBER works
124- continue ;
123+ exc = ClassicAssert . Throws < RedisServerException > ( ( ) => db . Execute ( " VISMEMBER" , [ "foo" , "bar" ] ) ) ;
124+ break ;
125125 case RespCommand . VLINKS :
126126 // TODO: Implement when VLINKS works
127127 continue ;
@@ -1746,6 +1746,7 @@ public void VINFO()
17461746 }
17471747 }
17481748 }
1749+
17491750
17501751 static object [ ] GenerateVADDOptions ( string key , string quantizer , int reduce , int buildExplorationFactor , int numLinks , object [ ] values , byte [ ] elementId )
17511752 {
@@ -1791,6 +1792,63 @@ static Dictionary<string, string> BuildDictionaryFromResponse(RedisValue[] respo
17911792 }
17921793 }
17931794
1795+ [ Test ]
1796+ public void VISMEMBER ( )
1797+ {
1798+ using var redis = ConnectionMultiplexer . Connect ( TestUtils . GetConfig ( ) ) ;
1799+ var db = redis . GetDatabase ( 0 ) ;
1800+
1801+ // VISMEMBER on non-existent vector set returns 0
1802+ var res = db . Execute ( "VISMEMBER" , [ "nonexistent" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1803+ ClassicAssert . AreEqual ( 0 , ( int ) res ) ;
1804+
1805+ // Create a vector set with one element
1806+ res = db . Execute ( "VADD" , [ "foo" , "VALUES" , "3" , "1.0" , "2.0" , "3.0" , new byte [ ] { 1 , 0 , 0 , 0 } , "XPREQ8" ] ) ;
1807+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1808+
1809+ // VISMEMBER on element that exists returns 1
1810+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1811+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1812+
1813+ // VISMEMBER on element that doesn't exist in the set returns 0
1814+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 2 , 0 , 0 , 0 } ] ) ;
1815+ ClassicAssert . AreEqual ( 0 , ( int ) res ) ;
1816+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 0 , 0 , 0 , 0 } ] ) ;
1817+ ClassicAssert . AreEqual ( 0 , ( int ) res ) ;
1818+
1819+ // Remove the element
1820+ res = db . Execute ( "VREM" , [ "foo" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1821+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1822+
1823+ // VISMEMBER on deleted element returns 0
1824+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1825+ ClassicAssert . AreEqual ( 0 , ( int ) res ) ;
1826+
1827+ // Add another member with different ID
1828+ res = db . Execute ( "VADD" , [ "foo" , "VALUES" , "3" , "4.0" , "5.0" , "6.0" , new byte [ ] { 2 , 0 , 0 , 0 } , "XPREQ8" ] ) ;
1829+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1830+
1831+ // VISMEMBER on new element returns 1
1832+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 2 , 0 , 0 , 0 } ] ) ;
1833+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1834+
1835+ // VISMEMBER on old element still returns 0
1836+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1837+ ClassicAssert . AreEqual ( 0 , ( int ) res ) ;
1838+
1839+ // Add first element back
1840+ res = db . Execute ( "VADD" , [ "foo" , "VALUES" , "3" , "1.0" , "2.0" , "3.0" , new byte [ ] { 1 , 0 , 0 , 0 } , "XPREQ8" ] ) ;
1841+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1842+
1843+ // VISMEMBER on first element returns 1
1844+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 1 , 0 , 0 , 0 } ] ) ;
1845+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1846+
1847+ // VISMEMBER on second element still returns 1
1848+ res = db . Execute ( "VISMEMBER" , [ "foo" , new byte [ ] { 2 , 0 , 0 , 0 } ] ) ;
1849+ ClassicAssert . AreEqual ( 1 , ( int ) res ) ;
1850+ }
1851+
17941852 [ Test ]
17951853 public void VREM ( )
17961854 {
0 commit comments