源码索引 / CURRENT IMPLEMENTATION
learning/go-patterns/patterns/shared-map/shared_map_test.go
57 行 · 点击行号可定位;函数链接随声明位置更新,不手填行号。
跳到函数 / 声明
package sharedmap
import (
"fmt"
"reflect"
"sync"
"testing"
)
func TestStoreSetGetAndSnapshot(t *testing.T) {
store := NewStore()
store.Set("ready", 1)
if got, ok := store.Get("ready"); !ok || got != 1 {
t.Fatalf("Get() = (%d, %t), want (1, true)", got, ok)
}
if _, ok := store.Get("missing"); ok {
t.Fatal("Get() found a missing key")
}
snapshot := store.Snapshot()
snapshot["ready"] = 99
if got, _ := store.Get("ready"); got != 1 {
t.Fatalf("Get() after snapshot mutation = %d, want 1", got)
}
}
func TestStoreSupportsConcurrentIndependentWriters(t *testing.T) {
var store Store
const writers = 8
const writesPerKey = 100
var wg sync.WaitGroup
for i := 0; i < writers; i++ {
i := i
wg.Add(1)
go func() {
defer wg.Done()
key := fmt.Sprintf("worker-%d", i)
for value := 0; value < writesPerKey; value++ {
store.Set(key, value)
}
}()
}
wg.Wait()
if got, want := store.Len(), writers; got != want {
t.Fatalf("Len() = %d, want %d", got, want)
}
want := make(map[string]int, writers)
for i := 0; i < writers; i++ {
want[fmt.Sprintf("worker-%d", i)] = writesPerKey - 1
}
if got := store.Snapshot(); !reflect.DeepEqual(got, want) {
t.Fatalf("Snapshot() = %#v, want %#v", got, want)
}
}