def METHOD_NAME(self):
    # tuple
    t = (1, 2, 3)
    a, *b, c = t
    self.assertEqual((a, b, c), (1, [2], 3))
    # list
    l = [4, 5, 6]
    a, *b = l
    self.assertTrue(a == 4 and b == [5, 6])
    # implied tuple
    *a, = 7, 8, 9
    self.assertTrue(a == [7, 8, 9])
    #Unpack string... fun!
    a, *b = 'one'
    self.assertTrue(a == 'o' and b == ['n', 'e'])
    # long sequence
    a, b, c, *d, e, f, g = range(10)
    self.assertTrue((a, b, c, d, e, f, g) == (
        0, 1, 2, [3, 4, 5, 6], 7, 8, 9))
    #Unpack short sequence
    a, *b, c = (1, 2)
    self.assertTrue(a == 1 and c == 2 and b == [])
    # Unpack generic sequence
    a, *b = Seq()
    self.assertTrue(a == 0 and b == [1, 2])
    #Unpack in for statement
    for a, *b, c in [(1, 2, 3)]:
        self.assertTrue(a == 1 and b == [2] and c == 3)
    for a, *b, c in [(4, 5, 6, 7)]:
        self.assertTrue(a == 4 and b == [5, 6] and c == 7)
    #Unpack in list
    [a, *b, c] = range(5)
    self.assertTrue(a == 0 and b == [1, 2, 3] and c == 4)
    #Multiple targets
    a, *b, c = *d, e = range(5)
    self.assertTrue(a == 0 and b == [1, 2, 3] and c == 4 and d == [
                    0, 1, 2, 3] and e == 4)
    # Assignment unpacking
    a, b, *c = range(5)
    self.assertEqual((a, b, c), (0, 1, [2, 3, 4]))
    *a, b, c = a, b, *c
    self.assertEqual((a, b, c), ([0, 1, 2], 3, 4))
    # weird nested case
    a, *[b, *c], d = range(6)
    self.assertEqual((a,b,c,d), (0, 1, [2, 3, 4], 5))