/*- * Copyright 2014 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.dawnsci.analysis.dataset.slicer; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; import org.eclipse.dawnsci.analysis.dataset.slicer.SliceNDGenerator; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.Slice; import org.eclipse.january.dataset.SliceND; import org.junit.Test; public class SliceNDGeneratorTest { @Test public void testIndiciesConstructor() { int[] shape = {3,4,5,1000,1000}; int[] dd = {3,4}; Dataset p = DatasetFactory.createFromObject(new int[]{1,3}); Dataset r = DatasetFactory.createRange(3, Dataset.INT); SliceNDGenerator gen = new SliceNDGenerator(shape, dd, null,null,null,null,null); int[] os = gen.getOutputShape(); assertArrayEquals(shape, os); List<SliceND> slices = gen.generateDataSlices(); SliceND sliceND = slices.get(0); assertEquals(3*4*5,slices.size()); assertArrayEquals(new int[]{0,0,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,4,0,0},sliceND.getStart()); gen = new SliceNDGenerator(shape, dd, null,p,r,null,null); os = gen.getOutputShape(); assertArrayEquals(new int[]{shape[0],p.getSize(),r.getSize(),shape[3],shape[4]}, os); slices = gen.generateDataSlices(); sliceND = slices.get(0); assertEquals(3*p.getSize()*r.getSize(),slices.size()); assertArrayEquals(new int[]{0,1,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,2,0,0},sliceND.getStart()); } @Test public void testSliceNDConstructorGenerator() { int[] shape = {3,4,5,1000,1000}; int[] dd = {3,4}; SliceNDGenerator gen = new SliceNDGenerator(shape, dd, new SliceND(shape)); int[] os = gen.getOutputShape(); assertArrayEquals(shape, os); List<SliceND> slices = gen.generateDataSlices(); SliceND sliceND = slices.get(0); assertEquals(3*4*5,slices.size()); assertArrayEquals(new int[]{0,0,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,4,0,0},sliceND.getStart()); List<SliceND> outSlice = new ArrayList<SliceND>(); slices = gen.generateDataSlices(null,outSlice); sliceND = slices.get(0); SliceND sliceNDo = outSlice.get(0); assertArrayEquals(sliceND.getStart(), sliceNDo.getStart()); sliceND = slices.get(slices.size()-1); sliceNDo = outSlice.get(slices.size()-1); assertArrayEquals(sliceND.getStart(), sliceNDo.getStart()); gen = new SliceNDGenerator(shape, dd, new SliceND(shape, (Slice) null, new Slice(1, 4, 2), new Slice(0, 3), null, null)); os = gen.getOutputShape(); assertArrayEquals(new int[]{shape[0],2,3,shape[3],shape[4]}, os); slices = gen.generateDataSlices(); sliceND = slices.get(0); assertEquals(3*3*2,slices.size()); assertArrayEquals(new int[]{0,1,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,2,0,0},sliceND.getStart()); outSlice = new ArrayList<SliceND>(); slices = gen.generateDataSlices(null,outSlice); sliceND = slices.get(0); sliceNDo = outSlice.get(0); assertArrayEquals(new int[]{0,0,0,0,0}, sliceNDo.getStart()); assertArrayEquals(new int[]{0,1,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); sliceNDo = outSlice.get(slices.size()-1); assertArrayEquals(new int[]{2,3,2,0,0},sliceND.getStart()); assertArrayEquals(new int[]{2,1,2,0,0},sliceNDo.getStart()); } @Test public void testSorting() { int[] shape = {3,4,5,1000,1000}; int[] dd = {3,4}; SliceNDGenerator gen = new SliceNDGenerator(shape, dd, new SliceND(shape)); List<SliceND> slices = gen.generateDataSlices(new int[]{0}); SliceND sliceND = slices.get(0); assertArrayEquals(new int[]{0,0,0,0,0},sliceND.getStart()); sliceND = slices.get(1); assertArrayEquals(new int[]{1,0,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,4,0,0},sliceND.getStart()); slices = gen.generateDataSlices(new int[]{1}); sliceND = slices.get(0); assertArrayEquals(new int[]{0,0,0,0,0},sliceND.getStart()); sliceND = slices.get(1); assertArrayEquals(new int[]{0,1,0,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,4,0,0},sliceND.getStart()); slices = gen.generateDataSlices(new int[]{1,2}); sliceND = slices.get(0); assertArrayEquals(new int[]{0,0,0,0,0},sliceND.getStart()); sliceND = slices.get(1); assertArrayEquals(new int[]{0,1,0,0,0},sliceND.getStart()); sliceND = slices.get(4); assertArrayEquals(new int[]{0,0,1,0,0},sliceND.getStart()); sliceND = slices.get(5); assertArrayEquals(new int[]{0,1,1,0,0},sliceND.getStart()); sliceND = slices.get(slices.size()-1); assertArrayEquals(new int[]{2,3,4,0,0},sliceND.getStart()); } }