]> git.saurik.com Git - redis.git/commitdiff
ZSets double to string serialization fixed
authorantirez <antirez@gmail.com>
Tue, 3 Nov 2009 13:36:38 +0000 (14:36 +0100)
committerantirez <antirez@gmail.com>
Tue, 3 Nov 2009 13:36:38 +0000 (14:36 +0100)
.gitignore
TODO
redis.c
test-redis.tcl

index 56c27fdd62bc3988241f01005d1030d83c6a271a..a9bd59efd643919be1ad597e455c5515a075602f 100644 (file)
@@ -1,5 +1,7 @@
+00-RELEASENOTES
 *.o
 *.rdb
 *.o
 *.rdb
+*.log
 redis-cli
 redis-server
 redis-benchmark
 redis-cli
 redis-server
 redis-benchmark
@@ -7,3 +9,4 @@ doc-tools
 mkrelease.sh
 release
 myredis.conf
 mkrelease.sh
 release
 myredis.conf
+misc/*
diff --git a/TODO b/TODO
index dfd75093a309e19280c6d563c70f4786373847b0..ec5c636c454ad0f68541e5f28d298d20f5a839cb 100644 (file)
--- a/TODO
+++ b/TODO
@@ -6,8 +6,8 @@ VERSION 1.1 TODO
 * Add all the missing symbols for the static functions into the table. Crete a Tcl script to check this. This backtrace on segfault is indeed *very* useful.
 * Use strcoll() to compare objects in sorted sets, like it already happens for SORT.
 * LMOVE, as discussed in the Redis group.
 * Add all the missing symbols for the static functions into the table. Crete a Tcl script to check this. This backtrace on segfault is indeed *very* useful.
 * Use strcoll() to compare objects in sorted sets, like it already happens for SORT.
 * LMOVE, as discussed in the Redis group.
-* EXPIRE and EXPIREAT tests.
-* Write docs for the "STORE" operaiton of SORT.
+* EXPIRE, EXPIREAT, ZSCORE tests.
+* Write docs for the "STORE" operaiton of SORT, and GET "#" option.
 * Append only mode: testing and a command to rebuild the log from scratch.
 
 VERSION 1.2 TODO
 * Append only mode: testing and a command to rebuild the log from scratch.
 
 VERSION 1.2 TODO
diff --git a/redis.c b/redis.c
index f5fb5e45586e5ea8aa40a9cab9a20810ff5bf2ed..e0e93aadda7cf69217db7131cc7b4d76f8e82e45 100644 (file)
--- a/redis.c
+++ b/redis.c
@@ -2331,7 +2331,7 @@ static int rdbSaveDoubleValue(FILE *fp, double val) {
         len = 1;
         buf[0] = (val < 0) ? 255 : 254;
     } else {
         len = 1;
         buf[0] = (val < 0) ? 255 : 254;
     } else {
-        snprintf((char*)buf+1,sizeof(buf)-1,"%.16g",val);
+        snprintf((char*)buf+1,sizeof(buf)-1,"%.17g",val);
         buf[0] = strlen((char*)buf);
         len = buf[0]+1;
     }
         buf[0] = strlen((char*)buf);
         len = buf[0]+1;
     }
@@ -4307,7 +4307,7 @@ static void zscoreCommand(redisClient *c) {
                 char buf[128];
                 double *score = dictGetEntryVal(de);
 
                 char buf[128];
                 double *score = dictGetEntryVal(de);
 
-                snprintf(buf,sizeof(buf),"%.16g",*score);
+                snprintf(buf,sizeof(buf),"%.17g",*score);
                 addReplySds(c,sdscatprintf(sdsempty(),"$%d\r\n%s\r\n",
                     strlen(buf),buf));
             }
                 addReplySds(c,sdscatprintf(sdsempty(),"$%d\r\n%s\r\n",
                     strlen(buf),buf));
             }
index a6e36db43a1e1d62cd95cb74a7f43d83344c1ae3..266d5fb9d0facf15aa5e97203283ce87abb7d789 100644 (file)
@@ -789,8 +789,21 @@ proc main {server port} {
     } {{x y z} {y x z}}
 
     test {ZSCORE} {
     } {{x y z} {y x z}}
 
     test {ZSCORE} {
-        list [$r zscore ztmp x] [$r zscore ztmp y] [$r zscore ztmp z]
-    } {10 1 30}
+        set aux {}
+        set err {}
+        for {set i 0} {$i < 1000} {incr i} {
+            set score [expr rand()]
+            lappend aux $score
+            $r zadd zscoretest $score $i
+        }
+        for {set i 0} {$i < 1000} {incr i} {
+            if {[$r zscore zscoretest $i] != [lindex $aux $i]} {
+                set err "Expected score was [lindex $aux $i] but got [$r zscore zscoretest $i] for element $i"
+                break
+            }
+        }
+        set _ $err
+    } {}
 
     test {ZRANGE and ZREVRANGE} {
         list [$r zrange ztmp 0 -1] [$r zrevrange ztmp 0 -1]
 
     test {ZRANGE and ZREVRANGE} {
         list [$r zrange ztmp 0 -1] [$r zrevrange ztmp 0 -1]