Added benchmarks
This commit is contained in:
parent
9b956ac441
commit
c3e12a7663
@ -73,7 +73,7 @@ func (c *collection[T]) Get(key string) (*T, error) {
|
||||
if !exists {
|
||||
return nil, &KeyNotFoundError{Key: key}
|
||||
}
|
||||
|
||||
|
||||
return value.(*T), nil
|
||||
}
|
||||
|
||||
@ -89,6 +89,10 @@ func (c *collection[T]) Set(key string, value *T) {
|
||||
|
||||
// Delete deletes a key from the collection.
|
||||
func (c *collection[T]) Delete(key string) {
|
||||
if !c.Exists(key) {
|
||||
return
|
||||
}
|
||||
|
||||
c.data.Delete(key)
|
||||
os.Remove(c.keyFile(key))
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ocean_test
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"testing"
|
||||
|
||||
"git.akyoto.dev/go/assert"
|
||||
@ -88,3 +89,88 @@ func TestPersistence(t *testing.T) {
|
||||
assert.NotNil(t, user1)
|
||||
assert.NotNil(t, user2)
|
||||
}
|
||||
|
||||
func TestParallel(t *testing.T) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(t, err)
|
||||
defer users.Clear()
|
||||
|
||||
users.Set("1", &User{Name: "User 1"})
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
for i := 0; i < 100; i++ {
|
||||
wg.Add(2)
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
user, err := users.Get("1")
|
||||
assert.Nil(t, err)
|
||||
assert.NotNil(t, user)
|
||||
assert.Equal(t, user.Name, "User 1")
|
||||
}()
|
||||
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
users.Set("1", &User{Name: "User 1"})
|
||||
}()
|
||||
}
|
||||
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func BenchmarkGet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Clear()
|
||||
users.Set("1", &User{Name: "User 1"})
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
_, err := users.Get("1")
|
||||
|
||||
if err != nil {
|
||||
b.Fail()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkSet(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Clear()
|
||||
user := &User{Name: "User 1"}
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Set("1", user)
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
||||
func BenchmarkDelete(b *testing.B) {
|
||||
users, err := ocean.New[User]("test")
|
||||
assert.Nil(b, err)
|
||||
defer users.Clear()
|
||||
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
for pb.Next() {
|
||||
users.Delete("1")
|
||||
}
|
||||
})
|
||||
|
||||
b.StopTimer()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user