80 lines
2.7 KiB
Dart
80 lines
2.7 KiB
Dart
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
import 'package:lanebow/models/public_participant.dart';
|
|
import 'package:lanebow/models/public_team.dart';
|
|
import 'package:lanebow/utils/ranking_utils_public.dart';
|
|
|
|
void main() {
|
|
group('PublicRankingUtils', () {
|
|
test('caps score with handicap at 300 per game and ties rank', () {
|
|
final p1 = PublicParticipant.fromJson({
|
|
'participantId': '1',
|
|
'name': 'A',
|
|
'scores': [250, 280],
|
|
'handicap': 0,
|
|
}, gameCount: 2);
|
|
final p2 = PublicParticipant.fromJson({
|
|
'participantId': '2',
|
|
'name': 'B',
|
|
'scores': [295, 290],
|
|
'handicap': 20, // 각 게임 합이 300 넘는 케이스 -> 캡
|
|
}, gameCount: 2);
|
|
|
|
final ranks = PublicRankingUtils.individualRanking([p1, p2]);
|
|
// p1 totals: 250 + 280 = 530
|
|
// p2 totals with cap: min(295+20,300)=300 + min(290+20,300)=300 => 600
|
|
expect(ranks[0]['p'].participantId, '2');
|
|
expect(ranks[0]['total'], 600);
|
|
expect(ranks[0]['rank'], 1);
|
|
expect(ranks[1]['p'].participantId, '1');
|
|
expect(ranks[1]['total'], 530);
|
|
expect(ranks[1]['rank'], 2);
|
|
});
|
|
|
|
test('tie produces 1,1,3 ranks', () {
|
|
final p1 = PublicParticipant.fromJson({
|
|
'participantId': '1', 'name': 'A', 'scores': [200], 'handicap': 0
|
|
}, gameCount: 1);
|
|
final p2 = PublicParticipant.fromJson({
|
|
'participantId': '2', 'name': 'B', 'scores': [200], 'handicap': 0
|
|
}, gameCount: 1);
|
|
final p3 = PublicParticipant.fromJson({
|
|
'participantId': '3', 'name': 'C', 'scores': [150], 'handicap': 0
|
|
}, gameCount: 1);
|
|
final ranks = PublicRankingUtils.individualRanking([p1, p2, p3]);
|
|
expect(ranks[0]['total'], 200);
|
|
expect(ranks[1]['total'], 200);
|
|
expect(ranks[2]['total'], 150);
|
|
expect(ranks[0]['rank'], 1);
|
|
expect(ranks[1]['rank'], 1);
|
|
expect(ranks[2]['rank'], 3);
|
|
});
|
|
|
|
test('team ranking sums member totals and team handicap', () {
|
|
final team = PublicTeam.fromJson({
|
|
'teamId': 'T1',
|
|
'teamNumber': 1,
|
|
'handicap': 5,
|
|
'members': [
|
|
{
|
|
'participantId': '1',
|
|
'name': 'A',
|
|
'scores': [200, {'score': 150, 'handicap': 10}],
|
|
},
|
|
{
|
|
'participantId': '2',
|
|
'name': 'B',
|
|
'scores': [100, 120],
|
|
},
|
|
]
|
|
}, gameCount: 2);
|
|
final ranked = PublicRankingUtils.teamRanking([team]);
|
|
// member1: 200 + min(150+10,300)=160 => 360
|
|
// member2: 100 + 120 = 220
|
|
// team total = 360 + 220 + teamHandicap(5) = 585
|
|
expect(ranked[0]['total'], 585);
|
|
expect(ranked[0]['rank'], 1);
|
|
});
|
|
});
|
|
}
|