1
0
mirror of https://github.com/bitwarden/server.git synced 2024-11-28 13:15:12 +01:00
bitwarden-server/test/Common/Helpers/TestCaseHelper.cs
2022-08-29 16:06:55 -04:00

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);
}
}
}
}