diff --git a/src/BizHawk.Tests/BizHawk.Tests.csproj b/src/BizHawk.Tests/BizHawk.Tests.csproj
index 89447a5c10..fbe3d47172 100644
--- a/src/BizHawk.Tests/BizHawk.Tests.csproj
+++ b/src/BizHawk.Tests/BizHawk.Tests.csproj
@@ -14,6 +14,7 @@
+
diff --git a/src/BizHawk.Tests/Client.Common/Api/MemoryApiTests.cs b/src/BizHawk.Tests/Client.Common/Api/MemoryApiTests.cs
index 8e2e10df8c..339fb49717 100644
--- a/src/BizHawk.Tests/Client.Common/Api/MemoryApiTests.cs
+++ b/src/BizHawk.Tests/Client.Common/Api/MemoryApiTests.cs
@@ -1,6 +1,4 @@
-using System.Collections;
using System.Collections.Generic;
-using System.Linq;
using BizHawk.Common;
using BizHawk.Client.Common;
@@ -11,15 +9,6 @@ namespace BizHawk.Tests.Client.Common.Api
[TestClass]
public sealed class MemoryApiTests
{
- /// and its overloads can't take -_-
- private static void AssertAreSequenceEqual(IReadOnlyList expected, IReadOnlyList actual, string message)
- {
- if (actual.SequenceEqual(expected)) return;
- Console.WriteLine($"ex[{expected.Count}]: {string.Join(", ", expected.Select(static o => o?.ToString() ?? "null"))}");
- Console.WriteLine($"ac[{actual.Count}]: {string.Join(", ", actual.Select(static o => o?.ToString() ?? "null"))}");
- Assert.Fail(message);
- }
-
private IMemoryApi CreateDummyApi(byte[] memDomainContents)
=> new MemoryApi(Console.WriteLine) //TODO capture and check for error messages?
{
@@ -33,35 +22,35 @@ namespace BizHawk.Tests.Client.Common.Api
public void TestBulkPeek()
{
var memApi = CreateDummyApi(new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF });
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { default, default, default },
memApi.ReadByteRange(addr: -5, length: 3),
"fully below lower boundary");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { default, default, 0x01, 0x23 },
memApi.ReadByteRange(addr: -2, length: 4),
"crosses lower boundary");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { default, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, default },
memApi.ReadByteRange(addr: -1, length: 10),
"crosses both boundaries");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF },
memApi.ReadByteRange(addr: 0, length: 8),
"whole domain");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { 0x23, 0x45, 0x67, 0x89, 0xAB },
memApi.ReadByteRange(addr: 1, length: 5),
"strict contains");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
Array.Empty(),
memApi.ReadByteRange(addr: 3, length: 0),
"empty");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { 0xCD, 0xEF, default },
memApi.ReadByteRange(addr: 6, length: 3),
"crosses upper boundary");
- AssertAreSequenceEqual(
+ CollectionAssert.That.AreEqual(
new byte[] { default, default, default, default },
memApi.ReadByteRange(addr: 9, length: 4),
"fully above upper boundary");
@@ -74,7 +63,7 @@ namespace BizHawk.Tests.Client.Common.Api
{
var memDomainContents = new byte[8];
action(CreateDummyApi(memDomainContents));
- AssertAreSequenceEqual(expected, memDomainContents, message);
+ CollectionAssert.That.AreEqual(expected, memDomainContents, message);
}
TestCase(
new byte[8],
diff --git a/src/BizHawk.Tests/Client.Common/config/CorePickerStabilityTests.cs b/src/BizHawk.Tests/Client.Common/config/CorePickerStabilityTests.cs
index 7c35f1266a..38f8ef1afc 100644
--- a/src/BizHawk.Tests/Client.Common/config/CorePickerStabilityTests.cs
+++ b/src/BizHawk.Tests/Client.Common/config/CorePickerStabilityTests.cs
@@ -3,7 +3,6 @@ using System.Linq;
using BizHawk.Client.Common;
using BizHawk.Common;
-using BizHawk.Common.CollectionExtensions;
using BizHawk.Emulation.Cores;
namespace BizHawk.Tests.Client.Common.config
@@ -21,13 +20,14 @@ namespace BizHawk.Tests.Client.Common.config
.ToHashSet();
foreach (var sysID in DefaultCorePrefDict.Keys)
{
- Assert.IsTrue(multiCoreSystems.Contains(sysID), $"a default core preference exists for {sysID} but that system doesn't have alternate cores");
+ CollectionAssert.That.Contains(multiCoreSystems, sysID, $"a default core preference exists for {sysID} but that system doesn't have alternate cores");
}
foreach (var (appliesTo, _) in Config.CorePickerUIData)
{
- Assert.IsTrue(
- appliesTo.All(multiCoreSystems.Contains),
- appliesTo.Length is 1
+ CollectionAssert.That.IsSubsetOf(
+ superset: multiCoreSystems,
+ subset: appliesTo,
+ message: appliesTo.Length is 1
? $"core picker has submenu for {appliesTo[0]}, but that system doesn't have alternate cores"
#pragma warning disable MA0089 // CI build this for .NET Core where there's a `char` overload for `string.Join`
: $"core picker has submenu for {appliesTo[0]} ({string.Join("/", appliesTo)}), but none of those systems have alternate cores");
@@ -41,11 +41,11 @@ namespace BizHawk.Tests.Client.Common.config
var allCoreNames = CoreInventory.Instance.SystemsFlat.Select(coreInfo => coreInfo.Name).ToHashSet();
foreach (var (sysID, coreName) in DefaultCorePrefDict)
{
- Assert.IsTrue(allCoreNames.Contains(coreName), $"default core preference for {sysID} is \"{coreName}\", which doesn't exist");
+ CollectionAssert.That.Contains(allCoreNames, coreName, $"default core preference for {sysID} is \"{coreName}\", which doesn't exist");
}
foreach (var (appliesTo, coreNames) in Config.CorePickerUIData) foreach (var coreName in coreNames)
{
- Assert.IsTrue(allCoreNames.Contains(coreName), $"core picker includes nonexistant core \"{coreName}\" under {appliesTo[0]} group");
+ CollectionAssert.That.Contains(allCoreNames, coreName, $"core picker includes nonexistant core \"{coreName}\" under {appliesTo[0]} group");
}
}
@@ -55,8 +55,8 @@ namespace BizHawk.Tests.Client.Common.config
var multiCoreSystems = CoreInventory.Instance.AllCores.Where(kvp => kvp.Value.Count != 1).ToArray();
foreach (var (sysID, cores) in multiCoreSystems)
{
- Assert.IsTrue(DefaultCorePrefDict.ContainsKey(sysID), $"missing default core preference for {sysID} with {cores.Count} core choices");
- Assert.IsTrue(Config.CorePickerUIData.Any(item => item.AppliesTo.Contains(sysID)), $"missing core picker submenu for {sysID} with {cores.Count} core choices");
+ CollectionAssert.That.ContainsKey(DefaultCorePrefDict, sysID, $"missing default core preference for {sysID} with {cores.Count} core choices");
+ CollectionAssert.That.Contains(Config.CorePickerUIData.SelectMany(static item => item.AppliesTo), sysID, $"missing core picker submenu for {sysID} with {cores.Count} core choices");
}
}
}
diff --git a/src/BizHawk.Tests/Client.Common/dearchive/DearchivalTests.cs b/src/BizHawk.Tests/Client.Common/dearchive/DearchivalTests.cs
index 7c24552228..abec6e1df9 100644
--- a/src/BizHawk.Tests/Client.Common/dearchive/DearchivalTests.cs
+++ b/src/BizHawk.Tests/Client.Common/dearchive/DearchivalTests.cs
@@ -44,7 +44,7 @@ namespace BizHawk.Tests.Client.Common.Dearchive
using MemoryStream ms = new((int) items[0].Size);
af.ExtractFile(items[0].ArchiveIndex, ms);
ms.Seek(0L, SeekOrigin.Begin);
- Assert.IsTrue(ms.ReadAllBytes().SequenceEqual(Rom), $"the file extracted from {filename} doesn't match the uncompressed file");
+ CollectionAssert.AreEqual(Rom, ms.ReadAllBytes(), $"the file extracted from {filename} doesn't match the uncompressed file");
}
}
}
diff --git a/src/BizHawk.Tests/Common/CollectionExtensions/CollectionExtensionTests.cs b/src/BizHawk.Tests/Common/CollectionExtensions/CollectionExtensionTests.cs
index eef2a840a7..0f2ac6dd50 100644
--- a/src/BizHawk.Tests/Common/CollectionExtensions/CollectionExtensionTests.cs
+++ b/src/BizHawk.Tests/Common/CollectionExtensions/CollectionExtensionTests.cs
@@ -1,6 +1,5 @@
using System.Collections;
using System.Collections.Generic;
-using System.Linq;
using BizHawk.Common.CollectionExtensions;
@@ -66,22 +65,22 @@ namespace BizHawk.Tests.Common.CollectionExtensions
{
var a123 = new[] { 1, 2, 3 };
var a456 = new[] { 4, 5, 6 };
- Assert.IsTrue(a123.ConcatArray(a456).SequenceEqual(new[] { 1, 2, 3, 4, 5, 6 }));
+ CollectionAssert.AreEqual(new[] { 1, 2, 3, 4, 5, 6 }, a123.ConcatArray(a456));
Assert.AreSame(a123, a123.ConcatArray(Array.Empty()));
Assert.AreSame(a456, Array.Empty().ConcatArray(a456));
- Assert.AreEqual(0, Array.Empty().ConcatArray(Array.Empty()).Length);
+ CollectionAssert.That.IsEmpty(Array.Empty().ConcatArray(Array.Empty()));
}
[TestMethod]
public void TestConcatArrays()
{
- Assert.IsTrue(
- CE.ConcatArrays([ [ 1, 2 ], [ 3 ], [ ], [ 4, 5, 6 ] ])
- .SequenceEqual([ 1, 2, 3, 4, 5, 6 ]),
+ CollectionAssert.AreEqual(
+ new[] { 1, 2, 3, 4, 5, 6 },
+ CE.ConcatArrays([ [ 1, 2 ], [ 3 ], [ ], [ 4, 5, 6 ] ]),
"array");
- Assert.IsTrue(
- CE.ConcatArrays([ new ArraySegment([ 1, 2 ]), new ArraySegment([ 3 ]), [ ], new ArraySegment([ 4, 5, 6 ]) ])
- .SequenceEqual([ 1, 2, 3, 4, 5, 6 ]),
+ CollectionAssert.AreEqual(
+ new[] { 1, 2, 3, 4, 5, 6 },
+ CE.ConcatArrays([ new ArraySegment([ 1, 2 ]), new ArraySegment([ 3 ]), [ ], new ArraySegment([ 4, 5, 6 ]) ]),
"ArraySegment");
}
diff --git a/src/BizHawk.Tests/Common/CustomCollections/CustomCollectionTests.cs b/src/BizHawk.Tests/Common/CustomCollections/CustomCollectionTests.cs
index f15333a887..af65ab4fcb 100644
--- a/src/BizHawk.Tests/Common/CustomCollections/CustomCollectionTests.cs
+++ b/src/BizHawk.Tests/Common/CustomCollections/CustomCollectionTests.cs
@@ -1,6 +1,4 @@
-using System.Linq;
-
-using BizHawk.Common;
+using BizHawk.Common;
namespace BizHawk.Tests.Common.CustomCollections
{
@@ -14,7 +12,7 @@ namespace BizHawk.Tests.Common.CustomCollections
list.Add(5); // `Insert` when `BinarySearch` returns negative
list.Add(8); // `Insert` when `BinarySearch` returns non-negative
list.Remove(3); // `Remove` when `BinarySearch` returns non-negative
- Assert.IsTrue(list.ToArray().SequenceEqual(new[] { 1, 4, 5, 7, 8, 8, 9, 11 }));
+ CollectionAssert.AreEqual(new[] { 1, 4, 5, 7, 8, 8, 9, 11 }, list);
Assert.IsFalse(list.Remove(10)); // `Remove` when `BinarySearch` returns negative
}
@@ -22,8 +20,8 @@ namespace BizHawk.Tests.Common.CustomCollections
public void TestSortedListContains()
{
var list = new SortedList(new[] { 1, 3, 4, 7, 8, 9, 11 });
- Assert.IsFalse(list.Contains(6)); // `Contains` when `BinarySearch` returns negative
- Assert.IsTrue(list.Contains(11)); // `Contains` when `BinarySearch` returns non-negative
+ CollectionAssert.DoesNotContain(list, 6, "`Contains` when `BinarySearch` returns negative");
+ CollectionAssert.Contains(list, 11, "`Contains` when `BinarySearch` returns non-negative");
}
[TestMethod]
@@ -32,16 +30,16 @@ namespace BizHawk.Tests.Common.CustomCollections
SortedList list = new([ 1, 4, 7 ]);
Assert.ThrowsException(() => list.Insert(index: 3, item: 0), "setting [^0] (appending) out-of-order should throw");
list.Insert(index: 3, item: 10);
- Assert.IsTrue(list.SequenceEqual([ 1, 4, 7, 10 ]), "expecting [ 1, 4, 7, 10 ]");
+ CollectionAssert.AreEqual(new[] { 1, 4, 7, 10 }, list, "expecting [ 1, 4, 7, 10 ]");
Assert.ThrowsException(() => list.Insert(index: 3, item: 0), "setting [^1] out-of-order should throw");
list.Insert(index: 3, item: 9);
- Assert.IsTrue(list.SequenceEqual([ 1, 4, 7, 9, 10 ]), "expecting [ 1, 4, 7, 9, 10 ]");
+ CollectionAssert.AreEqual(new[] { 1, 4, 7, 9, 10 }, list, "expecting [ 1, 4, 7, 9, 10 ]");
Assert.ThrowsException(() => list.Insert(index: 1, item: 9), "setting [1] out-of-order should throw");
list.Insert(index: 1, item: 3);
- Assert.IsTrue(list.SequenceEqual([ 1, 3, 4, 7, 9, 10 ]), "expecting [ 1, 3, 4, 7, 9, 10 ]");
+ CollectionAssert.AreEqual(new[] { 1, 3, 4, 7, 9, 10 }, list, "expecting [ 1, 3, 4, 7, 9, 10 ]");
Assert.ThrowsException(() => list.Insert(index: 0, item: 9), "setting [0] out-of-order should throw");
list.Insert(index: 0, item: 0);
- Assert.IsTrue(list.SequenceEqual([ 0, 1, 3, 4, 7, 9, 10 ]), "expecting [ 0, 1, 3, 4, 7, 9, 10 ]");
+ CollectionAssert.AreEqual(new[] { 0, 1, 3, 4, 7, 9, 10 }, list, "expecting [ 0, 1, 3, 4, 7, 9, 10 ]");
}
[TestMethod]
@@ -52,7 +50,7 @@ namespace BizHawk.Tests.Common.CustomCollections
{
var sortlist = new SortedList(before);
sortlist.RemoveAfter(removeItem);
- Assert.IsTrue(sortlist.ToArray().SequenceEqual(after));
+ CollectionAssert.AreEqual(after, sortlist);
}
[TestMethod]
@@ -61,14 +59,14 @@ namespace BizHawk.Tests.Common.CustomCollections
SortedList list = new([ 1, 3, 4 ]);
Assert.ThrowsException(() => list[1] = 9, "setting [1] out-of-order should throw");
list[1] = 2;
- Assert.IsTrue(list.SequenceEqual([ 1, 2, 4 ]), "expecting [ 1, 2, 4 ]");
+ CollectionAssert.AreEqual(new[] { 1, 2, 4 }, list, "expecting [ 1, 2, 4 ]");
Assert.ThrowsException(() => list[0] = 9, "setting [0] out-of-order should throw");
list[0] = 0;
Assert.ThrowsException(() => list[2] = 0, "setting [^1] out-of-order should throw");
list[2] = 9;
Assert.ThrowsException*NotSupportedException*/ArgumentOutOfRangeException>(() => list[3] = 0, "setting [^0] (appending) out-of-order should throw");
Assert.ThrowsException(() => list[3] = 10, "setting [^0] (appending) properly should throw"); // to match BCL `List`
- Assert.IsTrue(list.SequenceEqual([ 0, 2, 9 ]), "expecting [ 0, 2, 9 ]");
+ CollectionAssert.AreEqual(new[] { 0, 2, 9 }, list, "expecting [ 0, 2, 9 ]");
}
}
}
diff --git a/src/BizHawk.Tests/Common/EndiannessUtils/EndiannessUtilsTests.cs b/src/BizHawk.Tests/Common/EndiannessUtils/EndiannessUtilsTests.cs
index 0f487e22dc..808bad0b20 100644
--- a/src/BizHawk.Tests/Common/EndiannessUtils/EndiannessUtilsTests.cs
+++ b/src/BizHawk.Tests/Common/EndiannessUtils/EndiannessUtilsTests.cs
@@ -13,9 +13,9 @@ namespace BizHawk.Tests.Common
var b = new byte[] { 0x23, 0x01, 0x67, 0x45, 0xAB, 0x89, 0xEF, 0xCD }.AsSpan();
var a = b.ToArray().AsSpan();
EndiannessUtils.MutatingByteSwap16(a);
- Assert.IsTrue(a.SequenceEqual(expected));
+ CollectionAssert.That.AreEqual(expected, a);
EndiannessUtils.MutatingByteSwap16(a);
- Assert.IsTrue(a.SequenceEqual(b));
+ CollectionAssert.That.AreEqual(b, a);
}
[TestMethod]
@@ -24,9 +24,9 @@ namespace BizHawk.Tests.Common
var b = new byte[] { 0x67, 0x45, 0x23, 0x01, 0xEF, 0xCD, 0xAB, 0x89 }.AsSpan();
var a = b.ToArray().AsSpan();
EndiannessUtils.MutatingByteSwap32(a);
- Assert.IsTrue(a.SequenceEqual(expected));
+ CollectionAssert.That.AreEqual(expected, a);
EndiannessUtils.MutatingByteSwap32(a);
- Assert.IsTrue(a.SequenceEqual(b));
+ CollectionAssert.That.AreEqual(b, a);
}
[TestMethod]
@@ -35,9 +35,9 @@ namespace BizHawk.Tests.Common
var b = new byte[] { 0x45, 0x67, 0x01, 0x23, 0xCD, 0xEF, 0x89, 0xAB }.AsSpan();
var a = b.ToArray().AsSpan();
EndiannessUtils.MutatingShortSwap32(a);
- Assert.IsTrue(a.SequenceEqual(expected));
+ CollectionAssert.That.AreEqual(expected, a);
EndiannessUtils.MutatingShortSwap32(a);
- Assert.IsTrue(a.SequenceEqual(b));
+ CollectionAssert.That.AreEqual(b, a);
}
}
}
diff --git a/src/BizHawk.Tests/Common/MultiPredicateSort/MultiPredicateSortTests.cs b/src/BizHawk.Tests/Common/MultiPredicateSort/MultiPredicateSortTests.cs
index ddfc081a01..5efae13577 100644
--- a/src/BizHawk.Tests/Common/MultiPredicateSort/MultiPredicateSortTests.cs
+++ b/src/BizHawk.Tests/Common/MultiPredicateSort/MultiPredicateSortTests.cs
@@ -14,19 +14,17 @@ namespace BizHawk.Tests.Common.MultiPredicateSort
private static readonly (int X, string Y)[] SortedByYDescThenXDesc = { (2, "b"), (1, "b"), (2, "a"), (1, "a") };
- private static void AssertSequenceEqual(IEnumerable expected, IEnumerable actual) => Assert.IsTrue(expected.SequenceEqual(actual));
-
[TestMethod]
public void SanityCheck()
{
- AssertSequenceEqual(
+ CollectionAssert.AreEqual(
SortedByYDescThenXDesc,
- Unsorted.OrderByDescending(t => t.Y).ThenByDescending(t => t.X)
+ Unsorted.OrderByDescending(t => t.Y).ThenByDescending(t => t.X).ToArray()
);
#pragma warning disable MA0030
- AssertSequenceEqual(
+ CollectionAssert.AreEqual(
SortedByYDescThenXDesc,
- Unsorted.OrderByDescending(t => t.X).OrderByDescending(t => t.Y)
+ Unsorted.OrderByDescending(t => t.X).OrderByDescending(t => t.Y).ToArray()
);
#pragma warning restore MA0030
}
@@ -39,7 +37,7 @@ namespace BizHawk.Tests.Common.MultiPredicateSort
["by_x"] = t => t.X,
["by_y"] = t => t.Y
});
- AssertSequenceEqual(
+ CollectionAssert.AreEqual(
SortedByXThenYDesc,
sorts.AppliedTo(
Unsorted,
@@ -47,7 +45,7 @@ namespace BizHawk.Tests.Common.MultiPredicateSort
new Dictionary { ["by_x"] = false, ["by_y"] = true }
)
);
- AssertSequenceEqual(
+ CollectionAssert.AreEqual(
SortedByYDescThenXDesc,
sorts.AppliedTo(
Unsorted,
diff --git a/src/BizHawk.Tests/Common/checksums/SHA1Tests.cs b/src/BizHawk.Tests/Common/checksums/SHA1Tests.cs
index c4b81ac269..bdeb0fb54d 100644
--- a/src/BizHawk.Tests/Common/checksums/SHA1Tests.cs
+++ b/src/BizHawk.Tests/Common/checksums/SHA1Tests.cs
@@ -1,7 +1,6 @@
using System.Text;
using BizHawk.Common;
-using BizHawk.Common.CollectionExtensions;
namespace BizHawk.Tests.Common.checksums
{
@@ -15,7 +14,7 @@ namespace BizHawk.Tests.Common.checksums
byte[] data = [ ]; // empty data
byte[] expectedSha = [ 0xDA, 0x39, 0xA3, 0xEE, 0x5E, 0x6B, 0x4B, 0x0D, 0x32, 0x55, 0xBF, 0xEF, 0x95, 0x60, 0x18, 0x90, 0xAF, 0xD8, 0x07, 0x09 ];
- Assert.IsTrue(expectedSha.SequenceEqual(SHA1Checksum.Compute(data)));
+ CollectionAssert.AreEqual(expectedSha, SHA1Checksum.Compute(data));
}
[TestMethod]
@@ -24,14 +23,14 @@ namespace BizHawk.Tests.Common.checksums
byte[] data = "hash"u8.ToArray(); // random short data
byte[] expectedSha = [ 0x23, 0x46, 0xAD, 0x27, 0xD7, 0x56, 0x8B, 0xA9, 0x89, 0x6F, 0x1B, 0x7D, 0xA6, 0xB5, 0x99, 0x12, 0x51, 0xDE, 0xBD, 0xF2 ];
- Assert.IsTrue(expectedSha.SequenceEqual(SHA1Checksum.Compute(data)));
- Assert.IsTrue(expectedSha.SequenceEqual(SHA1Checksum.ComputeConcat(Array.Empty(), data)));
- Assert.IsTrue(expectedSha.SequenceEqual(SHA1Checksum.ComputeConcat(data, Array.Empty())));
+ CollectionAssert.AreEqual(expectedSha, SHA1Checksum.Compute(data), "direct");
+ CollectionAssert.AreEqual(expectedSha, SHA1Checksum.ComputeConcat(Array.Empty(), data), "prepend nothing");
+ CollectionAssert.AreEqual(expectedSha, SHA1Checksum.ComputeConcat(data, Array.Empty()), "append nothing");
data = "ha"u8.ToArray();
byte[] data2 = "sh"u8.ToArray();
- Assert.IsTrue(expectedSha.SequenceEqual(SHA1Checksum.ComputeConcat(data, data2)));
+ CollectionAssert.AreEqual(expectedSha, SHA1Checksum.ComputeConcat(data, data2), "halved and recombined");
}
[TestMethod]
@@ -41,16 +40,16 @@ namespace BizHawk.Tests.Common.checksums
byte[] data = Encoding.ASCII.GetBytes(testString);
byte[] expectedSha1 = [ 0x40, 0x8D, 0x94, 0x38, 0x42, 0x16, 0xF8, 0x90, 0xFF, 0x7A, 0x0C, 0x35, 0x28, 0xE8, 0xBE, 0xD1, 0xE0, 0xB0, 0x16, 0x21 ];
- Assert.IsTrue(expectedSha1.SequenceEqual(SHA1Checksum.Compute(data)));
+ CollectionAssert.AreEqual(expectedSha1, SHA1Checksum.Compute(data), "first");
data = new byte[65];
Encoding.ASCII.GetBytes(testString).CopyTo(data, 0);
byte[] expectedSha2 = [ 0x65, 0x87, 0x84, 0xE2, 0x68, 0xBF, 0xB1, 0x67, 0x94, 0x7B, 0xB7, 0xF3, 0xFB, 0x76, 0x69, 0x62, 0x79, 0x3E, 0x8C, 0x46 ];
- Assert.IsTrue(expectedSha2.SequenceEqual(SHA1Checksum.Compute(data.AsSpan(0, 64))));
+ CollectionAssert.AreEqual(expectedSha2, SHA1Checksum.Compute(data.AsSpan(0, 64)), "second");
byte[] expectedSha3 = [ 0x34, 0xF3, 0xA2, 0x57, 0xBD, 0x12, 0x5E, 0x6E, 0x0E, 0x28, 0xD0, 0xE5, 0xDA, 0xBE, 0x22, 0x28, 0x97, 0xFA, 0x69, 0x55 ];
- Assert.IsTrue(expectedSha3.SequenceEqual(SHA1Checksum.Compute(data)));
+ CollectionAssert.AreEqual(expectedSha3, SHA1Checksum.Compute(data), "third");
}
}
}
diff --git a/src/BizHawk.Tests/Emulation.Common/Database/FirmwareDatabaseTests.cs b/src/BizHawk.Tests/Emulation.Common/Database/FirmwareDatabaseTests.cs
index 14f53db13a..916d1d6996 100644
--- a/src/BizHawk.Tests/Emulation.Common/Database/FirmwareDatabaseTests.cs
+++ b/src/BizHawk.Tests/Emulation.Common/Database/FirmwareDatabaseTests.cs
@@ -15,7 +15,10 @@ namespace BizHawk.Tests.Emulation.Common
[TestMethod]
public void CheckFilesInOptions()
{
- foreach (var fo in FirmwareDatabase.FirmwareOptions) Assert.IsTrue(FirmwareDatabase.FirmwareFilesByHash.ContainsKey(fo.Hash), $"option {fo.ID} references unknown file {fo.Hash}");
+ foreach (var fo in FirmwareDatabase.FirmwareOptions)
+ {
+ CollectionAssert.That.ContainsKey(FirmwareDatabase.FirmwareFilesByHash, fo.Hash, $"option {fo.ID} references unknown file {fo.Hash}");
+ }
}
[TestMethod]
diff --git a/src/BizHawk.Tests/TestAssertions.cs b/src/BizHawk.Tests/TestAssertions.cs
new file mode 100644
index 0000000000..a465dc79b7
--- /dev/null
+++ b/src/BizHawk.Tests/TestAssertions.cs
@@ -0,0 +1,84 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace BizHawk.Tests
+{
+ public static class TestAssertions
+ {
+ public static void AreEqual(
+ this CollectionAssert assert,
+ ICollection expected,
+ ICollection actual,
+ string? message = null)
+ {
+ if (actual.SequenceEqual(expected)) return;
+ Console.WriteLine($"ex{PrettyPrint(expected)}\nac{PrettyPrint(actual)}");
+ Assert.Fail(message);
+ }
+
+ public static void AreEqual(
+ this CollectionAssert assert,
+ IReadOnlyCollection expected,
+ IReadOnlyCollection actual,
+ string? message = null)
+ {
+ if (actual.SequenceEqual(expected)) return;
+ Console.WriteLine($"ex{PrettyPrint(expected)}\nac{PrettyPrint(actual)}");
+ Assert.Fail(message);
+ }
+
+ public static void AreEqual(
+ this CollectionAssert assert,
+ ReadOnlySpan expected,
+ ReadOnlySpan actual,
+ string? message = null)
+ where T : IEquatable
+ {
+ if (actual.SequenceEqual(expected)) return;
+ Console.WriteLine($"ex{PrettyPrint((ICollection) expected.ToArray())}\nac{PrettyPrint((ICollection) actual.ToArray())}");
+ Assert.Fail(message);
+ }
+
+ public static void AreEqual(
+ this CollectionAssert assert,
+ Span expected,
+ Span actual,
+ string? message = null)
+ where T : IEquatable
+ => assert.AreEqual((ReadOnlySpan) expected, actual, message);
+
+ public static void Contains(
+ this CollectionAssert assert,
+ IEnumerable collection,
+ T element,
+ string? message = null)
+ => Assert.IsTrue(collection.Contains(element), message);
+
+ public static void ContainsKey(
+ this CollectionAssert assert,
+ IReadOnlyDictionary dict,
+ TKey key,
+ string? message = null)
+ => Assert.IsTrue(dict.ContainsKey(key), message);
+
+ public static void IsEmpty(
+ this CollectionAssert assert,
+ IReadOnlyCollection collection,
+ string? message = null)
+ => Assert.IsTrue(collection.Count is 0, message);
+
+ /// dumb param order matches predefined method
+ public static void IsSubsetOf(
+ this CollectionAssert assert,
+ ICollection subset,
+ ICollection superset,
+ string? message = null)
+ => Assert.IsTrue(subset.All(superset.Contains), message);
+
+ private static string PrettyPrint(ICollection collection)
+ => $"[{collection.Count}]: {string.Join(", ", collection.Select(static o => o?.ToString() ?? "null"))}";
+
+ private static string PrettyPrint(IReadOnlyCollection collection)
+ => $"[{collection.Count}]: {string.Join(", ", collection.Select(static o => o?.ToString() ?? "null"))}";
+ }
+}