Информация об изменениях

Сообщение Re[16]: EnumHelper: request for breaking changes от 22.09.2016 8:20

Изменено 22.09.2016 16:25 Sinix

Здравствуйте, samius, Вы писали:

S>>Чуть позже заведу тему в основном разделе, пусть народ поучаствует. Найдётся вариант лучше — будем менять.

S>

Так, хорошие новости: я вчера адски тупил
В общем, я успешно перепутал местами методы IsAnyFlagUnset и IsFlagUnset. Ага, в логику могут не только лишь все
Тысячу извинений, сам удивляюсь, как легко сначала сделать ошибку, затем пропустить и затем геройски бороться с последствиями. Добавил к себе в примеры как делать не надо.


И таки что у нас получается:
табличку поправил,
код поправил + добавил нормальные 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 entire bit combination 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 any bit 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 entire bit combination 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 any bit is NOT set
            isfalse(permissions.Excludes(readOrOwner));
            isfalse(permissions.Excludes(PermittedActions.Read));
            istrue(permissions.Excludes(PermittedActions.SetOwner));
        }

выбираем, предлагаем ещё

ничего не добавится — закину в основной раздел для обсуждения.
Re[16]: EnumHelper: request for breaking changes
Здравствуйте, samius, Вы писали:

S>>Чуть позже заведу тему в основном разделе, пусть народ поучаствует. Найдётся вариант лучше — будем менять.

S>

Так, хорошие новости: я вчера адски тупил
В общем, я успешно перепутал местами методы IsAnyFlagUnset и IsFlagUnset. Ага, в логику могут не только лишь все
Тысячу извинений, сам удивляюсь, как легко сначала сделать ошибку, затем пропустить и затем геройски бороться с последствиями. Добавил к себе в примеры как делать не надо.


И таки что у нас получается:
табличку поправил,
код поправил + добавил нормальные 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));
        }

выбираем, предлагаем ещё

ничего не добавится — закину в основной раздел для обсуждения.