ExtensionsTests.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Masuit.Tools.RandomSelector;
  5. using Xunit;
  6. namespace Masuit.Tools.Abstractions.Test.RandomSelector;
  7. public class ExtensionsTests
  8. {
  9. [Fact]
  10. public void TotalWeight_ShouldReturnCorrectWeight()
  11. {
  12. var items = new List<WeightedItem<string>>
  13. {
  14. new WeightedItem<string>("A", 1),
  15. new WeightedItem<string>("B", 2),
  16. new WeightedItem<string>("C", 3)
  17. };
  18. var selector = new WeightedSelector<string>(items);
  19. int totalWeight = selector.TotalWeight();
  20. Assert.Equal(6, totalWeight);
  21. }
  22. [Fact]
  23. public void OrderByWeightDescending_ShouldReturnItemsInDescendingOrder()
  24. {
  25. var items = new List<WeightedItem<string>>
  26. {
  27. new WeightedItem<string>("A", 1),
  28. new WeightedItem<string>("B", 3),
  29. new WeightedItem<string>("C", 2)
  30. };
  31. var selector = new WeightedSelector<string>(items);
  32. var orderedItems = selector.OrderByWeightDescending();
  33. Assert.Equal("B", orderedItems[0].Value);
  34. Assert.Equal("C", orderedItems[1].Value);
  35. Assert.Equal("A", orderedItems[2].Value);
  36. }
  37. [Fact]
  38. public void OrderByWeightAscending_ShouldReturnItemsInAscendingOrder()
  39. {
  40. var items = new List<WeightedItem<string>>
  41. {
  42. new WeightedItem<string>("A", 3),
  43. new WeightedItem<string>("B", 1),
  44. new WeightedItem<string>("C", 2)
  45. };
  46. var selector = new WeightedSelector<string>(items);
  47. var orderedItems = selector.OrderByWeightAscending();
  48. Assert.Equal("B", orderedItems[0].Value);
  49. Assert.Equal("C", orderedItems[1].Value);
  50. Assert.Equal("A", orderedItems[2].Value);
  51. }
  52. [Fact]
  53. public void WeightedItem_ShouldReturnItemBasedOnWeight()
  54. {
  55. var items = new List<WeightedItem<string>>
  56. {
  57. new WeightedItem<string>("A", 1),
  58. new WeightedItem<string>("B", 2),
  59. new WeightedItem<string>("C", 3)
  60. };
  61. var selectedItem = items.WeightedItem();
  62. Assert.Contains(selectedItem, items.Select(i => i.Value));
  63. }
  64. [Fact]
  65. public void WeightedItems_ShouldReturnMultipleItemsBasedOnWeight()
  66. {
  67. var items = new List<WeightedItem<string>>
  68. {
  69. new WeightedItem<string>("A", 1),
  70. new WeightedItem<string>("B", 2),
  71. new WeightedItem<string>("C", 3)
  72. };
  73. var selectedItems = items.WeightedItems(2).ToList();
  74. Assert.Equal(2, selectedItems.Count);
  75. Assert.All(selectedItems, item => Assert.Contains(item, items.Select(i => i.Value)));
  76. }
  77. [Fact]
  78. public void WeightedItems_WithKeySelector_ShouldReturnMultipleItemsBasedOnWeight()
  79. {
  80. var items = new List<string> { "A", "B", "C" };
  81. Func<string, int> keySelector = s => s == "A" ? 1 : s == "B" ? 2 : 3;
  82. var selectedItems = items.WeightedItems(2, keySelector).ToList();
  83. Assert.Equal(2, selectedItems.Count);
  84. Assert.All(selectedItems, item => Assert.Contains(item, items));
  85. }
  86. [Fact]
  87. public void WeightedBy_WithKeySelector_ShouldReturnSingleItemBasedOnWeight()
  88. {
  89. var items = new List<string> { "A", "B", "C" };
  90. Func<string, int> keySelector = s => s == "A" ? 1 : s == "B" ? 2 : 3;
  91. var selectedItem = items.WeightedBy(keySelector);
  92. Assert.Contains(selectedItem, items);
  93. }
  94. }