Added basic tests
This commit is contained in:
parent
4e93f3a2d0
commit
adce06420c
@ -3,17 +3,40 @@ package ocean
|
|||||||
import "sync"
|
import "sync"
|
||||||
|
|
||||||
type Collection interface {
|
type Collection interface {
|
||||||
Get(key string)
|
Get(key string) (value any, ok bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// collection is a hash map of homogeneous data.
|
||||||
type collection struct {
|
type collection struct {
|
||||||
data sync.Map
|
data sync.Map
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewCollection() {
|
// Force interface implementation
|
||||||
users := collection{}
|
var _ Collection = (*collection)(nil)
|
||||||
users.name = "User"
|
|
||||||
users.data.Store("1", "Test")
|
// NewCollection creates a new collection with the given name.
|
||||||
|
func NewCollection(name string) *collection {
|
||||||
|
return &collection{name: name}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get returns the value for the given key.
|
||||||
|
func (c *collection) Get(key string) (value any, ok bool) {
|
||||||
|
return c.data.Load(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set sets the value for the given key.
|
||||||
|
func (c *collection) Set(key string, value any) {
|
||||||
|
c.data.Store(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes a key from the collection.
|
||||||
|
func (c *collection) Delete(key string) {
|
||||||
|
c.data.Delete(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists returns whether or not the key exists.
|
||||||
|
func (c *collection) Exists(key string) bool {
|
||||||
|
_, exists := c.data.Load(key)
|
||||||
|
return exists
|
||||||
|
}
|
||||||
|
35
Collection_test.go
Normal file
35
Collection_test.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package ocean_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.akyoto.dev/go/assert"
|
||||||
|
"git.akyoto.dev/go/ocean"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewCollection(t *testing.T) {
|
||||||
|
users := ocean.NewCollection("User")
|
||||||
|
|
||||||
|
assert.False(t, users.Exists("Hello"))
|
||||||
|
assert.False(t, users.Exists("World"))
|
||||||
|
|
||||||
|
users.Set("Hello", "Hello data")
|
||||||
|
|
||||||
|
assert.True(t, users.Exists("Hello"))
|
||||||
|
assert.False(t, users.Exists("World"))
|
||||||
|
|
||||||
|
users.Set("World", "World data")
|
||||||
|
|
||||||
|
assert.True(t, users.Exists("Hello"))
|
||||||
|
assert.True(t, users.Exists("World"))
|
||||||
|
|
||||||
|
users.Delete("Hello")
|
||||||
|
|
||||||
|
assert.False(t, users.Exists("Hello"))
|
||||||
|
assert.True(t, users.Exists("World"))
|
||||||
|
|
||||||
|
users.Delete("World")
|
||||||
|
|
||||||
|
assert.False(t, users.Exists("Hello"))
|
||||||
|
assert.False(t, users.Exists("World"))
|
||||||
|
}
|
15
Namespace.go
15
Namespace.go
@ -1,15 +1,22 @@
|
|||||||
package ocean
|
package ocean
|
||||||
|
|
||||||
type Namespace interface {
|
type Namespace interface {
|
||||||
Collection(name string)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Force interface implementation
|
||||||
|
var _ Namespace = (*namespace)(nil)
|
||||||
|
|
||||||
|
// namespaces groups multiple collections under a common name.
|
||||||
type namespace struct {
|
type namespace struct {
|
||||||
name string
|
name string
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewNamespace() {
|
// NewNamespace creates a new namespace to group multiple collections under a common name.
|
||||||
ns := namespace{}
|
func NewNamespace(name string) *namespace {
|
||||||
ns.name = "test"
|
return &namespace{name: name}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Count counts the number of collections in the namespace.
|
||||||
|
func (ns *namespace) Count() int {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
13
Namespace_test.go
Normal file
13
Namespace_test.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package ocean_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.akyoto.dev/go/assert"
|
||||||
|
"git.akyoto.dev/go/ocean"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewNamespace(t *testing.T) {
|
||||||
|
ns := ocean.NewNamespace("test")
|
||||||
|
assert.Equal(t, ns.Count(), 0)
|
||||||
|
}
|
@ -1,3 +1,3 @@
|
|||||||
# ocean
|
# ocean
|
||||||
|
|
||||||
In-memory key/value store that writes JSON to disk.
|
In-memory key value store that writes JSON to disk.
|
||||||
|
2
go.mod
2
go.mod
@ -1,3 +1,5 @@
|
|||||||
module git.akyoto.dev/go/ocean
|
module git.akyoto.dev/go/ocean
|
||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
|
require git.akyoto.dev/go/assert v0.1.0
|
||||||
|
Loading…
Reference in New Issue
Block a user