diff options
author | Sven Gothel <sgothel@jausoft.com> | 2013-04-13 23:00:09 +0200 |
---|---|---|
committer | Sven Gothel <sgothel@jausoft.com> | 2013-04-13 23:00:09 +0200 |
commit | 47333929fd4e563d61996654d2a435b52b904ef0 (patch) | |
tree | 712142b23921f20831403054f042f20f5245a702 | |
parent | 21fc00af1c404d93280e21d05efc124ec23d575b (diff) |
Bug 715: Adding unit test w/ 'intArrayCopy(int *dest, int *src, int num)' to test array offset working correct.
The 'carray' pointer returned from GetPrimitiveArrayCritical(..) is moved about the array offset
and used in ReleasePrimitiveArrayCritical(..) to release the pinpointed memory.
Even though this 'is' a bug by violating the _sparse_ specification, Hotspot impl. doesn't use the value at all (NOP)
and hence this code didn't produce an error since .. (Same w/ Dalvik).
A followup commit will fix this issue.
4 files changed, 64 insertions, 2 deletions
diff --git a/make/scripts/runtest.sh b/make/scripts/runtest.sh index 657c217..f38d179 100755 --- a/make/scripts/runtest.sh +++ b/make/scripts/runtest.sh @@ -75,7 +75,7 @@ function onetest() { # #onetest com.jogamp.common.GlueGenVersion 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestSystemPropsAndEnvs 2>&1 | tee -a $LOG -onetest com.jogamp.common.util.TestVersionInfo 2>&1 | tee -a $LOG +#onetest com.jogamp.common.util.TestVersionInfo 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestVersionNumber 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestIteratorIndexCORE 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.locks.TestRecursiveLock01 2>&1 | tee -a $LOG @@ -95,7 +95,7 @@ onetest com.jogamp.common.util.TestVersionInfo 2>&1 | tee -a $LOG #onetest com.jogamp.common.nio.TestStructAccessorEndian 2>&1 | tee -a $LOG #onetest com.jogamp.common.os.TestElfReader01 2>&1 | tee -a $LOG #onetest com.jogamp.gluegen.test.junit.generation.Test1p1JavaEmitter 2>&1 | tee -a $LOG -#onetest com.jogamp.gluegen.test.junit.generation.Test1p2ProcAddressEmitter 2>&1 | tee -a $LOG +onetest com.jogamp.gluegen.test.junit.generation.Test1p2ProcAddressEmitter 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestPlatform01 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestRunnableTask01 2>&1 | tee -a $LOG #onetest com.jogamp.common.util.TestIOUtil01 2>&1 | tee -a $LOG diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java b/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java index 357ccea..f22b1df 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/BaseClass.java @@ -38,6 +38,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; import java.nio.LongBuffer; +import java.util.Arrays; import jogamp.common.os.MachineDescriptionRuntime; @@ -725,6 +726,54 @@ public class BaseClass extends JunitTracer { i = binding.intArrayRead(iarray, 0, 3); Assert.assertTrue("Wrong result: "+i, 6==i); + + final int[] src = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; + final IntBuffer srcB = IntBuffer.wrap(src); + { + final int[] dst = new int[src.length]; + i = binding.intArrayCopy(dst, 0, src, 0, src.length); + System.err.println("ArrayCopy.01: "+Arrays.toString(dst)); + Assert.assertTrue("Wrong result: "+i, src.length==i); + Assert.assertTrue(Arrays.equals(src, dst)); + } + { + IntBuffer dstB = IntBuffer.allocate(src.length); + i = binding.intArrayCopy(dstB, srcB, src.length); + System.err.println("ArrayCopy.02: "+Arrays.toString(dstB.array())+", "+dstB); + Assert.assertTrue("Wrong result: "+i, src.length==i); + Assert.assertTrue(Arrays.equals(src, dstB.array())); + } + + { + final int[] src36 = new int[] { 4, 5, 6, 7 }; + final int[] dst = new int[src36.length]; + i = binding.intArrayCopy(dst, 0, src, 3, src36.length); + System.err.println("ArrayCopy.03: "+Arrays.toString(dst)); + Assert.assertTrue("Wrong result: "+i, src36.length==i); + Assert.assertTrue(Arrays.equals(src36, dst)); + } + + final int[] src2 = new int[] { 0, 0, 0, 4, 5, 6, 7, 0, 0, 0 }; + { + final int[] dst = new int[src2.length]; + i = binding.intArrayCopy(dst, 3, src, 3, 4); + System.err.println("ArrayCopy.04: "+Arrays.toString(dst)); + Assert.assertTrue("Wrong result: "+i, 4==i); + Assert.assertTrue(Arrays.equals(src2, dst)); + } + { + IntBuffer dstB = IntBuffer.allocate(src2.length); + { + dstB.position(3); + srcB.position(3); + i = binding.intArrayCopy(dstB, srcB, 4); + dstB.position(0); + srcB.position(0); + } + System.err.println("ArrayCopy.05: "+Arrays.toString(dstB.array())+", "+dstB); + Assert.assertTrue("Wrong result: "+i, 4==i); + Assert.assertTrue(Arrays.equals(src2, dstB.array())); + } } void assertAPTR(final long expected, final long actual) { diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c index c32b54b..31307a9 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.c @@ -246,6 +246,16 @@ MYAPI int MYAPIENTRY intArrayRead(const int * ints, int num) { return s; } +MYAPI int MYAPIENTRY intArrayCopy(int * dest, const int * src, int num) { + int i=0; + if(NULL!=dest && NULL!=src) { + for(i=0; i<num; i++) { + dest[i] = src[i]; + } + } + return num; +} + /** MYAPI int intArrayWrite(int * * ints, int num) { int i=0, s=0; diff --git a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h index 49510b4..555a113 100644 --- a/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h +++ b/src/junit/com/jogamp/gluegen/test/junit/generation/test1.h @@ -122,6 +122,9 @@ MYAPI int MYAPIENTRY stringArrayRead(const char * * strings, int num); /** Returns the sum of all integers, ints maybe NULL. */ MYAPI int MYAPIENTRY intArrayRead(const int * ints, int num); +/** Copies num integer from src to dest. */ +MYAPI int MYAPIENTRY intArrayCopy(int * dest, const int * src, int num); + /** Increases the elements by 1, and returns the sum MYAPI int MYAPIENTRY intArrayWrite(int * * ints, int num); */ |