def test_large(self):
     self.assertEqual(
         solution([
             -999, -800, -700, -600, -500, -400, -300, -200, -100, 0, 100,
             200, 300, 400, 500, 600, 700, 800, 900, 999
         ], 10), [
             100, 200, 300, 400, 500, 600, 700, 800, 900, 999, -999, -800,
             -700, -600, -500, -400, -300, -200, -100, 0
         ])
 def test_example2(self):
     self.assertEqual(solution([1, 2, 3, 4], 4), [1, 2, 3, 4])
 def test_maximal(self):
     #maximal N and K
     self.assertEqual(solution([0, 0, 0], 1), [0, 0, 0])
 def test_medium_random(self):
     # medium random sequence, N = 100
     self.assertEqual(solution([0, 0, 0], 1), [0, 0, 0])
 def test_small_random_all_rotations(self):
     # small random sequence, all rotations, N = 15
     self.assertEqual(solution([0, 0, 0], 1), [0, 0, 0])
 def test_small2(self):
     # small functional tests, K >= N
     self.assertEqual(solution([0, 3, 5, 7, 9], 4), [3, 5, 7, 9, 0])
     self.assertEqual(solution([0, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21], 1),
                      [21, 0, 3, 5, 7, 9, 11, 13, 15, 17, 19])
 def test_example1(self):
     self.assertEqual(solution([3, 8, 9, 7, 6], 3), [9, 7, 6, 3, 8])
 def test_double(self):
     # two elements, K <= N
     self.assertEqual(solution([0, 1], 0), [1, 0])
     self.assertEqual(solution([0, 1], 2), [1, 0])
 def test_single(self):
     # one element, 0 <= K <= 5
     self.assertEqual(solution([1], 0), [1])
     self.assertEqual(solution([1], 3), [1])
     self.assertEqual(solution([1], 5), [1])
 def test_extreme_empty(self):
     # empty array
     self.assertEqual(solution([], 0), [])
     self.assertEqual(solution([], 3), [])
 def test_small(self):
     self.assertEqual(solution([1, 0], 6), [1, 0])
 def test_example3(self):
     self.assertEqual(solution([0, 0, 0], 1), [0, 0, 0])