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 TestNativeSincos extends RSBaseCompute { 29 30 private ScriptC_TestNativeSincos script; 31 private ScriptC_TestNativeSincosRelaxed scriptRelaxed; 32 33 @Override setUp()34 protected void setUp() throws Exception { 35 super.setUp(); 36 script = new ScriptC_TestNativeSincos(mRS); 37 scriptRelaxed = new ScriptC_TestNativeSincosRelaxed(mRS); 38 } 39 40 @Override tearDown()41 protected void tearDown() throws Exception { 42 script.destroy(); 43 scriptRelaxed.destroy(); 44 super.tearDown(); 45 } 46 47 public class ArgumentsFloatFloatFloat { 48 public float inV; 49 public Target.Floaty outCos; 50 public Target.Floaty out; 51 } 52 checkNativeSincosFloatFloatFloat()53 private void checkNativeSincosFloatFloatFloat() { 54 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 1, 0xe15df2366436cc13l, false); 55 try { 56 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE); 57 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE); 58 script.set_gAllocOutCos(outCos); 59 script.forEach_testNativeSincosFloatFloatFloat(inV, out); 60 verifyResultsNativeSincosFloatFloatFloat(inV, outCos, out, false); 61 outCos.destroy(); 62 out.destroy(); 63 } catch (Exception e) { 64 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloatFloatFloat: " + e.toString()); 65 } 66 try { 67 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE); 68 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE); 69 scriptRelaxed.set_gAllocOutCos(outCos); 70 scriptRelaxed.forEach_testNativeSincosFloatFloatFloat(inV, out); 71 verifyResultsNativeSincosFloatFloatFloat(inV, outCos, out, true); 72 outCos.destroy(); 73 out.destroy(); 74 } catch (Exception e) { 75 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloatFloatFloat: " + e.toString()); 76 } 77 inV.destroy(); 78 } 79 verifyResultsNativeSincosFloatFloatFloat(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)80 private void verifyResultsNativeSincosFloatFloatFloat(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 81 float[] arrayInV = new float[INPUTSIZE * 1]; 82 Arrays.fill(arrayInV, (float) 42); 83 inV.copyTo(arrayInV); 84 float[] arrayOutCos = new float[INPUTSIZE * 1]; 85 Arrays.fill(arrayOutCos, (float) 42); 86 outCos.copyTo(arrayOutCos); 87 float[] arrayOut = new float[INPUTSIZE * 1]; 88 Arrays.fill(arrayOut, (float) 42); 89 out.copyTo(arrayOut); 90 StringBuilder message = new StringBuilder(); 91 boolean errorFound = false; 92 for (int i = 0; i < INPUTSIZE; i++) { 93 for (int j = 0; j < 1 ; j++) { 94 // Extract the inputs. 95 ArgumentsFloatFloatFloat args = new ArgumentsFloatFloatFloat(); 96 args.inV = arrayInV[i]; 97 // Figure out what the outputs should have been. 98 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.FLOAT, relaxed); 99 CoreMathVerifier.computeNativeSincos(args, target); 100 // Validate the outputs. 101 boolean valid = true; 102 if (!args.outCos.couldBe(arrayOutCos[i * 1 + j], 0.0005)) { 103 valid = false; 104 } 105 if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) { 106 valid = false; 107 } 108 if (!valid) { 109 if (!errorFound) { 110 errorFound = true; 111 message.append("Input inV: "); 112 appendVariableToMessage(message, args.inV); 113 message.append("\n"); 114 message.append("Expected output outCos: "); 115 appendVariableToMessage(message, args.outCos); 116 message.append("\n"); 117 message.append("Actual output outCos: "); 118 appendVariableToMessage(message, arrayOutCos[i * 1 + j]); 119 if (!args.outCos.couldBe(arrayOutCos[i * 1 + j], 0.0005)) { 120 message.append(" FAIL"); 121 } 122 message.append("\n"); 123 message.append("Expected output out: "); 124 appendVariableToMessage(message, args.out); 125 message.append("\n"); 126 message.append("Actual output out: "); 127 appendVariableToMessage(message, arrayOut[i * 1 + j]); 128 if (!args.out.couldBe(arrayOut[i * 1 + j], 0.0005)) { 129 message.append(" FAIL"); 130 } 131 message.append("\n"); 132 message.append("Errors at"); 133 } 134 message.append(" ["); 135 message.append(Integer.toString(i)); 136 message.append(", "); 137 message.append(Integer.toString(j)); 138 message.append("]"); 139 } 140 } 141 } 142 assertFalse("Incorrect output for checkNativeSincosFloatFloatFloat" + 143 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 144 } 145 checkNativeSincosFloat2Float2Float2()146 private void checkNativeSincosFloat2Float2Float2() { 147 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xe5a1f1dcda676ea9l, false); 148 try { 149 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 150 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 151 script.set_gAllocOutCos(outCos); 152 script.forEach_testNativeSincosFloat2Float2Float2(inV, out); 153 verifyResultsNativeSincosFloat2Float2Float2(inV, outCos, out, false); 154 outCos.destroy(); 155 out.destroy(); 156 } catch (Exception e) { 157 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat2Float2Float2: " + e.toString()); 158 } 159 try { 160 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 161 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 162 scriptRelaxed.set_gAllocOutCos(outCos); 163 scriptRelaxed.forEach_testNativeSincosFloat2Float2Float2(inV, out); 164 verifyResultsNativeSincosFloat2Float2Float2(inV, outCos, out, true); 165 outCos.destroy(); 166 out.destroy(); 167 } catch (Exception e) { 168 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat2Float2Float2: " + e.toString()); 169 } 170 inV.destroy(); 171 } 172 verifyResultsNativeSincosFloat2Float2Float2(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)173 private void verifyResultsNativeSincosFloat2Float2Float2(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 174 float[] arrayInV = new float[INPUTSIZE * 2]; 175 Arrays.fill(arrayInV, (float) 42); 176 inV.copyTo(arrayInV); 177 float[] arrayOutCos = new float[INPUTSIZE * 2]; 178 Arrays.fill(arrayOutCos, (float) 42); 179 outCos.copyTo(arrayOutCos); 180 float[] arrayOut = new float[INPUTSIZE * 2]; 181 Arrays.fill(arrayOut, (float) 42); 182 out.copyTo(arrayOut); 183 StringBuilder message = new StringBuilder(); 184 boolean errorFound = false; 185 for (int i = 0; i < INPUTSIZE; i++) { 186 for (int j = 0; j < 2 ; j++) { 187 // Extract the inputs. 188 ArgumentsFloatFloatFloat args = new ArgumentsFloatFloatFloat(); 189 args.inV = arrayInV[i * 2 + j]; 190 // Figure out what the outputs should have been. 191 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.FLOAT, relaxed); 192 CoreMathVerifier.computeNativeSincos(args, target); 193 // Validate the outputs. 194 boolean valid = true; 195 if (!args.outCos.couldBe(arrayOutCos[i * 2 + j], 0.0005)) { 196 valid = false; 197 } 198 if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) { 199 valid = false; 200 } 201 if (!valid) { 202 if (!errorFound) { 203 errorFound = true; 204 message.append("Input inV: "); 205 appendVariableToMessage(message, args.inV); 206 message.append("\n"); 207 message.append("Expected output outCos: "); 208 appendVariableToMessage(message, args.outCos); 209 message.append("\n"); 210 message.append("Actual output outCos: "); 211 appendVariableToMessage(message, arrayOutCos[i * 2 + j]); 212 if (!args.outCos.couldBe(arrayOutCos[i * 2 + j], 0.0005)) { 213 message.append(" FAIL"); 214 } 215 message.append("\n"); 216 message.append("Expected output out: "); 217 appendVariableToMessage(message, args.out); 218 message.append("\n"); 219 message.append("Actual output out: "); 220 appendVariableToMessage(message, arrayOut[i * 2 + j]); 221 if (!args.out.couldBe(arrayOut[i * 2 + j], 0.0005)) { 222 message.append(" FAIL"); 223 } 224 message.append("\n"); 225 message.append("Errors at"); 226 } 227 message.append(" ["); 228 message.append(Integer.toString(i)); 229 message.append(", "); 230 message.append(Integer.toString(j)); 231 message.append("]"); 232 } 233 } 234 } 235 assertFalse("Incorrect output for checkNativeSincosFloat2Float2Float2" + 236 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 237 } 238 checkNativeSincosFloat3Float3Float3()239 private void checkNativeSincosFloat3Float3Float3() { 240 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x3a06cffcdc45704al, false); 241 try { 242 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 243 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 244 script.set_gAllocOutCos(outCos); 245 script.forEach_testNativeSincosFloat3Float3Float3(inV, out); 246 verifyResultsNativeSincosFloat3Float3Float3(inV, outCos, out, false); 247 outCos.destroy(); 248 out.destroy(); 249 } catch (Exception e) { 250 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat3Float3Float3: " + e.toString()); 251 } 252 try { 253 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 254 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 255 scriptRelaxed.set_gAllocOutCos(outCos); 256 scriptRelaxed.forEach_testNativeSincosFloat3Float3Float3(inV, out); 257 verifyResultsNativeSincosFloat3Float3Float3(inV, outCos, out, true); 258 outCos.destroy(); 259 out.destroy(); 260 } catch (Exception e) { 261 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat3Float3Float3: " + e.toString()); 262 } 263 inV.destroy(); 264 } 265 verifyResultsNativeSincosFloat3Float3Float3(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)266 private void verifyResultsNativeSincosFloat3Float3Float3(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 267 float[] arrayInV = new float[INPUTSIZE * 4]; 268 Arrays.fill(arrayInV, (float) 42); 269 inV.copyTo(arrayInV); 270 float[] arrayOutCos = new float[INPUTSIZE * 4]; 271 Arrays.fill(arrayOutCos, (float) 42); 272 outCos.copyTo(arrayOutCos); 273 float[] arrayOut = new float[INPUTSIZE * 4]; 274 Arrays.fill(arrayOut, (float) 42); 275 out.copyTo(arrayOut); 276 StringBuilder message = new StringBuilder(); 277 boolean errorFound = false; 278 for (int i = 0; i < INPUTSIZE; i++) { 279 for (int j = 0; j < 3 ; j++) { 280 // Extract the inputs. 281 ArgumentsFloatFloatFloat args = new ArgumentsFloatFloatFloat(); 282 args.inV = arrayInV[i * 4 + j]; 283 // Figure out what the outputs should have been. 284 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.FLOAT, relaxed); 285 CoreMathVerifier.computeNativeSincos(args, target); 286 // Validate the outputs. 287 boolean valid = true; 288 if (!args.outCos.couldBe(arrayOutCos[i * 4 + j], 0.0005)) { 289 valid = false; 290 } 291 if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) { 292 valid = false; 293 } 294 if (!valid) { 295 if (!errorFound) { 296 errorFound = true; 297 message.append("Input inV: "); 298 appendVariableToMessage(message, args.inV); 299 message.append("\n"); 300 message.append("Expected output outCos: "); 301 appendVariableToMessage(message, args.outCos); 302 message.append("\n"); 303 message.append("Actual output outCos: "); 304 appendVariableToMessage(message, arrayOutCos[i * 4 + j]); 305 if (!args.outCos.couldBe(arrayOutCos[i * 4 + j], 0.0005)) { 306 message.append(" FAIL"); 307 } 308 message.append("\n"); 309 message.append("Expected output out: "); 310 appendVariableToMessage(message, args.out); 311 message.append("\n"); 312 message.append("Actual output out: "); 313 appendVariableToMessage(message, arrayOut[i * 4 + j]); 314 if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) { 315 message.append(" FAIL"); 316 } 317 message.append("\n"); 318 message.append("Errors at"); 319 } 320 message.append(" ["); 321 message.append(Integer.toString(i)); 322 message.append(", "); 323 message.append(Integer.toString(j)); 324 message.append("]"); 325 } 326 } 327 } 328 assertFalse("Incorrect output for checkNativeSincosFloat3Float3Float3" + 329 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 330 } 331 checkNativeSincosFloat4Float4Float4()332 private void checkNativeSincosFloat4Float4Float4() { 333 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x8e6bae1cde2371ebl, false); 334 try { 335 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 336 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 337 script.set_gAllocOutCos(outCos); 338 script.forEach_testNativeSincosFloat4Float4Float4(inV, out); 339 verifyResultsNativeSincosFloat4Float4Float4(inV, outCos, out, false); 340 outCos.destroy(); 341 out.destroy(); 342 } catch (Exception e) { 343 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat4Float4Float4: " + e.toString()); 344 } 345 try { 346 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 347 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 348 scriptRelaxed.set_gAllocOutCos(outCos); 349 scriptRelaxed.forEach_testNativeSincosFloat4Float4Float4(inV, out); 350 verifyResultsNativeSincosFloat4Float4Float4(inV, outCos, out, true); 351 outCos.destroy(); 352 out.destroy(); 353 } catch (Exception e) { 354 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosFloat4Float4Float4: " + e.toString()); 355 } 356 inV.destroy(); 357 } 358 verifyResultsNativeSincosFloat4Float4Float4(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)359 private void verifyResultsNativeSincosFloat4Float4Float4(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 360 float[] arrayInV = new float[INPUTSIZE * 4]; 361 Arrays.fill(arrayInV, (float) 42); 362 inV.copyTo(arrayInV); 363 float[] arrayOutCos = new float[INPUTSIZE * 4]; 364 Arrays.fill(arrayOutCos, (float) 42); 365 outCos.copyTo(arrayOutCos); 366 float[] arrayOut = new float[INPUTSIZE * 4]; 367 Arrays.fill(arrayOut, (float) 42); 368 out.copyTo(arrayOut); 369 StringBuilder message = new StringBuilder(); 370 boolean errorFound = false; 371 for (int i = 0; i < INPUTSIZE; i++) { 372 for (int j = 0; j < 4 ; j++) { 373 // Extract the inputs. 374 ArgumentsFloatFloatFloat args = new ArgumentsFloatFloatFloat(); 375 args.inV = arrayInV[i * 4 + j]; 376 // Figure out what the outputs should have been. 377 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.FLOAT, relaxed); 378 CoreMathVerifier.computeNativeSincos(args, target); 379 // Validate the outputs. 380 boolean valid = true; 381 if (!args.outCos.couldBe(arrayOutCos[i * 4 + j], 0.0005)) { 382 valid = false; 383 } 384 if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) { 385 valid = false; 386 } 387 if (!valid) { 388 if (!errorFound) { 389 errorFound = true; 390 message.append("Input inV: "); 391 appendVariableToMessage(message, args.inV); 392 message.append("\n"); 393 message.append("Expected output outCos: "); 394 appendVariableToMessage(message, args.outCos); 395 message.append("\n"); 396 message.append("Actual output outCos: "); 397 appendVariableToMessage(message, arrayOutCos[i * 4 + j]); 398 if (!args.outCos.couldBe(arrayOutCos[i * 4 + j], 0.0005)) { 399 message.append(" FAIL"); 400 } 401 message.append("\n"); 402 message.append("Expected output out: "); 403 appendVariableToMessage(message, args.out); 404 message.append("\n"); 405 message.append("Actual output out: "); 406 appendVariableToMessage(message, arrayOut[i * 4 + j]); 407 if (!args.out.couldBe(arrayOut[i * 4 + j], 0.0005)) { 408 message.append(" FAIL"); 409 } 410 message.append("\n"); 411 message.append("Errors at"); 412 } 413 message.append(" ["); 414 message.append(Integer.toString(i)); 415 message.append(", "); 416 message.append(Integer.toString(j)); 417 message.append("]"); 418 } 419 } 420 } 421 assertFalse("Incorrect output for checkNativeSincosFloat4Float4Float4" + 422 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 423 } 424 425 public class ArgumentsHalfHalfHalf { 426 public short inV; 427 public double inVDouble; 428 public Target.Floaty outCos; 429 public Target.Floaty out; 430 } 431 checkNativeSincosHalfHalfHalf()432 private void checkNativeSincosHalfHalfHalf() { 433 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_16, 1, 0xc8c32e2575ce8c9al, false); 434 try { 435 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 1), INPUTSIZE); 436 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 1), INPUTSIZE); 437 script.set_gAllocOutCos(outCos); 438 script.forEach_testNativeSincosHalfHalfHalf(inV, out); 439 verifyResultsNativeSincosHalfHalfHalf(inV, outCos, out, false); 440 outCos.destroy(); 441 out.destroy(); 442 } catch (Exception e) { 443 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalfHalfHalf: " + e.toString()); 444 } 445 try { 446 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 1), INPUTSIZE); 447 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 1), INPUTSIZE); 448 scriptRelaxed.set_gAllocOutCos(outCos); 449 scriptRelaxed.forEach_testNativeSincosHalfHalfHalf(inV, out); 450 verifyResultsNativeSincosHalfHalfHalf(inV, outCos, out, true); 451 outCos.destroy(); 452 out.destroy(); 453 } catch (Exception e) { 454 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalfHalfHalf: " + e.toString()); 455 } 456 inV.destroy(); 457 } 458 verifyResultsNativeSincosHalfHalfHalf(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)459 private void verifyResultsNativeSincosHalfHalfHalf(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 460 short[] arrayInV = new short[INPUTSIZE * 1]; 461 Arrays.fill(arrayInV, (short) 42); 462 inV.copyTo(arrayInV); 463 short[] arrayOutCos = new short[INPUTSIZE * 1]; 464 Arrays.fill(arrayOutCos, (short) 42); 465 outCos.copyTo(arrayOutCos); 466 short[] arrayOut = new short[INPUTSIZE * 1]; 467 Arrays.fill(arrayOut, (short) 42); 468 out.copyTo(arrayOut); 469 StringBuilder message = new StringBuilder(); 470 boolean errorFound = false; 471 for (int i = 0; i < INPUTSIZE; i++) { 472 for (int j = 0; j < 1 ; j++) { 473 // Extract the inputs. 474 ArgumentsHalfHalfHalf args = new ArgumentsHalfHalfHalf(); 475 args.inV = arrayInV[i]; 476 args.inVDouble = Float16Utils.convertFloat16ToDouble(args.inV); 477 // Figure out what the outputs should have been. 478 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.HALF, relaxed); 479 CoreMathVerifier.computeNativeSincos(args, target); 480 // Validate the outputs. 481 boolean valid = true; 482 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 1 + j]), 0.00048828125)) { 483 valid = false; 484 } 485 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 1 + j]), 0.00048828125)) { 486 valid = false; 487 } 488 if (!valid) { 489 if (!errorFound) { 490 errorFound = true; 491 message.append("Input inV: "); 492 appendVariableToMessage(message, args.inV); 493 message.append("\n"); 494 message.append("Expected output outCos: "); 495 appendVariableToMessage(message, args.outCos); 496 message.append("\n"); 497 message.append("Actual output outCos: "); 498 appendVariableToMessage(message, arrayOutCos[i * 1 + j]); 499 message.append("\n"); 500 message.append("Actual output outCos (in double): "); 501 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 1 + j])); 502 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 1 + j]), 0.00048828125)) { 503 message.append(" FAIL"); 504 } 505 message.append("\n"); 506 message.append("Expected output out: "); 507 appendVariableToMessage(message, args.out); 508 message.append("\n"); 509 message.append("Actual output out: "); 510 appendVariableToMessage(message, arrayOut[i * 1 + j]); 511 message.append("\n"); 512 message.append("Actual output out (in double): "); 513 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOut[i * 1 + j])); 514 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 1 + j]), 0.00048828125)) { 515 message.append(" FAIL"); 516 } 517 message.append("\n"); 518 message.append("Errors at"); 519 } 520 message.append(" ["); 521 message.append(Integer.toString(i)); 522 message.append(", "); 523 message.append(Integer.toString(j)); 524 message.append("]"); 525 } 526 } 527 } 528 assertFalse("Incorrect output for checkNativeSincosHalfHalfHalf" + 529 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 530 } 531 checkNativeSincosHalf2Half2Half2()532 private void checkNativeSincosHalf2Half2Half2() { 533 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_16, 2, 0xb0ce34539b1d1008l, false); 534 try { 535 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 2), INPUTSIZE); 536 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 2), INPUTSIZE); 537 script.set_gAllocOutCos(outCos); 538 script.forEach_testNativeSincosHalf2Half2Half2(inV, out); 539 verifyResultsNativeSincosHalf2Half2Half2(inV, outCos, out, false); 540 outCos.destroy(); 541 out.destroy(); 542 } catch (Exception e) { 543 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf2Half2Half2: " + e.toString()); 544 } 545 try { 546 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 2), INPUTSIZE); 547 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 2), INPUTSIZE); 548 scriptRelaxed.set_gAllocOutCos(outCos); 549 scriptRelaxed.forEach_testNativeSincosHalf2Half2Half2(inV, out); 550 verifyResultsNativeSincosHalf2Half2Half2(inV, outCos, out, true); 551 outCos.destroy(); 552 out.destroy(); 553 } catch (Exception e) { 554 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf2Half2Half2: " + e.toString()); 555 } 556 inV.destroy(); 557 } 558 verifyResultsNativeSincosHalf2Half2Half2(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)559 private void verifyResultsNativeSincosHalf2Half2Half2(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 560 short[] arrayInV = new short[INPUTSIZE * 2]; 561 Arrays.fill(arrayInV, (short) 42); 562 inV.copyTo(arrayInV); 563 short[] arrayOutCos = new short[INPUTSIZE * 2]; 564 Arrays.fill(arrayOutCos, (short) 42); 565 outCos.copyTo(arrayOutCos); 566 short[] arrayOut = new short[INPUTSIZE * 2]; 567 Arrays.fill(arrayOut, (short) 42); 568 out.copyTo(arrayOut); 569 StringBuilder message = new StringBuilder(); 570 boolean errorFound = false; 571 for (int i = 0; i < INPUTSIZE; i++) { 572 for (int j = 0; j < 2 ; j++) { 573 // Extract the inputs. 574 ArgumentsHalfHalfHalf args = new ArgumentsHalfHalfHalf(); 575 args.inV = arrayInV[i * 2 + j]; 576 args.inVDouble = Float16Utils.convertFloat16ToDouble(args.inV); 577 // Figure out what the outputs should have been. 578 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.HALF, relaxed); 579 CoreMathVerifier.computeNativeSincos(args, target); 580 // Validate the outputs. 581 boolean valid = true; 582 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 2 + j]), 0.00048828125)) { 583 valid = false; 584 } 585 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 2 + j]), 0.00048828125)) { 586 valid = false; 587 } 588 if (!valid) { 589 if (!errorFound) { 590 errorFound = true; 591 message.append("Input inV: "); 592 appendVariableToMessage(message, args.inV); 593 message.append("\n"); 594 message.append("Expected output outCos: "); 595 appendVariableToMessage(message, args.outCos); 596 message.append("\n"); 597 message.append("Actual output outCos: "); 598 appendVariableToMessage(message, arrayOutCos[i * 2 + j]); 599 message.append("\n"); 600 message.append("Actual output outCos (in double): "); 601 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 2 + j])); 602 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 2 + j]), 0.00048828125)) { 603 message.append(" FAIL"); 604 } 605 message.append("\n"); 606 message.append("Expected output out: "); 607 appendVariableToMessage(message, args.out); 608 message.append("\n"); 609 message.append("Actual output out: "); 610 appendVariableToMessage(message, arrayOut[i * 2 + j]); 611 message.append("\n"); 612 message.append("Actual output out (in double): "); 613 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOut[i * 2 + j])); 614 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 2 + j]), 0.00048828125)) { 615 message.append(" FAIL"); 616 } 617 message.append("\n"); 618 message.append("Errors at"); 619 } 620 message.append(" ["); 621 message.append(Integer.toString(i)); 622 message.append(", "); 623 message.append(Integer.toString(j)); 624 message.append("]"); 625 } 626 } 627 } 628 assertFalse("Incorrect output for checkNativeSincosHalf2Half2Half2" + 629 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 630 } 631 checkNativeSincosHalf3Half3Half3()632 private void checkNativeSincosHalf3Half3Half3() { 633 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_16, 3, 0xd682b43cf9bc20d7l, false); 634 try { 635 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 3), INPUTSIZE); 636 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 3), INPUTSIZE); 637 script.set_gAllocOutCos(outCos); 638 script.forEach_testNativeSincosHalf3Half3Half3(inV, out); 639 verifyResultsNativeSincosHalf3Half3Half3(inV, outCos, out, false); 640 outCos.destroy(); 641 out.destroy(); 642 } catch (Exception e) { 643 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf3Half3Half3: " + e.toString()); 644 } 645 try { 646 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 3), INPUTSIZE); 647 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 3), INPUTSIZE); 648 scriptRelaxed.set_gAllocOutCos(outCos); 649 scriptRelaxed.forEach_testNativeSincosHalf3Half3Half3(inV, out); 650 verifyResultsNativeSincosHalf3Half3Half3(inV, outCos, out, true); 651 outCos.destroy(); 652 out.destroy(); 653 } catch (Exception e) { 654 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf3Half3Half3: " + e.toString()); 655 } 656 inV.destroy(); 657 } 658 verifyResultsNativeSincosHalf3Half3Half3(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)659 private void verifyResultsNativeSincosHalf3Half3Half3(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 660 short[] arrayInV = new short[INPUTSIZE * 4]; 661 Arrays.fill(arrayInV, (short) 42); 662 inV.copyTo(arrayInV); 663 short[] arrayOutCos = new short[INPUTSIZE * 4]; 664 Arrays.fill(arrayOutCos, (short) 42); 665 outCos.copyTo(arrayOutCos); 666 short[] arrayOut = new short[INPUTSIZE * 4]; 667 Arrays.fill(arrayOut, (short) 42); 668 out.copyTo(arrayOut); 669 StringBuilder message = new StringBuilder(); 670 boolean errorFound = false; 671 for (int i = 0; i < INPUTSIZE; i++) { 672 for (int j = 0; j < 3 ; j++) { 673 // Extract the inputs. 674 ArgumentsHalfHalfHalf args = new ArgumentsHalfHalfHalf(); 675 args.inV = arrayInV[i * 4 + j]; 676 args.inVDouble = Float16Utils.convertFloat16ToDouble(args.inV); 677 // Figure out what the outputs should have been. 678 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.HALF, relaxed); 679 CoreMathVerifier.computeNativeSincos(args, target); 680 // Validate the outputs. 681 boolean valid = true; 682 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j]), 0.00048828125)) { 683 valid = false; 684 } 685 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j]), 0.00048828125)) { 686 valid = false; 687 } 688 if (!valid) { 689 if (!errorFound) { 690 errorFound = true; 691 message.append("Input inV: "); 692 appendVariableToMessage(message, args.inV); 693 message.append("\n"); 694 message.append("Expected output outCos: "); 695 appendVariableToMessage(message, args.outCos); 696 message.append("\n"); 697 message.append("Actual output outCos: "); 698 appendVariableToMessage(message, arrayOutCos[i * 4 + j]); 699 message.append("\n"); 700 message.append("Actual output outCos (in double): "); 701 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j])); 702 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j]), 0.00048828125)) { 703 message.append(" FAIL"); 704 } 705 message.append("\n"); 706 message.append("Expected output out: "); 707 appendVariableToMessage(message, args.out); 708 message.append("\n"); 709 message.append("Actual output out: "); 710 appendVariableToMessage(message, arrayOut[i * 4 + j]); 711 message.append("\n"); 712 message.append("Actual output out (in double): "); 713 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j])); 714 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j]), 0.00048828125)) { 715 message.append(" FAIL"); 716 } 717 message.append("\n"); 718 message.append("Errors at"); 719 } 720 message.append(" ["); 721 message.append(Integer.toString(i)); 722 message.append(", "); 723 message.append(Integer.toString(j)); 724 message.append("]"); 725 } 726 } 727 } 728 assertFalse("Incorrect output for checkNativeSincosHalf3Half3Half3" + 729 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 730 } 731 checkNativeSincosHalf4Half4Half4()732 private void checkNativeSincosHalf4Half4Half4() { 733 Allocation inV = createRandomAllocation(mRS, Element.DataType.FLOAT_16, 4, 0xfc373426585b31a6l, false); 734 try { 735 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 4), INPUTSIZE); 736 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 4), INPUTSIZE); 737 script.set_gAllocOutCos(outCos); 738 script.forEach_testNativeSincosHalf4Half4Half4(inV, out); 739 verifyResultsNativeSincosHalf4Half4Half4(inV, outCos, out, false); 740 outCos.destroy(); 741 out.destroy(); 742 } catch (Exception e) { 743 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf4Half4Half4: " + e.toString()); 744 } 745 try { 746 Allocation outCos = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 4), INPUTSIZE); 747 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_16, 4), INPUTSIZE); 748 scriptRelaxed.set_gAllocOutCos(outCos); 749 scriptRelaxed.forEach_testNativeSincosHalf4Half4Half4(inV, out); 750 verifyResultsNativeSincosHalf4Half4Half4(inV, outCos, out, true); 751 outCos.destroy(); 752 out.destroy(); 753 } catch (Exception e) { 754 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testNativeSincosHalf4Half4Half4: " + e.toString()); 755 } 756 inV.destroy(); 757 } 758 verifyResultsNativeSincosHalf4Half4Half4(Allocation inV, Allocation outCos, Allocation out, boolean relaxed)759 private void verifyResultsNativeSincosHalf4Half4Half4(Allocation inV, Allocation outCos, Allocation out, boolean relaxed) { 760 short[] arrayInV = new short[INPUTSIZE * 4]; 761 Arrays.fill(arrayInV, (short) 42); 762 inV.copyTo(arrayInV); 763 short[] arrayOutCos = new short[INPUTSIZE * 4]; 764 Arrays.fill(arrayOutCos, (short) 42); 765 outCos.copyTo(arrayOutCos); 766 short[] arrayOut = new short[INPUTSIZE * 4]; 767 Arrays.fill(arrayOut, (short) 42); 768 out.copyTo(arrayOut); 769 StringBuilder message = new StringBuilder(); 770 boolean errorFound = false; 771 for (int i = 0; i < INPUTSIZE; i++) { 772 for (int j = 0; j < 4 ; j++) { 773 // Extract the inputs. 774 ArgumentsHalfHalfHalf args = new ArgumentsHalfHalfHalf(); 775 args.inV = arrayInV[i * 4 + j]; 776 args.inVDouble = Float16Utils.convertFloat16ToDouble(args.inV); 777 // Figure out what the outputs should have been. 778 Target target = new Target(Target.FunctionType.NATIVE, Target.ReturnType.HALF, relaxed); 779 CoreMathVerifier.computeNativeSincos(args, target); 780 // Validate the outputs. 781 boolean valid = true; 782 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j]), 0.00048828125)) { 783 valid = false; 784 } 785 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j]), 0.00048828125)) { 786 valid = false; 787 } 788 if (!valid) { 789 if (!errorFound) { 790 errorFound = true; 791 message.append("Input inV: "); 792 appendVariableToMessage(message, args.inV); 793 message.append("\n"); 794 message.append("Expected output outCos: "); 795 appendVariableToMessage(message, args.outCos); 796 message.append("\n"); 797 message.append("Actual output outCos: "); 798 appendVariableToMessage(message, arrayOutCos[i * 4 + j]); 799 message.append("\n"); 800 message.append("Actual output outCos (in double): "); 801 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j])); 802 if (!args.outCos.couldBe(Float16Utils.convertFloat16ToDouble(arrayOutCos[i * 4 + j]), 0.00048828125)) { 803 message.append(" FAIL"); 804 } 805 message.append("\n"); 806 message.append("Expected output out: "); 807 appendVariableToMessage(message, args.out); 808 message.append("\n"); 809 message.append("Actual output out: "); 810 appendVariableToMessage(message, arrayOut[i * 4 + j]); 811 message.append("\n"); 812 message.append("Actual output out (in double): "); 813 appendVariableToMessage(message, Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j])); 814 if (!args.out.couldBe(Float16Utils.convertFloat16ToDouble(arrayOut[i * 4 + j]), 0.00048828125)) { 815 message.append(" FAIL"); 816 } 817 message.append("\n"); 818 message.append("Errors at"); 819 } 820 message.append(" ["); 821 message.append(Integer.toString(i)); 822 message.append(", "); 823 message.append(Integer.toString(j)); 824 message.append("]"); 825 } 826 } 827 } 828 assertFalse("Incorrect output for checkNativeSincosHalf4Half4Half4" + 829 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound); 830 } 831 testNativeSincos()832 public void testNativeSincos() { 833 checkNativeSincosFloatFloatFloat(); 834 checkNativeSincosFloat2Float2Float2(); 835 checkNativeSincosFloat3Float3Float3(); 836 checkNativeSincosFloat4Float4Float4(); 837 checkNativeSincosHalfHalfHalf(); 838 checkNativeSincosHalf2Half2Half2(); 839 checkNativeSincosHalf3Half3Half3(); 840 checkNativeSincosHalf4Half4Half4(); 841 } 842 } 843