Skip to content

Commit 867cbe1

Browse files
committed
start string reverse
1 parent 05e89c3 commit 867cbe1

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

Lib/test/string_tests.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,6 +1085,12 @@ def test_title(self):
10851085
self.checkequal('Getint', "getInt", 'title')
10861086
self.checkraises(TypeError, 'hello', 'title', 42)
10871087

1088+
def test_reverse(self):
1089+
self.checkequal('', '', 'reverse')
1090+
self.checkequal('Hello', 'olleH', 'reverse')
1091+
self.checkequal('Reversed this string', "gnirts siht desreveR", 'reverse')
1092+
self.checkraises(TypeError, 'hello', 'reverse', 42)
1093+
10881094
def test_splitlines(self):
10891095
self.checkequal(['abc', 'def', '', 'ghi'], "abc\ndef\n\rghi", 'splitlines')
10901096
self.checkequal(['abc', 'def', '', 'ghi'], "abc\ndef\n\r\nghi", 'splitlines')

Objects/clinic/unicodeobject.c.h

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Objects/unicodeobject.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11052,6 +11052,34 @@ replace(PyObject *self, PyObject *str1,
1105211052
return NULL;
1105311053
}
1105411054

11055+
// asdf
11056+
static PyObject *
11057+
reverse(PyObject *string)
11058+
{
11059+
if (ensure_unicode(string) < 0)
11060+
return NULL;
11061+
11062+
Py_ssize_t length = PyUnicode_GET_LENGTH(string);
11063+
PyObject* reversed = PyUnicode_New(length, PyUnicode_MAX_CHAR_VALUE(string));
11064+
11065+
if (reversed == NULL) {
11066+
return NULL;
11067+
}
11068+
11069+
for (Py_ssize_t i = 0; i < length; i++) {
11070+
Py_UCS4 ch = PyUnicode_READ_CHAR(string, length - 1 - i);
11071+
PyUnicode_WriteChar(reversed, i, ch);
11072+
}
11073+
11074+
return reversed;
11075+
}
11076+
11077+
static PyObject *
11078+
unicode_reverse_impl(PyObject *self)
11079+
{
11080+
return reverse(self);
11081+
}
11082+
1105511083
/* --- Unicode Object Methods --------------------------------------------- */
1105611084

1105711085
/*[clinic input]

0 commit comments

Comments
 (0)