@Override
  public Object clone() throws CloneNotSupportedException
  {
    return new CowSet<>(_map.clone());
  }
@Test
  public void testClone() throws CloneNotSupportedException
  {
    final CowSet<String> set1 = new CowSet<>();
    set1.add("test");

    @SuppressWarnings("unchecked")
    final CowSet<String> set2 = (CowSet<String>)set1.clone();
    @SuppressWarnings("unchecked")
    final CowSet<String> set3 = (CowSet<String>)set2.clone();

    Assert.assertEquals(set1, set2);
    Assert.assertEquals(set2, set3);

    set2.add("test2");
    Assert.assertFalse(set1.contains("test2"));
    Assert.assertTrue(set2.contains("test2"));
    Assert.assertFalse(set3.contains("test2"));
    Assert.assertFalse(set2.equals(set1));
    Assert.assertFalse(set2.equals(set3));

    set3.add("test3");
    Assert.assertFalse(set1.contains("test3"));
    Assert.assertFalse(set2.contains("test3"));
    Assert.assertTrue(set3.contains("test3"));
    Assert.assertFalse(set3.equals(set1));
    Assert.assertFalse(set3.equals(set2));

    set1.remove("test");
    Assert.assertFalse(set1.contains("test"));
    Assert.assertTrue(set2.contains("test"));
    Assert.assertTrue(set3.contains("test"));
    Assert.assertFalse(set1.equals(set2));
    Assert.assertFalse(set1.equals(set3));
  }