1start_server {tags {"incr"}} { 2 test {INCR against non existing key} { 3 set res {} 4 append res [r incr novar] 5 append res [r get novar] 6 } {11} 7 8 test {INCR against key created by incr itself} { 9 r incr novar 10 } {2} 11 12 test {INCR against key originally set with SET} { 13 r set novar 100 14 r incr novar 15 } {101} 16 17 test {INCR over 32bit value} { 18 r set novar 17179869184 19 r incr novar 20 } {17179869185} 21 22 test {INCRBY over 32bit value with over 32bit increment} { 23 r set novar 17179869184 24 r incrby novar 17179869184 25 } {34359738368} 26 27 test {INCR fails against key with spaces (left)} { 28 r set novar " 11" 29 catch {r incr novar} err 30 format $err 31 } {ERR*} 32 33 test {INCR fails against key with spaces (right)} { 34 r set novar "11 " 35 catch {r incr novar} err 36 format $err 37 } {ERR*} 38 39 test {INCR fails against key with spaces (both)} { 40 r set novar " 11 " 41 catch {r incr novar} err 42 format $err 43 } {ERR*} 44 45 test {INCR fails against a key holding a list} { 46 r rpush mylist 1 47 catch {r incr mylist} err 48 r rpop mylist 49 format $err 50 } {WRONGTYPE*} 51 52 test {DECRBY over 32bit value with over 32bit increment, negative res} { 53 r set novar 17179869184 54 r decrby novar 17179869185 55 } {-1} 56 57 test {INCR uses shared objects in the 0-9999 range} { 58 r set foo -1 59 r incr foo 60 assert {[r object refcount foo] > 1} 61 r set foo 9998 62 r incr foo 63 assert {[r object refcount foo] > 1} 64 r incr foo 65 assert {[r object refcount foo] == 1} 66 } 67 68 test {INCR can modify objects in-place} { 69 r set foo 20000 70 r incr foo 71 assert {[r object refcount foo] == 1} 72 set old [lindex [split [r debug object foo]] 1] 73 r incr foo 74 set new [lindex [split [r debug object foo]] 1] 75 assert {[string range $old 0 2] eq "at:"} 76 assert {[string range $new 0 2] eq "at:"} 77 assert {$old eq $new} 78 } 79 80 test {INCRBYFLOAT against non existing key} { 81 r del novar 82 list [roundFloat [r incrbyfloat novar 1]] \ 83 [roundFloat [r get novar]] \ 84 [roundFloat [r incrbyfloat novar 0.25]] \ 85 [roundFloat [r get novar]] 86 } {1 1 1.25 1.25} 87 88 test {INCRBYFLOAT against key originally set with SET} { 89 r set novar 1.5 90 roundFloat [r incrbyfloat novar 1.5] 91 } {3} 92 93 test {INCRBYFLOAT over 32bit value} { 94 r set novar 17179869184 95 r incrbyfloat novar 1.5 96 } {17179869185.5} 97 98 test {INCRBYFLOAT over 32bit value with over 32bit increment} { 99 r set novar 17179869184 100 r incrbyfloat novar 17179869184 101 } {34359738368} 102 103 test {INCRBYFLOAT fails against key with spaces (left)} { 104 set err {} 105 r set novar " 11" 106 catch {r incrbyfloat novar 1.0} err 107 format $err 108 } {ERR*valid*} 109 110 test {INCRBYFLOAT fails against key with spaces (right)} { 111 set err {} 112 r set novar "11 " 113 catch {r incrbyfloat novar 1.0} err 114 format $err 115 } {ERR*valid*} 116 117 test {INCRBYFLOAT fails against key with spaces (both)} { 118 set err {} 119 r set novar " 11 " 120 catch {r incrbyfloat novar 1.0} err 121 format $err 122 } {ERR*valid*} 123 124 test {INCRBYFLOAT fails against a key holding a list} { 125 r del mylist 126 set err {} 127 r rpush mylist 1 128 catch {r incrbyfloat mylist 1.0} err 129 r del mylist 130 format $err 131 } {WRONGTYPE*} 132 133 test {INCRBYFLOAT does not allow NaN or Infinity} { 134 r set foo 0 135 set err {} 136 catch {r incrbyfloat foo +inf} err 137 set err 138 # p.s. no way I can force NaN to test it from the API because 139 # there is no way to increment / decrement by infinity nor to 140 # perform divisions. 141 } {ERR*would produce*} 142 143 test {INCRBYFLOAT decrement} { 144 r set foo 1 145 roundFloat [r incrbyfloat foo -1.1] 146 } {-0.1} 147} 148