Skip to content

Commit b738e27

Browse files
committed
fix: digits overflow
1 parent 8a7cb49 commit b738e27

3 files changed

Lines changed: 14 additions & 12 deletions

File tree

Lib/BelgianStructuredCommunication.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<Nullable>enable</Nullable>
77
<RootNamespace>IndriApollo.BelgianStructuredCommunication</RootNamespace>
88
<IsPackable>true</IsPackable>
9-
<Version>1.0.1</Version>
9+
<Version>1.1.0</Version>
1010
</PropertyGroup>
1111

1212
<PropertyGroup>

Lib/Communication.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ namespace IndriApollo.BelgianStructuredCommunication;
66

77
public partial class Communication : IParsable<Communication>
88
{
9-
public uint Digits { get; }
9+
public ulong Digits { get; }
1010
public byte CheckSum { get; }
1111
public bool ValidChecksum { get; }
1212

13-
public Communication(uint digits) : this(digits.ToString("D10"))
13+
public Communication(ulong digits) : this(digits.ToString("D10"))
1414
{
1515
}
1616

@@ -25,7 +25,7 @@ public Communication(string digits, string? checksum = null)
2525
if (digits.Length != 10)
2626
throw new ArgumentException("Digits must be 10 characters", nameof(digits));
2727

28-
Digits = uint.Parse(digits, NumberStyles.None, CultureInfo.InvariantCulture);
28+
Digits = ulong.Parse(digits, NumberStyles.None, CultureInfo.InvariantCulture);
2929

3030
var computedCheckSum = ComputeCheckSum(Digits);
3131
CheckSum = checksum is not null
@@ -89,7 +89,7 @@ public static bool TryParse([NotNullWhen(true)] string? s, IFormatProvider? prov
8989
return true;
9090
}
9191

92-
private static byte ComputeCheckSum(uint digits)
92+
private static byte ComputeCheckSum(ulong digits)
9393
{
9494
return (byte)(digits % 97);
9595
}
@@ -104,5 +104,5 @@ public override string ToString()
104104
private static partial Regex CommunicationRegex();
105105
}
106106

107-
public class InvalidChecksumException(byte expected, byte actual, uint digits)
107+
public class InvalidChecksumException(byte expected, byte actual, ulong digits)
108108
: Exception($"Expected {expected:D2} but got {actual:D2} for {digits:D10}");

Tests/CommunicationTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ namespace Tests;
66
public class CommunicationTests
77
{
88
[Theory]
9-
[InlineData("+++ 085 / 1927 / 54115 +++")]
10-
[InlineData("+++085/1927/54115+++")]
11-
[InlineData("085192754115")]
12-
public void GivenWellFormattedCommunication_WhenParse_ThenSuccess(string communicationStr)
9+
[InlineData("+++ 085 / 1927 / 54115 +++", 851927541, 15)]
10+
[InlineData("+++085/1927/54115+++", 851927541, 15)]
11+
[InlineData("085192754115", 851927541, 15)]
12+
[InlineData("999999999948", 9999999999, 48)]
13+
public void GivenWellFormattedCommunication_WhenParse_ThenSuccess(string communicationStr,
14+
ulong expectedDigits, byte expectedCheckSum)
1315
{
1416
var communication = Communication.Parse(communicationStr);
1517

16-
Assert.Equal((uint)851927541, communication.Digits);
17-
Assert.Equal(15, communication.CheckSum);
18+
Assert.Equal(expectedDigits, communication.Digits);
19+
Assert.Equal(expectedCheckSum, communication.CheckSum);
1820
Assert.True(communication.ValidChecksum);
1921
}
2022

0 commit comments

Comments
 (0)