@Test
 public void Test4() {
   TreeNode root = null;
   List<List<Integer>> actual = solution.levelOrder(root);
   List<List<Integer>> expected = new ArrayList<>();
   assertEquals(expected, actual);
 }
 @Test
 public void Test1() {
   ListNode[] lists = {};
   ListNode actual = solution.mergeKLists(lists);
   ListNode expected = null;
   assertEquals(expected, actual);
 }
 @Test
 public void Test4() {
   int[] nums = {1, 3, 4, 3};
   int actual = solution.rob(nums);
   int expected = 6;
   assertEquals(expected, actual);
 }
 @Test
 public void Test6() {
   int[] nums = {1, 2, 3, 4, 5, 6, 7};
   int actual = solution.rob(nums);
   int expected = 15;
   assertEquals(expected, actual);
 }
 @Test
 public void Test2() {
   int[] nums = {2, 1};
   int actual = solution.jump(nums);
   int expected = 1;
   assertEquals(expected, actual);
 }
 @Test
 public void Test1() {
   int[] nums = {1};
   int actual = solution.rob(nums);
   int expected = 1;
   assertEquals(expected, actual);
 }
 @Test
 public void Test1() {
   int[] nums = {2, 3, 1, 1, 4};
   int actual = solution.jump(nums);
   int expected = 2;
   assertEquals(expected, actual);
 }
 @Test
 public void Test5() {
   int[] nums = {4, 5, 6, 7, 0, 1, 2};
   int target = 1;
   int actual = solution.search(nums, target);
   int expected = 5;
   assertEquals(expected, actual);
 }
 @Test
 public void Test8() {
   int[] nums = {1, 2, 3};
   int target = 3;
   int actual = solution.search(nums, target);
   int expected = 2;
   assertEquals(expected, actual);
 }
 @Test
 public void Test16() {
   int[] nums = {4, 5, 6, 7, 8, 1, 2, 3};
   int target = 8;
   int actual = solution.search(nums, target);
   int expected = 4;
   assertEquals(expected, actual);
 }
 @Test
 public void Test9() {
   int[] nums = {6, 4, 5};
   int target = 6;
   int actual = solution.search(nums, target);
   int expected = 0;
   assertEquals(expected, actual);
 }
 //     1
 @Test
 public void Test5() {
   TreeNode t1 = new TreeNode(1);
   TreeNode root = t1;
   List<List<Integer>> actual = solution.levelOrder(root);
   List<List<Integer>> expected = new ArrayList<>();
   expected.add(Arrays.asList(1));
   assertEquals(expected, actual);
 }
 @Test
 public void Test4() {
   int[] nums = {1};
   ListNode head = ListNode.constructLinkedList(nums);
   solution.reorderList(head);
   int[] exps = {1};
   ListNode expected = ListNode.constructLinkedList(exps);
   assertTrue(ListNode.isSameList(head, expected));
 }
 @Test
 public void Test3() {
   int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   ListNode head = ListNode.constructLinkedList(nums);
   ListNode actual = solution.swapPairs(head);
   int[] exps = {2, 1, 4, 3, 6, 5, 8, 7, 10, 9};
   ListNode expected = ListNode.constructLinkedList(exps);
   assertTrue(ListNode.isSameList(actual, expected));
 }
 @Test
 public void Test4() {
   ListNode h1 = ListNode.constructLinkedList(Arrays.asList(3));
   ListNode h2 = ListNode.constructLinkedList(Arrays.asList(1));
   ListNode[] lists = {h1, h2};
   ListNode actual = solution.mergeKLists(lists);
   ListNode expected = ListNode.constructLinkedList(Arrays.asList(1, 3));
   assertTrue(ListNode.isSameList(actual, expected));
 }
 @Test
 public void Test3() {
   int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
   ListNode head = ListNode.constructLinkedList(nums);
   solution.reorderList(head);
   int[] exps = {1, 9, 2, 8, 3, 7, 4, 6, 5};
   ListNode expected = ListNode.constructLinkedList(exps);
   assertTrue(ListNode.isSameList(head, expected));
 }
 @Test
 public void Test15() {
   int[] nums = {
     101, 103, 106, 109, 158, 164, 182, 187, 202, 205, 2, 3, 32, 57, 69, 74, 81, 99, 100
   };
   int target = 202;
   int actual = solution.search(nums, target);
   int expected = 8;
   assertEquals(expected, actual);
 }
 @Test
 public void Test3() {
   String filename = "test/_045_JumpGameII/input3.txt";
   List<String> in = Helper.readInput(filename);
   String[] strs = in.get(0).split(",");
   int[] nums = new int[strs.length];
   for (int i = 0; i < nums.length; i++) {
     nums[i] = Integer.parseInt(strs[i]);
   }
   int actual = solution.jump(nums);
   int expected = 24999;
   assertEquals(expected, actual);
 }
 //       3
 //         \
 //          20
 //         /
 //        15
 @Test
 public void Test3() {
   TreeNode t1 = new TreeNode(3);
   TreeNode t3 = new TreeNode(20);
   TreeNode t4 = new TreeNode(15);
   TreeNode.connect(t1, null, t3);
   TreeNode.connect(t3, t4, null);
   TreeNode root = t1;
   List<List<Integer>> actual = solution.levelOrder(root);
   List<List<Integer>> expected = new ArrayList<>();
   expected.add(Arrays.asList(3));
   expected.add(Arrays.asList(20));
   expected.add(Arrays.asList(15));
   assertEquals(expected, actual);
 }
 @Test
 public void Test14() {
   int[] nums = {
     180, 181, 182, 183, 184, 187, 188, 189, 191, 192, 193, 194, 195, 196, 201, 202, 203, 204, 3,
     4, 5, 6, 7, 8, 9, 10, 14, 16, 17, 18, 19, 23, 26, 27, 28, 29, 32, 33, 36, 37, 38, 39, 41, 42,
     43, 45, 48, 51, 52, 53, 54, 56, 62, 63, 64, 67, 69, 72, 73, 75, 77, 78, 79, 83, 85, 87, 90,
     91, 92, 93, 96, 98, 99, 101, 102, 104, 105, 106, 107, 108, 109, 111, 113, 115, 116, 118, 119,
     120, 122, 123, 124, 126, 127, 129, 130, 135, 137, 138, 139, 143, 144, 145, 147, 149, 152, 155,
     156, 160, 162, 163, 164, 166, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177
   };
   int target = 42;
   int actual = solution.search(nums, target);
   int expected = 43;
   assertEquals(expected, actual);
 }