Skip to content

Commit 3b16bcb

Browse files
author
Petr Sramek
committed
updated to lang version 13, fixed analyzer issues
1 parent 85b68db commit 3b16bcb

File tree

12 files changed

+80
-68
lines changed

12 files changed

+80
-68
lines changed

benchmarks/PolylineAlgorithm.Benchmarks/PolylineEncodingBenchmark.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ public class PolylineEncodingBenchmark
1818
[Params(1_000, 100_000, 10_000_000, Priority = 2)]
1919
public int N;
2020

21-
public IEnumerable<(double, double)> Coordinates;
21+
public required IEnumerable<(double, double)> Coordinates { get; set; }
2222

23-
internal DefaultPolylineEncoding Encoder { get; private set; }
23+
public required DefaultPolylineEncoding Encoder { get; set; }
2424

25-
public string Polyline;
25+
public required string Polyline { get; set; }
2626

2727
[GlobalSetup]
2828
public void Setup()
2929
{
3030
Encoder = new DefaultPolylineEncoding();
31-
Coordinates = new[] { (42.88895, -100.30630), (44.91513, 19.22495), (20.40244, 7.97495), (-15.52130, -63.74380), (-78.95116, -72.18130), (38.63072, 88.13120), (60.81071, 151.41245), (-58.20769, -173.43130), (59.40939, 83.91245), (-58.20769, 61.41245), (-20.86278, -119.99380), (34.10374, -150.93130), (-71.15367, 31.88120), (-72.04138, -153.74380), (-49.99635, -107.33755), (76.12614, 135.94370), (70.05664, 41.72495), (63.43879, -77.80630), (13.68456, -90.46255), (-75.90519, -7.49380), (74.71112, -127.02505), (-66.61109, 17.81870), (-49.08384, 37.50620) };
31+
Coordinates = [(42.88895, -100.30630), (44.91513, 19.22495), (20.40244, 7.97495), (-15.52130, -63.74380), (-78.95116, -72.18130), (38.63072, 88.13120), (60.81071, 151.41245), (-58.20769, -173.43130), (59.40939, 83.91245), (-58.20769, 61.41245), (-20.86278, -119.99380), (34.10374, -150.93130), (-71.15367, 31.88120), (-72.04138, -153.74380), (-49.99635, -107.33755), (76.12614, 135.94370), (70.05664, 41.72495), (63.43879, -77.80630), (13.68456, -90.46255), (-75.90519, -7.49380), (74.71112, -127.02505), (-66.61109, 17.81870), (-49.08384, 37.50620)];
3232
Polyline = "}vwdGjafcRsvjKi}pxUhsrtCngtcAjjgzEdqvtLrscbKj}nr@wetlUc`nq]}_kfCyrfaK~wluUl`u}|@wa{lUmmuap@va{lU~oihCu||bF`|era@wsnnIjny{DxamaScqxza@dklDf{}kb@mtpeCavfzGqhx`Wyzzkm@jm`d@dba~Pppkg@h}pxU|rtnHp|flA|~xaPuykyN}fhv[h}pxUx~p}Ymx`sZih~iB{edwB";
3333
}
3434

