Skip to content

Commit b471f16

Browse files
authored
Merge pull request #2 from myssto/predict-rank
Implement predict rank on `OpenSkillModelBase`
2 parents efac516 + 5cf3a7b commit b471f16

23 files changed

+870
-543
lines changed

.editorconfig

Lines changed: 90 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,39 @@ indent_size = 4
1111

1212
# ReSharper properties
1313
resharper_autodetect_indent_settings = true
14+
resharper_cpp_insert_final_newline = true
15+
resharper_csharp_wrap_after_declaration_lpar = true
16+
resharper_csharp_wrap_after_invocation_lpar = true
17+
resharper_csharp_wrap_arguments_style = chop_if_long
18+
resharper_csharp_wrap_before_declaration_rpar = true
19+
resharper_csharp_wrap_before_first_type_parameter_constraint = true
20+
resharper_csharp_wrap_before_invocation_rpar = true
21+
resharper_csharp_wrap_extends_list_style = chop_if_long
22+
resharper_csharp_wrap_parameters_style = chop_if_long
1423
resharper_formatter_off_tag = @formatter:off
1524
resharper_formatter_on_tag = @formatter:on
1625
resharper_formatter_tags_enabled = true
26+
resharper_keep_existing_declaration_parens_arrangement = false
27+
resharper_keep_existing_embedded_arrangement = false
28+
resharper_keep_existing_initializer_arrangement = false
29+
resharper_keep_existing_list_patterns_arrangement = false
30+
resharper_keep_existing_property_patterns_arrangement = false
31+
resharper_keep_existing_switch_expression_arrangement = false
32+
resharper_nested_ternary_style = expanded
33+
resharper_place_accessorholder_attribute_on_same_line = false
34+
resharper_place_accessor_attribute_on_same_line = false
35+
resharper_place_field_attribute_on_same_line = false
1736
resharper_show_autodetect_configure_formatting_tip = false
1837
resharper_use_indent_from_vs = false
38+
resharper_wrap_array_initializer_style = chop_if_long
39+
resharper_wrap_before_primary_constructor_declaration_lpar = true
40+
resharper_wrap_before_primary_constructor_declaration_rpar = true
41+
resharper_wrap_chained_binary_expressions = chop_if_long
42+
resharper_wrap_chained_binary_patterns = chop_if_long
43+
resharper_wrap_chained_method_calls = chop_if_long
44+
resharper_wrap_list_pattern = chop_if_long
45+
resharper_xmldoc_indent_child_elements = ZeroIndent
46+
resharper_xmldoc_indent_text = ZeroIndent
1947
resharper_xmldoc_space_before_self_closing = false
2048
resharper_xmldoc_wrap_around_elements = false
2149

@@ -44,6 +72,34 @@ resharper_web_config_module_not_resolved_highlighting = warning
4472
resharper_web_config_type_not_resolved_highlighting = warning
4573
resharper_web_config_wrong_module_highlighting = warning
4674

75+
# Microsoft .NET properties
76+
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
77+
csharp_style_prefer_utf8_string_literals = true:suggestion
78+
csharp_style_var_elsewhere = true:suggestion
79+
csharp_style_var_for_built_in_types = true:suggestion
80+
csharp_style_var_when_type_is_apparent = true:suggestion
81+
dotnet_naming_rule.unity_serialized_field_rule.import_to_resharper = True
82+
dotnet_naming_rule.unity_serialized_field_rule.resharper_description = Unity serialized field
83+
dotnet_naming_rule.unity_serialized_field_rule.resharper_guid = 5f0fdb63-c892-4d2c-9324-15c80b22a7ef
84+
dotnet_naming_rule.unity_serialized_field_rule.severity = warning
85+
dotnet_naming_rule.unity_serialized_field_rule.style = lower_camel_case_style
86+
dotnet_naming_rule.unity_serialized_field_rule.symbols = unity_serialized_field_symbols
87+
dotnet_naming_style.lower_camel_case_style.capitalization = camel_case
88+
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_accessibilities = *
89+
dotnet_naming_symbols.unity_serialized_field_symbols.applicable_kinds =
90+
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_applicable_kinds = unity_serialised_field
91+
dotnet_naming_symbols.unity_serialized_field_symbols.resharper_required_modifiers = instance
92+
dotnet_style_parentheses_in_arithmetic_binary_operators = never_if_unnecessary:none
93+
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
94+
dotnet_style_parentheses_in_relational_binary_operators = never_if_unnecessary:none
95+
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
96+
dotnet_style_predefined_type_for_member_access = true:suggestion
97+
dotnet_style_qualification_for_event = false:suggestion
98+
dotnet_style_qualification_for_field = false:suggestion
99+
dotnet_style_qualification_for_method = false:suggestion
100+
dotnet_style_qualification_for_property = false:suggestion
101+
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
102+
47103
#### Core EditorConfig Options ####
48104

