MCPcopy Create free account
hub / github.com/cockroachdb/swiss / TestRandom

Function TestRandom

map_test.go:287–346  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

285}
286
287func TestRandom(t *testing.T) {
288 test := func(t *testing.T, m *Map[int, int]) {
289 e := make(map[int]int)
290 for i := 0; i < 10000; i++ {
291 switch r := rand.Float64(); {
292 case r < 0.5: // 50% inserts
293 k, v := rand.Int(), rand.Int()
294 m.Put(k, v)
295 e[k] = v
296 case r < 0.65: // 15% updates
297 if k, _, ok := m.randElement(); !ok {
298 require.EqualValues(t, 0, m.Len(), e)
299 } else {
300 v := rand.Int()
301 m.Put(k, v)
302 e[k] = v
303 }
304 case r < 0.80: // 15% deletes
305 if k, _, ok := m.randElement(); !ok {
306 require.EqualValues(t, 0, m.Len(), e)
307 } else {
308 m.Delete(k)
309 delete(e, k)
310 }
311 case r < 0.95: // 25% lookups
312 if k, v, ok := m.randElement(); !ok {
313 require.EqualValues(t, 0, m.Len(), e)
314 } else {
315 require.EqualValues(t, e[k], v)
316 }
317 default: // 5% rehash in place and iterate
318 i := rand.Intn(int(m.bucketCount()))
319 m.dir.At(uintptr(i)).rehashInPlace(m)
320 require.Equal(t, e, m.toBuiltinMap())
321 }
322 require.EqualValues(t, len(e), m.Len())
323 }
324 }
325
326 t.Run("normal", func(t *testing.T) {
327 test(t, New[int, int](0))
328 })
329
330 t.Run("degenerate", func(t *testing.T) {
331 testDegenerate := func(t *testing.T, h uintptr) {
332 m := New[int, int](0,
333 WithHash[int, int](func(key *int, seed uintptr) uintptr {
334 return h
335 }),
336 WithMaxBucketCapacity[int, int](512))
337 test(t, m)
338 }
339
340 for _, v := range []uintptr{0, ^uintptr(0)} {
341 t.Run(fmt.Sprintf("%016x", v), func(t *testing.T) {
342 testDegenerate(t, v)
343 })
344 }

Callers

nothing calls this directly

Calls 9

NewFunction · 0.85
PutMethod · 0.80
randElementMethod · 0.80
LenMethod · 0.80
DeleteMethod · 0.80
bucketCountMethod · 0.80
rehashInPlaceMethod · 0.80
toBuiltinMapMethod · 0.80
AtMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…