@Test
 public void moveTestop() throws PreconditionException {
   OrderedTreeOperation<String> op1 =
       new OrderedTreeOperation<String>(MOVE, Arrays.asList(0, 1), Arrays.asList(2), 1, null);
   CRDTMessage m = tree2.applyLocal(op1);
   tree.applyRemote(m);
   assertEquals("null{a{d,},b,c{g,e{f,},h,},}", tree.getRoot().nodetail());
   assertEquals("null{a{d,},b,c{g,e{f,},h,},}", tree2.getRoot().nodetail());
 }
  @Test
  public void removeTestop() throws PreconditionException {

    CRDTMessage m = tree2.applyLocal(new OrderedTreeOperation<String>(Arrays.asList(0, 1)));
    tree.applyOneRemote(m);

    assertEquals("null{a{d,},b,c{g,h,},}", tree.getRoot().nodetail());
    assertEquals("null{a{d,},b,c{g,h,},}", tree2.getRoot().nodetail());
  }
  @Test
  public void switchTestop() throws PreconditionException {
    OrderedTreeOperation<String> op1 =
        new OrderedTreeOperation<String>(MOVE, Arrays.asList(0), new LinkedList(), 1, null);
    CRDTMessage m = tree2.applyLocal(op1);
    tree.applyOneRemote(m);

    assertEquals("null{b,a{d,e{f,},},c{g,h,},}", tree.getRoot().nodetail());
    assertEquals("null{b,a{d,e{f,},},c{g,h,},}", tree2.getRoot().nodetail());
  }
  @Test
  public void ChLabelTestop() throws PreconditionException {
    OpType rename = OrderedTreeOperation.OpType.chContent;
    OrderedTreeOperation<String> op1 =
        new OrderedTreeOperation<String>(rename, Arrays.asList(0), null, 0, "ZoidBerg");
    CRDTMessage m = tree2.applyLocal(op1);
    tree.applyOneRemote(m);

    assertEquals("null{ZoidBerg{d,e{f,},},b,c{g,h,},}", tree.getRoot().nodetail());
    assertEquals("null{ZoidBerg{d,e{f,},},b,c{g,h,},}", tree2.getRoot().nodetail());
  }