FruityFoundation/Base.Tests/Structures/MaybeExtensionTests.cs

136 lines
3.1 KiB
C#
Raw Normal View History

2023-08-01 22:12:54 -04:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
2023-08-01 22:12:54 -04:00
using FruityFoundation.Base.Structures;
using NUnit.Framework;
namespace Base.Tests.Structures;
public class MaybeExtensionTests
{
[Test]
public void Enumerable_FirstOrEmpty_WithEmptyEnumerable_ReturnsEmptyMaybe()
2023-08-01 22:12:54 -04:00
{
// Arrange
var data = Array.Empty<int>();
// Act
var result = data.FirstOrEmpty();
// Assert
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.False);
}
[Test]
public void Enumerable_FirstOrEmpty_WithMatchingPredicate_ReturnsMaybeWithValue()
{
// Arrange
var data = new[] { 1, 2, 3, 4 };
// Act
var result = data.FirstOrEmpty(x => x > 1);
// Assert
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(2));
}
[Test]
public void Enumerable_FirstOrEmpty_WithNonMatchingPredicate_ReturnsEmptyMaybe()
{
// Arrange
var data = new[] { 1, 2, 3, 4 };
// Act
var result = data.FirstOrEmpty(x => x > 100);
// Assert
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.False);
2023-08-01 22:12:54 -04:00
}
[Test]
public void TestToMaybe()
{
2024-04-30 13:39:53 -04:00
Assert.That(Maybe.Empty<int>(), Is.EqualTo(Maybe.Empty<int>()));
Assert.That(Maybe.Create(2), Is.Not.EqualTo(Maybe.Create(293921)));
2023-08-01 22:12:54 -04:00
}
[Test]
public void MaybeNullableTests()
{
2024-04-30 13:39:53 -04:00
Assert.That(Maybe.Empty<int>().ToNullable(), Is.Null);
Assert.That(Maybe.Create(0, evalIsEmpty: () => true).ToNullable(), Is.Null);
2023-08-01 22:12:54 -04:00
}
[Test]
public void IDictionaryTests_TryGetValue_ReturnsMaybeWithValue_ForValidKey()
{
var dict = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
var result = dict.TryGetValue("one");
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(1));
}
[Test]
public void IDictionaryTests_TryGetValue_ReturnsEmptyMaybe_ForInvalidKey()
{
var dict = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
var result = dict.TryGetValue("eight");
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.False);
}
[Test]
public void IReadOnlyDictionaryTests_TryGetValue_ReturnsMaybeWithValue_ForValidKey()
{
var baseDict = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
IReadOnlyDictionary<string, int> dict = new ReadOnlyDictionary<string, int>(baseDict);
var result = dict.TryGet("one");
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.True);
Assert.That(result.Value, Is.EqualTo(1));
}
[Test]
public void IIReadOnlyDictionaryTests_TryGetValue_ReturnsEmptyMaybe_ForInvalidKey()
{
var baseDict = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
IReadOnlyDictionary<string, int> dict = new ReadOnlyDictionary<string, int>(baseDict);
var result = dict.TryGet("eight");
Assert.That(result, Is.InstanceOf<Maybe<int>>());
Assert.That(result.HasValue, Is.False);
}
2023-08-01 22:12:54 -04:00
}