49105
#### .NET Coding Conventions ####
@@ -132,7 +188,7 @@ csharp_style_conditional_delegate_call = true:suggestion
132188
# Modifier preferences
133189
csharp_prefer_static_anonymous_function = true:suggestion
134190
csharp_prefer_static_local_function = true:warning
135-
csharp_preferred_modifier_order = public,private,protected,internal,file,const,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async:suggestion
191+
csharp_preferred_modifier_order = public, private, protected, internal, file, const, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, required, volatile, async:suggestion
136192
csharp_style_prefer_readonly_struct = true:suggestion
137193
csharp_style_prefer_readonly_struct_member = true:suggestion
138194

@@ -293,63 +349,63 @@ dotnet_naming_rule.non_field_members_should_be_pascalcase.style = pascalcase
293349

294350
dotnet_naming_symbols.interfaces.applicable_kinds = interface
295351
dotnet_naming_symbols.interfaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
296-
dotnet_naming_symbols.interfaces.required_modifiers =
352+
dotnet_naming_symbols.interfaces.required_modifiers =
297353

298354
dotnet_naming_symbols.enums.applicable_kinds = enum
299355
dotnet_naming_symbols.enums.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
300-
dotnet_naming_symbols.enums.required_modifiers =
356+
dotnet_naming_symbols.enums.required_modifiers =
301357

302358
dotnet_naming_symbols.events.applicable_kinds = event
303359
dotnet_naming_symbols.events.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
304-
dotnet_naming_symbols.events.required_modifiers =
360+
dotnet_naming_symbols.events.required_modifiers =
305361

306362
dotnet_naming_symbols.methods.applicable_kinds = method
307363
dotnet_naming_symbols.methods.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
308-
dotnet_naming_symbols.methods.required_modifiers =
364+
dotnet_naming_symbols.methods.required_modifiers =
309365

310366
dotnet_naming_symbols.properties.applicable_kinds = property
311367
dotnet_naming_symbols.properties.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
312-
dotnet_naming_symbols.properties.required_modifiers =
368+
dotnet_naming_symbols.properties.required_modifiers =
313369

314370
dotnet_naming_symbols.public_fields.applicable_kinds = field
315371
dotnet_naming_symbols.public_fields.applicable_accessibilities = public, internal
316-
dotnet_naming_symbols.public_fields.required_modifiers =
372+
dotnet_naming_symbols.public_fields.required_modifiers =
317373

318374
dotnet_naming_symbols.private_fields.applicable_kinds = field
319375
dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
320-
dotnet_naming_symbols.private_fields.required_modifiers =
376+
dotnet_naming_symbols.private_fields.required_modifiers =
321377

322378
dotnet_naming_symbols.private_static_fields.applicable_kinds = field
323379
dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
324380
dotnet_naming_symbols.private_static_fields.required_modifiers = static
325381

326382
dotnet_naming_symbols.types_and_namespaces.applicable_kinds = namespace, class, struct, interface, enum
327383
dotnet_naming_symbols.types_and_namespaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
328-
dotnet_naming_symbols.types_and_namespaces.required_modifiers =
384+
dotnet_naming_symbols.types_and_namespaces.required_modifiers =
329385

330386
dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
331387
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
332-
dotnet_naming_symbols.non_field_members.required_modifiers =
388+
dotnet_naming_symbols.non_field_members.required_modifiers =
333389

334390
dotnet_naming_symbols.type_parameters.applicable_kinds = namespace
335391
dotnet_naming_symbols.type_parameters.applicable_accessibilities = *
336-
dotnet_naming_symbols.type_parameters.required_modifiers =
392+
dotnet_naming_symbols.type_parameters.required_modifiers =
337393

338394
dotnet_naming_symbols.private_constant_fields.applicable_kinds = field
339395
dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private, protected, protected_internal, private_protected
340396
dotnet_naming_symbols.private_constant_fields.required_modifiers = const
341397

342398
dotnet_naming_symbols.local_variables.applicable_kinds = local
343399
dotnet_naming_symbols.local_variables.applicable_accessibilities = local
344-
dotnet_naming_symbols.local_variables.required_modifiers =
400+
dotnet_naming_symbols.local_variables.required_modifiers =
345401

