Skip to content

Commit

Permalink
finish getbit
Browse files Browse the repository at this point in the history
  • Loading branch information
YIDWang committed Jan 21, 2019
1 parent d7f931b commit 5ac42cd
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 40 deletions.
2 changes: 2 additions & 0 deletions command/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ func init() {
"psetex": PSetEx,
"setrange": SetRange,
"setbit": SetBit,
"getbit": GetBit,
"incr": Incr,
"incrby": IncrBy,
"decr": Decr,
Expand Down Expand Up @@ -128,6 +129,7 @@ func init() {
"decrby": Desc{Proc: AutoCommit(DecrBy), Cons: Constraint{3, flags("wmF"), 1, 1, 1}},
"incrbyfloat": Desc{Proc: AutoCommit(IncrByFloat), Cons: Constraint{3, flags("wmF"), 1, 1, 1}},
"setbit": Desc{Proc: AutoCommit(SetBit), Cons: Constraint{4, flags("wm"), 1, 1, 1}},
"getbit": Desc{Proc: AutoCommit(GetBit), Cons: Constraint{3, flags("r"), 1, 1, 1}},

// keys
"type": Desc{Proc: AutoCommit(Type), Cons: Constraint{2, flags("rF"), 1, 1, 1}},
Expand Down
8 changes: 6 additions & 2 deletions command/strings.go
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ func SetBit(ctx *Context, txn *db.Transaction) (OnCommit, error) {
}
return nil, errors.New("ERR " + err.Error())
}
val, err := str.SetBit(on, offset)
val, err := str.SetBit(offset, on)
if err != nil {
return nil, errors.New("ERR " + err.Error())
}
Expand Down Expand Up @@ -528,5 +528,9 @@ func GetBit(ctx *Context, txn *db.Transaction) (OnCommit, error) {
if err != nil {
return nil, errors.New("ERR " + err.Error())
}
return Integer(ctx.Out, int64(val)), nil

if val != 0 {
return Integer(ctx.Out, 1), nil
}
return Integer(ctx.Out, 0), nil
}
10 changes: 5 additions & 5 deletions command/strings_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ func TestStringSetBit(t *testing.T) {
}

func TestStringGetBit(t *testing.T) {
CallTest("setbit", "5", "1")
CallTest("setbit", "getbit", "5", "1")
tests := []struct {
name string
args []string
Expand All @@ -560,12 +560,12 @@ func TestStringGetBit(t *testing.T) {
{
name: "1",
args: []string{"getbit", "1", "0", "0"},
want: "-ERR wrong number of arguments for 'setbit' command",
want: "-ERR wrong number of arguments for 'getbit' command",
},
{
name: "2",
args: []string{"getbit", "x"},
want: ErrBitInteger.Error(),
want: ErrBitOffset.Error(),
},
{
name: "3",
Expand All @@ -579,14 +579,14 @@ func TestStringGetBit(t *testing.T) {
},
{
name: "6",
args: []string{"getbit", "10", "0"},
args: []string{"getbit", "10"},
want: ":0",
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
out := CallTest("setbit", tt.args...)
out := CallTest("getbit", tt.args...)
assert.Contains(t, out.String(), tt.want)
})
}
Expand Down
7 changes: 2 additions & 5 deletions db/string.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package db

import (
"fmt"
"strconv"
)

Expand Down Expand Up @@ -190,7 +189,7 @@ func (s *String) Incrf(delta float64) (float64, error) {

// SetBit key offset bitvalue
// return the off postion of value
func (s *String) SetBit(on, offset int) (int, error) {
func (s *String) SetBit(offset, on int) (int, error) {
val := s.Meta.Value
bitoff := offset >> 3
llen := int(bitoff) - len(val) + 1
Expand All @@ -207,11 +206,9 @@ func (s *String) SetBit(on, offset int) (int, error) {
byteval &= (^(1 << bit))
byteval = byteval | ((on & 0x1) << bit)
val[bitoff] = byte(byteval)

if err := s.Set(val); err != nil {
return 0, err
}
fmt.Printf("%v\n", val)
return bitval, nil
}

Expand All @@ -229,7 +226,7 @@ func (s *String) GetBit(offset int) (int, error) {
byteval := int(val[bitoff])
bit := uint(7 - (offset & 0x7))
bitval := byteval & (1 << bit)
fmt.Printf("%#v %v %v %v", val, byteval, bit, bitval)

return bitval, nil
}

Expand Down
54 changes: 26 additions & 28 deletions db/string_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -580,8 +580,8 @@ func TestStringSetBit(t *testing.T) {
{
name: "one",
args: args{
on: 1,
off: 1,
on: 1,
},
want: want{
retval: 0,
Expand All @@ -591,8 +591,8 @@ func TestStringSetBit(t *testing.T) {
{
name: "two",
args: args{
on: 5,
off: 1,
off: 5,
on: 1,
},
want: want{
retval: 0,
Expand All @@ -602,8 +602,8 @@ func TestStringSetBit(t *testing.T) {
{
name: "three",
args: args{
on: 5,
off: 0,
off: 5,
on: 0,
},
want: want{
retval: 0x4,
Expand All @@ -613,8 +613,8 @@ func TestStringSetBit(t *testing.T) {
{
name: "four",
args: args{
on: 12,
off: 1,
off: 12,
on: 1,
},
want: want{
retval: 0,
Expand Down Expand Up @@ -644,7 +644,7 @@ func TestStringGetBit(t *testing.T) {
callFunc := func(txn *Transaction) {
s, err := GetString(txn, key)
assert.NoError(t, err)
s.SetBit(0, 1)
s.SetBit(4, 1)
}
MockTest(t, callFunc)

Expand All @@ -659,33 +659,31 @@ func TestStringGetBit(t *testing.T) {
args args
want want
}{
/*
{
name: "one",
args: args{
off: 1,
},
want: want{
retval: 0,
},
{
name: "one",
args: args{
off: 1,
},
{
name: "two",
args: args{
off: 100,
},
want: want{
retval: 0,
},
want: want{
retval: 0,
},
},
{
name: "two",
args: args{
off: 100,
},
want: want{
retval: 0,
},
*/
},
{
name: "three",
args: args{
off: 0,
off: 4,
},
want: want{
retval: 1,
retval: 8,
},
},
}
Expand Down

0 comments on commit 5ac42cd

Please sign in to comment.