### Question:
NeighborNetImpl implements CircularOrderingCreator { protected Pair<Identifier, Identifier> vertexTripletReduction(final VertexTriplet selectedVertices) { this.stackedVertexTriplets.push(selectedVertices); return this.updateV2V(selectedVertices); } NeighborNetImpl(); @Override IdentifierList createCircularOrdering(DistanceMatrix distanceMatrix); @Override boolean createsTreeSplits(); @Override SplitSystem getTreeSplits(); IdentifierList expand(Stack<VertexTriplet> stackedVertexTriplets);  }### Answer:
@Test public void testReduction() { DistanceMatrix v2v = new FlexibleDistanceMatrix(new IdentifierList(taxa), distances1); assertTrue(v2v.size() == 5); NeighborNetImpl nn = new NeighborNetImpl(); nn.mx.setV2V(v2v); nn.stackedVertexTriplets = new Stack<>(); nn.vertexTripletReduction( new NeighborNetImpl.VertexTriplet( v2v.getTaxa().getById(1), v2v.getTaxa().getById(2), v2v.getTaxa().getById(3))); assertTrue(v2v.size() == 4); double[][] matrix = v2v.getMatrix(); assertTrue(matrix.length == 4); assertTrue(Arrays.equals(matrix[0], new double[]{0.0, 9.0, 6.0, 4.0})); assertTrue(Arrays.equals(matrix[1], new double[]{9.0, 0.0, 6.0, 8.0})); assertTrue(Arrays.equals(matrix[2], new double[]{6.0, 6.0, 0.0, 5.0})); assertTrue(Arrays.equals(matrix[3], new double[]{4.0, 8.0, 5.0, 0.0})); }