346402
dotnet_naming_symbols.local_constants.applicable_kinds = local
347403
dotnet_naming_symbols.local_constants.applicable_accessibilities = local
348404
dotnet_naming_symbols.local_constants.required_modifiers = const
349405

350406
dotnet_naming_symbols.parameters.applicable_kinds = parameter
351407
dotnet_naming_symbols.parameters.applicable_accessibilities = *
352-
dotnet_naming_symbols.parameters.required_modifiers =
408+
dotnet_naming_symbols.parameters.required_modifiers =
353409

354410
dotnet_naming_symbols.public_constant_fields.applicable_kinds = field
355411
dotnet_naming_symbols.public_constant_fields.applicable_accessibilities = public, internal
@@ -365,42 +421,48 @@ dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = readon
365421

366422
dotnet_naming_symbols.local_functions.applicable_kinds = local_function
367423
dotnet_naming_symbols.local_functions.applicable_accessibilities = *
368-
dotnet_naming_symbols.local_functions.required_modifiers =
424+
dotnet_naming_symbols.local_functions.required_modifiers =
369425

370426
# Naming styles
371427

372-
dotnet_naming_style.pascalcase.required_prefix =
373-
dotnet_naming_style.pascalcase.required_suffix =
374-
dotnet_naming_style.pascalcase.word_separator =
428+
dotnet_naming_style.pascalcase.required_prefix =
429+
dotnet_naming_style.pascalcase.required_suffix =
430+
dotnet_naming_style.pascalcase.word_separator =
375431
dotnet_naming_style.pascalcase.capitalization = pascal_case
376432

377433
dotnet_naming_style.ipascalcase.required_prefix = I
378-
dotnet_naming_style.ipascalcase.required_suffix =
379-
dotnet_naming_style.ipascalcase.word_separator =
434+
dotnet_naming_style.ipascalcase.required_suffix =
435+
dotnet_naming_style.ipascalcase.word_separator =
380436
dotnet_naming_style.ipascalcase.capitalization = pascal_case
381437

382438
dotnet_naming_style.tpascalcase.required_prefix = T
383-
dotnet_naming_style.tpascalcase.required_suffix =
384-
dotnet_naming_style.tpascalcase.word_separator =
439+
dotnet_naming_style.tpascalcase.required_suffix =
440+
dotnet_naming_style.tpascalcase.word_separator =
385441
dotnet_naming_style.tpascalcase.capitalization = pascal_case
386442

387443
dotnet_naming_style._camelcase.required_prefix = _
388-
dotnet_naming_style._camelcase.required_suffix =
389-
dotnet_naming_style._camelcase.word_separator =
444+
dotnet_naming_style._camelcase.required_suffix =
445+
dotnet_naming_style._camelcase.word_separator =
390446
dotnet_naming_style._camelcase.capitalization = camel_case
391447

392-
dotnet_naming_style.camelcase.required_prefix =
393-
dotnet_naming_style.camelcase.required_suffix =
394-
dotnet_naming_style.camelcase.word_separator =
448+
dotnet_naming_style.camelcase.required_prefix =
449+
dotnet_naming_style.camelcase.required_suffix =
450+
dotnet_naming_style.camelcase.word_separator =
395451
dotnet_naming_style.camelcase.capitalization = camel_case
396452

397453
dotnet_naming_style.s_camelcase.required_prefix = s_
398-
dotnet_naming_style.s_camelcase.required_suffix =
399-
dotnet_naming_style.s_camelcase.word_separator =
454+
dotnet_naming_style.s_camelcase.required_suffix =
455+
dotnet_naming_style.s_camelcase.word_separator =
400456
dotnet_naming_style.s_camelcase.capitalization = camel_case
401457

402458
[{*.xml,*yml,*.har,*.inputactions,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,.ws-context,jest.config}]
403459
indent_size = 2
404460

405461
[*.{appxmanifest,asax,ascx,aspx,axaml,blockshader,build,c,c++,c++m,cc,ccm,cginc,compute,cp,cpp,cppm,cs,cshtml,cu,cuh,cxx,cxxm,dtd,fs,fsi,fsscript,fsx,fx,fxh,h,h++,hh,hlsl,hlsli,hlslinc,hp,hpp,hxx,icc,inc,inl,ino,ipp,ixx,master,ml,mli,mpp,mq4,mq5,mqh,mxx,nuspec,paml,razor,resw,resx,shader,shaderFoundry,skin,tcc,tpp,urtshader,usf,ush,uxml,vb,xaml,xamlx,xoml,xsd}]
406462
tab_width = 4
463+
indent_style = space
464+
indent_size = 4
465+
466+
[{*.har,*.inputactions,*.jsb2,*.jsb3,*.json,*.jsonc,*.postman_collection,*.postman_collection.json,*.postman_environment,*.postman_environment.json,.babelrc,.eslintrc,.prettierrc,.stylelintrc,.ws-context,jest.config}]
467+
indent_style = space
468+
indent_size = 2

