mirror of
https://github.com/gonum/gonum.git
synced 2025-10-05 15:16:59 +08:00
47 lines
924 B
Go
47 lines
924 B
Go
// Copyright ©2020 The Gonum Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package uid implements unique ID provision for graphs.
|
|
package uid
|
|
|
|
import (
|
|
"math"
|
|
"math/rand/v2"
|
|
"testing"
|
|
)
|
|
|
|
func TestSetChurn(t *testing.T) {
|
|
rnd := rand.New(rand.NewPCG(1, 1))
|
|
|
|
set := NewSet()
|
|
|
|
// Iterate over a number of ID allocations,
|
|
// occasionally deleting IDs from the store.
|
|
seen := make(map[int64]bool)
|
|
for k := 0; k < 2; k++ {
|
|
for i := 0; i < 1e4; i++ {
|
|
id := set.NewID()
|
|
if seen[id] {
|
|
t.Fatalf("NewID returned already used ID")
|
|
}
|
|
set.Use(id)
|
|
seen[id] = true
|
|
if rnd.Float64() < 0.01 {
|
|
j := rnd.IntN(10)
|
|
for id := range seen {
|
|
set.Release(id)
|
|
delete(seen, id)
|
|
j--
|
|
if j <= 0 {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Kick the set into scavenging mode.
|
|
set.Use(math.MaxInt64)
|
|
}
|
|
}
|