208 lines
5.3 KiB
C#
208 lines
5.3 KiB
C#
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using NUnit.Framework;
|
|
|
|
/// <summary>
|
|
/// This class mirrors parts of the Assert API from NUnit in a sane way.
|
|
/// The problem with NUnit is that stuff like Assert.AreEqual(15, 16) creates allocations behind the scenes, so tests
|
|
/// that checks large collections will spend the vast majority of their time just checking their results.
|
|
/// You can use this by writing
|
|
/// using Assert = FastAssert;
|
|
/// at the top of your file. There are some parts of the API that you may need to fix up manually, mainly because this
|
|
/// class does not expose overloads like Assert.AreEqual(object a, object b) because that's just asking for pain.
|
|
/// </summary>
|
|
internal static class FastAssert
|
|
{
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void IsTrue(bool b)
|
|
{
|
|
if (!b)
|
|
{
|
|
Assert.IsTrue(b);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void IsTrue(bool b, string msg)
|
|
{
|
|
if (!b)
|
|
{
|
|
Assert.IsTrue(b, msg);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void True(bool b)
|
|
{
|
|
if (!b)
|
|
{
|
|
Assert.IsTrue(b);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void True(bool b, string msg)
|
|
{
|
|
if (!b)
|
|
{
|
|
Assert.IsTrue(b, msg);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void IsFalse(bool b)
|
|
{
|
|
if (b)
|
|
{
|
|
Assert.IsFalse(b);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void IsFalse(bool b, string msg)
|
|
{
|
|
if (b)
|
|
{
|
|
Assert.IsFalse(b, msg);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void False(bool b)
|
|
{
|
|
if (b)
|
|
{
|
|
Assert.IsFalse(b);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void False(bool b, string msg)
|
|
{
|
|
if (b)
|
|
{
|
|
Assert.IsFalse(b, msg);
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AreEqual<T>(in T a, in T b) where T : IEquatable<T>
|
|
{
|
|
if (!a.Equals(b))
|
|
{
|
|
Assert.Fail($"{a} != {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AreEqual<T>(in T a, in T b, string msg) where T : IEquatable<T>
|
|
{
|
|
if (!a.Equals(b))
|
|
{
|
|
Assert.Fail($"{a} != {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AreNotEqual<T>(in T a, in T b) where T : IEquatable<T>
|
|
{
|
|
if (a.Equals(b))
|
|
{
|
|
Assert.Fail($"{a} == {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void AreNotEqual<T>(in T a, in T b, string msg) where T : IEquatable<T>
|
|
{
|
|
if (a.Equals(b))
|
|
{
|
|
Assert.Fail($"{a} == {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LessOrEqual<T>(in T a, in T b) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) > 0)
|
|
{
|
|
Assert.Fail($"{a} > {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void LessOrEqual<T>(in T a, in T b, string msg) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) > 0)
|
|
{
|
|
Assert.Fail($"{a} > {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Less<T>(in T a, in T b) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) >= 0)
|
|
{
|
|
Assert.Fail($"{a} >= {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Less<T>(in T a, in T b, string msg) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) >= 0)
|
|
{
|
|
Assert.Fail($"{a} >= {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void GreaterOrEqual<T>(in T a, in T b) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) < 0)
|
|
{
|
|
Assert.Fail($"{a} < {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void GreaterOrEqual<T>(in T a, in T b, string msg) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) < 0)
|
|
{
|
|
Assert.Fail($"{a} < {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Greater<T>(in T a, in T b) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) <= 0)
|
|
{
|
|
Assert.Fail($"{a} <= {b}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Greater<T>(in T a, in T b, string msg) where T : IComparable<T>
|
|
{
|
|
if (a.CompareTo(b) <= 0)
|
|
{
|
|
Assert.Fail($"{a} <= {b}: {msg}");
|
|
}
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void DoesNotThrow(TestDelegate del)
|
|
{
|
|
Assert.DoesNotThrow(del);
|
|
}
|
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
public static void Throws<T>(TestDelegate del) where T : Exception
|
|
{
|
|
Assert.Throws<T>(del);
|
|
}
|
|
}
|