FruityFoundation/Base.Tests/Structures/MaybeTests.cs

152 lines
3.5 KiB
C#
Raw Normal View History

2023-12-17 13:47:16 -05:00
using FruityFoundation.Base.Structures;
using NUnit.Framework;
namespace Base.Tests.Structures;
public class MaybeTests
{
[Test]
public void TestBind_DoesNotBindEmptyValue()
{
var emptyMaybe = Maybe.Empty<int>();
var result = emptyMaybe.Bind(x => Maybe.Create(x + 1));
2023-12-17 13:47:16 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.False);
}
[Test]
public void TestBind_BindsWhenHasValue()
{
var emptyMaybe = Maybe.Create<int>(1);
2023-12-17 13:47:16 -05:00
var result = emptyMaybe.Bind(x => Maybe.Create(x + 1));
2023-12-17 13:47:16 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(2));
}
[Test]
public void TestBind_BindsWhenHasValue_NewOutputType()
{
var maybe = Maybe.Create(25);
2023-12-17 13:47:16 -05:00
var result = maybe.Bind(x => x switch
{
25 => Maybe.Create("twenty-five"),
2023-12-17 13:47:16 -05:00
_ => Maybe.Empty<string>()
});
Assert.That(result, Is.InstanceOf<Maybe<string>>());
Assert.That(result.HasValue, Is.True);
}
2023-12-25 14:37:58 -05:00
[Test]
public void EmptyBind_DoesNotBindFactory_WhenHasValue()
{
var maybe = Maybe.Create(25);
2023-12-25 14:37:58 -05:00
var result = maybe.EmptyBind(() => Maybe.Create(30));
2023-12-25 14:37:58 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(25));
}
[Test]
public void EmptyBind_BindsFactory_WhenDoesNotHaveValue()
{
var maybe = Maybe.Empty<int>();
var result = maybe.EmptyBind(() => Maybe.Create(30));
2023-12-25 14:37:58 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(30));
}
[Test]
public void EmptyBind_DoesNotBindMaybe_WhenHasValue()
{
var maybe = Maybe.Create(25);
2023-12-25 14:37:58 -05:00
var result = maybe.EmptyBind(Maybe.Create(30));
2023-12-25 14:37:58 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(25));
}
[Test]
public void EmptyBind_BindsMaybe_WhenDoesNotHaveValue()
{
var maybe = Maybe.Empty<int>();
var result = maybe.EmptyBind(Maybe.Create(30));
2023-12-25 14:37:58 -05:00
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(30));
}
[Test]
public void Cast_ToNullableReferenceType_ReturnsEmptyMaybe_WhenHasNoValue()
{
// Arrange
var maybe = Maybe.Empty<string>();
// Act
var result = maybe.Cast<string?>();
// Assert
Assert.That(result, Is.InstanceOf<Maybe<string?>>());
Assert.That(result.HasValue, Is.False);
}
[Test]
public void Cast_ToNullableReferenceType_ReturnsMaybe_WhenHasValue()
{
// Arrange
var maybe = Maybe.Create("banana");
// Act
var result = maybe.Cast<string?>();
// Assert
Assert.That(result, Is.InstanceOf<Maybe<string?>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo("banana"));
}
[Test]
public void Cast_ToNullableValueType_ReturnsEmptyMaybe_WhenHasNoValue()
{
// Arrange
var maybe = Maybe.Empty<int>();
// Act
var result = maybe.Cast<string?>();
// Assert
Assert.That(result, Is.InstanceOf<Maybe<string?>>());
Assert.That(result.HasValue, Is.False);
}
[Test]
public void Cast_ToNullableValueType_ReturnsMaybe_WhenHasValue()
{
// Arrange
var maybe = Maybe.Create(25);
// Act
var result = maybe.Cast<int?>();
// Assert
Assert.That(result, Is.InstanceOf<Maybe<int?>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(25));
}
2023-12-17 13:47:16 -05:00
}