1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 // Don't edit this file! It is auto-generated by frameworks/rs/api/generate.sh. 18 19 package android.renderscript.cts; 20 21 import android.renderscript.Allocation; 22 import android.renderscript.RSRuntimeException; 23 import android.renderscript.Element; 24 import android.renderscript.cts.Target; 25 26 import java.util.Arrays; 27 28 public class TestIlogb extends RSBaseCompute { 29 30 private ScriptC_TestIlogb script; 31 private ScriptC_TestIlogbRelaxed scriptRelaxed; 32 33 @Override 34 protected void setUp() throws Exception { 35 super.setUp(); 36 script = new ScriptC_TestIlogb(mRS); 37 scriptRelaxed = new ScriptC_TestIlogbRelaxed(mRS); 38 } 39 40 @Override 41 protected void tearDown() throws Exception { 42 script.destroy(); 43 scriptRelaxed.destroy(); 44 super.tearDown(); 45 } 46 47 public class ArgumentsFloatInt { 48 public float inV; 49 public int out; 50 } 51 52 private void checkIlogbFloatInt() { 53 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 1, 0x6103ca4b5664967bl, false); 54 try { 55 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 1), INPUTSIZE); 56 script.forEach_testIlogbFloatInt(inV, out); 57 verifyResultsIlogbFloatInt(inV, out, false); 58 out.destroy(); 59 } catch (Exception e) { 60 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloatInt: " + e.toString()); 61 } 62 try { 63 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 1), INPUTSIZE); 64 scriptRelaxed.forEach_testIlogbFloatInt(inV, out); 65 verifyResultsIlogbFloatInt(inV, out, true); 66 out.destroy(); 67 } catch (Exception e) { 68 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloatInt: " + e.toString()); 69 } 70 inV.destroy(); 71 } 72 73 private void verifyResultsIlogbFloatInt(Allocation inV, Allocation out, boolean relaxed) { 74 float[] arrayInV = new float[INPUTSIZE * 1]; 75 Arrays.fill(arrayInV, (float) 42); 76 inV.copyTo(arrayInV); 77 int[] arrayOut = new int[INPUTSIZE * 1]; 78 Arrays.fill(arrayOut, (int) 42); 79 out.copyTo(arrayOut); 80 StringBuilder message = new StringBuilder(); 81 boolean errorFound = false; 82 for (int i = 0; i < INPUTSIZE; i++) { 83 for (int j = 0; j < 1 ; j++) { 84 // Extract the inputs. 85 ArgumentsFloatInt args = new ArgumentsFloatInt(); 86 args.inV = arrayInV[i]; 87 // Extract the outputs. 88 args.out = arrayOut[i * 1 + j]; 89 // Ask the CoreMathVerifier to validate. 90 String errorMessage = CoreMathVerifier.verifyIlogb(args); 91 boolean valid = errorMessage == null; 92 if (!valid) { 93 if (!errorFound) { 94 errorFound = true; 95 message.append("Input inV: "); 96 appendVariableToMessage(message, args.inV); 97 message.append("\n"); 98 message.append("Output out: "); 99 appendVariableToMessage(message, args.out); 100 message.append("\n"); 101 message.append(errorMessage); 102 message.append("Errors at"); 103 } 104 message.append(" ["); 105 message.append(Integer.toString(i)); 106 message.append(", "); 107 message.append(Integer.toString(j)); 108 message.append("]"); 109 } 110 } 111 } 112 assertFalse("Incorrect output for checkIlogbFloatInt" + 113 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 114 } 115 116 private void checkIlogbFloat2Int2() { 117 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xb460143cb6f32a61l, false); 118 try { 119 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 120 script.forEach_testIlogbFloat2Int2(inV, out); 121 verifyResultsIlogbFloat2Int2(inV, out, false); 122 out.destroy(); 123 } catch (Exception e) { 124 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat2Int2: " + e.toString()); 125 } 126 try { 127 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 128 scriptRelaxed.forEach_testIlogbFloat2Int2(inV, out); 129 verifyResultsIlogbFloat2Int2(inV, out, true); 130 out.destroy(); 131 } catch (Exception e) { 132 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat2Int2: " + e.toString()); 133 } 134 inV.destroy(); 135 } 136 137 private void verifyResultsIlogbFloat2Int2(Allocation inV, Allocation out, boolean relaxed) { 138 float[] arrayInV = new float[INPUTSIZE * 2]; 139 Arrays.fill(arrayInV, (float) 42); 140 inV.copyTo(arrayInV); 141 int[] arrayOut = new int[INPUTSIZE * 2]; 142 Arrays.fill(arrayOut, (int) 42); 143 out.copyTo(arrayOut); 144 StringBuilder message = new StringBuilder(); 145 boolean errorFound = false; 146 for (int i = 0; i < INPUTSIZE; i++) { 147 for (int j = 0; j < 2 ; j++) { 148 // Extract the inputs. 149 ArgumentsFloatInt args = new ArgumentsFloatInt(); 150 args.inV = arrayInV[i * 2 + j]; 151 // Extract the outputs. 152 args.out = arrayOut[i * 2 + j]; 153 // Ask the CoreMathVerifier to validate. 154 String errorMessage = CoreMathVerifier.verifyIlogb(args); 155 boolean valid = errorMessage == null; 156 if (!valid) { 157 if (!errorFound) { 158 errorFound = true; 159 message.append("Input inV: "); 160 appendVariableToMessage(message, args.inV); 161 message.append("\n"); 162 message.append("Output out: "); 163 appendVariableToMessage(message, args.out); 164 message.append("\n"); 165 message.append(errorMessage); 166 message.append("Errors at"); 167 } 168 message.append(" ["); 169 message.append(Integer.toString(i)); 170 message.append(", "); 171 message.append(Integer.toString(j)); 172 message.append("]"); 173 } 174 } 175 } 176 assertFalse("Incorrect output for checkIlogbFloat2Int2" + 177 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 178 } 179 180 private void checkIlogbFloat3Int3() { 181 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 3, 0xb460147c009b3a97l, false); 182 try { 183 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 184 script.forEach_testIlogbFloat3Int3(inV, out); 185 verifyResultsIlogbFloat3Int3(inV, out, false); 186 out.destroy(); 187 } catch (Exception e) { 188 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat3Int3: " + e.toString()); 189 } 190 try { 191 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 192 scriptRelaxed.forEach_testIlogbFloat3Int3(inV, out); 193 verifyResultsIlogbFloat3Int3(inV, out, true); 194 out.destroy(); 195 } catch (Exception e) { 196 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat3Int3: " + e.toString()); 197 } 198 inV.destroy(); 199 } 200 201 private void verifyResultsIlogbFloat3Int3(Allocation inV, Allocation out, boolean relaxed) { 202 float[] arrayInV = new float[INPUTSIZE * 4]; 203 Arrays.fill(arrayInV, (float) 42); 204 inV.copyTo(arrayInV); 205 int[] arrayOut = new int[INPUTSIZE * 4]; 206 Arrays.fill(arrayOut, (int) 42); 207 out.copyTo(arrayOut); 208 StringBuilder message = new StringBuilder(); 209 boolean errorFound = false; 210 for (int i = 0; i < INPUTSIZE; i++) { 211 for (int j = 0; j < 3 ; j++) { 212 // Extract the inputs. 213 ArgumentsFloatInt args = new ArgumentsFloatInt(); 214 args.inV = arrayInV[i * 4 + j]; 215 // Extract the outputs. 216 args.out = arrayOut[i * 4 + j]; 217 // Ask the CoreMathVerifier to validate. 218 String errorMessage = CoreMathVerifier.verifyIlogb(args); 219 boolean valid = errorMessage == null; 220 if (!valid) { 221 if (!errorFound) { 222 errorFound = true; 223 message.append("Input inV: "); 224 appendVariableToMessage(message, args.inV); 225 message.append("\n"); 226 message.append("Output out: "); 227 appendVariableToMessage(message, args.out); 228 message.append("\n"); 229 message.append(errorMessage); 230 message.append("Errors at"); 231 } 232 message.append(" ["); 233 message.append(Integer.toString(i)); 234 message.append(", "); 235 message.append(Integer.toString(j)); 236 message.append("]"); 237 } 238 } 239 } 240 assertFalse("Incorrect output for checkIlogbFloat3Int3" + 241 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 242 } 243 244 private void checkIlogbFloat4Int4() { 245 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 4, 0xb46014bb4a434acdl, false); 246 try { 247 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 248 script.forEach_testIlogbFloat4Int4(inV, out); 249 verifyResultsIlogbFloat4Int4(inV, out, false); 250 out.destroy(); 251 } catch (Exception e) { 252 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat4Int4: " + e.toString()); 253 } 254 try { 255 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 256 scriptRelaxed.forEach_testIlogbFloat4Int4(inV, out); 257 verifyResultsIlogbFloat4Int4(inV, out, true); 258 out.destroy(); 259 } catch (Exception e) { 260 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testIlogbFloat4Int4: " + e.toString()); 261 } 262 inV.destroy(); 263 } 264 265 private void verifyResultsIlogbFloat4Int4(Allocation inV, Allocation out, boolean relaxed) { 266 float[] arrayInV = new float[INPUTSIZE * 4]; 267 Arrays.fill(arrayInV, (float) 42); 268 inV.copyTo(arrayInV); 269 int[] arrayOut = new int[INPUTSIZE * 4]; 270 Arrays.fill(arrayOut, (int) 42); 271 out.copyTo(arrayOut); 272 StringBuilder message = new StringBuilder(); 273 boolean errorFound = false; 274 for (int i = 0; i < INPUTSIZE; i++) { 275 for (int j = 0; j < 4 ; j++) { 276 // Extract the inputs. 277 ArgumentsFloatInt args = new ArgumentsFloatInt(); 278 args.inV = arrayInV[i * 4 + j]; 279 // Extract the outputs. 280 args.out = arrayOut[i * 4 + j]; 281 // Ask the CoreMathVerifier to validate. 282 String errorMessage = CoreMathVerifier.verifyIlogb(args); 283 boolean valid = errorMessage == null; 284 if (!valid) { 285 if (!errorFound) { 286 errorFound = true; 287 message.append("Input inV: "); 288 appendVariableToMessage(message, args.inV); 289 message.append("\n"); 290 message.append("Output out: "); 291 appendVariableToMessage(message, args.out); 292 message.append("\n"); 293 message.append(errorMessage); 294 message.append("Errors at"); 295 } 296 message.append(" ["); 297 message.append(Integer.toString(i)); 298 message.append(", "); 299 message.append(Integer.toString(j)); 300 message.append("]"); 301 } 302 } 303 } 304 assertFalse("Incorrect output for checkIlogbFloat4Int4" + 305 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 306 } 307 308 public void testIlogb() { 309 checkIlogbFloatInt(); 310 checkIlogbFloat2Int2(); 311 checkIlogbFloat3Int3(); 312 checkIlogbFloat4Int4(); 313 } 314 } 315