AbstractVector implements Vector { @Override public Vector minus(Vector that) { if (size != that.size()) { throw new CardinalityException(size, that.size()); } Vector result = like().assign(this); Iterator<Element> iter = that.iterateNonZero(); while (iter.hasNext()) { Element thatElement = iter.next(); int index = thatElement.index(); result.setQuick(index, this.getQuick(index) - thatElement.get()); } return result; } protected  AbstractVector(int size); @Override double aggregate(DoubleDoubleFunction aggregator, DoubleFunction map); @Override double aggregate(Vector other, DoubleDoubleFunction aggregator, DoubleDoubleFunction combiner); @Override Vector viewPart(int offset, int length); @Override Vector clone(); @Override Vector divide(double x); @Override double dot(Vector x); double dotSelf(); @Override double get(int index); @Override Element getElement(int index); @Override Vector minus(Vector that); @Override Vector normalize(); @Override Vector normalize(double power); @Override Vector logNormalize(); @Override Vector logNormalize(double power); Vector logNormalize(double power, double normLength); @Override double norm(double power); @Override double getLengthSquared(); @Override double getDistanceSquared(Vector v); @Override double maxValue(); @Override int maxValueIndex(); @Override double minValue(); @Override int minValueIndex(); @Override Vector plus(double x); @Override Vector plus(Vector x); @Override void addTo(Vector v); @Override void set(int index, double value); @Override Vector times(double x); @Override Vector times(Vector x); @Override double zSum(); @Override Vector assign(double value); @Override Vector assign(double[] values); @Override Vector assign(Vector other); @Override Vector assign(DoubleDoubleFunction f, double y); @Override Vector assign(DoubleFunction function); @Override Vector assign(Vector other, DoubleDoubleFunction function); @Override Matrix cross(Vector other); @Override final int size(); @Override String asFormatString(); @Override int hashCode(); @Override boolean equals(Object o); @Override String toString();  }
@Test public void testMinus() { Vector val = test.minus(test); assertEquals("size", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 0.0, val.get(i), EPSILON); } val = test.minus(test).minus(test); assertEquals("cardinality", test.size(), val.size()); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 0.0, val.get(i) + test.get(i), EPSILON); } Vector val1 = test.plus(1); val = val1.minus(test); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', 1.0, val.get(i), EPSILON); } val1 = test.plus(-1); val = val1.minus(test); for (int i = 0; i < test.size(); i++) { assertEquals("get [" + i + ']', -1.0, val.get(i), EPSILON); } }