From 19382c8be6cb6e36799ce952c95b208e472d553a Mon Sep 17 00:00:00 2001 From: Glenn Nethercutt Date: Fri, 17 Apr 2015 09:27:54 -0400 Subject: [PATCH] uphold the smove contract to return 0 when the element is not a member of the source set, even if source=dest --- src/t_set.c | 5 ++++- tests/unit/type/set.tcl | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/t_set.c b/src/t_set.c index 3b862dc8..ce9f6ad3 100644 --- a/src/t_set.c +++ b/src/t_set.c @@ -321,7 +321,10 @@ void smoveCommand(redisClient *c) { /* If srcset and dstset are equal, SMOVE is a no-op */ if (srcset == dstset) { - addReply(c,shared.cone); + if (setTypeIsMember(srcset,ele)) + addReply(c,shared.cone); + else + addReply(c,shared.czero); return; } diff --git a/tests/unit/type/set.tcl b/tests/unit/type/set.tcl index 162de0af..f294c01f 100644 --- a/tests/unit/type/set.tcl +++ b/tests/unit/type/set.tcl @@ -450,6 +450,7 @@ start_server { test "SMOVE non existing key" { setup_move assert_equal 0 [r smove myset1 myset2 foo] + assert_equal 0 [r smove myset1 myset1 foo] assert_equal {1 a b} [lsort [r smembers myset1]] assert_equal {2 3 4} [lsort [r smembers myset2]] }