@@ -189,18 +189,66 @@ describe("TiebreakCalculation", () => {
189
189
} )
190
190
191
191
/*
192
- TODO: Test more modifiers with old FIDE unplayed rounds adjustments
193
- - Cut-1
194
- - Median-1
195
- - Cut-2
196
- - Very high cut numbers
192
+ TODO: Test more modifiers with old FIDE unplayed rounds adjustments
193
+ - Cut-1
194
+ - Median-1
195
+ - Cut-2
196
+ - Very high cut numbers
197
197
198
- describe("with modifiers", () => {
198
+ describe("with modifiers", () => {
199
199
200
-
200
+ })
201
+ */
202
+ } )
203
+
204
+ describe ( "sonnebornBerger" , ( ) => {
205
+ describe ( "with FIDE_2023 unplayed rounds adjustment" , ( ) => {
206
+ it ( "should pass FIDE exercise 11 (2023)" , async ( ) => {
207
+ const rounds = await readTestCases ( "fide-exercise-2023" )
208
+ const tiebreak = new Tiebreaker ( rounds , UnplayedRoundsAdjustment . FIDE_2023 )
209
+ expect ( tiebreak . sonnebornBerger ( "1" , 5 ) ) . toEqual ( 8 )
210
+ expect ( tiebreak . sonnebornBerger ( "3" , 5 ) ) . toEqual ( 10.5 )
211
+ expect ( tiebreak . sonnebornBerger ( "16" , 5 ) ) . toEqual ( 7.25 )
212
+ expect ( tiebreak . sonnebornBerger ( "4" , 5 ) ) . toEqual ( 9.75 )
213
+ } )
201
214
215
+ it ( "should pass FIDE exercise 12 (2023)" , async ( ) => {
216
+ const rounds = await readTestCases ( "fide-exercise-2023" )
217
+ const tiebreak = new Tiebreaker ( rounds , UnplayedRoundsAdjustment . FIDE_2023 )
218
+ expect ( tiebreak . adjustedScore ( "2" , 5 ) ) . toEqual ( 4 )
219
+ expect ( tiebreak . sonnebornBerger ( "2" , 5 ) ) . toEqual ( 9.5 )
220
+ expect ( tiebreak . adjustedScore ( "3" , 5 ) ) . toEqual ( 3.5 )
221
+ expect ( tiebreak . sonnebornBerger ( "3" , 5 ) ) . toEqual ( 10.5 )
222
+ expect ( tiebreak . adjustedScore ( "4" , 5 ) ) . toEqual ( 3.5 )
223
+ expect ( tiebreak . sonnebornBerger ( "4" , 5 ) ) . toEqual ( 9.75 )
224
+ expect ( tiebreak . adjustedScore ( "1" , 5 ) ) . toEqual ( 3.5 )
225
+ expect ( tiebreak . sonnebornBerger ( "1" , 5 ) ) . toEqual ( 8 )
226
+ expect ( tiebreak . adjustedScore ( "16" , 5 ) ) . toEqual ( 3.5 )
227
+ expect ( tiebreak . sonnebornBerger ( "16" , 5 ) ) . toEqual ( 7.25 )
228
+ expect ( tiebreak . adjustedScore ( "6" , 5 ) ) . toEqual ( 3 )
229
+ expect ( tiebreak . sonnebornBerger ( "6" , 5 ) ) . toEqual ( 6.5 )
230
+ expect ( tiebreak . adjustedScore ( "11" , 5 ) ) . toEqual ( 2.5 )
231
+ expect ( tiebreak . sonnebornBerger ( "11" , 5 ) ) . toEqual ( 5.75 )
232
+ expect ( tiebreak . adjustedScore ( "8" , 5 ) ) . toEqual ( 2.5 )
233
+ expect ( tiebreak . sonnebornBerger ( "8" , 5 ) ) . toEqual ( 5.25 )
234
+ expect ( tiebreak . adjustedScore ( "5" , 5 ) ) . toEqual ( 2.5 )
235
+ expect ( tiebreak . sonnebornBerger ( "5" , 5 ) ) . toEqual ( 4.25 )
236
+ expect ( tiebreak . adjustedScore ( "14" , 5 ) ) . toEqual ( 2 )
237
+ expect ( tiebreak . sonnebornBerger ( "14" , 5 ) ) . toEqual ( 4.5 )
238
+ expect ( tiebreak . adjustedScore ( "12" , 5 ) ) . toEqual ( 3.0 )
239
+ expect ( tiebreak . sonnebornBerger ( "12" , 5 ) ) . toEqual ( 4.0 )
240
+ expect ( tiebreak . adjustedScore ( "15" , 5 ) ) . toEqual ( 2 )
241
+ expect ( tiebreak . sonnebornBerger ( "15" , 5 ) ) . toEqual ( 3.5 )
242
+ expect ( tiebreak . adjustedScore ( "13" , 5 ) ) . toEqual ( 1.5 )
243
+ expect ( tiebreak . sonnebornBerger ( "13" , 5 ) ) . toEqual ( 4.25 )
244
+ expect ( tiebreak . adjustedScore ( "7" , 5 ) ) . toEqual ( 1.5 )
245
+ expect ( tiebreak . sonnebornBerger ( "7" , 5 ) ) . toEqual ( 3.25 )
246
+ expect ( tiebreak . adjustedScore ( "10" , 5 ) ) . toEqual ( 1.0 )
247
+ expect ( tiebreak . sonnebornBerger ( "10" , 5 ) ) . toEqual ( 1.5 )
248
+ } )
202
249
} )
203
- */
250
+
251
+ // TODO: Test with FIDE_2009 and NONE unplayed rounds adjustments.
204
252
} )
205
253
206
254
describe ( "ranking" , ( ) => {
@@ -221,12 +269,17 @@ describe("TiebreakCalculation", () => {
221
269
] )
222
270
const tiebreak = new Tiebreaker ( results , UnplayedRoundsAdjustment . FIDE_2023 )
223
271
expect (
224
- tiebreak . ranking ( 2 , [ Tiebreak . SCORE , Tiebreak . BUCHHOLZ , Tiebreak . BUCHHOLZ_CUT1 ] ) ,
272
+ tiebreak . ranking ( 2 , [
273
+ Tiebreak . SCORE ,
274
+ Tiebreak . BUCHHOLZ ,
275
+ Tiebreak . BUCHHOLZ_CUT1 ,
276
+ Tiebreak . SONNEBORN_BERGER ,
277
+ ] ) ,
225
278
) . toEqual ( [
226
- { playerId : "B" , rank : 1 , scores : [ 2 , 2.5 , 2 ] } , // BH: 2 for unplayed + 0.5 for A
227
- { playerId : "C" , rank : 2 , scores : [ 1.5 , 2 , 1.5 ] } , // BH: 0.5 for A + 1.5 for bye
228
- { playerId : "A" , rank : 3 , scores : [ 0.5 , 3.5 , 2 ] } , // BH: 1.5 for C + 2 for B
229
- { playerId : "D" , rank : 4 , scores : [ 0 , 0 , 0 ] } , // BH: 2 * 0 for unplayed rounds
279
+ { playerId : "B" , rank : 1 , scores : [ 2 , 2.5 , 2 , 2.5 ] } , // BH: 2 for unplayed + 0.5 for A
280
+ { playerId : "C" , rank : 2 , scores : [ 1.5 , 2 , 1.5 , 1.75 ] } , // BH: 0.5 for A + 1.5 for bye
281
+ { playerId : "A" , rank : 3 , scores : [ 0.5 , 3.5 , 2 , 0.75 ] } , // BH: 1.5 for C + 2 for B
282
+ { playerId : "D" , rank : 4 , scores : [ 0 , 0 , 0 , 0 ] } , // BH: 2 * 0 for unplayed rounds
230
283
] )
231
284
} )
232
285
0 commit comments