From 42817697ecf3fec662d093e716bb3cae87b2f73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Stor=C3=B8=20Nyfl=C3=B8tt?= Date: Mon, 5 Oct 2020 22:35:45 +0200 Subject: [PATCH] Ported to netstandard 2.0 --- Skills.sln | 11 +- Skills/Numerics/Matrix.cs | 10 +- Skills/Properties/AssemblyInfo.cs | 41 ------ Skills/RankSorter.cs | 2 +- Skills/Skills.csproj | 128 ++---------------- Skills/Skills.suo | Bin 142336 -> 0 bytes Skills/TrueSkill/DrawMargin.cs | 2 +- .../FactorGraphTrueSkillCalculator.cs | 2 +- UnitTests/Properties/AssemblyInfo.cs | 35 ----- UnitTests/UnitTests.csproj | 127 ++--------------- 10 files changed, 37 insertions(+), 321 deletions(-) delete mode 100644 Skills/Properties/AssemblyInfo.cs delete mode 100644 Skills/Skills.suo delete mode 100644 UnitTests/Properties/AssemblyInfo.cs diff --git a/Skills.sln b/Skills.sln index e4629b1..ed220ed 100644 --- a/Skills.sln +++ b/Skills.sln @@ -1,9 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Skills", "Skills\Skills.csproj", "{15AD1345-984C-48ED-AF9A-2EAB44E5AA2B}" +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30523.141 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Skills", "Skills\Skills.csproj", "{15AD1345-984C-48ED-AF9A-2EAB44E5AA2B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{6F80946D-AC8B-4063-8588-96841C18BF0A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UnitTests", "UnitTests\UnitTests.csproj", "{6F80946D-AC8B-4063-8588-96841C18BF0A}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{DEBCEDDA-EC9A-4C09-BCA4-673706531416}" ProjectSection(SolutionItems) = preProject @@ -30,4 +32,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4FA901BA-6ED7-4907-B31B-AF61FE177420} + EndGlobalSection EndGlobal diff --git a/Skills/Numerics/Matrix.cs b/Skills/Numerics/Matrix.cs index feadcb9..d0e275a 100644 --- a/Skills/Numerics/Matrix.cs +++ b/Skills/Numerics/Matrix.cs @@ -7,7 +7,7 @@ namespace Moserware.Numerics /// /// Represents an MxN matrix with double precision values. /// - internal class Matrix + public class Matrix { // Anything smaller than this will be assumed to be rounding error in terms of equality matching private const int FractionalDigitsToRoundTo = 10; @@ -460,7 +460,7 @@ public override bool Equals(object obj) } } - internal class DiagonalMatrix : Matrix + public class DiagonalMatrix : Matrix { public DiagonalMatrix(IList diagonalValues) : base(diagonalValues.Count, diagonalValues.Count) @@ -472,7 +472,7 @@ public DiagonalMatrix(IList diagonalValues) } } - internal class Vector : Matrix + public class Vector : Matrix { public Vector(IList vectorValues) : base(vectorValues.Count, 1, new IEnumerable[] {vectorValues}) @@ -480,7 +480,7 @@ public Vector(IList vectorValues) } } - internal class SquareMatrix : Matrix + public class SquareMatrix : Matrix { public SquareMatrix(params double[] allValues) { @@ -503,7 +503,7 @@ public SquareMatrix(params double[] allValues) } } - internal class IdentityMatrix : DiagonalMatrix + public class IdentityMatrix : DiagonalMatrix { public IdentityMatrix(int rows) : base(CreateDiagonal(rows)) diff --git a/Skills/Properties/AssemblyInfo.cs b/Skills/Properties/AssemblyInfo.cs deleted file mode 100644 index b1b588e..0000000 --- a/Skills/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("Moserware.Skills")] -[assembly: AssemblyDescription("Implementation of the TrueSkill algorithm.")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Jeff Moser")] -[assembly: AssemblyProduct("TrueSkill Calculator")] -[assembly: AssemblyCopyright("Copyright © Jeff Moser 2010")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly: Guid("4326f9ed-f234-42ed-bee0-84f7757ab28f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] - -[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0.1")] -[assembly: InternalsVisibleTo("UnitTests")] diff --git a/Skills/RankSorter.cs b/Skills/RankSorter.cs index c3dc1f6..8e8531c 100644 --- a/Skills/RankSorter.cs +++ b/Skills/RankSorter.cs @@ -6,7 +6,7 @@ namespace Moserware.Skills /// /// Helper class to sort ranks in non-decreasing order. /// - internal static class RankSorter + public static class RankSorter { /// /// Performs an in-place sort of the in according to the in non-decreasing order. diff --git a/Skills/Skills.csproj b/Skills/Skills.csproj index 5d2bb4d..09f58d8 100644 --- a/Skills/Skills.csproj +++ b/Skills/Skills.csproj @@ -1,122 +1,10 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {15AD1345-984C-48ED-AF9A-2EAB44E5AA2B} - Library - Properties - Moserware.Skills - Moserware.Skills - v3.5 - 512 - - - - - - - 3.5 + netstandard2.0 + Moserware.Skills + Jeff Moser + Moserware.Skills + true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - true - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + diff --git a/Skills/Skills.suo b/Skills/Skills.suo deleted file mode 100644 index 2d273c621e602b758643497c7dca24117bf864ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142336 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 /// Calculates TrueSkill using a full factor graph. /// - internal class FactorGraphTrueSkillCalculator : SkillCalculator + public class FactorGraphTrueSkillCalculator : SkillCalculator { public FactorGraphTrueSkillCalculator() : base(SupportedOptions.PartialPlay | SupportedOptions.PartialUpdate, TeamsRange.AtLeast(2), PlayersRange.AtLeast(1)) diff --git a/UnitTests/Properties/AssemblyInfo.cs b/UnitTests/Properties/AssemblyInfo.cs deleted file mode 100644 index 5e1fe1e..0000000 --- a/UnitTests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("UnitTests")] -[assembly: AssemblyDescription("Unit tests for Moserware.Skills")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Jeff Moser")] -[assembly: AssemblyProduct("UnitTests")] -[assembly: AssemblyCopyright("Copyright © Jeff Moser 2010")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ddd7d430-f9c0-45c8-9576-70418d766e1f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/UnitTests/UnitTests.csproj b/UnitTests/UnitTests.csproj index 4256bda..720319d 100644 --- a/UnitTests/UnitTests.csproj +++ b/UnitTests/UnitTests.csproj @@ -1,120 +1,19 @@ - - + + - Debug - AnyCPU - 9.0.30729 - 2.0 - {6F80946D-AC8B-4063-8588-96841C18BF0A} - Library - Properties - UnitTests - UnitTests - v3.5 - 512 - - - - - 3.5 - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - ..\ - true + netcoreapp3.1 + + false - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\NUnit.2.6.2\lib\nunit.framework.dll - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - - - - - - - - - - - - - {15AD1345-984C-48ED-AF9A-2EAB44E5AA2B} - Skills - - - - - + - + + + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - + - - - - \ No newline at end of file + +