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
b21f4d63
Commit
b21f4d63
authored
Feb 27, 2014
by
antirez
Browse files
Basic BITPOS tests.
parent
76a6e82d
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/unit/bitops.tcl
View file @
b21f4d63
...
@@ -203,4 +203,106 @@ start_server {tags {"bitops"}} {
...
@@ -203,4 +203,106 @@ start_server {tags {"bitops"}} {
r set a
"
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
"
r set a
"
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
"
r bitop or x a b
r bitop or x a b
}
{
32
}
}
{
32
}
test
{
BITPOS bit=0 with empty key returns 0
}
{
r del str
r bitpos str 0
}
{
0
}
test
{
BITPOS bit=1 with empty key returns -1
}
{
r del str
r bitpos str 1
}
{
-1
}
test
{
BITPOS bit=0 with string less than 1 word works
}
{
r set str
"
\xff\xf0\x00
"
r bitpos str 0
}
{
12
}
test
{
BITPOS bit=1 with string less than 1 word works
}
{
r set str
"
\x00\x0f\x00
"
r bitpos str 1
}
{
12
}
test
{
BITPOS bit=0 starting at unaligned address
}
{
r set str
"
\xff\xf0\x00
"
r bitpos str 0 1
}
{
12
}
test
{
BITPOS bit=1 starting at unaligned address
}
{
r set str
"
\x00\x0f\xff
"
r bitpos str 1 1
}
{
12
}
test
{
BITPOS bit=0 unaligned+full word+reminder
}
{
r del str
r set str
"
\xff\xff\xff
"
;
# Prefix
# Followed by two
(
or four in 32 bit systems
)
full words
r append str
"
\xff\xff\xff\xff\xff\xff\xff\xff
"
r append str
"
\xff\xff\xff\xff\xff\xff\xff\xff
"
r append str
"
\xff\xff\xff\xff\xff\xff\xff\xff
"
# First zero bit.
r append str
"
\x0f
"
assert
{[
r bitpos str 0
]
== 216
}
assert
{[
r bitpos str 0 1
]
== 216
}
assert
{[
r bitpos str 0 2
]
== 216
}
assert
{[
r bitpos str 0 3
]
== 216
}
assert
{[
r bitpos str 0 4
]
== 216
}
assert
{[
r bitpos str 0 5
]
== 216
}
assert
{[
r bitpos str 0 6
]
== 216
}
assert
{[
r bitpos str 0 7
]
== 216
}
assert
{[
r bitpos str 0 8
]
== 216
}
}
test
{
BITPOS bit=1 unaligned+full word+reminder
}
{
r del str
r set str
"
\x00\x00\x00
"
;
# Prefix
# Followed by two
(
or four in 32 bit systems
)
full words
r append str
"
\x00\x00\x00\x00\x00\x00\x00\x00
"
r append str
"
\x00\x00\x00\x00\x00\x00\x00\x00
"
r append str
"
\x00\x00\x00\x00\x00\x00\x00\x00
"
# First zero bit.
r append str
"
\xf0
"
assert
{[
r bitpos str 1
]
== 216
}
assert
{[
r bitpos str 1 1
]
== 216
}
assert
{[
r bitpos str 1 2
]
== 216
}
assert
{[
r bitpos str 1 3
]
== 216
}
assert
{[
r bitpos str 1 4
]
== 216
}
assert
{[
r bitpos str 1 5
]
== 216
}
assert
{[
r bitpos str 1 6
]
== 216
}
assert
{[
r bitpos str 1 7
]
== 216
}
assert
{[
r bitpos str 1 8
]
== 216
}
}
test
{
BITPOS bit=1 returns -1 if string is all 0 bits
}
{
r set str
""
for
{
set j 0
}
{
$j
< 20
}
{
incr j
}
{
assert
{[
r bitpos str 1
]
== -1
}
r append str
"
\x00
"
}
}
test
{
BITPOS bit=0 works with intervals
}
{
r set str
"
\x00\xff\x00
"
assert
{[
r bitpos str 0 0 -1
]
== 0
}
assert
{[
r bitpos str 0 1 -1
]
== 16
}
assert
{[
r bitpos str 0 2 -1
]
== 16
}
assert
{[
r bitpos str 0 2 200
]
== 16
}
assert
{[
r bitpos str 0 1 1
]
== -1
}
}
test
{
BITPOS bit=1 works with intervals
}
{
r set str
"
\x00\xff\x00
"
assert
{[
r bitpos str 1 0 -1
]
== 8
}
assert
{[
r bitpos str 1 1 -1
]
== 8
}
assert
{[
r bitpos str 1 2 -1
]
== -1
}
assert
{[
r bitpos str 1 2 200
]
== -1
}
assert
{[
r bitpos str 1 1 1
]
== 8
}
}
test
{
BITPOS bit=0 changes behavior if end is given
}
{
r set str
"
\xff\xff\xff
"
assert
{[
r bitpos str 0
]
== 24
}
assert
{[
r bitpos str 0 0 -1
]
== -1
}
}
}
}
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