diff options
author | antirez <antirez@gmail.com> | 2014-04-03 22:15:53 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2014-04-03 22:16:05 +0200 |
commit | 352208ff68f213a59729809ae3eaa2f0b0d0a2ad (patch) | |
tree | 5fb910e443f842d19a94931197081a9ee2685c5a /tests | |
parent | d2ca4bb62d807291f9e21ec57c44373a03a99a5e (diff) | |
download | redis-352208ff68f213a59729809ae3eaa2f0b0d0a2ad.tar.gz |
Initial HyperLogLog tests.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_helper.tcl | 1 | ||||
-rw-r--r-- | tests/unit/hyperloglog.tcl | 68 |
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} +} |