mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-16 00:52:10 +00:00
feat: derive authoritative ranked tiers
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
package domain
|
||||
|
||||
import "testing"
|
||||
|
||||
func testTierPolicy(t *testing.T) TierPolicy {
|
||||
t.Helper()
|
||||
policy, err := NewTierPolicy([]TierBand{
|
||||
{Tier: RankTierBronze, MinRating: 0},
|
||||
{Tier: RankTierSilver, MinRating: 1200},
|
||||
{Tier: RankTierGold, MinRating: 1500},
|
||||
{Tier: RankTierPlatinum, MinRating: 1800},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return policy
|
||||
}
|
||||
|
||||
func TestRankedTierUsesAuthoritativeBandsAndExactBoundaries(t *testing.T) {
|
||||
policy := testTierPolicy(t)
|
||||
for _, test := range []struct {
|
||||
rating float64
|
||||
games int
|
||||
want RankTier
|
||||
}{
|
||||
{rating: 2000, games: 0, want: RankTierProvisional},
|
||||
{rating: 1199.99, games: 10, want: RankTierBronze},
|
||||
{rating: 1200, games: 10, want: RankTierSilver},
|
||||
{rating: 1499.99, games: 10, want: RankTierSilver},
|
||||
{rating: 1500, games: 10, want: RankTierGold},
|
||||
{rating: 1800, games: 10, want: RankTierPlatinum},
|
||||
} {
|
||||
got, err := RankedTier(RankedProfile{Rating: Rating{Value: test.rating}, RankedGames: test.games}, policy)
|
||||
if err != nil || got != test.want {
|
||||
t.Errorf("rating %.2f games %d = %s, err=%v; want %s", test.rating, test.games, got, err, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTierPolicyRejectsUnorderedOrUnboundedConfiguration(t *testing.T) {
|
||||
for _, bands := range [][]TierBand{
|
||||
{},
|
||||
{{Tier: RankTierBronze, MinRating: 1}},
|
||||
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTierSilver, MinRating: 0}},
|
||||
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTierSilver, MinRating: -1}},
|
||||
{{Tier: RankTierBronze, MinRating: 0}, {Tier: RankTier(""), MinRating: 1200}},
|
||||
} {
|
||||
if _, err := NewTierPolicy(bands); err == nil {
|
||||
t.Errorf("invalid tier policy accepted: %+v", bands)
|
||||
}
|
||||
}
|
||||
policy := testTierPolicy(t)
|
||||
if _, err := RankedTier(RankedProfile{Rating: Rating{Value: 1500}, RankedGames: -1}, policy); err == nil {
|
||||
t.Fatal("negative ranked games accepted")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user