Files
stevanfreeborn.options/tests/StevanFreeborn.Options.Tests/OptionAsyncExtensionsTests.cs
T
2026-03-30 21:29:45 -05:00

54 lines
1.6 KiB
C#

using System.Globalization;
namespace StevanFreeborn.Options.Tests;
public class OptionAsyncExtensionsTests
{
[Test]
public async Task MapAsync_WhenSome_ItShouldTransformValue()
{
var option = Option.Some(5);
var mapped = await option.MapAsync(x => Task.FromResult(x.ToString(CultureInfo.InvariantCulture)));
await Assert.That(mapped.IsSome).IsTrue();
await Assert.That(mapped.Value).IsEqualTo("5");
}
[Test]
public async Task BindAsync_WhenSome_ItShouldChainToBinderResult()
{
var option = Option.Some(5);
var bound = await option.BindAsync(x => Task.FromResult(Option.Some(x.ToString(CultureInfo.InvariantCulture))));
await Assert.That(bound.IsSome).IsTrue();
await Assert.That(bound.Value).IsEqualTo("5");
}
[Test]
public async Task MatchAsync_WhenSome_ItShouldInvokeOnSome()
{
var option = Option.Some("test");
var result = await option.MatchAsync(v => Task.FromResult(v.Length), () => Task.FromResult(0));
await Assert.That(result).IsEqualTo(4);
}
[Test]
public async Task WhereAsync_WhenPredicateMatches_ItShouldReturnSameOption()
{
var option = Option.Some(10);
var filtered = await option.WhereAsync(x => Task.FromResult(x > 5));
await Assert.That(filtered).IsEqualTo(option);
}
[Test]
public async Task OrElseAsync_WhenNone_ItShouldReturnFallbackOption()
{
var option = Option.None<string>();
var result = await option.OrElseAsync(() => Task.FromResult(Option.Some("fallback")));
await Assert.That(result.IsSome).IsTrue();
await Assert.That(result.Value).IsEqualTo("fallback");
}
}