diff --git a/CHANGELOG.md b/CHANGELOG.md index b2cf89f5d0736b300dca807df9697d1d5e41d169..bd3318fbea34d7987bf7c2671fe318492d3efa47 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Aparapi Changelog -## 1.4.2 +## 1.5.0 +* Support inline array creation in the kernel, which is implemented in the GPU in private memory. * Updated parent pon to v6. * createProgram had the wrong signature producing a unsatisfied link exception that is now fixed. * Build now requires version 3.5.0 of maven due to changes in surefire plugin. diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 4fee1845570ca68720b771ec88805802d6d81deb..42337edff8cb49c6777857cb72210d38785f4bf2 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -19,6 +19,7 @@ * Lorenzo Gallucci * Fernando Marino` * AMD Corporation +* Dmitriy Shabanov <shabanovd@gmail.com> # Details @@ -37,3 +38,4 @@ Below are some of the specific details of various contributions. * Paul Miner issue #61 and #115 (JTP Speed up and fixes to explicit puts) June 13th 2013 * lgalluci for his fix for issue #121 (incorrect toString for 3D ranges) July 6th 2013 * George Vinokhodov submited a fix for a bug regarding forward references. +* Dmitriy Shabanov submited PR for inline array feature. diff --git a/pom.xml b/pom.xml index 8b00264019527e315eb872a8574c55afe59938ff..df61c9265dc3d203482bfee79ec199c3bfe2b36e 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ <groupId>com.aparapi</groupId> <artifactId>aparapi</artifactId> - <version>1.4.2-SNAPSHOT</version> + <version>1.5.0-SNAPSHOT</version> <packaging>jar</packaging> <prerequisites> diff --git a/src/main/java/com/aparapi/Config.java b/src/main/java/com/aparapi/Config.java index 06f369a82ad7cb040b7e442031b9d43e5358eeef..0986dcfd61b8195d0583b889fd8f6dbce81ec173 100644 --- a/src/main/java/com/aparapi/Config.java +++ b/src/main/java/com/aparapi/Config.java @@ -157,6 +157,8 @@ public class Config extends ConfigJNI{ public static final boolean enableMONITOR = Boolean.getBoolean(propPkgName + ".enable.MONITOR"); + public static final boolean enableARRAY = !Boolean.getBoolean(propPkgName + ".disable.ARRAY"); + public static final boolean enableNEW = Boolean.getBoolean(propPkgName + ".enable.NEW"); public static final boolean enableATHROW = Boolean.getBoolean(propPkgName + ".enable.ATHROW"); diff --git a/src/main/java/com/aparapi/internal/exception/ClassParseException.java b/src/main/java/com/aparapi/internal/exception/ClassParseException.java index fcdac3f91a0026be3432880db31cb21592c635ef..39aac1fa0f8308f517e572618137d2f7ddd37bae 100644 --- a/src/main/java/com/aparapi/internal/exception/ClassParseException.java +++ b/src/main/java/com/aparapi/internal/exception/ClassParseException.java @@ -74,6 +74,8 @@ import com.aparapi.internal.instruction.Instruction; ATHROW("We don't support athrow instructions"), // SYNCHRONIZE("We don't support monitorenter or monitorexit instructions"), // NEW("We don't support new instructions"), // + NEWARRAY("We don't support new array instructions"), // + NEWMULTIARRAY("We don't support new multi array instructions"), // ARRAYALIAS("We don't support copying refs in kernels"), // SWITCH("We don't support lookupswitch or tableswitch instructions"), // METHODARRAYARG("We don't support passing arrays as method args"), // diff --git a/src/main/java/com/aparapi/internal/model/MethodModel.java b/src/main/java/com/aparapi/internal/model/MethodModel.java index 4a16a8685c01856a09e181de27afca2e49297f7e..1766a13c6dd2e6dbf11241a6fe0f191d00167af4 100644 --- a/src/main/java/com/aparapi/internal/model/MethodModel.java +++ b/src/main/java/com/aparapi/internal/model/MethodModel.java @@ -54,6 +54,7 @@ package com.aparapi.internal.model; import com.aparapi.*; import com.aparapi.internal.exception.*; +import com.aparapi.internal.exception.ClassParseException.TYPE; import com.aparapi.internal.instruction.*; import com.aparapi.internal.instruction.InstructionPattern.*; import com.aparapi.internal.instruction.InstructionSet.*; @@ -243,12 +244,16 @@ public class MethodModel{ throw new ClassParseException(instruction, ClassParseException.TYPE.SYNCHRONIZE); } - if ((!Config.enableNEW) && (instruction instanceof New)) { - throw new ClassParseException(instruction, ClassParseException.TYPE.NEW); - } - - if (instruction instanceof I_AASTORE) { - throw new ClassParseException(instruction, ClassParseException.TYPE.ARRAYALIAS); + if (instruction instanceof New) { + if ((instruction instanceof I_NEWARRAY)) { + if (!Config.enableARRAY) { + throw new ClassParseException(instruction, TYPE.NEWARRAY); + } + } else if ((instruction instanceof I_MULTIANEWARRAY)) { + throw new ClassParseException(instruction, ClassParseException.TYPE.NEWMULTIARRAY); + } else if (!Config.enableNEW) { + throw new ClassParseException(instruction, ClassParseException.TYPE.NEW); + } } if ((!Config.enableSWITCH) && ((instruction instanceof I_LOOKUPSWITCH) || (instruction instanceof I_TABLESWITCH))) { @@ -444,7 +449,7 @@ public class MethodModel{ } _expressionList.add(new CloneInstruction(this, e)); - System.out.println("clone of " + e); + //System.out.println("clone of " + e); } else if (_instruction instanceof I_DUP2) { Instruction e = _expressionList.getTail(); while (!e.producesStack()) { diff --git a/src/main/java/com/aparapi/internal/writer/BlockWriter.java b/src/main/java/com/aparapi/internal/writer/BlockWriter.java index b43fa98a7320903f6d13741ad9ba1fbc16eb7ba3..0712ffc42d67320e732e9cf89a3668b33d37d3c8 100644 --- a/src/main/java/com/aparapi/internal/writer/BlockWriter.java +++ b/src/main/java/com/aparapi/internal/writer/BlockWriter.java @@ -366,14 +366,14 @@ public abstract class BlockWriter{ } } - public String convertType(String _typeDesc, boolean useClassModel) { + public String convertType(String _typeDesc, boolean useClassModel, boolean isLocal) { return (_typeDesc); } public String convertCast(String _cast) { // Strip parens off cast //System.out.println("cast = " + _cast); - final String raw = convertType(_cast.substring(1, _cast.length() - 1), false); + final String raw = convertType(_cast.substring(1, _cast.length() - 1), false, false); return ("(" + raw + ")"); } @@ -393,24 +393,46 @@ public abstract class BlockWriter{ write(")"); } } else if (_instruction instanceof CompositeInstruction) { - writeComposite((CompositeInstruction) _instruction); + writeComposite((CompositeInstruction) _instruction); + + } else if (_instruction instanceof I_NEWARRAY) { + if (_instruction.getParentExpr() instanceof Return) { + throw new CodeGenException("'newarray' is not allowed after 'return'"); + } + + for (Instruction operand = _instruction.getFirstChild(); operand != null; operand = operand.getNextExpr()) { + write("["); + writeInstruction(operand); + write("]"); + } } else if (_instruction instanceof AssignToLocalVariable) { final AssignToLocalVariable assignToLocalVariable = (AssignToLocalVariable) _instruction; final LocalVariableInfo localVariableInfo = assignToLocalVariable.getLocalVariableInfo(); - if (assignToLocalVariable.isDeclaration()) { - final String descriptor = localVariableInfo.getVariableDescriptor(); - // Arrays always map to __global arrays - if (descriptor.startsWith("[")) { - write(" __global "); - } - write(convertType(descriptor, true)); - } - if (localVariableInfo == null) { - throw new CodeGenException("outOfScope" + _instruction.getThisPC() + " = "); + + if ((_instruction.getFirstChild() instanceof I_NEWARRAY)) { + if (localVariableInfo == null) { + throw new CodeGenException("outOfScope" + _instruction.getThisPC() + " = "); + } else { + final String descriptor = localVariableInfo.getVariableDescriptor(); + write(convertType(descriptor, true, true)); + write(localVariableInfo.getVariableName()); + } } else { - write(localVariableInfo.getVariableName() + " = "); + if (assignToLocalVariable.isDeclaration()) { + final String descriptor = localVariableInfo.getVariableDescriptor(); + // Arrays always map to __global arrays + if (descriptor.startsWith("[")) { + write(" __global "); + } + write(convertType(descriptor, true, false)); + } + if (localVariableInfo == null) { + throw new CodeGenException("outOfScope" + _instruction.getThisPC() + " = "); + } else { + write(localVariableInfo.getVariableName() + " = "); + } } for (Instruction operand = _instruction.getFirstChild(); operand != null; operand = operand.getNextExpr()) { @@ -457,7 +479,7 @@ public abstract class BlockWriter{ dim++; } - NameAndTypeEntry nameAndTypeEntry = ((AccessInstanceField) load).getConstantPoolFieldEntry().getNameAndTypeEntry(); + NameAndTypeEntry nameAndTypeEntry = ((AccessField) load).getConstantPoolFieldEntry().getNameAndTypeEntry(); if (isMultiDimensionalArray(nameAndTypeEntry)) { String arrayName = nameAndTypeEntry.getNameUTF8Entry().getUTF8(); write(" * this->" + arrayName + arrayDimMangleSuffix + dim); @@ -661,7 +683,7 @@ public abstract class BlockWriter{ final LocalVariableInfo localVariableInfo = alv.getLocalVariableInfo(); if (alv.isDeclaration()) { - write(convertType(localVariableInfo.getVariableDescriptor(), true)); + write(convertType(localVariableInfo.getVariableDescriptor(), true, false)); } if (localVariableInfo == null) { throw new CodeGenException("outOfScope" + _instruction.getThisPC() + " = "); @@ -678,7 +700,7 @@ public abstract class BlockWriter{ final LocalVariableInfo localVariableInfo = assignToLocalVariable.getLocalVariableInfo(); if (assignToLocalVariable.isDeclaration()) { // this is bad! we need a general way to hoist up a required declaration - throw new CodeGenException("/* we can't declare this " + convertType(localVariableInfo.getVariableDescriptor(), true) + throw new CodeGenException("/* we can't declare this " + convertType(localVariableInfo.getVariableDescriptor(), true, false) + " here */"); } write(localVariableInfo.getVariableName()); @@ -766,22 +788,22 @@ public abstract class BlockWriter{ } private boolean isMultiDimensionalArray(final AccessArrayElement arrayLoadInstruction) { - AccessInstanceField accessInstanceField = getUltimateInstanceFieldAccess(arrayLoadInstruction); + AccessField accessInstanceField = getUltimateInstanceFieldAccess(arrayLoadInstruction); return isMultiDimensionalArray(accessInstanceField.getConstantPoolFieldEntry().getNameAndTypeEntry()); } private boolean isObjectArray(final AccessArrayElement arrayLoadInstruction) { - AccessInstanceField accessInstanceField = getUltimateInstanceFieldAccess(arrayLoadInstruction); + AccessField accessInstanceField = getUltimateInstanceFieldAccess(arrayLoadInstruction); return isObjectArray(accessInstanceField.getConstantPoolFieldEntry().getNameAndTypeEntry()); } - private AccessInstanceField getUltimateInstanceFieldAccess(final AccessArrayElement arrayLoadInstruction) { + private AccessField getUltimateInstanceFieldAccess(final AccessArrayElement arrayLoadInstruction) { Instruction load = arrayLoadInstruction.getArrayRef(); while (load instanceof I_AALOAD) { load = load.getFirstChild(); } - return (AccessInstanceField) load; + return (AccessField) load; } public void writeMethod(MethodCall _methodCall, MethodEntry _methodEntry) throws CodeGenException { diff --git a/src/main/java/com/aparapi/internal/writer/KernelWriter.java b/src/main/java/com/aparapi/internal/writer/KernelWriter.java index 4e5de60917dde89220203a47786a178419b03d4f..8099c5914c30561005116f94b83ab0cebfc41d90 100644 --- a/src/main/java/com/aparapi/internal/writer/KernelWriter.java +++ b/src/main/java/com/aparapi/internal/writer/KernelWriter.java @@ -52,6 +52,8 @@ under those regulations, please refer to the U.S. Bureau of Industry and Securit */ package com.aparapi.internal.writer; +import static com.aparapi.Kernel.PRIVATE_SUFFIX; + import com.aparapi.*; import com.aparapi.internal.exception.*; import com.aparapi.internal.instruction.*; @@ -70,24 +72,40 @@ public abstract class KernelWriter extends BlockWriter{ private final String cvtBooleanArrayToCharStar = "char* "; + private final String cvtBooleanArrayToChar = "char "; + private final String cvtByteToChar = "char "; private final String cvtByteArrayToCharStar = "char* "; + private final String cvtByteArrayToChar = "char "; + private final String cvtCharToShort = "unsigned short "; private final String cvtCharArrayToShortStar = "unsigned short* "; + private final String cvtCharArrayToShort = "unsigned short "; + private final String cvtIntArrayToIntStar = "int* "; + private final String cvtIntArrayToInt = "int "; + private final String cvtFloatArrayToFloatStar = "float* "; + private final String cvtFloatArrayToFloat = "float "; + private final String cvtDoubleArrayToDoubleStar = "double* "; + private final String cvtDoubleArrayToDouble = "double "; + private final String cvtLongArrayToLongStar = "long* "; + private final String cvtLongArrayToLong = "long "; + private final String cvtShortArrayToShortStar = "short* "; + private final String cvtShortArrayToShort = "short "; + /** When declaring a __private struct pointer field, we always omit the "__private" qualifier. This is because the NVidia OpenCL compiler, at time of writing * erroneously complains about explicitly qualifying pointers with __private ("error: field may not be qualified with an address space"). */ @@ -151,29 +169,29 @@ public abstract class KernelWriter extends BlockWriter{ * String in the Java JNI notation, [I, etc * @return Suitably converted string, "char*", etc */ - @Override public String convertType(String _typeDesc, boolean useClassModel) { + @Override public String convertType(String _typeDesc, boolean useClassModel, boolean isLocal) { if (_typeDesc.equals("Z") || _typeDesc.equals("boolean")) { return (cvtBooleanToChar); } else if (_typeDesc.equals("[Z") || _typeDesc.equals("boolean[]")) { - return (cvtBooleanArrayToCharStar); + return isLocal ? (cvtBooleanArrayToChar) : (cvtBooleanArrayToCharStar); } else if (_typeDesc.equals("B") || _typeDesc.equals("byte")) { return (cvtByteToChar); } else if (_typeDesc.equals("[B") || _typeDesc.equals("byte[]")) { - return (cvtByteArrayToCharStar); + return isLocal ? (cvtByteArrayToChar) : (cvtByteArrayToCharStar); } else if (_typeDesc.equals("C") || _typeDesc.equals("char")) { return (cvtCharToShort); } else if (_typeDesc.equals("[C") || _typeDesc.equals("char[]")) { - return (cvtCharArrayToShortStar); + return isLocal ? (cvtCharArrayToShort) : (cvtCharArrayToShortStar); } else if (_typeDesc.equals("[I") || _typeDesc.equals("int[]")) { - return (cvtIntArrayToIntStar); + return isLocal ? (cvtIntArrayToInt) : (cvtIntArrayToIntStar); } else if (_typeDesc.equals("[F") || _typeDesc.equals("float[]")) { - return (cvtFloatArrayToFloatStar); + return isLocal ? (cvtFloatArrayToFloat) : (cvtFloatArrayToFloatStar); } else if (_typeDesc.equals("[D") || _typeDesc.equals("double[]")) { - return (cvtDoubleArrayToDoubleStar); + return isLocal ? (cvtDoubleArrayToDouble) : (cvtDoubleArrayToDoubleStar); } else if (_typeDesc.equals("[J") || _typeDesc.equals("long[]")) { - return (cvtLongArrayToLongStar); + return isLocal ? (cvtLongArrayToLong) : (cvtLongArrayToLongStar); } else if (_typeDesc.equals("[S") || _typeDesc.equals("short[]")) { - return (cvtShortArrayToShortStar); + return isLocal ? (cvtShortArrayToShort) : (cvtShortArrayToShortStar); } // if we get this far, we haven't matched anything yet if (useClassModel) { @@ -373,8 +391,8 @@ public abstract class KernelWriter extends BlockWriter{ argLine.append(className); thisStructLine.append(className); } else { - argLine.append(convertType(ClassModel.typeName(signature.charAt(0)), false)); - thisStructLine.append(convertType(ClassModel.typeName(signature.charAt(0)), false)); + argLine.append(convertType(ClassModel.typeName(signature.charAt(0)), false, false)); + thisStructLine.append(convertType(ClassModel.typeName(signature.charAt(0)), false, false)); } argLine.append(" "); @@ -520,7 +538,7 @@ public abstract class KernelWriter extends BlockWriter{ } totalSize += fSize; - final String cType = convertType(field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8(), true); + final String cType = convertType(field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8(), true, false); assert cType != null : "could not find type for " + field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8(); writeln(cType + " " + field.getNameAndTypeEntry().getNameUTF8Entry().getUTF8() + ";"); } @@ -585,7 +603,7 @@ public abstract class KernelWriter extends BlockWriter{ if (returnType.startsWith("[")) { write(" __global "); } - write(convertType(returnType, true)); + write(convertType(returnType, true, false)); write(mm.getName() + "("); @@ -618,12 +636,11 @@ public abstract class KernelWriter extends BlockWriter{ write(", "); } - // Arrays always map to __global arrays - if (descriptor.startsWith("[")) { + if (descriptor.startsWith("[") && !lvi.getVariableName().endsWith(PRIVATE_SUFFIX)) { write(" __global "); } - write(convertType(descriptor, true)); + write(convertType(descriptor, true, false)); write(lvi.getVariableName()); alreadyHasFirstArg = true; } diff --git a/src/test/java/com/aparapi/codegen/test/ArrayCreation.java b/src/test/java/com/aparapi/codegen/test/ArrayCreation.java new file mode 100644 index 0000000000000000000000000000000000000000..4d47d48c3629127500998c6a8e683db5d34d57ee --- /dev/null +++ b/src/test/java/com/aparapi/codegen/test/ArrayCreation.java @@ -0,0 +1,84 @@ +/** + * Copyright (c) 2016 - 2017 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.aparapi.codegen.test; + +public class ArrayCreation { + + public float[][] results = new float[128][2]; + int y = 2; + + float[] method(float[] a) { + a[0] = a[0] + 1; + return a; + } + + public void run() { + float[] a = new float[2]; + + float[] b = new float[16]; + + //float[][] c = new float[16][16]; + + float[] d = method(a); + + results[y] = b; + } +} +/**{OpenCL{ + typedef struct This_s{ + __global float *results; + int results__javaArrayLength0; + int results__javaArrayDimension0; + int results__javaArrayLength1; + int results__javaArrayDimension1; + int y; + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global float* com_aparapi_codegen_test_VectorCreation__method(This *this, __global float* a){ + a[0] = a[0] + 1.0f; + return(a); + } + __kernel void run( + __global float *results, + int results__javaArrayLength0, + int results__javaArrayDimension0, + int results__javaArrayLength1, + int results__javaArrayDimension1, + int y, + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->results = results; + this->results__javaArrayLength0 = results__javaArrayLength0; + this->results__javaArrayDimension0 = results__javaArrayDimension0; + this->results__javaArrayLength1 = results__javaArrayLength1; + this->results__javaArrayDimension1 = results__javaArrayDimension1; + this->y = y; + this->passid = passid; + { + float a[2]; + float b[16]; + __global float* d = com_aparapi_codegen_test_VectorCreation__method(this, a); + this->results[this->y] = b; + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ArrayCreationTest.java b/src/test/java/com/aparapi/codegen/test/ArrayCreationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..56de08ffedc1cb7b116eb527de4e059dd5c2a4cb --- /dev/null +++ b/src/test/java/com/aparapi/codegen/test/ArrayCreationTest.java @@ -0,0 +1,76 @@ +/** + * Copyright (c) 2016 - 2017 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.aparapi.codegen.test; + +import org.junit.Test; + +public class ArrayCreationTest extends com.aparapi.codegen.CodeGenJUnitBase { + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " __global float *results;\n" + + " int results__javaArrayLength0;\n" + + " int results__javaArrayDimension0;\n" + + " int results__javaArrayLength1;\n" + + " int results__javaArrayDimension1;\n" + + " int y;\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global float* com_aparapi_codegen_test_ArrayCreation__method(This *this, __global float* a){\n" + + " a[0] = a[0] + 1.0f;\n" + + " return(a);\n" + + "}\n" + + "__kernel void run(\n" + + " __global float *results, \n" + + " int results__javaArrayLength0, \n" + + " int results__javaArrayDimension0, \n" + + " int results__javaArrayLength1, \n" + + " int results__javaArrayDimension1, \n" + + " int y, \n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->results = results;\n" + + " this->results__javaArrayLength0 = results__javaArrayLength0;\n" + + " this->results__javaArrayDimension0 = results__javaArrayDimension0;\n" + + " this->results__javaArrayLength1 = results__javaArrayLength1;\n" + + " this->results__javaArrayDimension1 = results__javaArrayDimension1;\n" + + " this->y = y;\n" + + " this->passid = passid;\n" + + " {\n" + + " float a[2];\n" + + " float b[16];\n" + + " __global float* d = com_aparapi_codegen_test_ArrayCreation__method(this, a);\n" + + " this->results[this->y] = b;\n" + + " return;\n" + + " }\n" + + "}\n" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; + + @Test + public void ArrayCreationTest() { + test(ArrayCreation.class, expectedException, expectedOpenCL); + } + + @Test + public void ArrayCreationTestWorksWithCaching() { + test(ArrayCreation.class, expectedException, expectedOpenCL); + } +} diff --git a/src/test/java/com/aparapi/codegen/test/ObjectRefCopyTest.java b/src/test/java/com/aparapi/codegen/test/ObjectRefCopyTest.java index e3978c7d9f88fca3f89e3e688b879f0da554fb38..a5cff184fd734e83a73cdfa77a56e7580599ea51 100644 --- a/src/test/java/com/aparapi/codegen/test/ObjectRefCopyTest.java +++ b/src/test/java/com/aparapi/codegen/test/ObjectRefCopyTest.java @@ -16,11 +16,34 @@ package com.aparapi.codegen.test; import com.aparapi.internal.exception.ClassParseException; +import org.junit.Ignore; import org.junit.Test; public class ObjectRefCopyTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " __global com_aparapi_codegen_test_ObjectRefCopy$DummyOOA *dummy;\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + "__kernel void run(\n" + + " __global com_aparapi_codegen_test_ObjectRefCopy$DummyOOA *dummy, \n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->dummy = dummy;\n" + + " this->passid = passid;\n" + + " {\n" + + " int myId = get_global_id(0);\n" + + " this->dummy[myId] = this->dummy[(myId + 1)];\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ObjectRefCopyTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArray.java b/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArray.java index 6271a5960cd0b8308c7fe4b0e28c0fc819e8544c..1d7facb4f1c139f48c65c55175fa3147331ac454 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArray.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArray.java @@ -26,4 +26,4 @@ public class ReturnBooleanNewArray { returnBooleanNewArray(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArrayTest.java b/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArrayTest.java index e37330fe91857e54cddbc281e81bae8d41e690ed..c750ae9f53d6fa9bfd96889de5da955f68a02e0c 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArrayTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnBooleanNewArrayTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnBooleanNewArrayTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnBooleanNewArrayTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArray.java b/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArray.java index 757a8aa7a6517c348961e15c2b81f17d9037ea35..85f00fcd5ffd1d767c046decb124321ffa2adff4 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArray.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArray.java @@ -28,4 +28,27 @@ public class ReturnBooleanVarArray { returnBooleanVarArray(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global char* com_aparapi_codegen_test_ReturnBooleanVarArray__returnBooleanVarArray(This *this){ + char ba[1024]; + return(ba); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnBooleanVarArray__returnBooleanVarArray(this); + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArrayTest.java b/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArrayTest.java index f1439e392168898c489e89e3e38f128b44c8c523..46f45c4b9251a35b1d57b5e78920e7c5a9a37121 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArrayTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnBooleanVarArrayTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnBooleanVarArrayTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global char* com_aparapi_codegen_test_ReturnBooleanVarArray__returnBooleanVarArray(This *this){\n" + + " char ba[1024];\n" + + " return(ba);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnBooleanVarArray__returnBooleanVarArray(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnBooleanVarArrayTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNew.java index fe08bdc9a242f46743fd480b72e122f0f955c302..e47b8d12a8147b489140e3f0f1c890fb219bb5b5 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNew.java @@ -25,4 +25,4 @@ public class ReturnByteArrayNew { returnByteArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNewTest.java index a0134a0f65a459d96cebd2842d98b33d513740cd..d322a6b460ab9b91771488623e050d00692b77c5 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayNewTest.java @@ -15,12 +15,12 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnByteArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test diff --git a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVar.java index 8751bfb61535679ee21adf254c51f4a75d2cb8d2..45b9cc9ac23edc1e611305ee8d516568bae83dac 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVar.java @@ -27,4 +27,27 @@ public class ReturnByteArrayVar { returnByteArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global char* com_aparapi_codegen_test_ReturnByteArrayVar__returnByteArrayVar(This *this){ + char bytes[1024]; + return(bytes); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnByteArrayVar__returnByteArrayVar(this); + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVarTest.java index 2b83d4d7c4814bab98dd11d9f77a8897609ce16f..49cf10aa208ab10c78ad08f4f0843b1796b89106 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnByteArrayVarTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnByteArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global char* com_aparapi_codegen_test_ReturnByteArrayVar__returnByteArrayVar(This *this){\n" + + " char bytes[1024];\n" + + " return(bytes);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnByteArrayVar__returnByteArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnByteArrayVarTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNew.java index 64e3d29ad1d4fb1e70c2144a542f8b780b8c1d20..c7770ac5aa25fc11803b36cc0928ca4d473cbb63 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNew.java @@ -25,4 +25,4 @@ public class ReturnDoubleArrayNew { returnDoubleArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNewTest.java index 9c2433f5fa69231adf58540a8529bb0ec44ea741..d60e3c92efd2a8308480029ed9e441dc362f2a16 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayNewTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnDoubleArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnDoubleArrayNewTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVar.java index 4be6a58e097b9fd77120e3092fa3edf4f6aba020..609aa988fe625d2f6a9aaa4f694f6b44258e3ba1 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVar.java @@ -27,4 +27,27 @@ public class ReturnDoubleArrayVar { returnDoubleArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global double* com_aparapi_codegen_test_ReturnDoubleArrayVar__returnDoubleArrayVar(This *this){ + double doubles[1024]; + return(doubles); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnDoubleArrayVar__returnDoubleArrayVar(this); + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVarTest.java index 1517e6081825f777cb3ed13566878111fbee7ea1..330b735dd2a532d504c1a186ccfb10bf489e32a3 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnDoubleArrayVarTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnDoubleArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global double* com_aparapi_codegen_test_ReturnDoubleArrayVar__returnDoubleArrayVar(This *this){\n" + + " double doubles[1024];\n" + + " return(doubles);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnDoubleArrayVar__returnDoubleArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnDoubleArrayVarTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNew.java index 9dd36a7c17de560cf1e769b7440fbdb14cdcbc77..211d3e45b6e620ce38711a1ba94dad29187b838b 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNew.java @@ -25,4 +25,4 @@ public class ReturnFloatArrayNew { returnFloatArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNewTest.java index 431d54a654261dd115d00ffb975e60eeee93244e..2437e4678cd6df230eb7f6f1a7bbcb166b121693 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayNewTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnFloatArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnFloatArrayNewTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVar.java index f843d65bc828b54fd64d8f290385cf1884862fd7..289b0050018e885667be981c0b682553a09b2951 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVar.java @@ -27,4 +27,27 @@ public class ReturnFloatArrayVar { returnFloatArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global float* com_aparapi_codegen_test_ReturnFloatArrayVar__returnFloatArrayVar(This *this){ + float floats[1024]; + return(floats); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnFloatArrayVar__returnFloatArrayVar(this); + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVarTest.java index 48fd6b0dbfe3ba31ef59054be675df4ef4874bc4..6fe511fff92531c8a5b748f7c35c51e37b719a12 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnFloatArrayVarTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnFloatArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global float* com_aparapi_codegen_test_ReturnFloatArrayVar__returnFloatArrayVar(This *this){\n" + + " float floats[1024];\n" + + " return(floats);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnFloatArrayVar__returnFloatArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnFloatArrayVarTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNew.java index c8b8b1f0bac071996722160ba56649e720729038..abd3ac2bad1eb0e2925e78bb923af4d1ced08dad 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNew.java @@ -25,4 +25,4 @@ public class ReturnIntArrayNew { returnIntArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNewTest.java index fe067d9de52cd54e482b748e59135e23609e7d06..cd7858f10f001c14d26c357752d639d9d6993d07 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayNewTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnIntArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnIntArrayNewTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVar.java index 172757e2de6ddbef740d19de2054ef79bebb8e88..9f1d0306a57ff31f8aefbb8f1b72444c02fbbb9d 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVar.java @@ -27,4 +27,27 @@ public class ReturnIntArrayVar { returnIntArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global int* com_aparapi_codegen_test_ReturnIntArrayVar__returnIntArrayVar(This *this){ + int ints[1024]; + return(ints); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnIntArrayVar__returnIntArrayVar(this); + return; + } + } + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVarTest.java index a032b2c1ae0c4184e360c216c77081161e468a7c..f891df6a9afebfaed135ab5c25795f50da34f405 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnIntArrayVarTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnIntArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global int* com_aparapi_codegen_test_ReturnIntArrayVar__returnIntArrayVar(This *this){\n" + + " int ints[1024];\n" + + " return(ints);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnIntArrayVar__returnIntArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnIntArrayVarTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNew.java index e9143097afadcf6323b248c0259e5173453673ac..9a11f9a539ed65fd536d5b0cadd93c09d4994db4 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNew.java @@ -25,4 +25,4 @@ public class ReturnLongArrayNew { returnLongArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNewTest.java index b9c5c2a5a718a4018672e45125c5b872347c4045..d437ba4b99d8e9d90adb3ac4c5064c6005901d3c 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayNewTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnLongArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnLongArrayNewTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVar.java index 31edd9467ee83bf4f0db96df068d387355c5df3a..0cb75614a786226f1ba0bc2c9b59c31a926dab8d 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVar.java @@ -27,4 +27,6 @@ public class ReturnLongArrayVar { returnLongArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + + }OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVarTest.java index f71c402df91fbcf8eef169d038ab27ec7d4cf10d..66e774258cc46ad4bc0fc829f0504e45e4103b4e 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnLongArrayVarTest.java @@ -15,13 +15,34 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; import org.junit.Test; public class ReturnLongArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global long* com_aparapi_codegen_test_ReturnLongArrayVar__returnLongArrayVar(This *this){\n" + + " long longs[1024];\n" + + " return(longs);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnLongArrayVar__returnLongArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnLongArrayVarTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNew.java b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNew.java index c3abc0394121647a55a7772d766d1d23c046aa27..443033f93f48b5edc159e4e25d2486802c7c8836 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNew.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNew.java @@ -25,4 +25,4 @@ public class ReturnShortArrayNew { returnShortArrayNew(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{Throws{CodeGenException}Throws}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNewTest.java b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNewTest.java index 4b4e5f8f2240d5f7c21f88520d75e511c8e9d674..f720a7859cc125f96df9f99a1195dbfd365b1037 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNewTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayNewTest.java @@ -15,13 +15,13 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; +import com.aparapi.internal.exception.CodeGenException; import org.junit.Test; public class ReturnShortArrayNewTest extends com.aparapi.codegen.CodeGenJUnitBase { private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = CodeGenException.class; @Test public void ReturnShortArrayNewTest() { diff --git a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVar.java b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVar.java index 07d590bdc880a2b94438718a17051bfd9123f53e..8efb31c0c4d3f88cdfb22041a90016f1e2312ffd 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVar.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVar.java @@ -27,4 +27,26 @@ public class ReturnShortArrayVar { returnShortArrayVar(); } } -/**{Throws{ClassParseException}Throws}**/ +/**{OpenCL{ + typedef struct This_s{ + int passid; + }This; + int get_pass_id(This *this){ + return this->passid; + } + __global short* com_aparapi_codegen_test_ReturnShortArrayVar__returnShortArrayVar(This *this){ + short shorts[1024]; + return(shorts); + } + __kernel void run( + int passid + ){ + This thisStruct; + This* this=&thisStruct; + this->passid = passid; + { + com_aparapi_codegen_test_ReturnShortArrayVar__returnShortArrayVar(this); + return; + } + } +}OpenCL}**/ diff --git a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVarTest.java b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVarTest.java index 42bdefbb1909f3824b606627a58331c047665693..b703e37b88b4a1b95090fb471c5242f8d3d49c3e 100644 --- a/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVarTest.java +++ b/src/test/java/com/aparapi/codegen/test/ReturnShortArrayVarTest.java @@ -15,13 +15,35 @@ */ package com.aparapi.codegen.test; -import com.aparapi.internal.exception.ClassParseException; + import org.junit.Test; public class ReturnShortArrayVarTest extends com.aparapi.codegen.CodeGenJUnitBase { - private static final String[] expectedOpenCL = null; - private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = ClassParseException.class; + private static final String[] expectedOpenCL = { + "typedef struct This_s{\n" + + " int passid;\n" + + "}This;\n" + + "int get_pass_id(This *this){\n" + + " return this->passid;\n" + + "}\n" + + " __global short* com_aparapi_codegen_test_ReturnShortArrayVar__returnShortArrayVar(This *this){\n" + + " short shorts[1024];\n" + + " return(shorts);\n" + + "}\n" + + "__kernel void run(\n" + + " int passid\n" + + "){\n" + + " This thisStruct;\n" + + " This* this=&thisStruct;\n" + + " this->passid = passid;\n" + + " {\n" + + " com_aparapi_codegen_test_ReturnShortArrayVar__returnShortArrayVar(this);\n" + + " return;\n" + + " }\n" + + "}" + }; + private static final Class<? extends com.aparapi.internal.exception.AparapiException> expectedException = null; @Test public void ReturnShortArrayVarTest() { diff --git a/src/test/java/com/aparapi/runtime/ArrayTest.java b/src/test/java/com/aparapi/runtime/ArrayTest.java new file mode 100644 index 0000000000000000000000000000000000000000..a21af6e22bff3615b2f36e4562edce5c34ed4cad --- /dev/null +++ b/src/test/java/com/aparapi/runtime/ArrayTest.java @@ -0,0 +1,82 @@ +/** + * Copyright (c) 2016 - 2017 Syncleus, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.aparapi.runtime; + +import static org.junit.Assert.assertArrayEquals; + +import com.aparapi.Kernel; +import java.util.Arrays; +import org.junit.Test; + + +public class ArrayTest { + @Test + public void test() { + VectorKernel b = new VectorKernel(); + b.test(); + } + + public static class VectorKernel extends Kernel { + private static final int SIZE = 32; + + static int[][] target = new int[SIZE][SIZE]; + + public VectorKernel() { + for (int i = 0; i < SIZE; ++i) { + int[] ints = new int[SIZE]; + Arrays.fill(ints, 99); + + target[i] = ints; + } + } + + private static void fillArray(int[] ints_$private$, int id) { + for (int i = 0; i < SIZE; i++) { + ints_$private$[i] = i + id; + } + } + + @Override + public void run() { + int id = getGlobalId(); + + int[] ints = new int[SIZE]; + + fillArray(ints, id); + + for (int i = 0; i < SIZE; i++) { + target[id][i] = ints[i]; + } + } + + void validate() { + for (int j = 0; j < SIZE; j++) { + + int[] expected = new int[SIZE]; + for (int i = 0; i < SIZE; i++) { + expected[i] = i + j; + } + + assertArrayEquals("target["+j+"]", expected, target[j]); + } + } + + public void test() { + execute(SIZE); + validate(); + } + } +}