1.1 --- a/lib/__builtins__/list.py Tue Apr 04 00:27:38 2017 +0200
1.2 +++ b/lib/__builtins__/list.py Tue Apr 04 00:28:08 2017 +0200
1.3 @@ -65,7 +65,27 @@
1.4
1.5 list_append(self, value)
1.6
1.7 - def insert(self, i, value): pass
1.8 + def insert(self, index, value):
1.9 +
1.10 + "Insert at 'index' the given 'value'."
1.11 +
1.12 + length = self.__len__()
1.13 + index = _get_absolute_index(index, length)
1.14 +
1.15 + if index == length:
1.16 + self.append(value)
1.17 + return
1.18 + elif index > length:
1.19 + raise IndexError, index
1.20 +
1.21 + i = length - 1
1.22 + self.append(self.__getitem__(i))
1.23 +
1.24 + while i > index:
1.25 + self.__setitem__(i, self.__getitem__(i - 1))
1.26 + i -= 1
1.27 +
1.28 + self.__setitem__(index, value)
1.29
1.30 def extend(self, iterable):
1.31
1.32 @@ -85,7 +105,20 @@
1.33 list_setsize(self.__data__, self.__len__() - 1)
1.34 return i
1.35
1.36 - def reverse(self): pass
1.37 + def reverse(self):
1.38 +
1.39 + "Reverse the list in-place."
1.40 +
1.41 + length = self.__len__()
1.42 + i = 0
1.43 + j = length - 1
1.44 +
1.45 + while i < j:
1.46 + item = self.__getitem__(j)
1.47 + self.__setitem__(j, self.__getitem__(i))
1.48 + self.__setitem__(i, item)
1.49 + i += 1
1.50 + j -= 1
1.51
1.52 def sort(self, cmp=None, key=None, reverse=0): pass
1.53
2.1 --- a/tests/list.py Tue Apr 04 00:27:38 2017 +0200
2.2 +++ b/tests/list.py Tue Apr 04 00:28:08 2017 +0200
2.3 @@ -70,3 +70,30 @@
2.4 d.pop() # should raise an exception
2.5 except IndexError, exc:
2.6 print "d.pop(): failed to access item", exc.index
2.7 +
2.8 +# Test insertion.
2.9 +
2.10 +e = []
2.11 +
2.12 +try:
2.13 + e.insert(1, 1) # should raise an exception
2.14 +except IndexError, exc:
2.15 + print "e.insert(1, 1): failed to insert at index", exc.index
2.16 +
2.17 +e.insert(0, 1)
2.18 +print e # [1]
2.19 +
2.20 +try:
2.21 + e.insert(2, 1) # should raise an exception
2.22 +except IndexError, exc:
2.23 + print "e.insert(2, 1): failed to insert at index", exc.index
2.24 +
2.25 +e.insert(1, 2)
2.26 +print e # [1, 2]
2.27 +e.insert(0, 3)
2.28 +print e # [3, 1, 2]
2.29 +
2.30 +# Test reversal.
2.31 +
2.32 +e.reverse()
2.33 +print e # [2, 1, 3]