using System; using System.Collections.Generic; using System.Linq; using Masuit.Tools.RandomSelector; using Xunit; namespace Masuit.Tools.Abstractions.Test.RandomSelector; public class ExtensionsTests { [Fact] public void TotalWeight_ShouldReturnCorrectWeight() { var items = new List> { new WeightedItem("A", 1), new WeightedItem("B", 2), new WeightedItem("C", 3) }; var selector = new WeightedSelector(items); int totalWeight = selector.TotalWeight(); Assert.Equal(6, totalWeight); } [Fact] public void OrderByWeightDescending_ShouldReturnItemsInDescendingOrder() { var items = new List> { new WeightedItem("A", 1), new WeightedItem("B", 3), new WeightedItem("C", 2) }; var selector = new WeightedSelector(items); var orderedItems = selector.OrderByWeightDescending(); Assert.Equal("B", orderedItems[0].Value); Assert.Equal("C", orderedItems[1].Value); Assert.Equal("A", orderedItems[2].Value); } [Fact] public void OrderByWeightAscending_ShouldReturnItemsInAscendingOrder() { var items = new List> { new WeightedItem("A", 3), new WeightedItem("B", 1), new WeightedItem("C", 2) }; var selector = new WeightedSelector(items); var orderedItems = selector.OrderByWeightAscending(); Assert.Equal("B", orderedItems[0].Value); Assert.Equal("C", orderedItems[1].Value); Assert.Equal("A", orderedItems[2].Value); } [Fact] public void WeightedItem_ShouldReturnItemBasedOnWeight() { var items = new List> { new WeightedItem("A", 1), new WeightedItem("B", 2), new WeightedItem("C", 3) }; var selectedItem = items.WeightedItem(); Assert.Contains(selectedItem, items.Select(i => i.Value)); } [Fact] public void WeightedItems_ShouldReturnMultipleItemsBasedOnWeight() { var items = new List> { new WeightedItem("A", 1), new WeightedItem("B", 2), new WeightedItem("C", 3) }; var selectedItems = items.WeightedItems(2).ToList(); Assert.Equal(2, selectedItems.Count); Assert.All(selectedItems, item => Assert.Contains(item, items.Select(i => i.Value))); } [Fact] public void WeightedItems_WithKeySelector_ShouldReturnMultipleItemsBasedOnWeight() { var items = new List { "A", "B", "C" }; Func keySelector = s => s == "A" ? 1 : s == "B" ? 2 : 3; var selectedItems = items.WeightedItems(2, keySelector).ToList(); Assert.Equal(2, selectedItems.Count); Assert.All(selectedItems, item => Assert.Contains(item, items)); } [Fact] public void WeightedBy_WithKeySelector_ShouldReturnSingleItemBasedOnWeight() { var items = new List { "A", "B", "C" }; Func keySelector = s => s == "A" ? 1 : s == "B" ? 2 : 3; var selectedItem = items.WeightedBy(keySelector); Assert.Contains(selectedItem, items); } }