OpenSkillSharp.Tests/ModelUtilTests.cs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ public void CalculateTeamSqrtSigma()
2424
{
2525
PlackettLuce model = new();
2626
List<ITeamRating> teamRatings = model.CalculateTeamRatings(
27-
[
28-
new Team { Players = [model.Rating()] },
29-
new Team { Players = [model.Rating(), model.Rating()] }
30-
]
31-
).ToList();
27+
[new Team { Players = [model.Rating()] }, new Team { Players = [model.Rating(), model.Rating()] }]
28+
)
29+
.ToList();
3230

3331
double teamSqrtSigma = model.CalculateTeamSqrtSigma(teamRatings);
3432

@@ -40,11 +38,18 @@ public void CalculateTeamSqrtSigma_5v5()
4038
{
4139
PlackettLuce model = new();
4240
List<ITeamRating> teamRatings = model.CalculateTeamRatings(
43-
[
44-
new Team { Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()] },
45-
new Team { Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()] }
46-
]
47-
).ToList();
41+
[
42+
new Team
43+
{
44+
Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()]
45+
},
46+
new Team
47+
{
48+
Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()]
49+
}
50+
]
51+
)
52+
.ToList();
4853

4954
double teamSqrtSigma = model.CalculateTeamSqrtSigma(teamRatings);
5055

@@ -56,11 +61,9 @@ public void CalculateSumQ()
5661
{
5762
PlackettLuce model = new();
5863
List<ITeamRating> teamRatings = model.CalculateTeamRatings(
59-
[
60-
new Team { Players = [model.Rating()] },
61-
new Team { Players = [model.Rating(), model.Rating()] }
62-
]
63-
).ToList();
64+
[new Team { Players = [model.Rating()] }, new Team { Players = [model.Rating(), model.Rating()] }]
65+
)
66+
.ToList();
6467
double teamSqrtSigma = model.CalculateTeamSqrtSigma(teamRatings);
6568

6669
IEnumerable<double> sumQ = model.CalculateSumQ(teamRatings, teamSqrtSigma);
@@ -73,11 +76,18 @@ public void CalculateSumQ_5v5()
7376
{
7477
PlackettLuce model = new();
7578
List<ITeamRating> teamRatings = model.CalculateTeamRatings(
76-
[
77-
new Team { Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()] },
78-
new Team { Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()] }
79-
]
80-
).ToList();
79+
[
80+
new Team
81+
{
82+
Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()]
83+
},
84+
new Team
85+
{
86+
Players = [model.Rating(), model.Rating(), model.Rating(), model.Rating(), model.Rating()]
87+
}
88+
]
89+
)
90+
.ToList();
8191
double teamSqrtSigma = model.CalculateTeamSqrtSigma(teamRatings);
8292

8393
List<double> sumQ = model.CalculateSumQ(teamRatings, teamSqrtSigma).ToList();

OpenSkillSharp.Tests/Models/BradleyTerryPartTests.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,9 @@ public void Rate_WindowSize0_Tau0()
169169

170170
// Act
171171
List<ITeam> results = windowTauModel.Rate(
172-
[
173-
new Team { Players = [playerA] },
174-
new Team { Players = [playerB] }
175-
]
176-
).ToList();
172+
[new Team { Players = [playerA] }, new Team { Players = [playerB] }]
173+
)
174+
.ToList();
177175

178176
// Assert
179177
Assertions.RatingsEqual(playerA, results.ElementAt(0).Players.ElementAt(0));

OpenSkillSharp.Tests/Models/ThurstoneMostellerPartTests.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -169,11 +169,9 @@ public void Rate_WindowSize0_Tau0()
169169

170170
// Act
171171
List<ITeam> results = windowTauModel.Rate(
172-
[
173-
new Team { Players = [playerA] },
174-
new Team { Players = [playerB] }
175-
]
176-
).ToList();
172+
[new Team { Players = [playerA] }, new Team { Players = [playerB] }]
173+
)
174+
.ToList();
177175

178176
// Assert
179177
Assertions.RatingsEqual(playerA, results[0].Players.ElementAt(0));

0 commit comments

Comments
 (0)