go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/experiments/matchmaker/pkg/sim/clustered_mm_test.go (about) 1 /* 2 3 Copyright (c) 2024 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package sim 9 10 import ( 11 "math/rand" 12 "testing" 13 14 "go.charczuk.com/sdk/assert" 15 ) 16 17 func Test_ClusteredMatchmaker_basic(t *testing.T) { 18 rs := rand.NewSource(1234) 19 r := rand.New(rs) 20 cmm := new(ClusteredMatchmaker) 21 cmm.Init(r) 22 23 for _, tier := range rankTiers { 24 for x := 0; x < 13; x++ { 25 rating := int(randomNormal(r, float64(tier.MeanRating), 50)) 26 cmm.Queue(mockPlayerWithRating(rating)) 27 } 28 } 29 originalTotalPlayers := cmm.QueueLen() 30 games := cmm.FormGames(MatchmakerConfig{ 31 TeamSize: 6, 32 MaxGames: 5, 33 }) 34 assert.ItsEqual(t, 5, len(games)) 35 assert.ItsEqual(t, originalTotalPlayers, cmm.QueueLen()+len(gamePlayers(games))) 36 37 allGamePlayers := make(PlayerLookup) 38 for _, game := range games { 39 assert.ItsLen(t, game.TeamA, 6) 40 assert.ItsLen(t, game.TeamB, 6) 41 42 alookup := NewLookup(game.TeamA) 43 blookup := NewLookup(game.TeamB) 44 45 for _, p := range game.TeamA { 46 assert.ItsFalse(t, blookup.Has(p)) 47 assert.ItsFalse(t, allGamePlayers.Has(p)) 48 allGamePlayers.Add(p) 49 } 50 for _, p := range game.TeamB { 51 assert.ItsFalse(t, alookup.Has(p)) 52 assert.ItsFalse(t, allGamePlayers.Has(p)) 53 allGamePlayers.Add(p) 54 } 55 } 56 }