Почему не проходит по второму условию - В случае возникновения исключений в процессе клонирования должно быть брошено исключение InternalError. Пробовал двадцать разных вариантов. Последний - такой:
public Object clone()
    {
        AmigoSet<E> amigoSet = new AmigoSet<>();
        try
        {
            amigoSet.addAll(this);
            amigoSet.map.putAll(this.map);
        }
        catch (Exception ex)
        {
            throw new InternalError();
        }
        return amigoSet;
    }