Skip to content

Commit f27c6c0

Browse files
author
Pete Sramek
committed
interim commit
1 parent 8286453 commit f27c6c0

File tree

4 files changed

+67
-15
lines changed

4 files changed

+67
-15
lines changed

tests/PolylineAlgorithm.Tests/PolylineDecoderTest.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,23 @@ public void Decode_Empty_Input_ThrowsException() {
5757
/// <remarks>Expected result to equal <see cref="Values.Coordinates.Valid"/>.</remarks>
5858
[TestMethod]
5959
[DynamicData(nameof(CoordinateCount))]
60-
public void Decode_Valid_Input_Ok(int count) {
60+
public void Random_Value_Decode_Valid_Input_Ok(int count) {
6161
// Arrange
62-
IEnumerable<Coordinate> expected = RandomValueProvider.GetCoordinates(1);
63-
string value = RandomValueProvider.GetPolyline(1).ToString();
62+
IEnumerable<Coordinate> expected = RandomValueProvider.GetCoordinates(count);
63+
Polyline value = RandomValueProvider.GetPolyline(count);
64+
65+
// Act
66+
var result = Decoder.Decode(value);
67+
68+
// Assert
69+
CollectionAssert.AreEqual(expected.ToArray(), result.ToArray());
70+
}
71+
72+
[TestMethod]
73+
public void Static_Value_Decode_Valid_Input_Ok() {
74+
// Arrange
75+
IEnumerable<Coordinate> expected = StaticValueProvider.GetCoordinates();
76+
Polyline value = StaticValueProvider.GetPolyline();
6477

6578
// Act
6679
var result = Decoder.Decode(value);

tests/PolylineAlgorithm.Tests/PolylineEncoderTest.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void EncodeEmptyCoordinates() {
5959
/// <remarks>Expected result is that the encoded polyline matches <see cref="Values.Polyline.Valid"/>.</remarks>
6060
[TestMethod]
6161
[DynamicData(nameof(CoordinateCount))]
62-
public void Encode_ValidInput_Ok(int count) {
62+
public void Random_Value_Encode_ValidInput_Ok(int count) {
6363
// Arrange
6464
IEnumerable<Coordinate> valid = RandomValueProvider.GetCoordinates(count);
6565
Polyline expected = RandomValueProvider.GetPolyline(count);
@@ -72,4 +72,23 @@ public void Encode_ValidInput_Ok(int count) {
7272
Assert.AreEqual(expected.Length, result.Length);
7373
Assert.IsTrue(expected.Equals(result));
7474
}
75+
76+
/// <summary>
77+
/// Tests the <see cref="PolylineEncoder.Encode(IEnumerable{Coordinate})"/> method with a valid input.
78+
/// </summary>
79+
/// <remarks>Expected result is that the encoded polyline matches <see cref="Values.Polyline.Valid"/>.</remarks>
80+
[TestMethod]
81+
public void Static_Value_Encode_ValidInput_Ok() {
82+
// Arrange
83+
IEnumerable<Coordinate> valid = StaticValueProvider.GetCoordinates();
84+
Polyline expected = StaticValueProvider.GetPolyline();
85+
86+
// Act
87+
var result = Encoder.Encode(valid);
88+
89+
// Assert
90+
Assert.AreEqual(expected.IsEmpty, result.IsEmpty);
91+
Assert.AreEqual(expected.Length, result.Length);
92+
Assert.IsTrue(expected.Equals(result));
93+
}
7594
}

utilities/PolylineAlgorithm.Utility/RandomValueProvider.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
internal static class RandomValueProvider {
99
private static readonly Random _random = new(DateTime.Now.Millisecond);
10-
private static readonly ConcurrentDictionary<int, CoordinatePair> _cache = new();
10+
private static readonly ConcurrentDictionary<int, PolylineCoordinateCollectionPair> _cache = new();
1111
private static readonly PolylineEncoder _encoder = new();
1212

1313
public static IEnumerable<Coordinate> GetCoordinates(int count) {
@@ -26,7 +26,7 @@ public static Polyline GetPolyline(int count) {
2626
return entry.Polyline;
2727
}
2828

29-
private static CoordinatePair GetCaheEntry(int count) {
29+
private static PolylineCoordinateCollectionPair GetCaheEntry(int count) {
3030
if (_cache.TryGetValue(count, out var entry)) {
3131
return entry;
3232
}
@@ -36,7 +36,7 @@ private static CoordinatePair GetCaheEntry(int count) {
3636
.Select(i => new Coordinate(RandomLatitude(), RandomLongitude()))
3737
.ToList();
3838

39-
entry = _cache.GetOrAdd(count, _ => new CoordinatePair(enumeration, _encoder.Encode(enumeration)));
39+
entry = _cache.GetOrAdd(count, _ => new PolylineCoordinateCollectionPair(enumeration, _encoder.Encode(enumeration)));
4040

4141
return entry;
4242
}
@@ -49,13 +49,8 @@ private static double RandomLatitude() {
4949
return Math.Round(_random.Next(-90, 90) + _random.NextDouble(), 5);
5050
}
5151

52-
private readonly struct CoordinatePair {
53-
public CoordinatePair(IEnumerable<Coordinate> coordinates, Polyline polyline) {
54-
Coordinates = coordinates;
55-
Polyline = polyline;
56-
}
57-
58-
public IEnumerable<Coordinate> Coordinates { get; }
59-
public Polyline Polyline { get; }
52+
private readonly struct PolylineCoordinateCollectionPair(IEnumerable<Coordinate> coordinates, Polyline polyline) {
53+
public IEnumerable<Coordinate> Coordinates { get; } = coordinates;
54+
public Polyline Polyline { get; } = polyline;
6055
}
6156
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace PolylineAlgorithm.Utility;
2+
3+
using System.Collections.Generic;
4+
5+
internal static class StaticValueProvider {
6+
private static readonly Polyline _polyline = Polyline.FromString("???_gsia@_cidP??~fsia@?~fsia@~bidP?~bidP??_gsia@");
7+
private static readonly IEnumerable<Coordinate> _coordinates = [
8+
new (0, 0),
9+
new (0, 180),
10+
new (90, 180),
11+
new (90, 0),
12+
new (90, -180),
13+
new (0, -180),
14+
new (-90, -180),
15+
new (-90, 0)
16+
];
17+
18+
public static IEnumerable<Coordinate> GetCoordinates() {
19+
return _coordinates;
20+
}
21+
22+
public static Polyline GetPolyline() {
23+
return _polyline;
24+
}
25+
}

0 commit comments

Comments
 (0)