Utils for determining if an enum flags value contains any flags

This commit is contained in:
Chris Cameron
2017-08-08 11:28:42 -04:00
parent da3408c66a
commit 874b4f4984
2 changed files with 55 additions and 15 deletions

View File

@@ -7,7 +7,7 @@ namespace ICD.Common.Utils.Tests_NetStandard
[TestFixture] [TestFixture]
public sealed class EnumUtilsTest public sealed class EnumUtilsTest
{ {
private enum eTestEnum public enum eTestEnum
{ {
None = 0, None = 0,
A = 1, A = 1,
@@ -16,7 +16,7 @@ namespace ICD.Common.Utils.Tests_NetStandard
} }
[Flags] [Flags]
private enum eTestFlagsEnum public enum eTestFlagsEnum
{ {
None = 0, None = 0,
A = 1, A = 1,
@@ -208,11 +208,28 @@ namespace ICD.Common.Utils.Tests_NetStandard
Assert.IsTrue(EnumUtils.HasMultipleFlags(eTestFlagsEnum.A | eTestFlagsEnum.B)); Assert.IsTrue(EnumUtils.HasMultipleFlags(eTestFlagsEnum.A | eTestFlagsEnum.B));
} }
#endregion [TestCase(false, eTestFlagsEnum.None)]
[TestCase(true, eTestFlagsEnum.B)]
[TestCase(true, eTestFlagsEnum.B | eTestFlagsEnum.C)]
public void HasAnyFlagsTest(bool expected, eTestFlagsEnum value)
{
Assert.AreEqual(expected, value.HasAnyFlags());
}
#region Conversion [TestCase(false, eTestFlagsEnum.None, eTestFlagsEnum.None)]
[TestCase(false, eTestFlagsEnum.None, eTestFlagsEnum.B)]
[TestCase(true, eTestFlagsEnum.B, eTestFlagsEnum.B)]
[TestCase(false, eTestFlagsEnum.None | eTestFlagsEnum.A, eTestFlagsEnum.B | eTestFlagsEnum.C)]
public void HasAnyFlagsValueTest(bool expected, eTestFlagsEnum value, eTestFlagsEnum other)
{
Assert.AreEqual(expected, value.HasAnyFlags(other));
}
[Test] #endregion
#region Conversion
[Test]
public void ParseGenericTest() public void ParseGenericTest()
{ {
Assert.AreEqual(eTestEnum.A, EnumUtils.Parse<eTestEnum>("A", false)); Assert.AreEqual(eTestEnum.A, EnumUtils.Parse<eTestEnum>("A", false));

View File

@@ -342,18 +342,41 @@ namespace ICD.Common.Utils
return ((value & (value - 1)) != 0); return ((value & (value - 1)) != 0);
} }
#endregion /// <summary>
/// Returns true if this enum contains any flags.
/// </summary>
/// <param name=""></param>
/// <returns></returns>
[PublicAPI]
public static bool HasAnyFlags<T>(this T extends)
{
return GetFlagsExceptNone(extends).Any();
}
#region Conversion /// <summary>
/// Returns true if this enum contains any of the given flag values.
/// </summary>
/// <param name="extends"></param>
/// <param name="value"></param>
/// <returns></returns>
[PublicAPI]
public static bool HasAnyFlags<T>(this T extends, T value)
{
return GetFlagsIntersection(extends, value).HasAnyFlags();
}
/// <summary> #endregion
/// Shorthand for parsing string to enum.
/// </summary> #region Conversion
/// <typeparam name="T"></typeparam>
/// <param name="data"></param> /// <summary>
/// <param name="ignoreCase"></param> /// Shorthand for parsing string to enum.
/// <returns></returns> /// </summary>
public static T Parse<T>(string data, bool ignoreCase) /// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <param name="ignoreCase"></param>
/// <returns></returns>
public static T Parse<T>(string data, bool ignoreCase)
{ {
if (!IsEnumType<T>()) if (!IsEnumType<T>())
throw new ArgumentException(string.Format("{0} is not an enum", typeof(T).Name)); throw new ArgumentException(string.Format("{0} is not an enum", typeof(T).Name));