package ucar.coord; import org.junit.Test; import ucar.nc2.util.Misc; import java.util.ArrayList; import java.util.Formatter; import java.util.List; /** * Describe * * @author caron * @since 12/10/13 */ public class TestCoordinateND { @Test public void testCoordinateND() { CoordinateND<Short> prev = makeCoordinateND(2, 10); Counter counter = new Counter(); Formatter f = new Formatter(); prev.showInfo(f, counter); System.out.printf("%s%n", f); System.out.printf("prev %s%n====================%n", counter.show()); CoordinateND<Short> curr = makeCoordinateND(2, 11); counter = new Counter(); f = new Formatter(); curr.showInfo(f, counter); System.out.printf("%s%n", f); System.out.printf("curr %s%n====================%n", counter.show()); CoordinateND<Short> reindexed = new CoordinateND.Builder<Short>().reindex(curr.getCoordinates(), prev); counter = new Counter(); f = new Formatter(); reindexed.showInfo(f, counter); System.out.printf("%s%n", f); System.out.printf("reindexed %s%n====================%n", counter.show()); assert Misc.closeEnough(curr.getSparseArray().getDensity(), 1.0); assert Misc.closeEnough(reindexed.getSparseArray().getDensity(), .826446); } static public CoordinateND<Short> makeCoordinateND(int rank, int size) { List<Coordinate> coords = new ArrayList<>(); for (int i=0; i<rank; i++) coords.add(new TestCoordinate(size*(i+1))); int[] sizeArray = new int[coords.size()]; for (int i = 0; i < coords.size(); i++) sizeArray[i] = coords.get(i).getSize(); SparseArray.Builder<Short> builder = new SparseArray.Builder<>(sizeArray); int n = builder.getTotalSize(); int[] track = new int[n]; for (int i=0; i<n; i++) track[i] = i+1; builder.setTrack(track); List<Short> content = new ArrayList<>(n); for (int i=0; i<n; i++) content.add((short) (i*10)); builder.setContent(content); SparseArray<Short> sa = builder.finish(); return new CoordinateND<>(coords, sa); } static public CoordinateND<Short> makeCoordinateND(int size) { List<Coordinate> coords = new ArrayList<>(); coords.add(TestCoordinate.factory(size, Coordinate.Type.runtime)); coords.add(TestCoordinate.factory(size, Coordinate.Type.time)); coords.add(TestCoordinate.factory(size, Coordinate.Type.vert)); int[] sizeArray = new int[coords.size()]; for (int i = 0; i < coords.size(); i++) sizeArray[i] = coords.get(i).getSize(); SparseArray.Builder<Short> builder = new SparseArray.Builder<>(sizeArray); // CoordinateND<Short> prev = new CoordinateND<>(coords, sa); int n = builder.getTotalSize(); int[] track = new int[n]; for (int i=0; i<n; i++) track[i] = i+1; builder.setTrack(track); List<Short> content = new ArrayList<>(n); for (int i=0; i<n; i++) content.add((short) (i*10)); builder.setContent(content); SparseArray<Short> sa = builder.finish(); return new CoordinateND<>(coords, sa); } }