icu_ratings 1.5.2 → 1.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/icu_ratings/player.rb +5 -2
- data/lib/icu_ratings/version.rb +1 -1
- data/spec/tournament_spec.rb +190 -1
- metadata +4 -4
data/lib/icu_ratings/player.rb
CHANGED
@@ -262,16 +262,19 @@ module ICU
|
|
262
262
|
def calculate_bonus
|
263
263
|
return if @kfactor <= 24 || @results.size <= 4 || @rating >= 2100
|
264
264
|
change = rating_change
|
265
|
+
# Remember the key inputs to the calculation
|
265
266
|
@pb_rating = (@rating + change).round
|
266
267
|
@pb_performance = @performance.round
|
268
|
+
# Calculate the bonus.
|
267
269
|
return if change <= 35 || @rating + change >= 2100
|
268
270
|
threshold = 32 + 3 * (@results.size - 4)
|
269
271
|
bonus = (change - threshold).round
|
270
272
|
return if bonus <= 0
|
271
273
|
bonus = (1.25 * bonus).round if kfactor >= 40
|
272
|
-
|
274
|
+
# Determine if it should be capped or not.
|
275
|
+
[2100, @performance].each { |max| bonus = (max - @rating - change).round if @rating + change + bonus >= max }
|
273
276
|
return if bonus <= 0
|
274
|
-
|
277
|
+
# Store the value.
|
275
278
|
@bonus_rating = @rating + change + bonus
|
276
279
|
@bonus = bonus
|
277
280
|
end
|
data/lib/icu_ratings/version.rb
CHANGED
data/spec/tournament_spec.rb
CHANGED
@@ -744,7 +744,7 @@ module ICU
|
|
744
744
|
end
|
745
745
|
end
|
746
746
|
end
|
747
|
-
|
747
|
+
|
748
748
|
it "players eligible for a bonus should have pre-bonus data" do
|
749
749
|
p = @t.player(1)
|
750
750
|
p.pb_rating.should be_kind_of Fixnum
|
@@ -2256,5 +2256,194 @@ module ICU
|
|
2256
2256
|
@t.iterations2.should be > 1
|
2257
2257
|
end
|
2258
2258
|
end
|
2259
|
+
|
2260
|
+
context "#rate - Kieran O'Riordan in the Mulcahy Cup 2012" do
|
2261
|
+
before(:each) do
|
2262
|
+
@t = ICU::RatedTournament.new(desc: "Mulcahy Cup 2012")
|
2263
|
+
|
2264
|
+
# Add the players of most interest (Kieran and his opponents).
|
2265
|
+
@p = @t.add_player(3976, desc: "Kieran O'Riordan", rating: 1883, kfactor: 40)
|
2266
|
+
@o1 = @t.add_player(3966, desc: "Jonathan Kiely", rating: 1113, kfactor: 24)
|
2267
|
+
@o2 = @t.add_player(3973, desc: "Donal O'Hallahan", rating: 1465, kfactor: 24)
|
2268
|
+
@o3 = @t.add_player(3952, desc: "Arnaud, Aoustin", rating: 1984, kfactor: 32)
|
2269
|
+
@o4 = @t.add_player(3968, desc: "Ronan Magee", rating: 1957, kfactor: 40)
|
2270
|
+
@o5 = @t.add_player(3961, desc: "Barry Foran", rating: 1417, kfactor: 24)
|
2271
|
+
@o6 = @t.add_player(3958, desc: "Henk De Jonge", rating: 1977, kfactor: 32)
|
2272
|
+
|
2273
|
+
# Add all the other players.
|
2274
|
+
@t.add_player(3953, desc: "Joe Browne", rating: 900, kfactor: 24)
|
2275
|
+
@t.add_player(3954, desc: "Daniel Cashin", rating: 1393, kfactor: 40)
|
2276
|
+
@t.add_player(3955, desc: "Anne B Coughlan", rating: 1224, kfactor: 24)
|
2277
|
+
@t.add_player(3956, desc: "Maurice J Coveney", rating: 1270, kfactor: 24)
|
2278
|
+
@t.add_player(3957, desc: "Tony Dalton", rating: 1068, kfactor: 24)
|
2279
|
+
@t.add_player(3959, desc: "Desmond Doran", rating: 737, kfactor: 40)
|
2280
|
+
@t.add_player(3960, desc: "Peter Doyle", rating: 1010, kfactor: 32)
|
2281
|
+
@t.add_player(3962, desc: "Jonathan Grimmer")
|
2282
|
+
@t.add_player(3963, desc: "Len Hackett", rating: 1569, kfactor: 24)
|
2283
|
+
@t.add_player(3964, desc: "Jim Harkin", rating: 1366, kfactor: 32)
|
2284
|
+
@t.add_player(3965, desc: "Tom Healy", rating: 1852, kfactor: 24)
|
2285
|
+
@t.add_player(3967, desc: "Paul C Kiely", rating: 1815, kfactor: 24)
|
2286
|
+
@t.add_player(3969, desc: "Adrian McAuliffe", rating: 1171, games: 19)
|
2287
|
+
@t.add_player(3970, desc: "D. Gerry McCarthy", rating: 1754, kfactor: 24)
|
2288
|
+
@t.add_player(3971, desc: "Tom McGrath", rating: 982, kfactor: 40)
|
2289
|
+
@t.add_player(3972, desc: "Niki Mullins", rating: 1443, kfactor: 24)
|
2290
|
+
@t.add_player(3974, desc: "Mark O'Hallahan", rating: 1115, kfactor: 40)
|
2291
|
+
@t.add_player(3975, desc: "David O'Kelly", rating: 1487, kfactor: 24)
|
2292
|
+
@t.add_player(3977, desc: "Pat O'Riordan", rating: 875, kfactor: 32)
|
2293
|
+
@t.add_player(3978, desc: "Marco Piazza", rating: 1511, games: 6)
|
2294
|
+
@t.add_player(3979, desc: "Krzysztof Przestrzelski", rating: 942, kfactor: 40)
|
2295
|
+
@t.add_player(3980, desc: "Oliver Roberts", rating: 743, kfactor: 40)
|
2296
|
+
@t.add_player(3981, desc: "Stephen Short", rating: 1891, kfactor: 24)
|
2297
|
+
@t.add_player(3982, desc: "Bernd Thee", rating: 1760, kfactor: 24)
|
2298
|
+
@t.add_player(3983, desc: "Pat Twomey", rating: 1728, kfactor: 24)
|
2299
|
+
|
2300
|
+
# Kieran's results.
|
2301
|
+
@t.add_result(1, 3976, 3966, "W")
|
2302
|
+
@t.add_result(2, 3976, 3973, "W")
|
2303
|
+
@t.add_result(3, 3976, 3952, "D")
|
2304
|
+
@t.add_result(4, 3976, 3968, "W")
|
2305
|
+
@t.add_result(5, 3976, 3961, "W")
|
2306
|
+
@t.add_result(6, 3976, 3958, "D")
|
2307
|
+
|
2308
|
+
# Other results.
|
2309
|
+
@t.add_result(1, 3979, 3970, "L")
|
2310
|
+
@t.add_result(1, 3972, 3952, "L")
|
2311
|
+
@t.add_result(1, 3980, 3975, "L")
|
2312
|
+
@t.add_result(1, 3983, 3971, "D")
|
2313
|
+
@t.add_result(1, 3968, 3964, "W")
|
2314
|
+
@t.add_result(1, 3973, 3959, "W")
|
2315
|
+
@t.add_result(1, 3961, 3958, "L")
|
2316
|
+
@t.add_result(1, 3962, 3956, "W")
|
2317
|
+
@t.add_result(1, 3969, 3967, "L")
|
2318
|
+
@t.add_result(1, 3981, 3955, "W")
|
2319
|
+
@t.add_result(1, 3963, 3953, "W")
|
2320
|
+
@t.add_result(1, 3974, 3965, "W")
|
2321
|
+
@t.add_result(1, 3978, 3977, "W")
|
2322
|
+
@t.add_result(1, 3982, 3957, "W")
|
2323
|
+
@t.add_result(2, 3979, 3954, "L")
|
2324
|
+
@t.add_result(2, 3957, 3956, "L")
|
2325
|
+
@t.add_result(2, 3967, 3960, "W")
|
2326
|
+
@t.add_result(2, 3972, 3966, "W")
|
2327
|
+
@t.add_result(2, 3980, 3955, "L")
|
2328
|
+
@t.add_result(2, 3983, 3974, "W")
|
2329
|
+
@t.add_result(2, 3968, 3963, "W")
|
2330
|
+
@t.add_result(2, 3969, 3961, "L")
|
2331
|
+
@t.add_result(2, 3981, 3975, "D")
|
2332
|
+
@t.add_result(2, 3964, 3953, "W")
|
2333
|
+
@t.add_result(2, 3970, 3952, "L")
|
2334
|
+
@t.add_result(2, 3978, 3962, "W")
|
2335
|
+
@t.add_result(2, 3971, 3965, "L")
|
2336
|
+
@t.add_result(2, 3982, 3958, "L")
|
2337
|
+
@t.add_result(3, 3971, 3956, "D")
|
2338
|
+
@t.add_result(3, 3982, 3964, "W")
|
2339
|
+
@t.add_result(3, 3979, 3966, "L")
|
2340
|
+
@t.add_result(3, 3972, 3959, "W")
|
2341
|
+
@t.add_result(3, 3980, 3957, "W")
|
2342
|
+
@t.add_result(3, 3983, 3975, "D")
|
2343
|
+
@t.add_result(3, 3968, 3967, "D")
|
2344
|
+
@t.add_result(3, 3973, 3955, "W")
|
2345
|
+
@t.add_result(3, 3977, 3963, "L")
|
2346
|
+
@t.add_result(3, 3969, 3953, "W")
|
2347
|
+
@t.add_result(3, 3981, 3962, "D")
|
2348
|
+
@t.add_result(3, 3974, 3961, "L")
|
2349
|
+
@t.add_result(3, 3970, 3960, "W")
|
2350
|
+
@t.add_result(3, 3965, 3954, "W")
|
2351
|
+
@t.add_result(3, 3978, 3958, "L")
|
2352
|
+
@t.add_result(4, 3956, 3954, "L")
|
2353
|
+
@t.add_result(4, 3966, 3962, "L")
|
2354
|
+
@t.add_result(4, 3971, 3969, "W")
|
2355
|
+
@t.add_result(4, 3982, 3975, "D")
|
2356
|
+
@t.add_result(4, 3957, 3953, "L")
|
2357
|
+
@t.add_result(4, 3958, 3952, "L")
|
2358
|
+
@t.add_result(4, 3980, 3979, "W")
|
2359
|
+
@t.add_result(4, 3983, 3972, "W")
|
2360
|
+
@t.add_result(4, 3973, 3970, "D")
|
2361
|
+
@t.add_result(4, 3977, 3955, "D")
|
2362
|
+
@t.add_result(4, 3963, 3961, "L")
|
2363
|
+
@t.add_result(4, 3981, 3967, "L")
|
2364
|
+
@t.add_result(4, 3964, 3960, "W")
|
2365
|
+
@t.add_result(4, 3974, 3959, "W")
|
2366
|
+
@t.add_result(4, 3978, 3965, "W")
|
2367
|
+
@t.add_result(5, 3975, 3970, "L")
|
2368
|
+
@t.add_result(5, 3956, 3955, "L")
|
2369
|
+
@t.add_result(5, 3966, 3953, "W")
|
2370
|
+
@t.add_result(5, 3982, 3978, "W")
|
2371
|
+
@t.add_result(5, 3967, 3952, "L")
|
2372
|
+
@t.add_result(5, 3960, 3959, "W")
|
2373
|
+
@t.add_result(5, 3983, 3958, "L")
|
2374
|
+
@t.add_result(5, 3973, 3962, "L")
|
2375
|
+
@t.add_result(5, 3977, 3969, "L")
|
2376
|
+
@t.add_result(5, 3981, 3954, "W")
|
2377
|
+
@t.add_result(5, 3974, 3963, "L")
|
2378
|
+
@t.add_result(5, 3965, 3964, "W")
|
2379
|
+
@t.add_result(6, 3975, 3955, "W")
|
2380
|
+
@t.add_result(6, 3966, 3960, "D")
|
2381
|
+
@t.add_result(6, 3971, 3963, "L")
|
2382
|
+
@t.add_result(6, 3979, 3953, "L")
|
2383
|
+
@t.add_result(6, 3982, 3967, "D")
|
2384
|
+
@t.add_result(6, 3959, 3957, "L")
|
2385
|
+
@t.add_result(6, 3962, 3952, "D")
|
2386
|
+
@t.add_result(6, 3983, 3961, "W")
|
2387
|
+
@t.add_result(6, 3973, 3972, "W")
|
2388
|
+
@t.add_result(6, 3969, 3964, "L")
|
2389
|
+
@t.add_result(6, 3977, 3956, "L")
|
2390
|
+
@t.add_result(6, 3981, 3978, "W")
|
2391
|
+
@t.add_result(6, 3970, 3965, "L")
|
2392
|
+
@t.add_result(6, 3974, 3954, "L")
|
2393
|
+
end
|
2394
|
+
|
2395
|
+
it "should be setup properly" do
|
2396
|
+
@p.desc.should == "Kieran O'Riordan"
|
2397
|
+
@o1.desc.should == "Jonathan Kiely"
|
2398
|
+
@o2.desc.should == "Donal O'Hallahan"
|
2399
|
+
@o3.desc.should == "Arnaud, Aoustin"
|
2400
|
+
@o4.desc.should == "Ronan Magee"
|
2401
|
+
@o5.desc.should == "Barry Foran"
|
2402
|
+
@o6.desc.should == "Henk De Jonge"
|
2403
|
+
|
2404
|
+
@p.type.should == :rated
|
2405
|
+
@o1.type.should == :rated
|
2406
|
+
@o2.type.should == :rated
|
2407
|
+
@o3.type.should == :rated
|
2408
|
+
@o4.type.should == :rated
|
2409
|
+
@o5.type.should == :rated
|
2410
|
+
@o6.type.should == :rated
|
2411
|
+
|
2412
|
+
@p.rating.should == 1883
|
2413
|
+
@o1.rating.should == 1113
|
2414
|
+
@o2.rating.should == 1465
|
2415
|
+
@o3.rating.should == 1984
|
2416
|
+
@o4.rating.should == 1957
|
2417
|
+
@o5.rating.should == 1417
|
2418
|
+
@o6.rating.should == 1977
|
2419
|
+
|
2420
|
+
@t.iterations1.should be_nil
|
2421
|
+
@t.iterations2.should be_nil
|
2422
|
+
end
|
2423
|
+
|
2424
|
+
it "player should not get a bonus because his pre-bonus performance is lower than his post-bonus rating" do
|
2425
|
+
@t.rate!(version: 2)
|
2426
|
+
|
2427
|
+
@p.new_rating.should be_within(0.5).of(1924)
|
2428
|
+
|
2429
|
+
@p.bonus.should == 0
|
2430
|
+
@o1.bonus.should == 0
|
2431
|
+
@o2.bonus.should == 0
|
2432
|
+
@o3.bonus.should == 0
|
2433
|
+
@o4.bonus.should == 0
|
2434
|
+
@o5.bonus.should == 0
|
2435
|
+
@o6.bonus.should == 0
|
2436
|
+
|
2437
|
+
threshold = @p.rating + 32 + 3 * (@p.results.size - 4)
|
2438
|
+
|
2439
|
+
# He would have got a bonus ...
|
2440
|
+
pre_cap_bonus = ((@p.pb_rating - threshold).round * 1.25).round
|
2441
|
+
pre_cap_bonus.should be > 0
|
2442
|
+
|
2443
|
+
# ... if it wasn't for his low performance.
|
2444
|
+
post_cap_bonus = @p.pb_performance - @p.pb_rating
|
2445
|
+
post_cap_bonus.should be < 0
|
2446
|
+
end
|
2447
|
+
end
|
2259
2448
|
end
|
2260
2449
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: icu_ratings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -111,7 +111,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
segments:
|
113
113
|
- 0
|
114
|
-
hash:
|
114
|
+
hash: -2799968708998636265
|
115
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
120
|
version: '0'
|
121
121
|
segments:
|
122
122
|
- 0
|
123
|
-
hash:
|
123
|
+
hash: -2799968708998636265
|
124
124
|
requirements: []
|
125
125
|
rubyforge_project: icu_ratings
|
126
126
|
rubygems_version: 1.8.23
|