mirror of
https://github.com/bitwarden/server.git
synced 2024-12-11 15:17:44 +01:00
46 lines
1.2 KiB
C#
46 lines
1.2 KiB
C#
namespace Bit.Test.Common.Helpers;
|
|
|
|
public static class TestCaseHelper
|
|
{
|
|
public static IEnumerable<IEnumerable<T>> GetCombinations<T>(params T[] items)
|
|
{
|
|
var count = Math.Pow(2, items.Length);
|
|
for (var i = 0; i < count; i++)
|
|
{
|
|
var str = Convert.ToString(i, 2).PadLeft(items.Length, '0');
|
|
List<T> combination = new();
|
|
for (var j = 0; j < str.Length; j++)
|
|
{
|
|
if (str[j] == '1')
|
|
{
|
|
combination.Add(items[j]);
|
|
}
|
|
}
|
|
yield return combination;
|
|
}
|
|
}
|
|
|
|
public static IEnumerable<IEnumerable<object>> GetCombinationsOfMultipleLists(params IEnumerable<object>[] optionLists)
|
|
{
|
|
if (!optionLists.Any())
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
foreach (var item in optionLists.First())
|
|
{
|
|
var itemArray = new[] { item };
|
|
|
|
if (optionLists.Length == 1)
|
|
{
|
|
yield return itemArray;
|
|
}
|
|
|
|
foreach (var nextCombination in GetCombinationsOfMultipleLists(optionLists.Skip(1).ToArray()))
|
|
{
|
|
yield return itemArray.Concat(nextCombination);
|
|
}
|
|
}
|
|
}
|
|
}
|