/** * Copyright 2010 JogAmp Community. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of JogAmp Community. */ package com.jogamp.common.util; import java.io.IOException; import java.nio./*value2*/FloatBuffer/*value2*/; import java.util.Arrays; import org.junit.Assert; import org.junit.Test; import com.jogamp.junit.util.SingletonJunitCase; import org.junit.FixMethodOrder; import org.junit.runners.MethodSorters; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class /*testname*/TestFloatStack01/*testname*/ extends SingletonJunitCase { static final boolean equals(final /*value*/float/*value*/[] b, final int bOffset, final /*value*/float/*value*/[] stack, final int stackOffset, final int length) { for(int i=0; i<length; i++) { if( b[bOffset+i] != stack[stackOffset+i]) { return false; } } return true; } @Test public void test01PrimitiveArray_I32_G02() { final int initialSizeElem = 32; final int growSizeElem = 2; testPrimitiveArrayImpl(initialSizeElem, growSizeElem); } @Test public void test02PrimitiveArray_I00_G32() { final int initialSizeElem = 0; final int growSizeElem = 32; testPrimitiveArrayImpl(initialSizeElem, growSizeElem); } static private final boolean VERBOSE = false; private void testPrimitiveArrayImpl(final int initialSizeElem, final int growSizeElem) { final int compNum = 3; final /*value*/float/*value*/[] e0 = new /*value*/float/*value*/[] { 0, 1, 2 }; final /*value*/float/*value*/[] e1 = new /*value*/float/*value*/[] { 3, 4, 5 }; final int totalSizeElem = initialSizeElem+2*growSizeElem; final int initialSizeComp = initialSizeElem*compNum; final int growSizeComp = growSizeElem*compNum; final int totalSizeComp = totalSizeElem*compNum; final /*name*/FloatStack/*name*/ fs0 = new /*name*/FloatStack/*name*/(initialSizeComp, growSizeComp); // // PUT // if(VERBOSE) { System.err.println("0: "+fs0); } for(int i=0; i<totalSizeElem; i++) { if(i < initialSizeElem) { Assert.assertTrue("Error #"+i+", "+fs0, fs0.remaining() == (initialSizeElem-i)*compNum); } else { final int j = ( i - initialSizeElem ) % growSizeElem ; final int k = ( 0 < j && j < growSizeElem ) ? growSizeElem - j : 0; Assert.assertTrue("Error #"+i+"("+j+", "+k+"), "+fs0, fs0.remaining() == k*compNum); } Assert.assertTrue("Error "+fs0, fs0.position() == i*compNum); String s; if( 0 == i % 2) { if(VERBOSE) { s = Arrays.toString(e0); } fs0.putOnTop(e0, 0, compNum); } else { if(VERBOSE) { s = Arrays.toString(e1); } fs0.putOnTop(e1, 0, compNum); } if(VERBOSE) { System.err.println("#"+i+"/"+totalSizeElem+": "+fs0+" <- "+s); } } if(VERBOSE) { System.err.println("X: "+fs0); } Assert.assertTrue("Error "+fs0, fs0.remaining() == 0); Assert.assertTrue("Error "+fs0, fs0.position() == totalSizeComp); fs0.setGrowSize(0); { Exception expectedException = null; try { fs0.putOnTop(e1, 0, compNum); } catch (final Exception e) { expectedException = e; } if(null == expectedException || !(expectedException instanceof IndexOutOfBoundsException) ) { Assert.assertTrue("Error "+fs0+", exception "+expectedException, false); } } // // GET // for(int i=0; i<totalSizeElem; i++) { Assert.assertTrue("Error "+fs0, fs0.remaining() == i*compNum); Assert.assertTrue("Error "+fs0, fs0.position() == (totalSizeElem-i)*compNum); final /*value*/float/*value*/[] buf = new /*value*/float/*value*/[compNum]; fs0.getFromTop(buf, 0, compNum); if( 0 == i % 2) { Assert.assertTrue("Error "+fs0+", #"+i+": "+Arrays.toString(e1)+" != "+Arrays.toString(buf), Arrays.equals(e1, buf)); } else { Assert.assertTrue("Error "+fs0+", #"+i+": "+Arrays.toString(e0)+" != "+Arrays.toString(buf), Arrays.equals(e0, buf)); } } Assert.assertTrue("Error "+fs0, fs0.remaining() == totalSizeComp); Assert.assertTrue("Error "+fs0, fs0.position() == 0); { final /*value*/float/*value*/[] buf = new /*value*/float/*value*/[compNum]; Exception expectedException = null; try { fs0.getFromTop(buf, 0, compNum); } catch (final Exception e) { expectedException = e; } if(null == expectedException || !(expectedException instanceof IndexOutOfBoundsException) ) { Assert.assertTrue("Error "+fs0+", exception "+expectedException, false); } } } @Test public void test11FloatBuffer_I32_G02() { final int initialSizeElem = 32; final int growSizeElem = 2; testFloatBufferImpl(initialSizeElem, growSizeElem); } @Test public void test12FloatBuffer_I00_G32() { final int initialSizeElem = 0; final int growSizeElem = 32; testFloatBufferImpl(initialSizeElem, growSizeElem); } private void testFloatBufferImpl(final int initialSizeElem, final int growSizeElem) { final int compNum = 3; final /*value2*/FloatBuffer/*value2*/ fb0 = /*value2*/FloatBuffer/*value2*/.allocate(3*compNum); final /*value*/float/*value*/[] e0 = new /*value*/float/*value*/[] { 0, 1, 2 }; final /*value*/float/*value*/[] e1 = new /*value*/float/*value*/[] { 3, 4, 5 }; final /*value*/float/*value*/[] e2 = new /*value*/float/*value*/[] { 6, 7, 8 }; // not put on stack! fb0.put(e0); fb0.put(e1); fb0.put(e2); fb0.position(0); final int totalSizeElem = initialSizeElem+2*growSizeElem; final int initialSizeComp = initialSizeElem*compNum; final int growSizeComp = growSizeElem*compNum; final int totalSizeComp = totalSizeElem*compNum; final /*name*/FloatStack/*name*/ fs0 = new /*name*/FloatStack/*name*/(initialSizeComp, growSizeComp); // // PUT // for(int i=0; i<totalSizeElem; i++) { if( 0 == i ) { Assert.assertTrue("Error #"+i+", "+fs0+", "+fb0, fb0.position() == 0); } else if( 0 == i % 2) { Assert.assertTrue("Error #"+i+", "+fs0+", "+fb0, fb0.position() == 2*compNum); fb0.position(0); } else { Assert.assertTrue("Error #"+i+", "+fs0+", "+fb0, fb0.position() == compNum); } if(i < initialSizeElem) { Assert.assertTrue("Error #"+i+", "+fs0, fs0.remaining() == (initialSizeElem-i)*compNum); } else { final int j = ( i - initialSizeElem ) % growSizeElem ; final int k = ( 0 < j && j < growSizeElem ) ? growSizeElem - j : 0; Assert.assertTrue("Error #"+i+"("+j+", "+k+"), "+fs0, fs0.remaining() == k*compNum); } Assert.assertTrue("Error "+fs0, fs0.position() == i*compNum); final int fb0Pos0 = fb0.position(); fs0.putOnTop(fb0, compNum); Assert.assertTrue("Error "+fs0+", "+fb0, fb0.position() == fb0Pos0 + compNum); } Assert.assertTrue("Error "+fs0, fs0.remaining() == 0); Assert.assertTrue("Error "+fs0, fs0.position() == totalSizeComp); fs0.setGrowSize(0); { fb0.position(0); Exception expectedException = null; try { fs0.putOnTop(fb0, compNum); } catch (final Exception e) { expectedException = e; } if(null == expectedException || !(expectedException instanceof IndexOutOfBoundsException) ) { Assert.assertTrue("Error "+fs0+", exception "+expectedException, false); } fb0.position(0); } // // GET // for(int i=0; i<totalSizeElem; i++) { Assert.assertTrue("Error "+fs0, fs0.remaining() == i*compNum); Assert.assertTrue("Error "+fs0, fs0.position() == (totalSizeElem-i)*compNum); final /*value*/float/*value*/[] backing = new /*value*/float/*value*/[compNum]; final /*value2*/FloatBuffer/*value2*/ buf = /*value2*/FloatBuffer/*value2*/.wrap(backing); fs0.getFromTop(buf, compNum); if( 0 == i % 2) { Assert.assertTrue("Error "+fs0+", #"+i+": "+Arrays.toString(e1)+" != "+Arrays.toString(backing), Arrays.equals(e1, backing)); } else { Assert.assertTrue("Error "+fs0+", #"+i+": "+Arrays.toString(e0)+" != "+Arrays.toString(backing), Arrays.equals(e0, backing)); } Assert.assertTrue("Error "+fs0+", "+buf, buf.position() == compNum); buf.position(0); } Assert.assertTrue("Error "+fs0, fs0.remaining() == totalSizeComp); Assert.assertTrue("Error "+fs0, fs0.position() == 0); { final /*value*/float/*value*/[] backing = new /*value*/float/*value*/[compNum]; final /*value2*/FloatBuffer/*value2*/ buf = /*value2*/FloatBuffer/*value2*/.wrap(backing); Exception expectedException = null; try { fs0.getFromTop(buf, compNum); } catch (final Exception e) { expectedException = e; } if(null == expectedException || !(expectedException instanceof IndexOutOfBoundsException) ) { Assert.assertTrue("Error "+fs0+", exception "+expectedException, false); } } } public static void main(final String args[]) throws IOException { final String tstname = /*testname*/TestFloatStack01/*testname*/.class.getName(); org.junit.runner.JUnitCore.main(tstname); } }