public ForLoop execute(Body body) { if (dim >= 0) { loopN(body, dim); } return this; }
@Test public void test6D() throws Exception { final TestBody body = new TestBody(); ForLoop.execute(new int[]{3, 2, 4, 2, 2, 3}, body); assertEquals(3 * 2 * 4 * 2 * 2 * 3, body.indexesList.size()); }
@Test public void test0D() throws Exception { final TestBody body = new TestBody(); ForLoop.execute(new int[]{}, body); assertEquals(0, body.indexesList.size()); }
@Test public void test1D() throws Exception { final TestBody body = new TestBody(); ForLoop.execute(new int[]{3}, body); assertEquals(3, body.indexesList.size()); assertArrayEquals(new int[]{0}, body.indexesList.get(0)); assertArrayEquals(new int[]{1}, body.indexesList.get(1)); assertArrayEquals(new int[]{2}, body.indexesList.get(2)); }
private void loopN(Body body, int off) { for (int k = 0; k < sizes[dim - off]; k++) { indexes[dim - off] = k; if (off == 0) { body.execute(indexes, sizes); } else { loopN(body, off - 1); } } } }
@Test public void test2D() throws Exception { final TestBody body = new TestBody(); ForLoop.execute(new int[]{2, 3}, body); assertEquals(2 * 3, body.indexesList.size()); assertArrayEquals(new int[]{0, 0}, body.indexesList.get(0)); assertArrayEquals(new int[]{0, 1}, body.indexesList.get(1)); assertArrayEquals(new int[]{0, 2}, body.indexesList.get(2)); assertArrayEquals(new int[]{1, 0}, body.indexesList.get(3)); assertArrayEquals(new int[]{1, 1}, body.indexesList.get(4)); assertArrayEquals(new int[]{1, 2}, body.indexesList.get(5)); }
@Test public void test3D() throws Exception { final TestBody body = new TestBody(); ForLoop.execute(new int[]{2, 2, 3}, body); assertEquals(2 * 2 * 3, body.indexesList.size()); assertArrayEquals(new int[]{0, 0, 0}, body.indexesList.get(0)); assertArrayEquals(new int[]{0, 0, 1}, body.indexesList.get(1)); assertArrayEquals(new int[]{0, 0, 2}, body.indexesList.get(2)); assertArrayEquals(new int[]{0, 1, 0}, body.indexesList.get(3)); assertArrayEquals(new int[]{0, 1, 1}, body.indexesList.get(4)); assertArrayEquals(new int[]{0, 1, 2}, body.indexesList.get(5)); assertArrayEquals(new int[]{1, 0, 0}, body.indexesList.get(6)); assertArrayEquals(new int[]{1, 0, 1}, body.indexesList.get(7)); assertArrayEquals(new int[]{1, 0, 2}, body.indexesList.get(8)); assertArrayEquals(new int[]{1, 1, 0}, body.indexesList.get(9)); assertArrayEquals(new int[]{1, 1, 1}, body.indexesList.get(10)); assertArrayEquals(new int[]{1, 1, 2}, body.indexesList.get(11)); }
final int startIndexToCopy = DimKey.findStartIndexOfBandVariables(dimensions); System.arraycopy(variable.getShape(), startIndexToCopy, sizeArray, 0, sizeArray.length); ForLoop.execute(sizeArray, new ForLoop.Body() { @Override public void execute(int[] indexes, int[] sizes) {