From 82d14d4a72e0969a93f2eb7b76cb165989eba6a9 Mon Sep 17 00:00:00 2001
From: Gary Frost <frost.gary@gmail.com>
Date: Mon, 6 Aug 2012 21:24:01 +0000
Subject: [PATCH]

---
 test/runtime/build.xml                        |  72 +++++-----
 .../aparapi/test/runtime/BufferTransfer.java  | 125 ++++++++++++++++++
 2 files changed, 155 insertions(+), 42 deletions(-)
 create mode 100644 test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java

diff --git a/test/runtime/build.xml b/test/runtime/build.xml
index 7af1dceb..b52d42ac 100644
--- a/test/runtime/build.xml
+++ b/test/runtime/build.xml
@@ -3,15 +3,15 @@
 <project name="codegen" default="junit" basedir=".">
 
    <!-- 
-			USER CONFIGURABLE PROPERTIES 
+         USER CONFIGURABLE PROPERTIES 
    -->	
    <property name="junit.jar.version" value="4.10"/>
    <property name="junit.jar.name" value="junit-${junit.jar.version}.jar"/>
    <property name="junit.home" value="${basedir}/.libs"/>
    <property name="junit.base.url" value="http://repo1.maven.org/maven2/junit/junit"/>
-	
+
    <!-- 
-			DO NOT EDIT BELOW THIS LINE 
+         DO NOT EDIT BELOW THIS LINE 
    -->
    <echo>OS Name:    ${os.name}</echo>
    <echo>OS Version: ${os.version}</echo>
@@ -20,24 +20,23 @@
    <property name="build.compiler" value="javac1.6"/>
    <property name="ant.build.javac.source" value="1.6"/>
    <property name="ant.build.javac.target" value="1.6"/>
-	
+
    <available property="junit.installed" file="${junit.home}/${junit.jar.name}"/>
 
-	<target name="install.junit" unless="junit.installed">
-	   <mkdir dir="${junit.home}"/>
-	   <!-- Cleanup all existing JUnit installations -->
-	   <delete failonerror="false" includeEmptyDirs="true">
-		   <fileset dir="${junit.home}" includes="junit*/"/>
-	   </delete>
-	   <!-- Download and unzip requested JUnit version -->
-	   <get src="${junit.base.url}/${junit.jar.version}/${junit.jar.name}" dest="${junit.home}"/>
-	</target>
-	
+   <target name="install.junit" unless="junit.installed">
+      <mkdir dir="${junit.home}"/>
+      <!-- Cleanup all existing JUnit installations -->
+      <delete failonerror="false" includeEmptyDirs="true">
+         <fileset dir="${junit.home}" includes="junit*/"/>
+      </delete>
+      <!-- Download and unzip requested JUnit version -->
+      <get src="${junit.base.url}/${junit.jar.version}/${junit.jar.name}" dest="${junit.home}"/>
+   </target>
+
    <target name="clean">
       <delete dir="classes"/>
       <delete dir="junit"/>
-      <delete dir="src/genjava/com"/>
-   	  <!-- Legacy cleanup -->
+      <!-- Legacy cleanup -->
       <delete file="junit*.jar"/>
    </target>
 
@@ -46,41 +45,30 @@
       <pathelement path="${junit.home}/${junit.jar.name}"/>
       <pathelement path="classes"/>
    </path>
-	
+
    <target name="junit" depends="clean, install.junit">
       <mkdir dir="classes"/>
-   	  <javac debug="true"
-      	 debuglevel="lines,vars,source"
+      <javac debug="true"
+         debuglevel="lines,vars,source"
          srcdir="src/java" 
-      	 destdir="classes" 
-      	 includeAntRuntime="false"
-      	 classpathref="classpath">
-      	    <compilerarg value="-Xlint"/>
-      	   	<compilerarg value="-Xlint:-path"/>
+         destdir="classes" 
+         includeAntRuntime="false"
+         classpathref="classpath">
+         <compilerarg value="-Xlint"/>
+         <compilerarg value="-Xlint:-path"/>
       </javac>
 
-      <java classname="com.amd.aparapi.CreateJUnitTests" classpathref="classpath">
-         <sysproperty key="root" value="${basedir}"/>
-      </java>
-
-      <javac debug="true"
-      	 debuglevel="lines,vars,source"
-         srcdir="src/genjava" 
-      	 destdir="classes" 
-      	 includeAntRuntime="false"
-      	 classpathref="classpath">
-      	    <compilerarg value="-Xlint"/>
-      	   	<compilerarg value="-Xlint:-path"/>
-      </javac>
-      
-   	  <mkdir dir="junit"/>
+      <mkdir dir="junit"/>
       <mkdir dir="junit/data"/>
