Skip to content

Commit 0dcf84f

Browse files
committed
Arrange own static and explicit format methods
1 parent 767f427 commit 0dcf84f

12 files changed

+211
-41
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using System;
2+
3+
namespace PrimeFuncPack.Core.Tests;
4+
5+
partial class UnitFormatTests
6+
{
7+
[Theory]
8+
[MemberData(nameof(ExpectedFormatCases))]
9+
public static void FormatToSpanExplicit_DestLengthIsEqual_ExpectSuccessResult((string? Format, string Expected) testCase)
10+
{
11+
var (format, expected) = (testCase.Format, testCase.Expected.ToCharArray());
12+
13+
var destination = new char[expected.Length];
14+
15+
var source = (ISpanFormattable)default(Unit);
16+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
17+
18+
Assert.True(actualResult);
19+
Assert.Equal(expected.Length, actualCharsWritten);
20+
Assert.Equal(expected, destination);
21+
}
22+
23+
[Theory]
24+
[MemberData(nameof(ExpectedFormatCases))]
25+
public static void FormatToSpanExplicit_DestLengthIsGreater_ExpectSuccessResult((string? Format, string Expected) testCase)
26+
{
27+
var (format, expected) = (testCase.Format, testCase.Expected.ToCharArray());
28+
29+
const int extraLength = 1;
30+
const char filler = 'X';
31+
32+
var destination = new char[expected.Length + extraLength];
33+
destination.AsSpan(start: expected.Length).Fill(filler);
34+
35+
var source = (ISpanFormattable)default(Unit);
36+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
37+
38+
Assert.True(actualResult);
39+
Assert.Equal(expected.Length, actualCharsWritten);
40+
Assert.Equal(expected, destination[..expected.Length]);
41+
42+
var expectedExtra = new char[extraLength];
43+
expectedExtra.AsSpan().Fill(filler);
44+
Assert.Equal(expectedExtra, destination[expected.Length..]);
45+
}
46+
47+
[Theory]
48+
[MemberData(nameof(ExpectedFormatCases))]
49+
public static void FormatToSpanExplicit_DestLengthIsLess_ExpectFailureResult((string? Format, string Expected) testCase)
50+
{
51+
var (format, expectedLength) = (testCase.Format, testCase.Expected.Length);
52+
53+
if (expectedLength == 0)
54+
{
55+
// Skip inapplicable case
56+
Assert.False(false);
57+
return;
58+
}
59+
60+
const char filler = 'X';
61+
62+
var destination = new char[expectedLength - 1];
63+
destination.AsSpan().Fill(filler);
64+
65+
var source = (ISpanFormattable)default(Unit);
66+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
67+
68+
Assert.False(actualResult);
69+
Assert.Equal(0, actualCharsWritten);
70+
71+
var expectedDestination = new char[destination.Length];
72+
expectedDestination.AsSpan().Fill(filler);
73+
Assert.Equal(expectedDestination, destination);
74+
}
75+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System;
2+
using System.Text;
3+
4+
namespace PrimeFuncPack.Core.Tests;
5+
6+
partial class UnitFormatTests
7+
{
8+
[Theory]
9+
[MemberData(nameof(ExpectedFormatCases))]
10+
public static void FormatToSpanUtf8Explicit_DestLengthIsEqual_ExpectSuccessResult((string? Format, string Expected) testCase)
11+
{
12+
var (format, expected) = (testCase.Format, Encoding.UTF8.GetBytes(testCase.Expected));
13+
14+
var destination = new byte[expected.Length];
15+
16+
var source = (IUtf8SpanFormattable)default(Unit);
17+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
18+
19+
Assert.True(actualResult);
20+
Assert.Equal(expected.Length, actualCharsWritten);
21+
Assert.Equal(expected, destination);
22+
}
23+
24+
[Theory]
25+
[MemberData(nameof(ExpectedFormatCases))]
26+
public static void FormatToSpanUtf8Explicit_DestLengthIsGreater_ExpectSuccessResult((string? Format, string Expected) testCase)
27+
{
28+
var (format, expected) = (testCase.Format, Encoding.UTF8.GetBytes(testCase.Expected));
29+
30+
const int extraLength = 1;
31+
const byte filler = byte.MaxValue;
32+
33+
var destination = new byte[expected.Length + extraLength];
34+
destination.AsSpan(start: expected.Length).Fill(filler);
35+
36+
var source = (IUtf8SpanFormattable)default(Unit);
37+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
38+
39+
Assert.True(actualResult);
40+
Assert.Equal(expected.Length, actualCharsWritten);
41+
Assert.Equal(expected, destination[..expected.Length]);
42+
43+
var expectedExtra = new byte[extraLength];
44+
expectedExtra.AsSpan().Fill(filler);
45+
Assert.Equal(expectedExtra, destination[expected.Length..]);
46+
}
47+
48+
[Theory]
49+
[MemberData(nameof(ExpectedFormatCases))]
50+
public static void FormatToSpanUtf8Explicit_DestLengthIsLess_ExpectFailureResult((string? Format, string Expected) testCase)
51+
{
52+
var (format, expectedLength) = (testCase.Format, Encoding.UTF8.GetBytes(testCase.Expected).Length);
53+
54+
if (expectedLength == 0)
55+
{
56+
// Skip inapplicable case
57+
Assert.False(false);
58+
return;
59+
}
60+
61+
const byte filler = byte.MaxValue;
62+
63+
var destination = new byte[expectedLength - 1];
64+
destination.AsSpan().Fill(filler);
65+
66+
var source = (IUtf8SpanFormattable)default(Unit);
67+
var actualResult = source.TryFormat(destination, out var actualCharsWritten, format, null);
68+
69+
Assert.False(actualResult);
70+
Assert.Equal(0, actualCharsWritten);
71+
72+
var expectedDestination = new byte[destination.Length];
73+
expectedDestination.AsSpan().Fill(filler);
74+
Assert.Equal(expectedDestination, destination);
75+
}
76+
}

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Format.Span.Utf8.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ public static void FormatToSpanUtf8_DestLengthIsEqual_ExpectSuccessResult((strin
1313

1414
var destination = new byte[expected.Length];
1515

16-
var source = default(Unit);
17-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
16+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
1817

1918
Assert.True(actualResult);
2019
Assert.Equal(expected.Length, actualCharsWritten);
@@ -33,8 +32,7 @@ public static void FormatToSpanUtf8_DestLengthIsGreater_ExpectSuccessResult((str
3332
var destination = new byte[expected.Length + extraLength];
3433
destination.AsSpan(start: expected.Length).Fill(filler);
3534

36-
var source = default(Unit);
37-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
35+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
3836

3937
Assert.True(actualResult);
4038
Assert.Equal(expected.Length, actualCharsWritten);
@@ -63,8 +61,7 @@ public static void FormatToSpanUtf8_DestLengthIsLess_ExpectFailureResult((string
6361
var destination = new byte[expectedLength - 1];
6462
destination.AsSpan().Fill(filler);
6563

66-
var source = default(Unit);
67-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
64+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
6865

6966
Assert.False(actualResult);
7067
Assert.Equal(0, actualCharsWritten);

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Format.Span.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ public static void FormatToSpan_DestLengthIsEqual_ExpectSuccessResult((string? F
1212

1313
var destination = new char[expected.Length];
1414

15-
var source = default(Unit);
16-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
15+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
1716

1817
Assert.True(actualResult);
1918
Assert.Equal(expected.Length, actualCharsWritten);
@@ -32,8 +31,7 @@ public static void FormatToSpan_DestLengthIsGreater_ExpectSuccessResult((string?
3231
var destination = new char[expected.Length + extraLength];
3332
destination.AsSpan(start: expected.Length).Fill(filler);
3433

35-
var source = default(Unit);
36-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
34+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
3735

3836
Assert.True(actualResult);
3937
Assert.Equal(expected.Length, actualCharsWritten);
@@ -62,8 +60,7 @@ public static void FormatToSpan_DestLengthIsLess_ExpectFailureResult((string? Fo
6260
var destination = new char[expectedLength - 1];
6361
destination.AsSpan().Fill(filler);
6462

65-
var source = default(Unit);
66-
var actualResult = source.TryFormat(destination.AsSpan(), out var actualCharsWritten, format, null);
63+
var actualResult = Unit.TryFormat(destination, out var actualCharsWritten, format);
6764

6865
Assert.False(actualResult);
6966
Assert.Equal(0, actualCharsWritten);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
3+
namespace PrimeFuncPack.Core.Tests;
4+
5+
partial class UnitFormatTests
6+
{
7+
[Theory]
8+
[MemberData(nameof(ExpectedFormatCases))]
9+
public static void FormatToStringExplicit_ExpectCorrespondingResult((string? Format, string Expected) testCase)
10+
{
11+
var source = (IFormattable)default(Unit);
12+
var actual = source.ToString(testCase.Format, null);
13+
14+
Assert.Equal(testCase.Expected, actual);
15+
}
16+
}

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Format.String.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ partial class UnitFormatTests
88
[MemberData(nameof(ExpectedFormatCases))]
99
public static void FormatToString_ExpectCorrespondingResult((string? Format, string Expected) testCase)
1010
{
11-
var source = default(Unit);
12-
var actual = source.ToString(testCase.Format, null);
11+
var actual = Unit.Format(testCase.Format);
1312

1413
Assert.Equal(testCase.Expected, actual);
1514
}

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.Span.cs renamed to src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.Span.Explicit.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ partial class UnitFormatTests
66
{
77
[Theory]
88
[MemberData(nameof(ParseCases))]
9-
public static void ParseSpan_Succeeds(string? s)
9+
public static void ParseSpanExplicit_Succeeds(string? s)
1010
=>
11-
Inner_ParseSpan_Succeeds<Unit>(s);
11+
Inner_ParseSpanExplicit_Succeeds<Unit>(s);
1212

1313
[Theory]
1414
[MemberData(nameof(ParseCases))]
15-
public static void TryParseSpan_Succeeds(string? s)
15+
public static void TryParseSpanExplicit_Succeeds(string? s)
1616
=>
17-
Inner_TryParseSpan_Succeeds<Unit>(s);
17+
Inner_TryParseSpanExplicit_Succeeds<Unit>(s);
1818

19-
private static void Inner_ParseSpan_Succeeds<TUnit>(string? s)
19+
private static void Inner_ParseSpanExplicit_Succeeds<TUnit>(string? s)
2020
where TUnit : struct, ISpanParsable<TUnit>
2121
{
2222
ReadOnlySpan<char> span = s;
@@ -27,7 +27,7 @@ private static void Inner_ParseSpan_Succeeds<TUnit>(string? s)
2727
Assert.StrictEqual(expected, actual);
2828
}
2929

30-
private static void Inner_TryParseSpan_Succeeds<TUnit>(string? s)
30+
private static void Inner_TryParseSpanExplicit_Succeeds<TUnit>(string? s)
3131
where TUnit : struct, ISpanParsable<TUnit>
3232
{
3333
ReadOnlySpan<char> span = s;

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.Span.Utf8.cs renamed to src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.Span.Utf8.Explicit.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@ partial class UnitFormatTests
77
{
88
[Theory]
99
[MemberData(nameof(ParseCases))]
10-
public static void ParseSpanUtf8_Succeeds(string? s)
10+
public static void ParseSpanUtf8Explicit_Succeeds(string? s)
1111
=>
12-
Inner_ParseSpanUtf8_Succeeds<Unit>(s);
12+
Inner_ParseSpanUtf8Explicit_Succeeds<Unit>(s);
1313

1414
[Theory]
1515
[MemberData(nameof(ParseCases))]
16-
public static void TryParseSpanUtf8_Succeeds(string? s)
16+
public static void TryParseSpanUtf8Explicit_Succeeds(string? s)
1717
=>
18-
Inner_TryParseSpanUtf8_Succeeds<Unit>(s);
18+
Inner_TryParseSpanUtf8Explicit_Succeeds<Unit>(s);
1919

20-
private static void Inner_ParseSpanUtf8_Succeeds<TUnit>(string? s)
20+
private static void Inner_ParseSpanUtf8Explicit_Succeeds<TUnit>(string? s)
2121
where TUnit : struct, IUtf8SpanParsable<TUnit>
2222
{
2323
ReadOnlySpan<byte> span = s is null ? null : Encoding.UTF8.GetBytes(s);
@@ -28,7 +28,7 @@ private static void Inner_ParseSpanUtf8_Succeeds<TUnit>(string? s)
2828
Assert.StrictEqual(expected, actual);
2929
}
3030

31-
private static void Inner_TryParseSpanUtf8_Succeeds<TUnit>(string? s)
31+
private static void Inner_TryParseSpanUtf8Explicit_Succeeds<TUnit>(string? s)
3232
where TUnit : struct, IUtf8SpanParsable<TUnit>
3333
{
3434
ReadOnlySpan<byte> span = s is null ? null : Encoding.UTF8.GetBytes(s);

src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.String.cs renamed to src/core-unit/Unit.Tests/UnitFormatTests/UnitFormatTests.Parse.String.Explicit.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ partial class UnitFormatTests
66
{
77
[Theory]
88
[MemberData(nameof(ParseCases))]
9-
public static void ParseString_Succeeds(string? s)
9+
public static void ParseStringExplicit_Succeeds(string? s)
1010
=>
11-
Inner_ParseString_Succeeds<Unit>(s);
11+
Inner_ParseStringExplicit_Succeeds<Unit>(s);
1212

1313
[Theory]
1414
[MemberData(nameof(ParseCases))]
15-
public static void TryParseString_Succeeds(string? s)
15+
public static void TryParseStringExplicit_Succeeds(string? s)
1616
=>
17-
Inner_TryParseString_Succeeds<Unit>(s);
17+
Inner_TryParseStringExplicit_Succeeds<Unit>(s);
1818

19-
private static void Inner_ParseString_Succeeds<TUnit>(string? s)
19+
private static void Inner_ParseStringExplicit_Succeeds<TUnit>(string? s)
2020
where TUnit : struct, IParsable<TUnit>
2121
{
2222
var actual = TUnit.Parse(s!, null);
@@ -26,7 +26,7 @@ private static void Inner_ParseString_Succeeds<TUnit>(string? s)
2626
Assert.StrictEqual(expected, actual);
2727
}
2828

29-
private static void Inner_TryParseString_Succeeds<TUnit>(string? s)
29+
private static void Inner_TryParseStringExplicit_Succeeds<TUnit>(string? s)
3030
where TUnit : struct, IParsable<TUnit>
3131
{
3232
var actual = TUnit.TryParse(s, null, out var result);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
namespace System;
2+
3+
partial struct Unit
4+
{
5+
string IFormattable.ToString(string? format, IFormatProvider? formatProvider)
6+
=>
7+
Format(format);
8+
9+
bool ISpanFormattable.TryFormat(Span<char> destination, out int charsWritten, ReadOnlySpan<char> format, IFormatProvider? provider)
10+
=>
11+
TryFormat(destination, out charsWritten, format);
12+
13+
bool IUtf8SpanFormattable.TryFormat(Span<byte> utf8Destination, out int bytesWritten, ReadOnlySpan<char> format, IFormatProvider? provider)
14+
=>
15+
TryFormat(utf8Destination, out bytesWritten, format);
16+
}

0 commit comments

Comments
 (0)