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  }