DoubleVec { private DoubleVec(int capacity) { data = new double[capacity]; len = 0; } private  DoubleVec(int capacity); private  DoubleVec(double[] data); static DoubleVec create(); static DoubleVec withCapacity(int capacity); static DoubleVec wrap(double[] data); int capacity(); int len(); boolean isEmpty(); void reserve(int additional); void reserveExact(int additional); void shrinkToFit(); void truncate(int len); void clear(); void push(double element); void set(int index, double value); void concat(DoubleVec other); double get(int index); void sort(); void merge(DoubleVec other); void intersect(DoubleVec other); void dedup(); Iterator iterator(); List<Double> asList(); @Override String toString(); @Override boolean equals(Object o); @Override int hashCode();  }
@Test public void testDoubleVec() throws Exception { checkDoubleVec(random(0)); checkDoubleVec(random(1)); checkDoubleVec(random(2)); checkDoubleVec(random(3)); checkDoubleVec(random(DoubleVec.DEFAULT_CAPACITY - 2)); checkDoubleVec(random(DoubleVec.DEFAULT_CAPACITY - 1)); checkDoubleVec(random(DoubleVec.DEFAULT_CAPACITY)); checkDoubleVec(random(DoubleVec.DEFAULT_CAPACITY + 1)); checkDoubleVec(random(DoubleVec.DEFAULT_CAPACITY + 2)); for (int i = 0; i < 100; i++) { checkDoubleVec(random()); } }