Skip to content
This repository has been archived by the owner on Jun 15, 2022. It is now read-only.

Commit

Permalink
Add Incr function
Browse files Browse the repository at this point in the history
Incr function added for increment integer values by one. pkg/main.go and README updated with  function usage.

Signed-off-by: Gökhan Özeloğlu <gozeloglu@gmail.com>
  • Loading branch information
gozeloglu committed Oct 27, 2021
1 parent d23391e commit 7fa27f8
Show file tree
Hide file tree
Showing 4 changed files with 114 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ func main() {
jack = db.Get("jack")
fmt.Println("Jack:", jack)

newAge, err := db.Incr("john")
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("John's new age is %s", newAge)

err = db.Close() // Call while closing the database.
if err != nil {
log.Fatalf(err.Error())
Expand Down
6 changes: 6 additions & 0 deletions example/pkg/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ func main() {
jack = db.Get("jack")
fmt.Println("Jack:", jack)

newAge, err := db.Incr("john")
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("John's new age is %s", newAge)

err = db.Close()
if err != nil {
log.Fatalf(err.Error())
Expand Down
21 changes: 21 additions & 0 deletions incr.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package kvs

import "strconv"

// Incr increments value of the key by 1. It is only applicable for integer
// convertable values. If the value is not able to convert integer, it returns
// error with empty string.
func (k *Kvs) Incr(key string) (string, error) {
val := k.kv[key]
valInt, err := strconv.Atoi(val)
if err != nil {
return "", err
}
k.kv[key] = convStr(valInt + 1)
return k.kv[key], nil
}

// convStr converts integer to string.
func convStr(i int) string {
return strconv.Itoa(i)
}
81 changes: 81 additions & 0 deletions incr_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package kvs

import (
"os"
"testing"
"time"
)

func TestConvStr(t *testing.T) {
i := 12
s := convStr(i)
if s != "12" {
t.Fatalf("String conversion is wrong.")
}
t.Logf("Converted successfully: %s", s)
}

func TestKvs_Incr(t *testing.T) {
db, err := open(t.Name(), "", 2*time.Minute)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db created.")

k, v := "age", "12"
db.Set(k, v)
t.Logf("Key-value pair is set.")
t.Logf("%s: %s", k, v)
val, err := db.Incr(k)
if err != nil {
t.Fatalf(err.Error())
}

if val != "13" {
t.Errorf("incremented value is wrong: %s", val)
}
t.Logf("value is incremented.")
t.Logf("%s: %s", k, val)

err = db.Close()
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db closed.")

err = os.RemoveAll(db.dir)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("temp db removed.")
}

func TestKvs_IncrStr(t *testing.T) {
db, err := open(t.Name(), "", 2*time.Minute)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db created.")

k, v := "foo", "bar"
db.Set(k, v)
t.Logf("Key-value pair is set.")
t.Logf("%s: %s", k, v)
_, err = db.Incr(k)
if err == nil {
t.Fatalf("error expected, but nil got.")
}
t.Logf("value could not incremented. it is string.")

err = db.Close()
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("db closed.")

err = os.RemoveAll(db.dir)
if err != nil {
t.Fatalf(err.Error())
}
t.Logf("temp db removed.")
}

0 comments on commit 7fa27f8

Please sign in to comment.