Compare commits
3
Commits
c95af1ff54
...
0b85e31d94
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b85e31d94 | ||
|
|
db673f4c98 | ||
|
|
57f2c755ce |
+34
@@ -0,0 +1,34 @@
|
|||||||
|
package db0101
|
||||||
|
|
||||||
|
import "bytes"
|
||||||
|
|
||||||
|
type KV struct {
|
||||||
|
mem map[string][]byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *KV) Open() error {
|
||||||
|
kv.mem = map[string][]byte{} // empty
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *KV) Close() error { return nil }
|
||||||
|
|
||||||
|
func (kv *KV) Get(key []byte) (val []byte, ok bool, err error) {
|
||||||
|
val, ok = kv.mem[string(key)]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *KV) Set(key []byte, val []byte) (updated bool, err error) {
|
||||||
|
prev, exist := kv.mem[string(key)]
|
||||||
|
kv.mem[string(key)] = val
|
||||||
|
updated = !exist || !bytes.Equal(prev, val)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *KV) Del(key []byte) (deleted bool, err error) {
|
||||||
|
_, deleted = kv.mem[string(key)]
|
||||||
|
delete(kv.mem, string(key))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// QzBQWVJJOUhU https://trialofcode.org/
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package db0101
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestKVBasic(t *testing.T) {
|
||||||
|
kv := KV{}
|
||||||
|
err := kv.Open()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
defer kv.Close()
|
||||||
|
|
||||||
|
updated, err := kv.Set([]byte("k1"), []byte("v1"))
|
||||||
|
assert.True(t, updated && err == nil)
|
||||||
|
|
||||||
|
val, ok, err := kv.Get([]byte("k1"))
|
||||||
|
assert.True(t, string(val) == "v1" && ok && err == nil)
|
||||||
|
|
||||||
|
_, ok, err = kv.Get([]byte("xxx"))
|
||||||
|
assert.True(t, !ok && err == nil)
|
||||||
|
|
||||||
|
updated, err = kv.Del([]byte("xxx"))
|
||||||
|
assert.True(t, !updated && err == nil)
|
||||||
|
|
||||||
|
updated, err = kv.Del([]byte("k1"))
|
||||||
|
assert.True(t, updated && err == nil)
|
||||||
|
|
||||||
|
_, ok, err = kv.Get([]byte("xxx"))
|
||||||
|
assert.True(t, !ok && err == nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// QzBQWVJJOUhU https://trialofcode.org/
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
module trialofcode.org/db
|
||||||
|
|
||||||
|
go 1.23
|
||||||
|
|
||||||
|
require github.com/stretchr/testify v1.11.1
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||||
|
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
Reference in New Issue
Block a user