Skip to content

Commit 813e91b

Browse files
committed
Improvements for ShouldlyExt on nullables memory slices
1 parent a98cebc commit 813e91b

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

CSharpExt.UnitTests/ShouldlyExtTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,20 @@ public void ShouldEqualFilePathStringArray(
8686
{
8787
paths.Select(x => x.Path).ShouldEqualEnumerable(paths.ToArray());
8888
}
89+
90+
[Fact]
91+
public void ShouldEqualEnumerableMemorySlice()
92+
{
93+
ReadOnlyMemorySlice<byte> b1 = new byte[] { 1, 2, 3 };
94+
ReadOnlyMemorySlice<byte> b2 = new byte[] { 1, 2, 3 };
95+
b1.ShouldEqualEnumerable(b2);
96+
}
97+
98+
[Fact]
99+
public void ShouldEqualEnumerableMemorySliceNullable()
100+
{
101+
ReadOnlyMemorySlice<byte> b1 = new byte[] { 1, 2, 3 };
102+
ReadOnlyMemorySlice<byte>? b2 = new byte[] { 1, 2, 3 };
103+
b1.ShouldEqualEnumerable(b2);
104+
}
89105
}

Noggog.Testing/Extensions/ShouldlyExt.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,27 +73,39 @@ internal static bool RoughlyEqual<TLhs>(TLhs actual, object? expected)
7373
}
7474

7575
[MethodImpl(MethodImplOptions.NoInlining)]
76-
public static void ShouldEqualEnumerable<T, TRhs>(this IEnumerable<T> actual, params TRhs?[] expected)
76+
public static void ShouldEqualEnumerable<T, TRhs>(this IEnumerable<T>? actual, params TRhs?[] expected)
7777
where TRhs : T
7878
{
7979
ShouldEqualEnumerableInternal(actual, expected);
8080
}
8181

8282
[MethodImpl(MethodImplOptions.NoInlining)]
83-
public static void ShouldEqualEnumerable<T>(this IEnumerable<T> actual, params object?[] expected)
83+
public static void ShouldEqualEnumerable<T>(this IEnumerable<T>? actual, params object?[] expected)
8484
{
8585
ShouldEqualEnumerableInternal(actual, expected);
8686
}
8787

8888
[MethodImpl(MethodImplOptions.NoInlining)]
89-
public static void ShouldEqualEnumerable<TLhs, TRhs>(this IEnumerable<TLhs> actual, IEnumerable<TRhs> expected)
89+
public static void ShouldEqualEnumerable<TLhs, TRhs>(this IEnumerable<TLhs>? actual, IEnumerable<TRhs>? expected)
9090
{
9191
ShouldEqualEnumerableInternal(actual, expected);
9292
}
9393

9494
[MethodImpl(MethodImplOptions.NoInlining)]
95-
private static void ShouldEqualEnumerableInternal(IEnumerable actual, IEnumerable expected)
95+
public static void ShouldEqualEnumerable<TLhs, TRhs>(this IEnumerable<TLhs>? actual, ReadOnlyMemorySlice<TRhs>? expected)
9696
{
97+
ShouldEqualEnumerableInternal(actual, expected);
98+
}
99+
100+
[MethodImpl(MethodImplOptions.NoInlining)]
101+
private static void ShouldEqualEnumerableInternal(IEnumerable? actual, IEnumerable? expected)
102+
{
103+
if (actual == null && expected == null) return;
104+
if (actual == null || expected == null)
105+
{
106+
throw new ShouldAssertException(
107+
new ExpectedActualShouldlyMessage(expected, actual, null).ToString());
108+
}
97109
var actualList = new List<object>();
98110
foreach (var item in actual)
99111
{

0 commit comments

Comments
 (0)