Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 283de2b

Browse files
Issue #9770: curses.ascii predicates now work correctly with negative integers.
1 parent c9ad8b7 commit 283de2b

3 files changed

Lines changed: 31 additions & 9 deletions

File tree

Lib/curses/ascii.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,19 @@ def _ctoi(c):
5353

5454
def isalnum(c): return isalpha(c) or isdigit(c)
5555
def isalpha(c): return isupper(c) or islower(c)
56-
def isascii(c): return _ctoi(c) <= 127 # ?
56+
def isascii(c): return 0 <= _ctoi(c) <= 127 # ?
5757
def isblank(c): return _ctoi(c) in (9, 32)
58-
def iscntrl(c): return _ctoi(c) <= 31 or _ctoi(c) == 127
59-
def isdigit(c): return _ctoi(c) >= 48 and _ctoi(c) <= 57
60-
def isgraph(c): return _ctoi(c) >= 33 and _ctoi(c) <= 126
61-
def islower(c): return _ctoi(c) >= 97 and _ctoi(c) <= 122
62-
def isprint(c): return _ctoi(c) >= 32 and _ctoi(c) <= 126
58+
def iscntrl(c): return 0 <= _ctoi(c) <= 31 or _ctoi(c) == 127
59+
def isdigit(c): return 48 <= _ctoi(c) <= 57
60+
def isgraph(c): return 33 <= _ctoi(c) <= 126
61+
def islower(c): return 97 <= _ctoi(c) <= 122
62+
def isprint(c): return 32 <= _ctoi(c) <= 126
6363
def ispunct(c): return isgraph(c) and not isalnum(c)
6464
def isspace(c): return _ctoi(c) in (9, 10, 11, 12, 13, 32)
65-
def isupper(c): return _ctoi(c) >= 65 and _ctoi(c) <= 90
65+
def isupper(c): return 65 <= _ctoi(c) <= 90
6666
def isxdigit(c): return isdigit(c) or \
67-
(_ctoi(c) >= 65 and _ctoi(c) <= 70) or (_ctoi(c) >= 97 and _ctoi(c) <= 102)
68-
def isctrl(c): return _ctoi(c) < 32
67+
(65 <= _ctoi(c) <= 70) or (97 <= _ctoi(c) <= 102)
68+
def isctrl(c): return 0 <= _ctoi(c) < 32
6969
def ismeta(c): return _ctoi(c) > 127
7070

7171
def ascii(c):

Lib/test/test_curses.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,25 @@ def check(func, expected):
436436
check(curses.ascii.ispunct, c in string.punctuation)
437437
check(curses.ascii.isxdigit, c in string.hexdigits)
438438

439+
for i in (-2, -1, 256, sys.maxunicode, sys.maxunicode+1):
440+
self.assertFalse(curses.ascii.isalnum(i))
441+
self.assertFalse(curses.ascii.isalpha(i))
442+
self.assertFalse(curses.ascii.isdigit(i))
443+
self.assertFalse(curses.ascii.islower(i))
444+
self.assertFalse(curses.ascii.isspace(i))
445+
self.assertFalse(curses.ascii.isupper(i))
446+
447+
self.assertFalse(curses.ascii.isascii(i))
448+
self.assertFalse(curses.ascii.isctrl(i))
449+
self.assertFalse(curses.ascii.iscntrl(i))
450+
self.assertFalse(curses.ascii.isblank(i))
451+
self.assertFalse(curses.ascii.isgraph(i))
452+
self.assertFalse(curses.ascii.isprint(i))
453+
self.assertFalse(curses.ascii.ispunct(i))
454+
self.assertFalse(curses.ascii.isxdigit(i))
455+
456+
self.assertFalse(curses.ascii.ismeta(-1))
457+
439458
def test_ascii(self):
440459
ascii = curses.ascii.ascii
441460
self.assertEqual(ascii('\xc1'), 'A')

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ Core and Builtins
140140
Library
141141
-------
142142

143+
- Issue #9770: curses.ascii predicates now work correctly with negative
144+
integers.
145+
143146
- Issue #28427: old keys should not remove new values from
144147
WeakValueDictionary when collecting from another thread.
145148

0 commit comments

Comments
 (0)