| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 52f91c6 commit 0b4ffb0
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -114,9 +114,12 @@ def _break_on_call_reduce(self, proto): | |||
| 114 | 114 | setattr(obj, '__module__', '<unknown>') | |
| 115 | 115 | ||
| 116 | 116 | def _iter_bits_lsb(num): | |
| 117 | - # num must be an integer | ||
| 117 | + # num must be a positive integer | ||
| 118 | + original = num | ||
| 118 | 119 | if isinstance(num, Enum): | |
| 119 | 120 | num = num.value | |
| 121 | + if num < 0: | ||
| 122 | + raise ValueError('%r is not a positive integer' % original) | ||
| 120 | 123 | while num: | |
| 121 | 124 | b = num & (~num + 1) | |
| 122 | 125 | yield b | |
@@ -1839,6 +1842,9 @@ def __call__(self, enumeration): | |||
| 1839 | 1842 | if name in member_names: | |
| 1840 | 1843 | # not an alias | |
| 1841 | 1844 | continue | |
| 1845 | + if alias.value < 0: | ||
| 1846 | + # negative numbers are not checked | ||
| 1847 | + continue | ||
| 1842 | 1848 | values = list(_iter_bits_lsb(alias.value)) | |
| 1843 | 1849 | missed = [v for v in values if v not in member_values] | |
| 1844 | 1850 | if missed: | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -14,7 +14,7 @@ | |||
| 14 | 14 | from enum import Enum, IntEnum, StrEnum, EnumType, Flag, IntFlag, unique, auto | |
| 15 | 15 | from enum import STRICT, CONFORM, EJECT, KEEP, _simple_enum, _test_simple_enum | |
| 16 | 16 | from enum import verify, UNIQUE, CONTINUOUS, NAMED_FLAGS, ReprEnum | |
| 17 | - from enum import member, nonmember | ||
| 17 | + from enum import member, nonmember, _iter_bits_lsb | ||
| 18 | 18 | from io import StringIO | |
| 19 | 19 | from pickle import dumps, loads, PicklingError, HIGHEST_PROTOCOL | |
| 20 | 20 | from test import support | |
@@ -174,6 +174,10 @@ def test_is_private(self): | |||
| 174 | 174 | for name in self.sunder_names + self.dunder_names + self.random_names: | |
| 175 | 175 | self.assertFalse(enum._is_private('MyEnum', name), '%r is a private name?') | |
| 176 | 176 | ||
| 177 | + def test_iter_bits_lsb(self): | ||
| 178 | + self.assertEqual(list(_iter_bits_lsb(7)), [1, 2, 4]) | ||
| 179 | + self.assertRaisesRegex(ValueError, '-8 is not a positive integer', list, _iter_bits_lsb(-8)) | ||
| 180 | + | ||
| 177 | 181 | ||
| 178 | 182 | # for subclassing tests | |
| 179 | 183 | ||
@@ -3960,6 +3964,16 @@ class Sillier(IntEnum): | |||
| 3960 | 3964 | triple = 3 | |
| 3961 | 3965 | value = 4 | |
| 3962 | 3966 | ||
| 3967 | + def test_negative_alias(self): | ||
| 3968 | + @verify(NAMED_FLAGS) | ||
| 3969 | + class Color(Flag): | ||
| 3970 | + RED = 1 | ||
| 3971 | + GREEN = 2 | ||
| 3972 | + BLUE = 4 | ||
| 3973 | + WHITE = -1 | ||
| 3974 | + # no error means success | ||
| 3975 | + | ||
| 3976 | + | ||
| 3963 | 3977 | class TestInternals(unittest.TestCase): | |
| 3964 | 3978 | ||
| 3965 | 3979 | sunder_names = '_bad_', '_good_', '_what_ho_' | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1 @@ | |||
| 1 | + fix negative numbers failing in verify() | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments