Здравствуйте, samius, Вы писали:
S>>Чуть позже заведу тему в основном разделе, пусть народ поучаствует. Найдётся вариант лучше — будем менять.
S>
Так, хорошие новости: я вчера адски тупил
![](/Forum/Images/smile.gif)
В общем, я успешно перепутал местами методы IsAnyFlagUnset и IsFlagUnset. Ага, в логику могут не только лишь все
![](/Forum/Images/facepalm.gif)
Тысячу извинений, сам удивляюсь, как легко сначала сделать ошибку, затем пропустить и затем геройски бороться с последствиями. Добавил к себе в примеры как делать не надо.
И таки что у нас получается:
табличку поправил,
код поправил + добавил нормальные
use case tests. Теперь можно обсуждать.
Итого у нас два варианта — текущий многострадальный (он наконец меня устраивает):
| Скрытый текст |
| [Test]
public void TestEnumUseCaseShort()
{
Action<bool> istrue = Assert.IsTrue;
Action<bool> isfalse = Assert.IsFalse;
var permissions = PermittedActions.None;
var readOrOwner = PermittedActions.Read | PermittedActions.SetOwner;
permissions = permissions.SetFlag(PermittedActions.Read);
permissions = permissions.SetFlag(PermittedActions.Write);
permissions = permissions.ClearFlag(PermittedActions.Write);
// conditional set or clear
permissions = permissions.SetFlag(PermittedActions.ReadContent, enabled: false);
permissions = permissions.SetFlag(PermittedActions.ReadWrite, enabled: true);
// Checks that entire bit combination is set
isfalse(permissions.IsFlagSet(readOrOwner));
istrue(permissions.IsFlagSet(PermittedActions.Read));
isfalse(permissions.IsFlagSet(PermittedActions.SetOwner));
// Checks that any bit is NOT set
istrue(permissions.IsAnyFlagUnset(readOrOwner));
isfalse(permissions.IsAnyFlagUnset(PermittedActions.Read));
istrue(permissions.IsAnyFlagUnset(PermittedActions.SetOwner));
// Checks that any bit is set
istrue(permissions.IsAnyFlagSet(readOrOwner));
istrue(permissions.IsAnyFlagSet(PermittedActions.Read));
isfalse(permissions.IsAnyFlagSet(PermittedActions.SetOwner));
// Checks that entire bit combination is NOT set
isfalse(permissions.IsFlagUnset(readOrOwner));
isfalse(permissions.IsFlagUnset(PermittedActions.Read));
istrue(permissions.IsFlagUnset(PermittedActions.SetOwner));
}
|
| |
и тот, что в этом топике нарисовался:
| Скрытый текст |
| [Test]
public void TestEnumUseSetBased()
{
Action<bool> istrue = Assert.IsTrue;
Action<bool> isfalse = Assert.IsFalse;
var permissions = PermittedActions.None;
var readOrOwner = PermittedActions.Read | PermittedActions.SetOwner;
permissions = permissions.With(PermittedActions.Read);
permissions = permissions.With(PermittedActions.Write);
permissions = permissions.Without(PermittedActions.Write);
// conditional set or clear
permissions = permissions.WithOrWithout(PermittedActions.ReadContent, include: false);
permissions = permissions.WithOrWithout(PermittedActions.ReadWrite, include: true);
// Checks that entire bit combination is set
isfalse(permissions.Includes(readOrOwner));
istrue(permissions.Includes(PermittedActions.Read));
isfalse(permissions.Includes(PermittedActions.SetOwner));
// Checks that any bit is NOT set
istrue(permissions.ExcludesAny(readOrOwner));
isfalse(permissions.ExcludesAny(PermittedActions.Read));
istrue(permissions.ExcludesAny(PermittedActions.SetOwner));
// Checks that any bit is set
istrue(permissions.IncludesAny(readOrOwner));
istrue(permissions.IncludesAny(PermittedActions.Read));
isfalse(permissions.IncludesAny(PermittedActions.SetOwner));
// Checks that entire bit combination is NOT set
isfalse(permissions.Excludes(readOrOwner));
isfalse(permissions.Excludes(PermittedActions.Read));
istrue(permissions.Excludes(PermittedActions.SetOwner));
}
|
| |
выбираем, предлагаем ещё
ничего не добавится — закину в основной раздел для обсуждения.