summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-04-03 22:15:53 +0200
committerantirez <antirez@gmail.com>2014-04-03 22:16:05 +0200
commit352208ff68f213a59729809ae3eaa2f0b0d0a2ad (patch)
tree5fb910e443f842d19a94931197081a9ee2685c5a /tests
parentd2ca4bb62d807291f9e21ec57c44373a03a99a5e (diff)
downloadredis-352208ff68f213a59729809ae3eaa2f0b0d0a2ad.tar.gz
Initial HyperLogLog tests.
Diffstat (limited to 'tests')
-rw-r--r--tests/test_helper.tcl1
-rw-r--r--tests/unit/hyperloglog.tcl68
2 files changed, 69 insertions, 0 deletions
diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl
index 062c318e5..78b979469 100644
--- a/tests/test_helper.tcl
+++ b/tests/test_helper.tcl
@@ -47,6 +47,7 @@ set ::all_tests {
unit/obuf-limits
unit/bitops
unit/memefficiency
+ unit/hyperloglog
}
# Index to the next test to run in the ::all_tests list.
set ::next_test 0
diff --git a/tests/unit/hyperloglog.tcl b/tests/unit/hyperloglog.tcl
new file mode 100644
index 000000000..e241288dd
--- /dev/null
+++ b/tests/unit/hyperloglog.tcl
@@ -0,0 +1,68 @@
+start_server {tags {"hll"}} {
+ test {HyperLogLog self test passes} {
+ catch {r pfselftest} e
+ set e
+ } {OK}
+
+ test {PFADD without arguments creates an HLL value} {
+ r pfadd hll
+ r exists hll
+ } {1}
+
+ test {Approximated cardinality after creation is zero} {
+ r pfcount hll
+ } {0}
+
+ test {PFADD returns 1 when at least 1 reg was modified} {
+ r pfadd hll a b c
+ } {1}
+
+ test {PFADD returns 0 when no reg was modified} {
+ r pfadd hll a b c
+ } {0}
+
+ test {PFADD works with empty string (regression)} {
+ r pfadd hll ""
+ }
+
+ # Note that the self test stresses much better the
+ # cardinality estimation error. We are testing just the
+ # command implementation itself here.
+ test {PFCOUNT returns approximated cardinality of set} {
+ r del hll
+ set res {}
+ r pfadd hll 1 2 3 4 5
+ lappend res [r pfcount hll]
+ # Call it again to test cached value invalidation.
+ r pfadd hll 6 7 8 8 9 10
+ lappend res [r pfcount hll]
+ set res
+ } {5 10}
+
+ test {PFADD, PFCOUNT, PFMERGE type checking works} {
+ r set foo bar
+ catch {r pfadd foo 1} e
+ assert_match {*WRONGTYPE*} $e
+ catch {r pfcount foo} e
+ assert_match {*WRONGTYPE*} $e
+ catch {r pfmerge bar foo} e
+ assert_match {*WRONGTYPE*} $e
+ catch {r pfmerge foo bar} e
+ assert_match {*WRONGTYPE*} $e
+ }
+
+ test {PFMERGE results on the cardinality of union of sets} {
+ r del hll hll1 hll2 hll3
+ r pfadd hll1 a b c
+ r pfadd hll2 b c d
+ r pfadd hll3 c d e
+ r pfmerge hll hll1 hll2 hll3
+ r pfcount hll
+ } {5}
+
+ test {PFGETREG returns the HyperLogLog raw registers} {
+ r del hll
+ r pfadd hll 1 2 3
+ llength [r pfgetreg hll]
+ } {16384}
+}