ConnectionCalculator calc = new AparapiAveragePooling2D();
List<Connections> connections = new ArrayList<Connections>();
connections.add(c);
ValuesProvider activations = TensorFactory.tensorProvider(c, 2, true);
float[] src = new float[] { 0.5f, 1, 1, 2, 1.5f, 3, 2, 4, 2.5f, 5, 3, 6, 3.5f, 7, 4f, 8, 4.5f, 9, 5f, 10, 5.5f, 11, 6f, 12, 6.5f, 13, 7f, 14, 8f, 16, 7.5f, 15, 8.5f, 17, 9f, 18, 9.5f, 19, 10f, 20, 10.5f, 21, 11f, 22, 11.5f, 23, 12f, 24, 12.5f, 25, 13f, 26, 13.5f, 27, 14f, 28, 14.5f, 29, 15f, 30, 16f, 32, 15.5f, 31 };
System.arraycopy(src, 0, activations.get(c.getInputLayer()).getElements(), activations.get(c.getInputLayer()).getStartIndex(), src.length);
calc.calculate(connections, activations, c.getOutputLayer());
BackpropagationAveragePooling2D bp = new BackpropagationAveragePooling2D();
bp.setActivations(activations);
ValuesProvider vp = TensorFactory.tensorProvider(c, 2, true);
TensorFactory.copy(activations.get(c.getOutputLayer()), vp.get(c.getOutputLayer()));
bp.calculate(connections, vp, c.getInputLayer());
Tensor o = activations.get(c.getOutputLayer());
Tensor bpo = vp.get(c.getInputLayer());
assertEquals(true, bpo.get(0, 0, 0, 0) == o.get(0, 0, 0, 0) / c.getSubsamplingRegionLength());
assertEquals(true, bpo.get(0, 0, 2, 0) == o.get(0, 0, 1, 0) / c.getSubsamplingRegionLength());
assertEquals(true, bpo.get(0, 2, 0, 0) == o.get(0, 1, 0, 0) / c.getSubsamplingRegionLength());
assertEquals(true, bpo.get(0, 2, 2, 0) == o.get(0, 1, 1, 0) / c.getSubsamplingRegionLength());
assertEquals(true, bpo.get(1, 0, 0, 0) == o.get(1, 0, 0, 0) / c.getSubsamplingRegionLength());