@Test
  public void testOptionalMessagePackableUnpackableClass00() throws Exception {
    OptionalBaseMessagePackableUnpackableClass src =
        new OptionalBaseMessagePackableUnpackableClass();
    OptionalMessagePackableUnpackableClass src1 = new OptionalMessagePackableUnpackableClass();
    List<OptionalMessagePackableUnpackableClass> src2 =
        new ArrayList<OptionalMessagePackableUnpackableClass>();
    src1.f0 = 0;
    src1.f1 = 1;
    src.f0 = src1;
    src.f1 = 1;
    src2.add(src1);
    src.f2 = src2;

    byte[] raw = MessagePack.pack(src);

    OptionalBaseMessagePackableUnpackableClass dst =
        MessagePack.unpack(raw, OptionalBaseMessagePackableUnpackableClass.class);
    assertEquals(src.f0.f0, dst.f0.f0);
    assertEquals(src.f0.f1, dst.f0.f1);
    assertEquals(src.f1, dst.f1);
    assertEquals(src.f2.size(), dst.f2.size());
    assertEquals(src.f2.get(0).f0, dst.f2.get(0).f0);
    assertEquals(src.f2.get(0).f1, dst.f2.get(0).f1);
  }
  @Test
  public void testOptionalMessagePackableUnpackableClass01() throws Exception {
    OptionalBaseMessagePackableUnpackableClass src =
        new OptionalBaseMessagePackableUnpackableClass();
    src.f0 = null;
    src.f1 = 1;
    src.f2 = null;

    byte[] raw = MessagePack.pack(src);

    OptionalBaseMessagePackableUnpackableClass dst =
        MessagePack.unpack(raw, OptionalBaseMessagePackableUnpackableClass.class);
    assertEquals(src.f0, dst.f0);
    assertEquals(src.f1, dst.f1);
    assertEquals(src.f2, dst.f2);
  }