-      
-   	  <junit printsummary="false" fork="false" haltonfailure="false" failureproperty="tests.failed" showoutput="false">
+
+      <!-- even though fork is slower we need to set the library path and this requires fork -->
+
+      <junit printsummary="false" fork="true" haltonfailure="false" failureproperty="tests.failed" showoutput="false">
+         <sysproperty key="java.library.path" value="..\..\com.amd.aparapi.jni\dist"/>
          <formatter type="xml" />
          <classpath refid="classpath"/>
          <batchtest todir="junit/data">
-            <fileset dir="src/genjava"/> 
+            <fileset dir="src\java"/>
          </batchtest>
       </junit>
 
diff --git a/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java b/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java
new file mode 100644
index 00000000..0074b8e5
--- /dev/null
+++ b/test/runtime/src/java/com/amd/aparapi/test/runtime/BufferTransfer.java
@@ -0,0 +1,125 @@
+package com.amd.aparapi.test.runtime;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.amd.aparapi.Kernel;
+import com.amd.aparapi.Range;
+
+public class BufferTransfer{
+  
+   
+   interface Filler{
+      void fill(int[] array, int index);
+   }
+   interface Comparer{
+      boolean same(int[] lhs, int[]rhs, int index);
+   }
+   void fill(int[] array, Filler _filler ){
+       for (int i=0; i<array.length; i++ ){
+          _filler.fill(array, i);
+       }
+   }
+   boolean same(int[] lhs, int[] rhs,  Comparer _comparer ){
+      boolean same = lhs != null && rhs!=null && lhs.length==rhs.length;
+      for (int i=0; same && i<lhs.length; i++ ){
+         same = _comparer.same(lhs, rhs, i);
+      }
+      return(same);
+  }
+   void zero(int[] array){
+      Arrays.fill(array, 0);
+   }
+   
+   boolean same(int[] lhs, int[] rhs){
+     return(same(lhs, rhs, new Comparer(){
+
+      @Override public boolean same(int[] lhs, int[] rhs, int index) {
+        
+         return lhs[index]==rhs[index];
+      }}));
+   }
+  
+   
+   public static class BufferTransferKernel extends Kernel{
+      int[] inSmall;
+      int[] inLarge;
+      int[] inOutSmall;
+      int[] inOutLarge;
+      int[] outSmall;
+      int[] outLarge;
+      int pass;
+      @Override public void run() {
+         int gid = getGlobalId(0);
+         outSmall[gid] = inSmall[gid];
+         outLarge[gid*1024*16+pass] = inSmall[gid];
+         
+      }
+      
+   }
+   
+   @BeforeClass public static void setUpBeforeClass() throws Exception {
+      System.out.println("setUpBeforeClass");
+   }
+   
+   
+   @AfterClass public static void tearDownAfterClass() throws Exception {
+      System.out.println("tearDownAfterClass");
+   }
+
+   @Before public void setUp() throws Exception {
+      System.out.println("setup");
+   }
+
+   @After public void tearDown() throws Exception {
+      System.out.println("tearDown");
+   }
+
+  
+
+   @Test public void once() {
+      
+     final int SMALL_SIZE=2048;
+      final  int LARGE_SIZE=2048*1024*16;
+      final  BufferTransferKernel bufferTransferKernel = new BufferTransferKernel();
+      final  Range range = Range.create(LARGE_SIZE);
+      final  Range smallRange = Range.create(SMALL_SIZE);
+      
+      bufferTransferKernel.inSmall = new int[SMALL_SIZE];
+      bufferTransferKernel.inLarge = new int[LARGE_SIZE];
+      bufferTransferKernel.inOutSmall = new int[SMALL_SIZE];
+      bufferTransferKernel.inOutLarge = new int[LARGE_SIZE];
+      bufferTransferKernel.outSmall = new int[SMALL_SIZE];
+      bufferTransferKernel.outLarge = new int[LARGE_SIZE];
+      
+      zero(bufferTransferKernel.inSmall);
+      zero(bufferTransferKernel.inOutSmall);
+      zero(bufferTransferKernel.outSmall);
+      zero(bufferTransferKernel.inLarge);
+      zero(bufferTransferKernel.inOutLarge);
+      zero(bufferTransferKernel.outLarge);
+      
+     // bufferTransferKernel.setExecutionMode(Kernel.EXECUTION_MODE.SEQ);
+      fill(bufferTransferKernel.inSmall, new Filler(){
+         public void fill(int[] array, int index) {
+             array[index]=index;
+         }});
+      bufferTransferKernel.execute(smallRange);
+      
+      assertTrue("inSmall == outSmall", same(bufferTransferKernel.inSmall, bufferTransferKernel.outSmall));
+      
+      
+      
+      
+   }
+
+}
-- 
GitLab