Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
28c291c5
Commit
28c291c5
authored
Mar 02, 2016
by
antirez
Browse files
BITFIELD: overflow wrap behavior fuzz tester.
parent
ae7317e8
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/unit/bitfield.tcl
View file @
28c291c5
...
...
@@ -97,6 +97,7 @@ start_server {tags {"bitops"}} {
set type
"u
$bits
"
}
set max
[
expr
{
$min
+$range-1
}]
# Compare Tcl vs Redis
set range2
[
expr
{
$range
*2
}]
set value
[
expr
{(
$min
*2
)
+
[
randomInt $range2
]}]
...
...
@@ -133,4 +134,54 @@ start_server {tags {"bitops"}} {
}
}
}
test
{
BITFIELD overflow wrap fuzzing
}
{
for
{
set j 0
}
{
$j
< 1000
}
{
incr j
}
{
set bits
[
expr
{[
randomInt 64
]
+1
}]
set sign
[
randomInt 2
]
set range
[
expr
{
2**$bits
}]
if
{
$bits
== 64
}
{
set sign 1
}
;
# u64 is not supported by BITFIELD.
if
{
$sign
}
{
set min
[
expr
{
-
(
$range
/2
)}]
set type
"i
$bits
"
}
else
{
set min 0
set type
"u
$bits
"
}
set max
[
expr
{
$min
+$range-1
}]
# Compare Tcl vs Redis
set range2
[
expr
{
$range
*2
}]
set value
[
expr
{(
$min
*2
)
+
[
randomInt $range2
]}]
set increment
[
expr
{(
$min
*2
)
+
[
randomInt $range2
]}]
if
{
$value
> 9223372036854775807
}
{
set value 9223372036854775807
}
if
{
$value
< -9223372036854775808
}
{
set value -9223372036854775808
}
if
{
$increment
> 9223372036854775807
}
{
set increment 9223372036854775807
}
if
{
$increment
< -9223372036854775808
}
{
set increment -9223372036854775808
}
r del bits
r bitfield bits overflow wrap set $type 0 $value
r bitfield bits overflow wrap incrby $type 0 $increment
set res
[
lindex
[
r bitfield bits get $type 0
]
0
]
set expected 0
if
{
$sign
}
{
incr expected
[
expr
{
$max
+1
}]}
incr expected $value
incr expected $increment
set expected
[
expr
{
$expected
% $range
}]
if
{
$sign
}
{
incr expected $min
}
if
{
$res
!= $expected
}
{
fail
"WRAP error:
$type
$value
+
$increment
=
$res
, should be
$expected
"
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment