/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2014, Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.geometry;
import static org.junit.Assert.*;
import static org.geotoolkit.geometry.HyperCubeIterator.*;
import org.junit.Test;
/**
*
* @author Johann Sorel (Geomatys)
*/
public class HyperCubeIteratorTest extends org.geotoolkit.test.TestBase {
@Test
public void iterate2DTest(){
final int[] lower = {0,0};
final int[] upper = {11,3};
final HyperCubeIterator ite = new HyperCubeIterator(lower, upper, new int[]{5,2});
//first row
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,0}, new int[]{ 5,2}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,0}, new int[]{10,2}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{10,0}, new int[]{11,2}), ite.next());
//second row
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,2}, new int[]{ 5,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,2}, new int[]{10,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{10,2}, new int[]{11,3}), ite.next());
assertFalse(ite.hasNext());
}
@Test
public void iterate2DOffsetTest(){
final int[] lower = {4,1};
final int[] upper = {11,3};
final HyperCubeIterator ite = new HyperCubeIterator(lower, upper, new int[]{5,2});
//first row
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 4,1}, new int[]{ 9,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 9,1}, new int[]{11,3}), ite.next());
assertFalse(ite.hasNext());
}
@Test
public void iterate3DTest(){
final int[] lower = {0,0,0};
final int[] upper = {10,2,3};
final HyperCubeIterator ite = new HyperCubeIterator(lower, upper, new int[]{5,1,2});
//first slice
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,0,0}, new int[]{ 5,1,2}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,0,0}, new int[]{10,1,2}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,1,0}, new int[]{ 5,2,2}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,1,0}, new int[]{10,2,2}), ite.next());
//second slice
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,0,2}, new int[]{ 5,1,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,0,2}, new int[]{10,1,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 0,1,2}, new int[]{ 5,2,3}), ite.next());
assertTrue(ite.hasNext());
assertEquals(new HyperCube(new int[]{ 5,1,2}, new int[]{10,2,3}), ite.next());
assertFalse(ite.hasNext());
}
}