/
githubmirror
/
photoprism
Обзор
Документация
Войти
/
githubmirror
/
photoprism
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
pkg/list/ordered/sync_test.go
105 строк
2 KB
Michael Mayer
Go: Apply go fix modernizations across backend packages
20 фев 2026, 05:54
20 фев 2026, 05:54
a2b7615
Код
Авторство
О чём код?
package ordered import ( "fmt" "math/rand" //nolint:gosec // pseudo-random is sufficient for concurrency tests "sync" "testing" ) func TestRaceCondition(t *testing.T) { m := NewSyncMap[int, int]() wg := &sync.WaitGroup{} //nolint:gosec // pseudo-random is sufficient for race testing randInt := func() int { return rand.Intn(100) } var asyncGet = func() { wg.Add(1) go func() { key := randInt() m.Get(key) wg.Done() }() } var asyncSet = func() { wg.Add(1) go func() { key := randInt() value := randInt() m.Set(key, value) wg.Done() }() } var asyncDelete = func() { wg.Add(1) go func() { key := randInt() m.Delete(key) wg.Done() }() } var asyncHas = func() { wg.Add(1) go func() { key := randInt() m.Has(key) wg.Done() }() } var asyncReplaceKEy = func() { wg.Add(1) go func() { key := randInt() newKey := randInt() m.ReplaceKey(key, newKey) wg.Done() }() } var asyncGetOrDefault = func() { wg.Add(1) go func() { key := randInt() def := randInt() m.GetOrDefault(key, def) wg.Done() }() } var asyncLen = func() { wg.Add(1) go func() { m.Len() wg.Done() }() } var asyncCopy = func() { wg.Add(1) go func() { m.Copy() wg.Done() }() } for range 10000 { asyncSet() asyncGet() asyncDelete() asyncHas() asyncLen() asyncReplaceKEy() asyncGetOrDefault() asyncCopy() } wg.Wait() fmt.Println("TestRaceCondition completed") fmt.Printf("SyncMap eventually has %v elements\n", m.Len()) }