'Slice assignment'

def test02_setslice(self):

    def setfcn(x, i, j, k, L):
        x[i:j:k] = range(L)
    (pl, ul) = self.lists_of_len()
    for slen in range((self.limit + 1)):
        ssl = nextRange(slen)
        ul[:] = ssl
        pl[:] = ssl
        self.assertEqual(pl, ul[:], 'set    slice    [:]')
        for i in self.limits_plus(1):
            ssl = nextRange(slen)
            ul[i:] = ssl
            pl[i:] = ssl
            self.assertEqual(pl, ul[:], ('set    slice    [%d:]' % i))
            ssl = nextRange(slen)
            ul[:i] = ssl
            pl[:i] = ssl
            self.assertEqual(pl, ul[:], ('set    slice    [:%d]' % i))
            for j in self.limits_plus(1):
                ssl = nextRange(slen)
                ul[i:j] = ssl
                pl[i:j] = ssl
                self.assertEqual(pl, ul[:], ('set    slice    [%d:%d]' % (i, j)))
                for k in self.step_range():
                    ssl = nextRange(len(ul[i:j:k]))
                    ul[i:j:k] = ssl
                    pl[i:j:k] = ssl
                    self.assertEqual(pl, ul[:], ('set    slice    [%d:%d:%d]' % (i, j, k)))
                    sliceLen = len(ul[i:j:k])
                    self.assertRaises(ValueError, setfcn, ul, i, j, k, (sliceLen + 1))
                    if (sliceLen > 2):
                        self.assertRaises(ValueError, setfcn, ul, i, j, k, (sliceLen - 1))
            for k in self.step_range():
                ssl = nextRange(len(ul[i::k]))
                ul[i::k] = ssl
                pl[i::k] = ssl
                self.assertEqual(pl, ul[:], ('set    slice    [%d::%d]' % (i, k)))
                ssl = nextRange(len(ul[:i:k]))
                ul[:i:k] = ssl
                pl[:i:k] = ssl
                self.assertEqual(pl, ul[:], ('set    slice    [:%d:%d]' % (i, k)))
        for k in self.step_range():
            ssl = nextRange(len(ul[::k]))
            ul[::k] = ssl
            pl[::k] = ssl
            self.assertEqual(pl, ul[:], ('set    slice    [::%d]' % k))
