public ImmutableList<T> append(T element)
  {
    ArgumentUtil.notNull(element, "element");
    return new ImmutableList<>(element, this);
  }
@Test
  public void testAppend()
  {

    ImmutableList<String> empty = ImmutableList.empty();
    ImmutableList<String> a = empty.append("a");
    ImmutableList<String> ab = a.append("b");
    ImmutableList<String> abc = ab.append("c");

    assertEquals(a.size(), 1);
    assertEquals(ab.size(), 2);
    assertEquals(abc.size(), 3);

    assertEquals(a.toArray(), new Object[] { "a" });
    assertEquals(ab.toArray(), new Object[] { "a", "b" });
    assertEquals(abc.toArray(), new Object[] { "a", "b", "c" });
  }