benchmarks/PolylineAlgorithm.Implementation.Benchmarks/DecodePerformanceBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
[MemoryDiagnoser]
99
public class DecodePerformanceBenchmark
1010
{
11-
private Consumer _consumer = new Consumer();
11+
private readonly Consumer _consumer = new();
1212
public static IEnumerable<(int, string)> Polylines()
1313
{
1414
yield return (1, "mz}lHssngJj`gqSnx~lEcovfTnms{Zdy~qQj_deI");

benchmarks/PolylineAlgorithm.Implementation.Benchmarks/EncodePerformanceBenchmark.cs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
[MemoryDiagnoser]
1010
public class EncodePerformanceBenchmark
1111
{
12-
private Consumer _consumer = new Consumer();
12+
private readonly Consumer _consumer = new();
1313

1414
public IEnumerable<(int, IEnumerable<(double, double)>)> Coordinates()
1515
{
@@ -59,10 +59,10 @@ public static string Encode(IEnumerable<(double Latitude, double Longitude)> coo
5959
int lastLongitude = 0;
6060
var sb = new StringBuilder();
6161

62-
foreach (var coordinate in coordinates)
62+
foreach (var (Latitude, Longitude) in coordinates)
6363
{
64-
int latitude = GetIntegerRepresentation(coordinate.Latitude);
65-
int longitude = GetIntegerRepresentation(coordinate.Longitude);
64+
int latitude = GetIntegerRepresentation(Latitude);
65+
int longitude = GetIntegerRepresentation(Longitude);
6666

6767
sb.Append(GetEncodedCharacters(latitude - lastLatitude).ToArray());
6868
sb.Append(GetEncodedCharacters(longitude - lastLongitude).ToArray());
@@ -150,10 +150,10 @@ public static string Encode(IEnumerable<(double Latitude, double Longitude)> coo
150150

151151
var sb = _pool.Get();
152152

153-
foreach (var coordinate in coordinates)
153+
foreach (var (Latitude, Longitude) in coordinates)
154154
{
155-
int latitude = GetIntegerRepresentation(coordinate.Latitude);
156-
int longitude = GetIntegerRepresentation(coordinate.Longitude);
155+
int latitude = GetIntegerRepresentation(Latitude);
156+
int longitude = GetIntegerRepresentation(Longitude);
157157

158158
sb.Append(GetEncodedCharacters(latitude - previousLatitude).ToArray());
159159
sb.Append(GetEncodedCharacters(longitude - previousLongitude).ToArray());
@@ -255,10 +255,10 @@ public static string Encode(IEnumerable<(double Latitude, double Longitude)> coo
255255
var sb = new StringBuilder(coordinates.Count() * 4);
256256

257257
// Looping over coordinates and building encoded result
258-
foreach (var coordinate in coordinates)
258+
foreach (var (Latitude, Longitude) in coordinates)
259259
{
260-
int latitude = Round(coordinate.Latitude);
261-
int longitude = Round(coordinate.Longitude);
260+
int latitude = Round(Latitude);
261+
int longitude = Round(Longitude);
262262

263263
sb.Append(GetSequence(latitude - previousLatitude).ToArray());
264264
sb.Append(GetSequence(longitude - previousLongitude).ToArray());
@@ -345,11 +345,9 @@ public static bool IsValidLongitude(double longitude)
345345
}
346346
}
347347

348-
public class CoordinateValidationException : Exception
348+
public class CoordinateValidationException(double latitude, double longitude)
349+
: Exception(string.Format("Latitude {0} or longitude {1} is not valid. Latitude must be in range between -90 and +90. Longitude must be in range between -180 and +180.", latitude, longitude))
349350
{
350-
public CoordinateValidationException(double latitude, double longitude)
351-
: base(string.Format("Latitude {0} or longitude {1} is not valid. Latitude must be in range between -90 and +90. Longitude must be in range between -180 and +180.", latitude, longitude)) { }
352-
353351
public double Latitude { get; }
354352

355353
public double Longitude { get; }
Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFramework>netstandard2.1</TargetFramework>
5-
<Nullable>enable</Nullable>
6-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.1</TargetFramework>
5+
<LangVersion>13</LangVersion>
6+
<Nullable>enable</Nullable>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
<InvariantGlobalization>true</InvariantGlobalization>
9+
</PropertyGroup>
710

8-
<ItemGroup>
9-
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[1.0.0,)" />
10-
</ItemGroup>
11+
<PropertyGroup>
12+
<AnalysisMode>All</AnalysisMode>
13+
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
14+
<EnableNETAnalyzers>true</EnableNETAnalyzers>
15+
<IncludeOpenAPIAnalyzers>true</IncludeOpenAPIAnalyzers>
16+
</PropertyGroup>
1117

12-
<ItemGroup>
13-
<ProjectReference Include="..\PolylineAlgorithm\PolylineAlgorithm.csproj" />
14-
</ItemGroup>
18+
<ItemGroup>
19+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="[1.0.0,)" />
20+
</ItemGroup>
21+
22+
<ItemGroup>
23+
<ProjectReference Include="..\PolylineAlgorithm\PolylineAlgorithm.csproj" />
24+
</ItemGroup>
1525

1626
</Project>

src/PolylineAlgorithm/Encoding/DefaultPolylineEncoding.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public sealed class DefaultPolylineEncoding : IPolylineEncoding<(double Latitude
4949
var coordinate = (GetCoordinate(latitude), GetCoordinate(longitude));
5050

5151
// Validating decoded coordinate. If not valid exception is thrown
52-
if (!_validator.IsValid(coordinate))
52+
if (!CoordinateValidator.IsValid(coordinate))
5353
{
5454
throw new InvalidOperationException(ExceptionMessageResource.PolylineCharArrayIsMalformed);
5555
}
@@ -128,7 +128,7 @@ bool TryValidate(IEnumerable<(double Latitude, double Longitude)> collection, ou
128128

129129
foreach (var item in collection)
130130
{
131-
if (!_validator.IsValid(item))
131+
if (!CoordinateValidator.IsValid(item))
132132
{
133133
exceptions.Add(new CoordinateValidationException(item.Latitude, item.Longitude));
134134
}

src/PolylineAlgorithm/Internal/CoordinateValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@ internal class CoordinateValidator
1616
/// <param name="coordinate">Coordinate to validate</param>
1717
/// <returns>Returns validation result. If valid then true, otherwise false.</returns>
1818
[MethodImpl(MethodImplOptions.AggressiveInlining)]
19-
public bool IsValid((double Latitude, double Longitude) coordinate)
19+
public static bool IsValid((double Latitude, double Longitude) coordinate)
2020
{
2121
return IsValidLatitude(coordinate.Latitude) && IsValidLongitude(coordinate.Longitude);
2222
}
2323

2424
[MethodImpl(MethodImplOptions.AggressiveInlining)]
25-
public bool IsValidLatitude(double latitude)
25+
public static bool IsValidLatitude(double latitude)
2626
{
2727
return latitude >= Constants.Coordinate.MinLatitude && latitude <= Constants.Coordinate.MaxLatitude;
2828
}
2929

3030
[MethodImpl(MethodImplOptions.AggressiveInlining)]
31-
public bool IsValidLongitude(double longitude)
31+
public static bool IsValidLongitude(double longitude)
3232
{
3333
return longitude >= Constants.Coordinate.MinLongitude && longitude <= Constants.Coordinate.MaxLongitude;
3434
}
Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,47 @@
11
<Project Sdk="Microsoft.NET.Sdk">
2+
23
<PropertyGroup>
34
<TargetFramework>netstandard2.1</TargetFramework>
5+
<LangVersion>13</LangVersion>
46
<Nullable>enable</Nullable>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
<InvariantGlobalization>true</InvariantGlobalization>
9+
<NeutralLanguage>en</NeutralLanguage>
510
</PropertyGroup>
6-
<ItemGroup>
7-
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
8-
<_Parameter1>PolylineAlgorithm.Tests</_Parameter1>
9-
</AssemblyAttribute>
10-
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
11-
<_Parameter1>PolylineAlgorithm.Benchmarks</_Parameter1>
12-
</AssemblyAttribute>
13-
</ItemGroup>
11+
12+
<PropertyGroup>
13+
<AnalysisMode>All</AnalysisMode>
14+
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
15+
<EnableNETAnalyzers>true</EnableNETAnalyzers>
16+
<IncludeOpenAPIAnalyzers>true</IncludeOpenAPIAnalyzers>
17+
</PropertyGroup>
18+
1419
<ItemGroup>
1520
<PackageReference Include="Microsoft.Extensions.ObjectPool" Version="8.0.0" />
1621
</ItemGroup>
22+
1723
<ItemGroup>
1824
<Compile Update="ExceptionMessageResource.Designer.cs">
1925
<DesignTime>True</DesignTime>
2026
<AutoGen>True</AutoGen>
2127
<DependentUpon>ExceptionMessageResource.resx</DependentUpon>
2228
</Compile>
2329
</ItemGroup>
30+
2431
<ItemGroup>
2532
<EmbeddedResource Update="ExceptionMessageResource.resx">
2633
<Generator>ResXFileCodeGenerator</Generator>
2734
<LastGenOutput>ExceptionMessageResource.Designer.cs</LastGenOutput>
2835
</EmbeddedResource>
2936
</ItemGroup>
37+
38+
<ItemGroup>
39+
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
40+
<_Parameter1>PolylineAlgorithm.Tests</_Parameter1>
41+
</AssemblyAttribute>
42+
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
43+
<_Parameter1>PolylineAlgorithm.Benchmarks</_Parameter1>
44+
</AssemblyAttribute>
45+
</ItemGroup>
46+
3047
</Project>

src/PolylineAlgorithm/PolylineEncoder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public static class PolylineEncoder
5858
var coordinate = (GetCoordinate(latitude), GetCoordinate(longitude));
5959

6060
// Validating decoded coordinate. If not valid exception is thrown
61-
if (!_validator.IsValid(coordinate))
61+
if (!CoordinateValidator.IsValid(coordinate))
6262
{
6363
throw new InvalidOperationException(ExceptionMessageResource.PolylineCharArrayIsMalformed);
6464
}
@@ -143,7 +143,7 @@ static bool TryValidate(IEnumerable<(double Latitude, double Longitude)> collect
143143

144144
foreach (var item in collection)
145145
{
146-
if (!_validator.IsValid(item))
146+
if (!CoordinateValidator.IsValid(item))
147147
{
148148
exceptions.Add(new CoordinateValidationException(item.Latitude, item.Longitude));
149149
}

tests/PolylineAlgorithm.DependencyInjection.Tests/ServiceCollectionExtensionsTests.cs

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,7 @@ namespace PolylineAlgorithm.DependencyInjection.Tests
1111
[TestClass]
1212
public class ServiceCollectionExtensionsTests
1313
{
14-
internal static IServiceCollection Services { get; private set; }
15-
16-
[ClassInitialize]
17-
public static void Initialize(TestContext context)
18-
{
19-
Services = new ServiceCollection()
20-
.AddPolylineEncoder();
21-
}
14+
private static IServiceCollection Services { get; } = new ServiceCollection().AddPolylineEncoder();
2215

2316
[TestMethod]
2417
public void AddDefaultPolylineEncoderTest()

tests/PolylineAlgorithm.Tests/CoordinateValidatorTest.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,7 @@ namespace PolylineAlgorithm.Tests
1414
[TestCategory(nameof(CoordinateValidator))]
1515
public class CoordinateValidatorTestCoordinate
1616
{
17-
internal static CoordinateValidator Validator { get; private set; }
18-
19-
[ClassInitialize]
20-
public static void Initialize(TestContext context)
21-
{
22-
Validator = new CoordinateValidator();
23-
}
17+
private static CoordinateValidator Validator { get; } = new CoordinateValidator();
2418

2519
#region Methods
2620

@@ -36,7 +30,7 @@ public void IsValid_InvalidInput_IsFalse()
3630
foreach (var item in invalidCoordinateCollection)
3731
{
3832
// Arrange
39-
var result = Validator.IsValid(item);
33+
var result = CoordinateValidator.IsValid(item);
4034

4135
// Assert
4236
Assert.IsFalse(result);
@@ -55,7 +49,7 @@ public void IsValid_ValidInput_IsTrue()
5549
foreach (var item in validCoordinateCollection)
5650
{
5751
// Arrange
58-
var result = Validator.IsValid(item);
52+
var result = CoordinateValidator.IsValid(item);
5953

6054
// Assert
6155
Assert.IsTrue(result);

0 commit comments

Comments
 (0)