xref: /redis-3.2.3/tests/unit/memefficiency.tcl (revision 5e3dcc52)
1proc test_memory_efficiency {range} {
2    r flushall
3    set rd [redis_deferring_client]
4    set base_mem [s used_memory]
5    set written 0
6    for {set j 0} {$j < 10000} {incr j} {
7        set key key:$j
8        set val [string repeat A [expr {int(rand()*$range)}]]
9        $rd set $key $val
10        incr written [string length $key]
11        incr written [string length $val]
12        incr written 2 ;# A separator is the minimum to store key-value data.
13    }
14    for {set j 0} {$j < 10000} {incr j} {
15        $rd read ; # Discard replies
16    }
17
18    set current_mem [s used_memory]
19    set used [expr {$current_mem-$base_mem}]
20    set efficiency [expr {double($written)/$used}]
21    return $efficiency
22}
23
24start_server {tags {"memefficiency"}} {
25    foreach {size_range expected_min_efficiency} {
26        32    0.15
27        64    0.25
28        128   0.35
29        1024  0.75
30        16384 0.82
31    } {
32        test "Memory efficiency with values in range $size_range" {
33            set efficiency [test_memory_efficiency $size_range]
34            assert {$efficiency >= $expected_min_efficiency}
35        }
36    }
37}
38