### Question:
HDUtils { public static String formatPath(List<ChildNumber> path) { return PATH_JOINER.join(Iterables.concat(Collections.singleton("M"), path)); }  static byte[] hmacSha512(byte[] key, byte[] data); static byte[] hmacSha256(byte[] key, byte[] data); static ImmutableList<ChildNumber> append(List<ChildNumber> path, ChildNumber childNumber); static ImmutableList<ChildNumber> concat(List<ChildNumber> path, List<ChildNumber> path2); static String formatPath(List<ChildNumber> path); static List<ChildNumber> parsePath(@Nonnull String path);  }### Answer:
@Test public void testFormatPath() { Object[] tv = { "M/44H/0H/0H/1/1", ImmutableList.of(new ChildNumber(44, true), new ChildNumber(0, true), new ChildNumber(0, true), new ChildNumber(1, false), new ChildNumber(1, false)), "M/7H/3/3/1H", ImmutableList.of(new ChildNumber(7, true), new ChildNumber(3, false), new ChildNumber(3, false), new ChildNumber(1, true)), "M/1H/2H/3H", ImmutableList.of(new ChildNumber(1, true), new ChildNumber(2, true), new ChildNumber(3, true)), "M/1/2/3", ImmutableList.of(new ChildNumber(1, false), new ChildNumber(2, false), new ChildNumber(3, false)) }; for (int i = 0; i < tv.length; i += 2) { String expectedStrPath = (String) tv[i]; List<ChildNumber> path = (List<ChildNumber>) tv[i+1]; String generatedStrPath = HDUtils.formatPath(path); Assert.assertEquals(generatedStrPath, expectedStrPath); } }