1 /* 2 * Copyright (C) 2014 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/gen_runtime. 18 19 package android.renderscript.cts; 20 21 import android.renderscript.Allocation; 22 import android.renderscript.RSRuntimeException; 23 import android.renderscript.Element; 24 25 public class TestConvert extends RSBaseCompute { 26 27 private ScriptC_TestConvert script; 28 private ScriptC_TestConvertRelaxed scriptRelaxed; 29 30 @Override 31 protected void setUp() throws Exception { 32 super.setUp(); 33 script = new ScriptC_TestConvert(mRS); 34 scriptRelaxed = new ScriptC_TestConvertRelaxed(mRS); 35 } 36 37 public class ArgumentsFloatFloat { 38 public float inV; 39 public Target.Floaty out; 40 } 41 42 private void checkConvertFloat2Float2() { 43 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xfb5215c44e1f6ac6l, -1.6163412428744576259e+38, 1.6163412428744576259e+38); 44 try { 45 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 46 script.forEach_testConvertFloat2Float2Float2(inV, out); 47 verifyResultsConvertFloat2Float2(inV, out, false); 48 } catch (Exception e) { 49 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Float2Float2: " + e.toString()); 50 } 51 try { 52 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 53 scriptRelaxed.forEach_testConvertFloat2Float2Float2(inV, out); 54 verifyResultsConvertFloat2Float2(inV, out, true); 55 } catch (Exception e) { 56 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Float2Float2: " + e.toString()); 57 } 58 } 59 60 private void verifyResultsConvertFloat2Float2(Allocation inV, Allocation out, boolean relaxed) { 61 float[] arrayInV = new float[INPUTSIZE * 2]; 62 inV.copyTo(arrayInV); 63 float[] arrayOut = new float[INPUTSIZE * 2]; 64 out.copyTo(arrayOut); 65 for (int i = 0; i < INPUTSIZE; i++) { 66 for (int j = 0; j < 2 ; j++) { 67 // Extract the inputs. 68 ArgumentsFloatFloat args = new ArgumentsFloatFloat(); 69 args.inV = arrayInV[i * 2 + j]; 70 // Figure out what the outputs should have been. 71 Target target = new Target(relaxed); 72 CoreMathVerifier.computeConvert(args, target); 73 // Validate the outputs. 74 boolean valid = true; 75 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 76 valid = false; 77 } 78 if (!valid) { 79 StringBuilder message = new StringBuilder(); 80 message.append("Input inV: "); 81 message.append(String.format("%14.8g {%8x} %15a", 82 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 83 message.append("\n"); 84 message.append("Expected output out: "); 85 message.append(args.out.toString()); 86 message.append("\n"); 87 message.append("Actual output out: "); 88 message.append(String.format("%14.8g {%8x} %15a", 89 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 90 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 91 message.append(" FAIL"); 92 } 93 message.append("\n"); 94 assertTrue("Incorrect output for checkConvertFloat2Float2" + 95 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 96 } 97 } 98 } 99 } 100 101 private void checkConvertFloat3Float3() { 102 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0xfb53dedf443a8ba4l, -1.6163412428744576259e+38, 1.6163412428744576259e+38); 103 try { 104 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 105 script.forEach_testConvertFloat3Float3Float3(inV, out); 106 verifyResultsConvertFloat3Float3(inV, out, false); 107 } catch (Exception e) { 108 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Float3Float3: " + e.toString()); 109 } 110 try { 111 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 112 scriptRelaxed.forEach_testConvertFloat3Float3Float3(inV, out); 113 verifyResultsConvertFloat3Float3(inV, out, true); 114 } catch (Exception e) { 115 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Float3Float3: " + e.toString()); 116 } 117 } 118 119 private void verifyResultsConvertFloat3Float3(Allocation inV, Allocation out, boolean relaxed) { 120 float[] arrayInV = new float[INPUTSIZE * 4]; 121 inV.copyTo(arrayInV); 122 float[] arrayOut = new float[INPUTSIZE * 4]; 123 out.copyTo(arrayOut); 124 for (int i = 0; i < INPUTSIZE; i++) { 125 for (int j = 0; j < 3 ; j++) { 126 // Extract the inputs. 127 ArgumentsFloatFloat args = new ArgumentsFloatFloat(); 128 args.inV = arrayInV[i * 4 + j]; 129 // Figure out what the outputs should have been. 130 Target target = new Target(relaxed); 131 CoreMathVerifier.computeConvert(args, target); 132 // Validate the outputs. 133 boolean valid = true; 134 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 135 valid = false; 136 } 137 if (!valid) { 138 StringBuilder message = new StringBuilder(); 139 message.append("Input inV: "); 140 message.append(String.format("%14.8g {%8x} %15a", 141 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 142 message.append("\n"); 143 message.append("Expected output out: "); 144 message.append(args.out.toString()); 145 message.append("\n"); 146 message.append("Actual output out: "); 147 message.append(String.format("%14.8g {%8x} %15a", 148 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 149 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 150 message.append(" FAIL"); 151 } 152 message.append("\n"); 153 assertTrue("Incorrect output for checkConvertFloat3Float3" + 154 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 155 } 156 } 157 } 158 } 159 160 private void checkConvertFloat4Float4() { 161 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0xfb55a7fa3a55ac82l, -1.6163412428744576259e+38, 1.6163412428744576259e+38); 162 try { 163 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 164 script.forEach_testConvertFloat4Float4Float4(inV, out); 165 verifyResultsConvertFloat4Float4(inV, out, false); 166 } catch (Exception e) { 167 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Float4Float4: " + e.toString()); 168 } 169 try { 170 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 171 scriptRelaxed.forEach_testConvertFloat4Float4Float4(inV, out); 172 verifyResultsConvertFloat4Float4(inV, out, true); 173 } catch (Exception e) { 174 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Float4Float4: " + e.toString()); 175 } 176 } 177 178 private void verifyResultsConvertFloat4Float4(Allocation inV, Allocation out, boolean relaxed) { 179 float[] arrayInV = new float[INPUTSIZE * 4]; 180 inV.copyTo(arrayInV); 181 float[] arrayOut = new float[INPUTSIZE * 4]; 182 out.copyTo(arrayOut); 183 for (int i = 0; i < INPUTSIZE; i++) { 184 for (int j = 0; j < 4 ; j++) { 185 // Extract the inputs. 186 ArgumentsFloatFloat args = new ArgumentsFloatFloat(); 187 args.inV = arrayInV[i * 4 + j]; 188 // Figure out what the outputs should have been. 189 Target target = new Target(relaxed); 190 CoreMathVerifier.computeConvert(args, target); 191 // Validate the outputs. 192 boolean valid = true; 193 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 194 valid = false; 195 } 196 if (!valid) { 197 StringBuilder message = new StringBuilder(); 198 message.append("Input inV: "); 199 message.append(String.format("%14.8g {%8x} %15a", 200 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 201 message.append("\n"); 202 message.append("Expected output out: "); 203 message.append(args.out.toString()); 204 message.append("\n"); 205 message.append("Actual output out: "); 206 message.append(String.format("%14.8g {%8x} %15a", 207 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 208 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 209 message.append(" FAIL"); 210 } 211 message.append("\n"); 212 assertTrue("Incorrect output for checkConvertFloat4Float4" + 213 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 214 } 215 } 216 } 217 } 218 219 public class ArgumentsCharFloat { 220 public byte inV; 221 public Target.Floaty out; 222 } 223 224 private void checkConvertChar2Float2() { 225 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0x5861e2161f489286l, true, 7); 226 try { 227 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 228 script.forEach_testConvertFloat2Char2Float2(inV, out); 229 verifyResultsConvertChar2Float2(inV, out, false); 230 } catch (Exception e) { 231 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Char2Float2: " + e.toString()); 232 } 233 try { 234 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 235 scriptRelaxed.forEach_testConvertFloat2Char2Float2(inV, out); 236 verifyResultsConvertChar2Float2(inV, out, true); 237 } catch (Exception e) { 238 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Char2Float2: " + e.toString()); 239 } 240 } 241 242 private void verifyResultsConvertChar2Float2(Allocation inV, Allocation out, boolean relaxed) { 243 byte[] arrayInV = new byte[INPUTSIZE * 2]; 244 inV.copyTo(arrayInV); 245 float[] arrayOut = new float[INPUTSIZE * 2]; 246 out.copyTo(arrayOut); 247 for (int i = 0; i < INPUTSIZE; i++) { 248 for (int j = 0; j < 2 ; j++) { 249 // Extract the inputs. 250 ArgumentsCharFloat args = new ArgumentsCharFloat(); 251 args.inV = arrayInV[i * 2 + j]; 252 // Figure out what the outputs should have been. 253 Target target = new Target(relaxed); 254 CoreMathVerifier.computeConvert(args, target); 255 // Validate the outputs. 256 boolean valid = true; 257 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 258 valid = false; 259 } 260 if (!valid) { 261 StringBuilder message = new StringBuilder(); 262 message.append("Input inV: "); 263 message.append(String.format("%d", args.inV)); 264 message.append("\n"); 265 message.append("Expected output out: "); 266 message.append(args.out.toString()); 267 message.append("\n"); 268 message.append("Actual output out: "); 269 message.append(String.format("%14.8g {%8x} %15a", 270 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 271 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 272 message.append(" FAIL"); 273 } 274 message.append("\n"); 275 assertTrue("Incorrect output for checkConvertChar2Float2" + 276 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 277 } 278 } 279 } 280 } 281 282 private void checkConvertChar3Float3() { 283 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0x5863ab311563b364l, true, 7); 284 try { 285 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 286 script.forEach_testConvertFloat3Char3Float3(inV, out); 287 verifyResultsConvertChar3Float3(inV, out, false); 288 } catch (Exception e) { 289 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Char3Float3: " + e.toString()); 290 } 291 try { 292 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 293 scriptRelaxed.forEach_testConvertFloat3Char3Float3(inV, out); 294 verifyResultsConvertChar3Float3(inV, out, true); 295 } catch (Exception e) { 296 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Char3Float3: " + e.toString()); 297 } 298 } 299 300 private void verifyResultsConvertChar3Float3(Allocation inV, Allocation out, boolean relaxed) { 301 byte[] arrayInV = new byte[INPUTSIZE * 4]; 302 inV.copyTo(arrayInV); 303 float[] arrayOut = new float[INPUTSIZE * 4]; 304 out.copyTo(arrayOut); 305 for (int i = 0; i < INPUTSIZE; i++) { 306 for (int j = 0; j < 3 ; j++) { 307 // Extract the inputs. 308 ArgumentsCharFloat args = new ArgumentsCharFloat(); 309 args.inV = arrayInV[i * 4 + j]; 310 // Figure out what the outputs should have been. 311 Target target = new Target(relaxed); 312 CoreMathVerifier.computeConvert(args, target); 313 // Validate the outputs. 314 boolean valid = true; 315 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 316 valid = false; 317 } 318 if (!valid) { 319 StringBuilder message = new StringBuilder(); 320 message.append("Input inV: "); 321 message.append(String.format("%d", args.inV)); 322 message.append("\n"); 323 message.append("Expected output out: "); 324 message.append(args.out.toString()); 325 message.append("\n"); 326 message.append("Actual output out: "); 327 message.append(String.format("%14.8g {%8x} %15a", 328 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 329 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 330 message.append(" FAIL"); 331 } 332 message.append("\n"); 333 assertTrue("Incorrect output for checkConvertChar3Float3" + 334 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 335 } 336 } 337 } 338 } 339 340 private void checkConvertChar4Float4() { 341 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0x5865744c0b7ed442l, true, 7); 342 try { 343 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 344 script.forEach_testConvertFloat4Char4Float4(inV, out); 345 verifyResultsConvertChar4Float4(inV, out, false); 346 } catch (Exception e) { 347 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Char4Float4: " + e.toString()); 348 } 349 try { 350 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 351 scriptRelaxed.forEach_testConvertFloat4Char4Float4(inV, out); 352 verifyResultsConvertChar4Float4(inV, out, true); 353 } catch (Exception e) { 354 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Char4Float4: " + e.toString()); 355 } 356 } 357 358 private void verifyResultsConvertChar4Float4(Allocation inV, Allocation out, boolean relaxed) { 359 byte[] arrayInV = new byte[INPUTSIZE * 4]; 360 inV.copyTo(arrayInV); 361 float[] arrayOut = new float[INPUTSIZE * 4]; 362 out.copyTo(arrayOut); 363 for (int i = 0; i < INPUTSIZE; i++) { 364 for (int j = 0; j < 4 ; j++) { 365 // Extract the inputs. 366 ArgumentsCharFloat args = new ArgumentsCharFloat(); 367 args.inV = arrayInV[i * 4 + j]; 368 // Figure out what the outputs should have been. 369 Target target = new Target(relaxed); 370 CoreMathVerifier.computeConvert(args, target); 371 // Validate the outputs. 372 boolean valid = true; 373 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 374 valid = false; 375 } 376 if (!valid) { 377 StringBuilder message = new StringBuilder(); 378 message.append("Input inV: "); 379 message.append(String.format("%d", args.inV)); 380 message.append("\n"); 381 message.append("Expected output out: "); 382 message.append(args.out.toString()); 383 message.append("\n"); 384 message.append("Actual output out: "); 385 message.append(String.format("%14.8g {%8x} %15a", 386 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 387 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 388 message.append(" FAIL"); 389 } 390 message.append("\n"); 391 assertTrue("Incorrect output for checkConvertChar4Float4" + 392 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 393 } 394 } 395 } 396 } 397 398 public class ArgumentsUcharFloat { 399 public byte inV; 400 public Target.Floaty out; 401 } 402 403 private void checkConvertUchar2Float2() { 404 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x7d30021dbb20ac31l, false, 8); 405 try { 406 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 407 script.forEach_testConvertFloat2Uchar2Float2(inV, out); 408 verifyResultsConvertUchar2Float2(inV, out, false); 409 } catch (Exception e) { 410 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Uchar2Float2: " + e.toString()); 411 } 412 try { 413 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 414 scriptRelaxed.forEach_testConvertFloat2Uchar2Float2(inV, out); 415 verifyResultsConvertUchar2Float2(inV, out, true); 416 } catch (Exception e) { 417 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Uchar2Float2: " + e.toString()); 418 } 419 } 420 421 private void verifyResultsConvertUchar2Float2(Allocation inV, Allocation out, boolean relaxed) { 422 byte[] arrayInV = new byte[INPUTSIZE * 2]; 423 inV.copyTo(arrayInV); 424 float[] arrayOut = new float[INPUTSIZE * 2]; 425 out.copyTo(arrayOut); 426 for (int i = 0; i < INPUTSIZE; i++) { 427 for (int j = 0; j < 2 ; j++) { 428 // Extract the inputs. 429 ArgumentsUcharFloat args = new ArgumentsUcharFloat(); 430 args.inV = arrayInV[i * 2 + j]; 431 // Figure out what the outputs should have been. 432 Target target = new Target(relaxed); 433 CoreMathVerifier.computeConvert(args, target); 434 // Validate the outputs. 435 boolean valid = true; 436 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 437 valid = false; 438 } 439 if (!valid) { 440 StringBuilder message = new StringBuilder(); 441 message.append("Input inV: "); 442 message.append(String.format("0x%x", args.inV)); 443 message.append("\n"); 444 message.append("Expected output out: "); 445 message.append(args.out.toString()); 446 message.append("\n"); 447 message.append("Actual output out: "); 448 message.append(String.format("%14.8g {%8x} %15a", 449 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 450 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 451 message.append(" FAIL"); 452 } 453 message.append("\n"); 454 assertTrue("Incorrect output for checkConvertUchar2Float2" + 455 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 456 } 457 } 458 } 459 } 460 461 private void checkConvertUchar3Float3() { 462 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x7d31cb38b13bcd0fl, false, 8); 463 try { 464 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 465 script.forEach_testConvertFloat3Uchar3Float3(inV, out); 466 verifyResultsConvertUchar3Float3(inV, out, false); 467 } catch (Exception e) { 468 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Uchar3Float3: " + e.toString()); 469 } 470 try { 471 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 472 scriptRelaxed.forEach_testConvertFloat3Uchar3Float3(inV, out); 473 verifyResultsConvertUchar3Float3(inV, out, true); 474 } catch (Exception e) { 475 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Uchar3Float3: " + e.toString()); 476 } 477 } 478 479 private void verifyResultsConvertUchar3Float3(Allocation inV, Allocation out, boolean relaxed) { 480 byte[] arrayInV = new byte[INPUTSIZE * 4]; 481 inV.copyTo(arrayInV); 482 float[] arrayOut = new float[INPUTSIZE * 4]; 483 out.copyTo(arrayOut); 484 for (int i = 0; i < INPUTSIZE; i++) { 485 for (int j = 0; j < 3 ; j++) { 486 // Extract the inputs. 487 ArgumentsUcharFloat args = new ArgumentsUcharFloat(); 488 args.inV = arrayInV[i * 4 + j]; 489 // Figure out what the outputs should have been. 490 Target target = new Target(relaxed); 491 CoreMathVerifier.computeConvert(args, target); 492 // Validate the outputs. 493 boolean valid = true; 494 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 495 valid = false; 496 } 497 if (!valid) { 498 StringBuilder message = new StringBuilder(); 499 message.append("Input inV: "); 500 message.append(String.format("0x%x", args.inV)); 501 message.append("\n"); 502 message.append("Expected output out: "); 503 message.append(args.out.toString()); 504 message.append("\n"); 505 message.append("Actual output out: "); 506 message.append(String.format("%14.8g {%8x} %15a", 507 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 508 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 509 message.append(" FAIL"); 510 } 511 message.append("\n"); 512 assertTrue("Incorrect output for checkConvertUchar3Float3" + 513 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 514 } 515 } 516 } 517 } 518 519 private void checkConvertUchar4Float4() { 520 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7d339453a756ededl, false, 8); 521 try { 522 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 523 script.forEach_testConvertFloat4Uchar4Float4(inV, out); 524 verifyResultsConvertUchar4Float4(inV, out, false); 525 } catch (Exception e) { 526 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Uchar4Float4: " + e.toString()); 527 } 528 try { 529 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 530 scriptRelaxed.forEach_testConvertFloat4Uchar4Float4(inV, out); 531 verifyResultsConvertUchar4Float4(inV, out, true); 532 } catch (Exception e) { 533 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Uchar4Float4: " + e.toString()); 534 } 535 } 536 537 private void verifyResultsConvertUchar4Float4(Allocation inV, Allocation out, boolean relaxed) { 538 byte[] arrayInV = new byte[INPUTSIZE * 4]; 539 inV.copyTo(arrayInV); 540 float[] arrayOut = new float[INPUTSIZE * 4]; 541 out.copyTo(arrayOut); 542 for (int i = 0; i < INPUTSIZE; i++) { 543 for (int j = 0; j < 4 ; j++) { 544 // Extract the inputs. 545 ArgumentsUcharFloat args = new ArgumentsUcharFloat(); 546 args.inV = arrayInV[i * 4 + j]; 547 // Figure out what the outputs should have been. 548 Target target = new Target(relaxed); 549 CoreMathVerifier.computeConvert(args, target); 550 // Validate the outputs. 551 boolean valid = true; 552 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 553 valid = false; 554 } 555 if (!valid) { 556 StringBuilder message = new StringBuilder(); 557 message.append("Input inV: "); 558 message.append(String.format("0x%x", args.inV)); 559 message.append("\n"); 560 message.append("Expected output out: "); 561 message.append(args.out.toString()); 562 message.append("\n"); 563 message.append("Actual output out: "); 564 message.append(String.format("%14.8g {%8x} %15a", 565 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 566 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 567 message.append(" FAIL"); 568 } 569 message.append("\n"); 570 assertTrue("Incorrect output for checkConvertUchar4Float4" + 571 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 572 } 573 } 574 } 575 } 576 577 public class ArgumentsShortFloat { 578 public short inV; 579 public Target.Floaty out; 580 } 581 582 private void checkConvertShort2Float2() { 583 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x94ca184eff219172l, true, 15); 584 try { 585 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 586 script.forEach_testConvertFloat2Short2Float2(inV, out); 587 verifyResultsConvertShort2Float2(inV, out, false); 588 } catch (Exception e) { 589 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Short2Float2: " + e.toString()); 590 } 591 try { 592 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 593 scriptRelaxed.forEach_testConvertFloat2Short2Float2(inV, out); 594 verifyResultsConvertShort2Float2(inV, out, true); 595 } catch (Exception e) { 596 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Short2Float2: " + e.toString()); 597 } 598 } 599 600 private void verifyResultsConvertShort2Float2(Allocation inV, Allocation out, boolean relaxed) { 601 short[] arrayInV = new short[INPUTSIZE * 2]; 602 inV.copyTo(arrayInV); 603 float[] arrayOut = new float[INPUTSIZE * 2]; 604 out.copyTo(arrayOut); 605 for (int i = 0; i < INPUTSIZE; i++) { 606 for (int j = 0; j < 2 ; j++) { 607 // Extract the inputs. 608 ArgumentsShortFloat args = new ArgumentsShortFloat(); 609 args.inV = arrayInV[i * 2 + j]; 610 // Figure out what the outputs should have been. 611 Target target = new Target(relaxed); 612 CoreMathVerifier.computeConvert(args, target); 613 // Validate the outputs. 614 boolean valid = true; 615 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 616 valid = false; 617 } 618 if (!valid) { 619 StringBuilder message = new StringBuilder(); 620 message.append("Input inV: "); 621 message.append(String.format("%d", args.inV)); 622 message.append("\n"); 623 message.append("Expected output out: "); 624 message.append(args.out.toString()); 625 message.append("\n"); 626 message.append("Actual output out: "); 627 message.append(String.format("%14.8g {%8x} %15a", 628 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 629 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 630 message.append(" FAIL"); 631 } 632 message.append("\n"); 633 assertTrue("Incorrect output for checkConvertShort2Float2" + 634 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 635 } 636 } 637 } 638 } 639 640 private void checkConvertShort3Float3() { 641 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x94cbe169f53cb250l, true, 15); 642 try { 643 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 644 script.forEach_testConvertFloat3Short3Float3(inV, out); 645 verifyResultsConvertShort3Float3(inV, out, false); 646 } catch (Exception e) { 647 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Short3Float3: " + e.toString()); 648 } 649 try { 650 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 651 scriptRelaxed.forEach_testConvertFloat3Short3Float3(inV, out); 652 verifyResultsConvertShort3Float3(inV, out, true); 653 } catch (Exception e) { 654 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Short3Float3: " + e.toString()); 655 } 656 } 657 658 private void verifyResultsConvertShort3Float3(Allocation inV, Allocation out, boolean relaxed) { 659 short[] arrayInV = new short[INPUTSIZE * 4]; 660 inV.copyTo(arrayInV); 661 float[] arrayOut = new float[INPUTSIZE * 4]; 662 out.copyTo(arrayOut); 663 for (int i = 0; i < INPUTSIZE; i++) { 664 for (int j = 0; j < 3 ; j++) { 665 // Extract the inputs. 666 ArgumentsShortFloat args = new ArgumentsShortFloat(); 667 args.inV = arrayInV[i * 4 + j]; 668 // Figure out what the outputs should have been. 669 Target target = new Target(relaxed); 670 CoreMathVerifier.computeConvert(args, target); 671 // Validate the outputs. 672 boolean valid = true; 673 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 674 valid = false; 675 } 676 if (!valid) { 677 StringBuilder message = new StringBuilder(); 678 message.append("Input inV: "); 679 message.append(String.format("%d", args.inV)); 680 message.append("\n"); 681 message.append("Expected output out: "); 682 message.append(args.out.toString()); 683 message.append("\n"); 684 message.append("Actual output out: "); 685 message.append(String.format("%14.8g {%8x} %15a", 686 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 687 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 688 message.append(" FAIL"); 689 } 690 message.append("\n"); 691 assertTrue("Incorrect output for checkConvertShort3Float3" + 692 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 693 } 694 } 695 } 696 } 697 698 private void checkConvertShort4Float4() { 699 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x94cdaa84eb57d32el, true, 15); 700 try { 701 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 702 script.forEach_testConvertFloat4Short4Float4(inV, out); 703 verifyResultsConvertShort4Float4(inV, out, false); 704 } catch (Exception e) { 705 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Short4Float4: " + e.toString()); 706 } 707 try { 708 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 709 scriptRelaxed.forEach_testConvertFloat4Short4Float4(inV, out); 710 verifyResultsConvertShort4Float4(inV, out, true); 711 } catch (Exception e) { 712 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Short4Float4: " + e.toString()); 713 } 714 } 715 716 private void verifyResultsConvertShort4Float4(Allocation inV, Allocation out, boolean relaxed) { 717 short[] arrayInV = new short[INPUTSIZE * 4]; 718 inV.copyTo(arrayInV); 719 float[] arrayOut = new float[INPUTSIZE * 4]; 720 out.copyTo(arrayOut); 721 for (int i = 0; i < INPUTSIZE; i++) { 722 for (int j = 0; j < 4 ; j++) { 723 // Extract the inputs. 724 ArgumentsShortFloat args = new ArgumentsShortFloat(); 725 args.inV = arrayInV[i * 4 + j]; 726 // Figure out what the outputs should have been. 727 Target target = new Target(relaxed); 728 CoreMathVerifier.computeConvert(args, target); 729 // Validate the outputs. 730 boolean valid = true; 731 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 732 valid = false; 733 } 734 if (!valid) { 735 StringBuilder message = new StringBuilder(); 736 message.append("Input inV: "); 737 message.append(String.format("%d", args.inV)); 738 message.append("\n"); 739 message.append("Expected output out: "); 740 message.append(args.out.toString()); 741 message.append("\n"); 742 message.append("Actual output out: "); 743 message.append(String.format("%14.8g {%8x} %15a", 744 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 745 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 746 message.append(" FAIL"); 747 } 748 message.append("\n"); 749 assertTrue("Incorrect output for checkConvertShort4Float4" + 750 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 751 } 752 } 753 } 754 } 755 756 public class ArgumentsUshortFloat { 757 public short inV; 758 public Target.Floaty out; 759 } 760 761 private void checkConvertUshort2Float2() { 762 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0xc36979962c6de12bl, false, 16); 763 try { 764 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 765 script.forEach_testConvertFloat2Ushort2Float2(inV, out); 766 verifyResultsConvertUshort2Float2(inV, out, false); 767 } catch (Exception e) { 768 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Ushort2Float2: " + e.toString()); 769 } 770 try { 771 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 772 scriptRelaxed.forEach_testConvertFloat2Ushort2Float2(inV, out); 773 verifyResultsConvertUshort2Float2(inV, out, true); 774 } catch (Exception e) { 775 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Ushort2Float2: " + e.toString()); 776 } 777 } 778 779 private void verifyResultsConvertUshort2Float2(Allocation inV, Allocation out, boolean relaxed) { 780 short[] arrayInV = new short[INPUTSIZE * 2]; 781 inV.copyTo(arrayInV); 782 float[] arrayOut = new float[INPUTSIZE * 2]; 783 out.copyTo(arrayOut); 784 for (int i = 0; i < INPUTSIZE; i++) { 785 for (int j = 0; j < 2 ; j++) { 786 // Extract the inputs. 787 ArgumentsUshortFloat args = new ArgumentsUshortFloat(); 788 args.inV = arrayInV[i * 2 + j]; 789 // Figure out what the outputs should have been. 790 Target target = new Target(relaxed); 791 CoreMathVerifier.computeConvert(args, target); 792 // Validate the outputs. 793 boolean valid = true; 794 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 795 valid = false; 796 } 797 if (!valid) { 798 StringBuilder message = new StringBuilder(); 799 message.append("Input inV: "); 800 message.append(String.format("0x%x", args.inV)); 801 message.append("\n"); 802 message.append("Expected output out: "); 803 message.append(args.out.toString()); 804 message.append("\n"); 805 message.append("Actual output out: "); 806 message.append(String.format("%14.8g {%8x} %15a", 807 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 808 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 809 message.append(" FAIL"); 810 } 811 message.append("\n"); 812 assertTrue("Incorrect output for checkConvertUshort2Float2" + 813 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 814 } 815 } 816 } 817 } 818 819 private void checkConvertUshort3Float3() { 820 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0xc36b42b122890209l, false, 16); 821 try { 822 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 823 script.forEach_testConvertFloat3Ushort3Float3(inV, out); 824 verifyResultsConvertUshort3Float3(inV, out, false); 825 } catch (Exception e) { 826 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Ushort3Float3: " + e.toString()); 827 } 828 try { 829 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 830 scriptRelaxed.forEach_testConvertFloat3Ushort3Float3(inV, out); 831 verifyResultsConvertUshort3Float3(inV, out, true); 832 } catch (Exception e) { 833 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Ushort3Float3: " + e.toString()); 834 } 835 } 836 837 private void verifyResultsConvertUshort3Float3(Allocation inV, Allocation out, boolean relaxed) { 838 short[] arrayInV = new short[INPUTSIZE * 4]; 839 inV.copyTo(arrayInV); 840 float[] arrayOut = new float[INPUTSIZE * 4]; 841 out.copyTo(arrayOut); 842 for (int i = 0; i < INPUTSIZE; i++) { 843 for (int j = 0; j < 3 ; j++) { 844 // Extract the inputs. 845 ArgumentsUshortFloat args = new ArgumentsUshortFloat(); 846 args.inV = arrayInV[i * 4 + j]; 847 // Figure out what the outputs should have been. 848 Target target = new Target(relaxed); 849 CoreMathVerifier.computeConvert(args, target); 850 // Validate the outputs. 851 boolean valid = true; 852 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 853 valid = false; 854 } 855 if (!valid) { 856 StringBuilder message = new StringBuilder(); 857 message.append("Input inV: "); 858 message.append(String.format("0x%x", args.inV)); 859 message.append("\n"); 860 message.append("Expected output out: "); 861 message.append(args.out.toString()); 862 message.append("\n"); 863 message.append("Actual output out: "); 864 message.append(String.format("%14.8g {%8x} %15a", 865 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 866 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 867 message.append(" FAIL"); 868 } 869 message.append("\n"); 870 assertTrue("Incorrect output for checkConvertUshort3Float3" + 871 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 872 } 873 } 874 } 875 } 876 877 private void checkConvertUshort4Float4() { 878 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0xc36d0bcc18a422e7l, false, 16); 879 try { 880 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 881 script.forEach_testConvertFloat4Ushort4Float4(inV, out); 882 verifyResultsConvertUshort4Float4(inV, out, false); 883 } catch (Exception e) { 884 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Ushort4Float4: " + e.toString()); 885 } 886 try { 887 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 888 scriptRelaxed.forEach_testConvertFloat4Ushort4Float4(inV, out); 889 verifyResultsConvertUshort4Float4(inV, out, true); 890 } catch (Exception e) { 891 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Ushort4Float4: " + e.toString()); 892 } 893 } 894 895 private void verifyResultsConvertUshort4Float4(Allocation inV, Allocation out, boolean relaxed) { 896 short[] arrayInV = new short[INPUTSIZE * 4]; 897 inV.copyTo(arrayInV); 898 float[] arrayOut = new float[INPUTSIZE * 4]; 899 out.copyTo(arrayOut); 900 for (int i = 0; i < INPUTSIZE; i++) { 901 for (int j = 0; j < 4 ; j++) { 902 // Extract the inputs. 903 ArgumentsUshortFloat args = new ArgumentsUshortFloat(); 904 args.inV = arrayInV[i * 4 + j]; 905 // Figure out what the outputs should have been. 906 Target target = new Target(relaxed); 907 CoreMathVerifier.computeConvert(args, target); 908 // Validate the outputs. 909 boolean valid = true; 910 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 911 valid = false; 912 } 913 if (!valid) { 914 StringBuilder message = new StringBuilder(); 915 message.append("Input inV: "); 916 message.append(String.format("0x%x", args.inV)); 917 message.append("\n"); 918 message.append("Expected output out: "); 919 message.append(args.out.toString()); 920 message.append("\n"); 921 message.append("Actual output out: "); 922 message.append(String.format("%14.8g {%8x} %15a", 923 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 924 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 925 message.append(" FAIL"); 926 } 927 message.append("\n"); 928 assertTrue("Incorrect output for checkConvertUshort4Float4" + 929 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 930 } 931 } 932 } 933 } 934 935 public class ArgumentsIntFloat { 936 public int inV; 937 public Target.Floaty out; 938 } 939 940 private void checkConvertInt2Float2() { 941 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0x2a52c7eb7402bfc5l, true, 31); 942 try { 943 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 944 script.forEach_testConvertFloat2Int2Float2(inV, out); 945 verifyResultsConvertInt2Float2(inV, out, false); 946 } catch (Exception e) { 947 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Int2Float2: " + e.toString()); 948 } 949 try { 950 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 951 scriptRelaxed.forEach_testConvertFloat2Int2Float2(inV, out); 952 verifyResultsConvertInt2Float2(inV, out, true); 953 } catch (Exception e) { 954 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Int2Float2: " + e.toString()); 955 } 956 } 957 958 private void verifyResultsConvertInt2Float2(Allocation inV, Allocation out, boolean relaxed) { 959 int[] arrayInV = new int[INPUTSIZE * 2]; 960 inV.copyTo(arrayInV); 961 float[] arrayOut = new float[INPUTSIZE * 2]; 962 out.copyTo(arrayOut); 963 for (int i = 0; i < INPUTSIZE; i++) { 964 for (int j = 0; j < 2 ; j++) { 965 // Extract the inputs. 966 ArgumentsIntFloat args = new ArgumentsIntFloat(); 967 args.inV = arrayInV[i * 2 + j]; 968 // Figure out what the outputs should have been. 969 Target target = new Target(relaxed); 970 CoreMathVerifier.computeConvert(args, target); 971 // Validate the outputs. 972 boolean valid = true; 973 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 974 valid = false; 975 } 976 if (!valid) { 977 StringBuilder message = new StringBuilder(); 978 message.append("Input inV: "); 979 message.append(String.format("%d", args.inV)); 980 message.append("\n"); 981 message.append("Expected output out: "); 982 message.append(args.out.toString()); 983 message.append("\n"); 984 message.append("Actual output out: "); 985 message.append(String.format("%14.8g {%8x} %15a", 986 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 987 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 988 message.append(" FAIL"); 989 } 990 message.append("\n"); 991 assertTrue("Incorrect output for checkConvertInt2Float2" + 992 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 993 } 994 } 995 } 996 } 997 998 private void checkConvertInt3Float3() { 999 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0x2a5491066a1de0a3l, true, 31); 1000 try { 1001 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 1002 script.forEach_testConvertFloat3Int3Float3(inV, out); 1003 verifyResultsConvertInt3Float3(inV, out, false); 1004 } catch (Exception e) { 1005 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Int3Float3: " + e.toString()); 1006 } 1007 try { 1008 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 1009 scriptRelaxed.forEach_testConvertFloat3Int3Float3(inV, out); 1010 verifyResultsConvertInt3Float3(inV, out, true); 1011 } catch (Exception e) { 1012 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Int3Float3: " + e.toString()); 1013 } 1014 } 1015 1016 private void verifyResultsConvertInt3Float3(Allocation inV, Allocation out, boolean relaxed) { 1017 int[] arrayInV = new int[INPUTSIZE * 4]; 1018 inV.copyTo(arrayInV); 1019 float[] arrayOut = new float[INPUTSIZE * 4]; 1020 out.copyTo(arrayOut); 1021 for (int i = 0; i < INPUTSIZE; i++) { 1022 for (int j = 0; j < 3 ; j++) { 1023 // Extract the inputs. 1024 ArgumentsIntFloat args = new ArgumentsIntFloat(); 1025 args.inV = arrayInV[i * 4 + j]; 1026 // Figure out what the outputs should have been. 1027 Target target = new Target(relaxed); 1028 CoreMathVerifier.computeConvert(args, target); 1029 // Validate the outputs. 1030 boolean valid = true; 1031 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1032 valid = false; 1033 } 1034 if (!valid) { 1035 StringBuilder message = new StringBuilder(); 1036 message.append("Input inV: "); 1037 message.append(String.format("%d", args.inV)); 1038 message.append("\n"); 1039 message.append("Expected output out: "); 1040 message.append(args.out.toString()); 1041 message.append("\n"); 1042 message.append("Actual output out: "); 1043 message.append(String.format("%14.8g {%8x} %15a", 1044 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 1045 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1046 message.append(" FAIL"); 1047 } 1048 message.append("\n"); 1049 assertTrue("Incorrect output for checkConvertInt3Float3" + 1050 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1051 } 1052 } 1053 } 1054 } 1055 1056 private void checkConvertInt4Float4() { 1057 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0x2a565a2160390181l, true, 31); 1058 try { 1059 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 1060 script.forEach_testConvertFloat4Int4Float4(inV, out); 1061 verifyResultsConvertInt4Float4(inV, out, false); 1062 } catch (Exception e) { 1063 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Int4Float4: " + e.toString()); 1064 } 1065 try { 1066 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 1067 scriptRelaxed.forEach_testConvertFloat4Int4Float4(inV, out); 1068 verifyResultsConvertInt4Float4(inV, out, true); 1069 } catch (Exception e) { 1070 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Int4Float4: " + e.toString()); 1071 } 1072 } 1073 1074 private void verifyResultsConvertInt4Float4(Allocation inV, Allocation out, boolean relaxed) { 1075 int[] arrayInV = new int[INPUTSIZE * 4]; 1076 inV.copyTo(arrayInV); 1077 float[] arrayOut = new float[INPUTSIZE * 4]; 1078 out.copyTo(arrayOut); 1079 for (int i = 0; i < INPUTSIZE; i++) { 1080 for (int j = 0; j < 4 ; j++) { 1081 // Extract the inputs. 1082 ArgumentsIntFloat args = new ArgumentsIntFloat(); 1083 args.inV = arrayInV[i * 4 + j]; 1084 // Figure out what the outputs should have been. 1085 Target target = new Target(relaxed); 1086 CoreMathVerifier.computeConvert(args, target); 1087 // Validate the outputs. 1088 boolean valid = true; 1089 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1090 valid = false; 1091 } 1092 if (!valid) { 1093 StringBuilder message = new StringBuilder(); 1094 message.append("Input inV: "); 1095 message.append(String.format("%d", args.inV)); 1096 message.append("\n"); 1097 message.append("Expected output out: "); 1098 message.append(args.out.toString()); 1099 message.append("\n"); 1100 message.append("Actual output out: "); 1101 message.append(String.format("%14.8g {%8x} %15a", 1102 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 1103 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1104 message.append(" FAIL"); 1105 } 1106 message.append("\n"); 1107 assertTrue("Incorrect output for checkConvertInt4Float4" + 1108 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1109 } 1110 } 1111 } 1112 } 1113 1114 public class ArgumentsUintFloat { 1115 public int inV; 1116 public Target.Floaty out; 1117 } 1118 1119 private void checkConvertUint2Float2() { 1120 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xd1e081390684cc46l, false, 32); 1121 try { 1122 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 1123 script.forEach_testConvertFloat2Uint2Float2(inV, out); 1124 verifyResultsConvertUint2Float2(inV, out, false); 1125 } catch (Exception e) { 1126 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Uint2Float2: " + e.toString()); 1127 } 1128 try { 1129 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 2), INPUTSIZE); 1130 scriptRelaxed.forEach_testConvertFloat2Uint2Float2(inV, out); 1131 verifyResultsConvertUint2Float2(inV, out, true); 1132 } catch (Exception e) { 1133 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat2Uint2Float2: " + e.toString()); 1134 } 1135 } 1136 1137 private void verifyResultsConvertUint2Float2(Allocation inV, Allocation out, boolean relaxed) { 1138 int[] arrayInV = new int[INPUTSIZE * 2]; 1139 inV.copyTo(arrayInV); 1140 float[] arrayOut = new float[INPUTSIZE * 2]; 1141 out.copyTo(arrayOut); 1142 for (int i = 0; i < INPUTSIZE; i++) { 1143 for (int j = 0; j < 2 ; j++) { 1144 // Extract the inputs. 1145 ArgumentsUintFloat args = new ArgumentsUintFloat(); 1146 args.inV = arrayInV[i * 2 + j]; 1147 // Figure out what the outputs should have been. 1148 Target target = new Target(relaxed); 1149 CoreMathVerifier.computeConvert(args, target); 1150 // Validate the outputs. 1151 boolean valid = true; 1152 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 1153 valid = false; 1154 } 1155 if (!valid) { 1156 StringBuilder message = new StringBuilder(); 1157 message.append("Input inV: "); 1158 message.append(String.format("0x%x", args.inV)); 1159 message.append("\n"); 1160 message.append("Expected output out: "); 1161 message.append(args.out.toString()); 1162 message.append("\n"); 1163 message.append("Actual output out: "); 1164 message.append(String.format("%14.8g {%8x} %15a", 1165 arrayOut[i * 2 + j], Float.floatToRawIntBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 1166 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 1167 message.append(" FAIL"); 1168 } 1169 message.append("\n"); 1170 assertTrue("Incorrect output for checkConvertUint2Float2" + 1171 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1172 } 1173 } 1174 } 1175 } 1176 1177 private void checkConvertUint3Float3() { 1178 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0xd1e24a53fc9fed24l, false, 32); 1179 try { 1180 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 1181 script.forEach_testConvertFloat3Uint3Float3(inV, out); 1182 verifyResultsConvertUint3Float3(inV, out, false); 1183 } catch (Exception e) { 1184 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Uint3Float3: " + e.toString()); 1185 } 1186 try { 1187 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 3), INPUTSIZE); 1188 scriptRelaxed.forEach_testConvertFloat3Uint3Float3(inV, out); 1189 verifyResultsConvertUint3Float3(inV, out, true); 1190 } catch (Exception e) { 1191 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat3Uint3Float3: " + e.toString()); 1192 } 1193 } 1194 1195 private void verifyResultsConvertUint3Float3(Allocation inV, Allocation out, boolean relaxed) { 1196 int[] arrayInV = new int[INPUTSIZE * 4]; 1197 inV.copyTo(arrayInV); 1198 float[] arrayOut = new float[INPUTSIZE * 4]; 1199 out.copyTo(arrayOut); 1200 for (int i = 0; i < INPUTSIZE; i++) { 1201 for (int j = 0; j < 3 ; j++) { 1202 // Extract the inputs. 1203 ArgumentsUintFloat args = new ArgumentsUintFloat(); 1204 args.inV = arrayInV[i * 4 + j]; 1205 // Figure out what the outputs should have been. 1206 Target target = new Target(relaxed); 1207 CoreMathVerifier.computeConvert(args, target); 1208 // Validate the outputs. 1209 boolean valid = true; 1210 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1211 valid = false; 1212 } 1213 if (!valid) { 1214 StringBuilder message = new StringBuilder(); 1215 message.append("Input inV: "); 1216 message.append(String.format("0x%x", args.inV)); 1217 message.append("\n"); 1218 message.append("Expected output out: "); 1219 message.append(args.out.toString()); 1220 message.append("\n"); 1221 message.append("Actual output out: "); 1222 message.append(String.format("%14.8g {%8x} %15a", 1223 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 1224 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1225 message.append(" FAIL"); 1226 } 1227 message.append("\n"); 1228 assertTrue("Incorrect output for checkConvertUint3Float3" + 1229 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1230 } 1231 } 1232 } 1233 } 1234 1235 private void checkConvertUint4Float4() { 1236 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0xd1e4136ef2bb0e02l, false, 32); 1237 try { 1238 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 1239 script.forEach_testConvertFloat4Uint4Float4(inV, out); 1240 verifyResultsConvertUint4Float4(inV, out, false); 1241 } catch (Exception e) { 1242 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Uint4Float4: " + e.toString()); 1243 } 1244 try { 1245 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 4), INPUTSIZE); 1246 scriptRelaxed.forEach_testConvertFloat4Uint4Float4(inV, out); 1247 verifyResultsConvertUint4Float4(inV, out, true); 1248 } catch (Exception e) { 1249 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertFloat4Uint4Float4: " + e.toString()); 1250 } 1251 } 1252 1253 private void verifyResultsConvertUint4Float4(Allocation inV, Allocation out, boolean relaxed) { 1254 int[] arrayInV = new int[INPUTSIZE * 4]; 1255 inV.copyTo(arrayInV); 1256 float[] arrayOut = new float[INPUTSIZE * 4]; 1257 out.copyTo(arrayOut); 1258 for (int i = 0; i < INPUTSIZE; i++) { 1259 for (int j = 0; j < 4 ; j++) { 1260 // Extract the inputs. 1261 ArgumentsUintFloat args = new ArgumentsUintFloat(); 1262 args.inV = arrayInV[i * 4 + j]; 1263 // Figure out what the outputs should have been. 1264 Target target = new Target(relaxed); 1265 CoreMathVerifier.computeConvert(args, target); 1266 // Validate the outputs. 1267 boolean valid = true; 1268 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1269 valid = false; 1270 } 1271 if (!valid) { 1272 StringBuilder message = new StringBuilder(); 1273 message.append("Input inV: "); 1274 message.append(String.format("0x%x", args.inV)); 1275 message.append("\n"); 1276 message.append("Expected output out: "); 1277 message.append(args.out.toString()); 1278 message.append("\n"); 1279 message.append("Actual output out: "); 1280 message.append(String.format("%14.8g {%8x} %15a", 1281 arrayOut[i * 4 + j], Float.floatToRawIntBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 1282 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 1283 message.append(" FAIL"); 1284 } 1285 message.append("\n"); 1286 assertTrue("Incorrect output for checkConvertUint4Float4" + 1287 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1288 } 1289 } 1290 } 1291 } 1292 1293 public class ArgumentsFloatChar { 1294 public float inV; 1295 public byte out; 1296 } 1297 1298 private void checkConvertFloat2Char2() { 1299 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0x239cb25829789662l, -1.2800000000000000000e+02, 1.2700000000000000000e+02); 1300 try { 1301 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1302 script.forEach_testConvertChar2Float2Char2(inV, out); 1303 verifyResultsConvertFloat2Char2(inV, out, false); 1304 } catch (Exception e) { 1305 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Float2Char2: " + e.toString()); 1306 } 1307 try { 1308 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1309 scriptRelaxed.forEach_testConvertChar2Float2Char2(inV, out); 1310 verifyResultsConvertFloat2Char2(inV, out, true); 1311 } catch (Exception e) { 1312 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Float2Char2: " + e.toString()); 1313 } 1314 } 1315 1316 private void verifyResultsConvertFloat2Char2(Allocation inV, Allocation out, boolean relaxed) { 1317 float[] arrayInV = new float[INPUTSIZE * 2]; 1318 inV.copyTo(arrayInV); 1319 byte[] arrayOut = new byte[INPUTSIZE * 2]; 1320 out.copyTo(arrayOut); 1321 for (int i = 0; i < INPUTSIZE; i++) { 1322 for (int j = 0; j < 2 ; j++) { 1323 // Extract the inputs. 1324 ArgumentsFloatChar args = new ArgumentsFloatChar(); 1325 args.inV = arrayInV[i * 2 + j]; 1326 // Figure out what the outputs should have been. 1327 CoreMathVerifier.computeConvert(args); 1328 // Validate the outputs. 1329 boolean valid = true; 1330 if (args.out != arrayOut[i * 2 + j]) { 1331 valid = false; 1332 } 1333 if (!valid) { 1334 StringBuilder message = new StringBuilder(); 1335 message.append("Input inV: "); 1336 message.append(String.format("%14.8g {%8x} %15a", 1337 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 1338 message.append("\n"); 1339 message.append("Expected output out: "); 1340 message.append(String.format("%d", args.out)); 1341 message.append("\n"); 1342 message.append("Actual output out: "); 1343 message.append(String.format("%d", arrayOut[i * 2 + j])); 1344 if (args.out != arrayOut[i * 2 + j]) { 1345 message.append(" FAIL"); 1346 } 1347 message.append("\n"); 1348 assertTrue("Incorrect output for checkConvertFloat2Char2" + 1349 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1350 } 1351 } 1352 } 1353 } 1354 1355 private void checkConvertFloat3Char3() { 1356 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x239cbcf988805b56l, -1.2800000000000000000e+02, 1.2700000000000000000e+02); 1357 try { 1358 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1359 script.forEach_testConvertChar3Float3Char3(inV, out); 1360 verifyResultsConvertFloat3Char3(inV, out, false); 1361 } catch (Exception e) { 1362 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Float3Char3: " + e.toString()); 1363 } 1364 try { 1365 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1366 scriptRelaxed.forEach_testConvertChar3Float3Char3(inV, out); 1367 verifyResultsConvertFloat3Char3(inV, out, true); 1368 } catch (Exception e) { 1369 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Float3Char3: " + e.toString()); 1370 } 1371 } 1372 1373 private void verifyResultsConvertFloat3Char3(Allocation inV, Allocation out, boolean relaxed) { 1374 float[] arrayInV = new float[INPUTSIZE * 4]; 1375 inV.copyTo(arrayInV); 1376 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1377 out.copyTo(arrayOut); 1378 for (int i = 0; i < INPUTSIZE; i++) { 1379 for (int j = 0; j < 3 ; j++) { 1380 // Extract the inputs. 1381 ArgumentsFloatChar args = new ArgumentsFloatChar(); 1382 args.inV = arrayInV[i * 4 + j]; 1383 // Figure out what the outputs should have been. 1384 CoreMathVerifier.computeConvert(args); 1385 // Validate the outputs. 1386 boolean valid = true; 1387 if (args.out != arrayOut[i * 4 + j]) { 1388 valid = false; 1389 } 1390 if (!valid) { 1391 StringBuilder message = new StringBuilder(); 1392 message.append("Input inV: "); 1393 message.append(String.format("%14.8g {%8x} %15a", 1394 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 1395 message.append("\n"); 1396 message.append("Expected output out: "); 1397 message.append(String.format("%d", args.out)); 1398 message.append("\n"); 1399 message.append("Actual output out: "); 1400 message.append(String.format("%d", arrayOut[i * 4 + j])); 1401 if (args.out != arrayOut[i * 4 + j]) { 1402 message.append(" FAIL"); 1403 } 1404 message.append("\n"); 1405 assertTrue("Incorrect output for checkConvertFloat3Char3" + 1406 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1407 } 1408 } 1409 } 1410 } 1411 1412 private void checkConvertFloat4Char4() { 1413 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x239cc79ae788204al, -1.2800000000000000000e+02, 1.2700000000000000000e+02); 1414 try { 1415 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1416 script.forEach_testConvertChar4Float4Char4(inV, out); 1417 verifyResultsConvertFloat4Char4(inV, out, false); 1418 } catch (Exception e) { 1419 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Float4Char4: " + e.toString()); 1420 } 1421 try { 1422 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1423 scriptRelaxed.forEach_testConvertChar4Float4Char4(inV, out); 1424 verifyResultsConvertFloat4Char4(inV, out, true); 1425 } catch (Exception e) { 1426 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Float4Char4: " + e.toString()); 1427 } 1428 } 1429 1430 private void verifyResultsConvertFloat4Char4(Allocation inV, Allocation out, boolean relaxed) { 1431 float[] arrayInV = new float[INPUTSIZE * 4]; 1432 inV.copyTo(arrayInV); 1433 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1434 out.copyTo(arrayOut); 1435 for (int i = 0; i < INPUTSIZE; i++) { 1436 for (int j = 0; j < 4 ; j++) { 1437 // Extract the inputs. 1438 ArgumentsFloatChar args = new ArgumentsFloatChar(); 1439 args.inV = arrayInV[i * 4 + j]; 1440 // Figure out what the outputs should have been. 1441 CoreMathVerifier.computeConvert(args); 1442 // Validate the outputs. 1443 boolean valid = true; 1444 if (args.out != arrayOut[i * 4 + j]) { 1445 valid = false; 1446 } 1447 if (!valid) { 1448 StringBuilder message = new StringBuilder(); 1449 message.append("Input inV: "); 1450 message.append(String.format("%14.8g {%8x} %15a", 1451 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 1452 message.append("\n"); 1453 message.append("Expected output out: "); 1454 message.append(String.format("%d", args.out)); 1455 message.append("\n"); 1456 message.append("Actual output out: "); 1457 message.append(String.format("%d", arrayOut[i * 4 + j])); 1458 if (args.out != arrayOut[i * 4 + j]) { 1459 message.append(" FAIL"); 1460 } 1461 message.append("\n"); 1462 assertTrue("Incorrect output for checkConvertFloat4Char4" + 1463 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1464 } 1465 } 1466 } 1467 } 1468 1469 public class ArgumentsCharChar { 1470 public byte inV; 1471 public byte out; 1472 } 1473 1474 private void checkConvertChar2Char2() { 1475 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0xd8618777d5086da2l, true, 7); 1476 try { 1477 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1478 script.forEach_testConvertChar2Char2Char2(inV, out); 1479 verifyResultsConvertChar2Char2(inV, out, false); 1480 } catch (Exception e) { 1481 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Char2Char2: " + e.toString()); 1482 } 1483 try { 1484 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1485 scriptRelaxed.forEach_testConvertChar2Char2Char2(inV, out); 1486 verifyResultsConvertChar2Char2(inV, out, true); 1487 } catch (Exception e) { 1488 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Char2Char2: " + e.toString()); 1489 } 1490 } 1491 1492 private void verifyResultsConvertChar2Char2(Allocation inV, Allocation out, boolean relaxed) { 1493 byte[] arrayInV = new byte[INPUTSIZE * 2]; 1494 inV.copyTo(arrayInV); 1495 byte[] arrayOut = new byte[INPUTSIZE * 2]; 1496 out.copyTo(arrayOut); 1497 for (int i = 0; i < INPUTSIZE; i++) { 1498 for (int j = 0; j < 2 ; j++) { 1499 // Extract the inputs. 1500 ArgumentsCharChar args = new ArgumentsCharChar(); 1501 args.inV = arrayInV[i * 2 + j]; 1502 // Figure out what the outputs should have been. 1503 CoreMathVerifier.computeConvert(args); 1504 // Validate the outputs. 1505 boolean valid = true; 1506 if (args.out != arrayOut[i * 2 + j]) { 1507 valid = false; 1508 } 1509 if (!valid) { 1510 StringBuilder message = new StringBuilder(); 1511 message.append("Input inV: "); 1512 message.append(String.format("%d", args.inV)); 1513 message.append("\n"); 1514 message.append("Expected output out: "); 1515 message.append(String.format("%d", args.out)); 1516 message.append("\n"); 1517 message.append("Actual output out: "); 1518 message.append(String.format("%d", arrayOut[i * 2 + j])); 1519 if (args.out != arrayOut[i * 2 + j]) { 1520 message.append(" FAIL"); 1521 } 1522 message.append("\n"); 1523 assertTrue("Incorrect output for checkConvertChar2Char2" + 1524 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1525 } 1526 } 1527 } 1528 } 1529 1530 private void checkConvertChar3Char3() { 1531 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0xd861921934103296l, true, 7); 1532 try { 1533 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1534 script.forEach_testConvertChar3Char3Char3(inV, out); 1535 verifyResultsConvertChar3Char3(inV, out, false); 1536 } catch (Exception e) { 1537 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Char3Char3: " + e.toString()); 1538 } 1539 try { 1540 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1541 scriptRelaxed.forEach_testConvertChar3Char3Char3(inV, out); 1542 verifyResultsConvertChar3Char3(inV, out, true); 1543 } catch (Exception e) { 1544 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Char3Char3: " + e.toString()); 1545 } 1546 } 1547 1548 private void verifyResultsConvertChar3Char3(Allocation inV, Allocation out, boolean relaxed) { 1549 byte[] arrayInV = new byte[INPUTSIZE * 4]; 1550 inV.copyTo(arrayInV); 1551 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1552 out.copyTo(arrayOut); 1553 for (int i = 0; i < INPUTSIZE; i++) { 1554 for (int j = 0; j < 3 ; j++) { 1555 // Extract the inputs. 1556 ArgumentsCharChar args = new ArgumentsCharChar(); 1557 args.inV = arrayInV[i * 4 + j]; 1558 // Figure out what the outputs should have been. 1559 CoreMathVerifier.computeConvert(args); 1560 // Validate the outputs. 1561 boolean valid = true; 1562 if (args.out != arrayOut[i * 4 + j]) { 1563 valid = false; 1564 } 1565 if (!valid) { 1566 StringBuilder message = new StringBuilder(); 1567 message.append("Input inV: "); 1568 message.append(String.format("%d", args.inV)); 1569 message.append("\n"); 1570 message.append("Expected output out: "); 1571 message.append(String.format("%d", args.out)); 1572 message.append("\n"); 1573 message.append("Actual output out: "); 1574 message.append(String.format("%d", arrayOut[i * 4 + j])); 1575 if (args.out != arrayOut[i * 4 + j]) { 1576 message.append(" FAIL"); 1577 } 1578 message.append("\n"); 1579 assertTrue("Incorrect output for checkConvertChar3Char3" + 1580 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1581 } 1582 } 1583 } 1584 } 1585 1586 private void checkConvertChar4Char4() { 1587 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0xd8619cba9317f78al, true, 7); 1588 try { 1589 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1590 script.forEach_testConvertChar4Char4Char4(inV, out); 1591 verifyResultsConvertChar4Char4(inV, out, false); 1592 } catch (Exception e) { 1593 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Char4Char4: " + e.toString()); 1594 } 1595 try { 1596 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1597 scriptRelaxed.forEach_testConvertChar4Char4Char4(inV, out); 1598 verifyResultsConvertChar4Char4(inV, out, true); 1599 } catch (Exception e) { 1600 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Char4Char4: " + e.toString()); 1601 } 1602 } 1603 1604 private void verifyResultsConvertChar4Char4(Allocation inV, Allocation out, boolean relaxed) { 1605 byte[] arrayInV = new byte[INPUTSIZE * 4]; 1606 inV.copyTo(arrayInV); 1607 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1608 out.copyTo(arrayOut); 1609 for (int i = 0; i < INPUTSIZE; i++) { 1610 for (int j = 0; j < 4 ; j++) { 1611 // Extract the inputs. 1612 ArgumentsCharChar args = new ArgumentsCharChar(); 1613 args.inV = arrayInV[i * 4 + j]; 1614 // Figure out what the outputs should have been. 1615 CoreMathVerifier.computeConvert(args); 1616 // Validate the outputs. 1617 boolean valid = true; 1618 if (args.out != arrayOut[i * 4 + j]) { 1619 valid = false; 1620 } 1621 if (!valid) { 1622 StringBuilder message = new StringBuilder(); 1623 message.append("Input inV: "); 1624 message.append(String.format("%d", args.inV)); 1625 message.append("\n"); 1626 message.append("Expected output out: "); 1627 message.append(String.format("%d", args.out)); 1628 message.append("\n"); 1629 message.append("Actual output out: "); 1630 message.append(String.format("%d", arrayOut[i * 4 + j])); 1631 if (args.out != arrayOut[i * 4 + j]) { 1632 message.append(" FAIL"); 1633 } 1634 message.append("\n"); 1635 assertTrue("Incorrect output for checkConvertChar4Char4" + 1636 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1637 } 1638 } 1639 } 1640 } 1641 1642 public class ArgumentsUcharChar { 1643 public byte inV; 1644 public byte out; 1645 } 1646 1647 private void checkConvertUchar2Char2() { 1648 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x7fef40c5678a7a23l, false, 7); 1649 try { 1650 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1651 script.forEach_testConvertChar2Uchar2Char2(inV, out); 1652 verifyResultsConvertUchar2Char2(inV, out, false); 1653 } catch (Exception e) { 1654 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Uchar2Char2: " + e.toString()); 1655 } 1656 try { 1657 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1658 scriptRelaxed.forEach_testConvertChar2Uchar2Char2(inV, out); 1659 verifyResultsConvertUchar2Char2(inV, out, true); 1660 } catch (Exception e) { 1661 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Uchar2Char2: " + e.toString()); 1662 } 1663 } 1664 1665 private void verifyResultsConvertUchar2Char2(Allocation inV, Allocation out, boolean relaxed) { 1666 byte[] arrayInV = new byte[INPUTSIZE * 2]; 1667 inV.copyTo(arrayInV); 1668 byte[] arrayOut = new byte[INPUTSIZE * 2]; 1669 out.copyTo(arrayOut); 1670 for (int i = 0; i < INPUTSIZE; i++) { 1671 for (int j = 0; j < 2 ; j++) { 1672 // Extract the inputs. 1673 ArgumentsUcharChar args = new ArgumentsUcharChar(); 1674 args.inV = arrayInV[i * 2 + j]; 1675 // Figure out what the outputs should have been. 1676 CoreMathVerifier.computeConvert(args); 1677 // Validate the outputs. 1678 boolean valid = true; 1679 if (args.out != arrayOut[i * 2 + j]) { 1680 valid = false; 1681 } 1682 if (!valid) { 1683 StringBuilder message = new StringBuilder(); 1684 message.append("Input inV: "); 1685 message.append(String.format("0x%x", args.inV)); 1686 message.append("\n"); 1687 message.append("Expected output out: "); 1688 message.append(String.format("%d", args.out)); 1689 message.append("\n"); 1690 message.append("Actual output out: "); 1691 message.append(String.format("%d", arrayOut[i * 2 + j])); 1692 if (args.out != arrayOut[i * 2 + j]) { 1693 message.append(" FAIL"); 1694 } 1695 message.append("\n"); 1696 assertTrue("Incorrect output for checkConvertUchar2Char2" + 1697 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1698 } 1699 } 1700 } 1701 } 1702 1703 private void checkConvertUchar3Char3() { 1704 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x7fef4b66c6923f17l, false, 7); 1705 try { 1706 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1707 script.forEach_testConvertChar3Uchar3Char3(inV, out); 1708 verifyResultsConvertUchar3Char3(inV, out, false); 1709 } catch (Exception e) { 1710 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Uchar3Char3: " + e.toString()); 1711 } 1712 try { 1713 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1714 scriptRelaxed.forEach_testConvertChar3Uchar3Char3(inV, out); 1715 verifyResultsConvertUchar3Char3(inV, out, true); 1716 } catch (Exception e) { 1717 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Uchar3Char3: " + e.toString()); 1718 } 1719 } 1720 1721 private void verifyResultsConvertUchar3Char3(Allocation inV, Allocation out, boolean relaxed) { 1722 byte[] arrayInV = new byte[INPUTSIZE * 4]; 1723 inV.copyTo(arrayInV); 1724 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1725 out.copyTo(arrayOut); 1726 for (int i = 0; i < INPUTSIZE; i++) { 1727 for (int j = 0; j < 3 ; j++) { 1728 // Extract the inputs. 1729 ArgumentsUcharChar args = new ArgumentsUcharChar(); 1730 args.inV = arrayInV[i * 4 + j]; 1731 // Figure out what the outputs should have been. 1732 CoreMathVerifier.computeConvert(args); 1733 // Validate the outputs. 1734 boolean valid = true; 1735 if (args.out != arrayOut[i * 4 + j]) { 1736 valid = false; 1737 } 1738 if (!valid) { 1739 StringBuilder message = new StringBuilder(); 1740 message.append("Input inV: "); 1741 message.append(String.format("0x%x", args.inV)); 1742 message.append("\n"); 1743 message.append("Expected output out: "); 1744 message.append(String.format("%d", args.out)); 1745 message.append("\n"); 1746 message.append("Actual output out: "); 1747 message.append(String.format("%d", arrayOut[i * 4 + j])); 1748 if (args.out != arrayOut[i * 4 + j]) { 1749 message.append(" FAIL"); 1750 } 1751 message.append("\n"); 1752 assertTrue("Incorrect output for checkConvertUchar3Char3" + 1753 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1754 } 1755 } 1756 } 1757 } 1758 1759 private void checkConvertUchar4Char4() { 1760 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7fef5608259a040bl, false, 7); 1761 try { 1762 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1763 script.forEach_testConvertChar4Uchar4Char4(inV, out); 1764 verifyResultsConvertUchar4Char4(inV, out, false); 1765 } catch (Exception e) { 1766 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Uchar4Char4: " + e.toString()); 1767 } 1768 try { 1769 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1770 scriptRelaxed.forEach_testConvertChar4Uchar4Char4(inV, out); 1771 verifyResultsConvertUchar4Char4(inV, out, true); 1772 } catch (Exception e) { 1773 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Uchar4Char4: " + e.toString()); 1774 } 1775 } 1776 1777 private void verifyResultsConvertUchar4Char4(Allocation inV, Allocation out, boolean relaxed) { 1778 byte[] arrayInV = new byte[INPUTSIZE * 4]; 1779 inV.copyTo(arrayInV); 1780 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1781 out.copyTo(arrayOut); 1782 for (int i = 0; i < INPUTSIZE; i++) { 1783 for (int j = 0; j < 4 ; j++) { 1784 // Extract the inputs. 1785 ArgumentsUcharChar args = new ArgumentsUcharChar(); 1786 args.inV = arrayInV[i * 4 + j]; 1787 // Figure out what the outputs should have been. 1788 CoreMathVerifier.computeConvert(args); 1789 // Validate the outputs. 1790 boolean valid = true; 1791 if (args.out != arrayOut[i * 4 + j]) { 1792 valid = false; 1793 } 1794 if (!valid) { 1795 StringBuilder message = new StringBuilder(); 1796 message.append("Input inV: "); 1797 message.append(String.format("0x%x", args.inV)); 1798 message.append("\n"); 1799 message.append("Expected output out: "); 1800 message.append(String.format("%d", args.out)); 1801 message.append("\n"); 1802 message.append("Actual output out: "); 1803 message.append(String.format("%d", arrayOut[i * 4 + j])); 1804 if (args.out != arrayOut[i * 4 + j]) { 1805 message.append(" FAIL"); 1806 } 1807 message.append("\n"); 1808 assertTrue("Incorrect output for checkConvertUchar4Char4" + 1809 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1810 } 1811 } 1812 } 1813 } 1814 1815 public class ArgumentsShortChar { 1816 public short inV; 1817 public byte out; 1818 } 1819 1820 private void checkConvertShort2Char2() { 1821 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x68ab650215c60866l, true, 7); 1822 try { 1823 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1824 script.forEach_testConvertChar2Short2Char2(inV, out); 1825 verifyResultsConvertShort2Char2(inV, out, false); 1826 } catch (Exception e) { 1827 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Short2Char2: " + e.toString()); 1828 } 1829 try { 1830 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1831 scriptRelaxed.forEach_testConvertChar2Short2Char2(inV, out); 1832 verifyResultsConvertShort2Char2(inV, out, true); 1833 } catch (Exception e) { 1834 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Short2Char2: " + e.toString()); 1835 } 1836 } 1837 1838 private void verifyResultsConvertShort2Char2(Allocation inV, Allocation out, boolean relaxed) { 1839 short[] arrayInV = new short[INPUTSIZE * 2]; 1840 inV.copyTo(arrayInV); 1841 byte[] arrayOut = new byte[INPUTSIZE * 2]; 1842 out.copyTo(arrayOut); 1843 for (int i = 0; i < INPUTSIZE; i++) { 1844 for (int j = 0; j < 2 ; j++) { 1845 // Extract the inputs. 1846 ArgumentsShortChar args = new ArgumentsShortChar(); 1847 args.inV = arrayInV[i * 2 + j]; 1848 // Figure out what the outputs should have been. 1849 CoreMathVerifier.computeConvert(args); 1850 // Validate the outputs. 1851 boolean valid = true; 1852 if (args.out != arrayOut[i * 2 + j]) { 1853 valid = false; 1854 } 1855 if (!valid) { 1856 StringBuilder message = new StringBuilder(); 1857 message.append("Input inV: "); 1858 message.append(String.format("%d", args.inV)); 1859 message.append("\n"); 1860 message.append("Expected output out: "); 1861 message.append(String.format("%d", args.out)); 1862 message.append("\n"); 1863 message.append("Actual output out: "); 1864 message.append(String.format("%d", arrayOut[i * 2 + j])); 1865 if (args.out != arrayOut[i * 2 + j]) { 1866 message.append(" FAIL"); 1867 } 1868 message.append("\n"); 1869 assertTrue("Incorrect output for checkConvertShort2Char2" + 1870 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1871 } 1872 } 1873 } 1874 } 1875 1876 private void checkConvertShort3Char3() { 1877 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x68ab6fa374cdcd5al, true, 7); 1878 try { 1879 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1880 script.forEach_testConvertChar3Short3Char3(inV, out); 1881 verifyResultsConvertShort3Char3(inV, out, false); 1882 } catch (Exception e) { 1883 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Short3Char3: " + e.toString()); 1884 } 1885 try { 1886 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 1887 scriptRelaxed.forEach_testConvertChar3Short3Char3(inV, out); 1888 verifyResultsConvertShort3Char3(inV, out, true); 1889 } catch (Exception e) { 1890 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Short3Char3: " + e.toString()); 1891 } 1892 } 1893 1894 private void verifyResultsConvertShort3Char3(Allocation inV, Allocation out, boolean relaxed) { 1895 short[] arrayInV = new short[INPUTSIZE * 4]; 1896 inV.copyTo(arrayInV); 1897 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1898 out.copyTo(arrayOut); 1899 for (int i = 0; i < INPUTSIZE; i++) { 1900 for (int j = 0; j < 3 ; j++) { 1901 // Extract the inputs. 1902 ArgumentsShortChar args = new ArgumentsShortChar(); 1903 args.inV = arrayInV[i * 4 + j]; 1904 // Figure out what the outputs should have been. 1905 CoreMathVerifier.computeConvert(args); 1906 // Validate the outputs. 1907 boolean valid = true; 1908 if (args.out != arrayOut[i * 4 + j]) { 1909 valid = false; 1910 } 1911 if (!valid) { 1912 StringBuilder message = new StringBuilder(); 1913 message.append("Input inV: "); 1914 message.append(String.format("%d", args.inV)); 1915 message.append("\n"); 1916 message.append("Expected output out: "); 1917 message.append(String.format("%d", args.out)); 1918 message.append("\n"); 1919 message.append("Actual output out: "); 1920 message.append(String.format("%d", arrayOut[i * 4 + j])); 1921 if (args.out != arrayOut[i * 4 + j]) { 1922 message.append(" FAIL"); 1923 } 1924 message.append("\n"); 1925 assertTrue("Incorrect output for checkConvertShort3Char3" + 1926 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1927 } 1928 } 1929 } 1930 } 1931 1932 private void checkConvertShort4Char4() { 1933 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x68ab7a44d3d5924el, true, 7); 1934 try { 1935 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1936 script.forEach_testConvertChar4Short4Char4(inV, out); 1937 verifyResultsConvertShort4Char4(inV, out, false); 1938 } catch (Exception e) { 1939 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Short4Char4: " + e.toString()); 1940 } 1941 try { 1942 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 1943 scriptRelaxed.forEach_testConvertChar4Short4Char4(inV, out); 1944 verifyResultsConvertShort4Char4(inV, out, true); 1945 } catch (Exception e) { 1946 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Short4Char4: " + e.toString()); 1947 } 1948 } 1949 1950 private void verifyResultsConvertShort4Char4(Allocation inV, Allocation out, boolean relaxed) { 1951 short[] arrayInV = new short[INPUTSIZE * 4]; 1952 inV.copyTo(arrayInV); 1953 byte[] arrayOut = new byte[INPUTSIZE * 4]; 1954 out.copyTo(arrayOut); 1955 for (int i = 0; i < INPUTSIZE; i++) { 1956 for (int j = 0; j < 4 ; j++) { 1957 // Extract the inputs. 1958 ArgumentsShortChar args = new ArgumentsShortChar(); 1959 args.inV = arrayInV[i * 4 + j]; 1960 // Figure out what the outputs should have been. 1961 CoreMathVerifier.computeConvert(args); 1962 // Validate the outputs. 1963 boolean valid = true; 1964 if (args.out != arrayOut[i * 4 + j]) { 1965 valid = false; 1966 } 1967 if (!valid) { 1968 StringBuilder message = new StringBuilder(); 1969 message.append("Input inV: "); 1970 message.append(String.format("%d", args.inV)); 1971 message.append("\n"); 1972 message.append("Expected output out: "); 1973 message.append(String.format("%d", args.out)); 1974 message.append("\n"); 1975 message.append("Actual output out: "); 1976 message.append(String.format("%d", arrayOut[i * 4 + j])); 1977 if (args.out != arrayOut[i * 4 + j]) { 1978 message.append(" FAIL"); 1979 } 1980 message.append("\n"); 1981 assertTrue("Incorrect output for checkConvertShort4Char4" + 1982 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 1983 } 1984 } 1985 } 1986 } 1987 1988 public class ArgumentsUshortChar { 1989 public short inV; 1990 public byte out; 1991 } 1992 1993 private void checkConvertUshort2Char2() { 1994 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0x8d798509b19e2211l, false, 7); 1995 try { 1996 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 1997 script.forEach_testConvertChar2Ushort2Char2(inV, out); 1998 verifyResultsConvertUshort2Char2(inV, out, false); 1999 } catch (Exception e) { 2000 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Ushort2Char2: " + e.toString()); 2001 } 2002 try { 2003 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 2004 scriptRelaxed.forEach_testConvertChar2Ushort2Char2(inV, out); 2005 verifyResultsConvertUshort2Char2(inV, out, true); 2006 } catch (Exception e) { 2007 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Ushort2Char2: " + e.toString()); 2008 } 2009 } 2010 2011 private void verifyResultsConvertUshort2Char2(Allocation inV, Allocation out, boolean relaxed) { 2012 short[] arrayInV = new short[INPUTSIZE * 2]; 2013 inV.copyTo(arrayInV); 2014 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2015 out.copyTo(arrayOut); 2016 for (int i = 0; i < INPUTSIZE; i++) { 2017 for (int j = 0; j < 2 ; j++) { 2018 // Extract the inputs. 2019 ArgumentsUshortChar args = new ArgumentsUshortChar(); 2020 args.inV = arrayInV[i * 2 + j]; 2021 // Figure out what the outputs should have been. 2022 CoreMathVerifier.computeConvert(args); 2023 // Validate the outputs. 2024 boolean valid = true; 2025 if (args.out != arrayOut[i * 2 + j]) { 2026 valid = false; 2027 } 2028 if (!valid) { 2029 StringBuilder message = new StringBuilder(); 2030 message.append("Input inV: "); 2031 message.append(String.format("0x%x", args.inV)); 2032 message.append("\n"); 2033 message.append("Expected output out: "); 2034 message.append(String.format("%d", args.out)); 2035 message.append("\n"); 2036 message.append("Actual output out: "); 2037 message.append(String.format("%d", arrayOut[i * 2 + j])); 2038 if (args.out != arrayOut[i * 2 + j]) { 2039 message.append(" FAIL"); 2040 } 2041 message.append("\n"); 2042 assertTrue("Incorrect output for checkConvertUshort2Char2" + 2043 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2044 } 2045 } 2046 } 2047 } 2048 2049 private void checkConvertUshort3Char3() { 2050 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0x8d798fab10a5e705l, false, 7); 2051 try { 2052 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2053 script.forEach_testConvertChar3Ushort3Char3(inV, out); 2054 verifyResultsConvertUshort3Char3(inV, out, false); 2055 } catch (Exception e) { 2056 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Ushort3Char3: " + e.toString()); 2057 } 2058 try { 2059 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2060 scriptRelaxed.forEach_testConvertChar3Ushort3Char3(inV, out); 2061 verifyResultsConvertUshort3Char3(inV, out, true); 2062 } catch (Exception e) { 2063 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Ushort3Char3: " + e.toString()); 2064 } 2065 } 2066 2067 private void verifyResultsConvertUshort3Char3(Allocation inV, Allocation out, boolean relaxed) { 2068 short[] arrayInV = new short[INPUTSIZE * 4]; 2069 inV.copyTo(arrayInV); 2070 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2071 out.copyTo(arrayOut); 2072 for (int i = 0; i < INPUTSIZE; i++) { 2073 for (int j = 0; j < 3 ; j++) { 2074 // Extract the inputs. 2075 ArgumentsUshortChar args = new ArgumentsUshortChar(); 2076 args.inV = arrayInV[i * 4 + j]; 2077 // Figure out what the outputs should have been. 2078 CoreMathVerifier.computeConvert(args); 2079 // Validate the outputs. 2080 boolean valid = true; 2081 if (args.out != arrayOut[i * 4 + j]) { 2082 valid = false; 2083 } 2084 if (!valid) { 2085 StringBuilder message = new StringBuilder(); 2086 message.append("Input inV: "); 2087 message.append(String.format("0x%x", args.inV)); 2088 message.append("\n"); 2089 message.append("Expected output out: "); 2090 message.append(String.format("%d", args.out)); 2091 message.append("\n"); 2092 message.append("Actual output out: "); 2093 message.append(String.format("%d", arrayOut[i * 4 + j])); 2094 if (args.out != arrayOut[i * 4 + j]) { 2095 message.append(" FAIL"); 2096 } 2097 message.append("\n"); 2098 assertTrue("Incorrect output for checkConvertUshort3Char3" + 2099 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2100 } 2101 } 2102 } 2103 } 2104 2105 private void checkConvertUshort4Char4() { 2106 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0x8d799a4c6fadabf9l, false, 7); 2107 try { 2108 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2109 script.forEach_testConvertChar4Ushort4Char4(inV, out); 2110 verifyResultsConvertUshort4Char4(inV, out, false); 2111 } catch (Exception e) { 2112 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Ushort4Char4: " + e.toString()); 2113 } 2114 try { 2115 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2116 scriptRelaxed.forEach_testConvertChar4Ushort4Char4(inV, out); 2117 verifyResultsConvertUshort4Char4(inV, out, true); 2118 } catch (Exception e) { 2119 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Ushort4Char4: " + e.toString()); 2120 } 2121 } 2122 2123 private void verifyResultsConvertUshort4Char4(Allocation inV, Allocation out, boolean relaxed) { 2124 short[] arrayInV = new short[INPUTSIZE * 4]; 2125 inV.copyTo(arrayInV); 2126 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2127 out.copyTo(arrayOut); 2128 for (int i = 0; i < INPUTSIZE; i++) { 2129 for (int j = 0; j < 4 ; j++) { 2130 // Extract the inputs. 2131 ArgumentsUshortChar args = new ArgumentsUshortChar(); 2132 args.inV = arrayInV[i * 4 + j]; 2133 // Figure out what the outputs should have been. 2134 CoreMathVerifier.computeConvert(args); 2135 // Validate the outputs. 2136 boolean valid = true; 2137 if (args.out != arrayOut[i * 4 + j]) { 2138 valid = false; 2139 } 2140 if (!valid) { 2141 StringBuilder message = new StringBuilder(); 2142 message.append("Input inV: "); 2143 message.append(String.format("0x%x", args.inV)); 2144 message.append("\n"); 2145 message.append("Expected output out: "); 2146 message.append(String.format("%d", args.out)); 2147 message.append("\n"); 2148 message.append("Actual output out: "); 2149 message.append(String.format("%d", arrayOut[i * 4 + j])); 2150 if (args.out != arrayOut[i * 4 + j]) { 2151 message.append(" FAIL"); 2152 } 2153 message.append("\n"); 2154 assertTrue("Incorrect output for checkConvertUshort4Char4" + 2155 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2156 } 2157 } 2158 } 2159 } 2160 2161 public class ArgumentsIntChar { 2162 public int inV; 2163 public byte out; 2164 } 2165 2166 private void checkConvertInt2Char2() { 2167 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0xd74f5147364256dfl, true, 7); 2168 try { 2169 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 2170 script.forEach_testConvertChar2Int2Char2(inV, out); 2171 verifyResultsConvertInt2Char2(inV, out, false); 2172 } catch (Exception e) { 2173 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Int2Char2: " + e.toString()); 2174 } 2175 try { 2176 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 2177 scriptRelaxed.forEach_testConvertChar2Int2Char2(inV, out); 2178 verifyResultsConvertInt2Char2(inV, out, true); 2179 } catch (Exception e) { 2180 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Int2Char2: " + e.toString()); 2181 } 2182 } 2183 2184 private void verifyResultsConvertInt2Char2(Allocation inV, Allocation out, boolean relaxed) { 2185 int[] arrayInV = new int[INPUTSIZE * 2]; 2186 inV.copyTo(arrayInV); 2187 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2188 out.copyTo(arrayOut); 2189 for (int i = 0; i < INPUTSIZE; i++) { 2190 for (int j = 0; j < 2 ; j++) { 2191 // Extract the inputs. 2192 ArgumentsIntChar args = new ArgumentsIntChar(); 2193 args.inV = arrayInV[i * 2 + j]; 2194 // Figure out what the outputs should have been. 2195 CoreMathVerifier.computeConvert(args); 2196 // Validate the outputs. 2197 boolean valid = true; 2198 if (args.out != arrayOut[i * 2 + j]) { 2199 valid = false; 2200 } 2201 if (!valid) { 2202 StringBuilder message = new StringBuilder(); 2203 message.append("Input inV: "); 2204 message.append(String.format("%d", args.inV)); 2205 message.append("\n"); 2206 message.append("Expected output out: "); 2207 message.append(String.format("%d", args.out)); 2208 message.append("\n"); 2209 message.append("Actual output out: "); 2210 message.append(String.format("%d", arrayOut[i * 2 + j])); 2211 if (args.out != arrayOut[i * 2 + j]) { 2212 message.append(" FAIL"); 2213 } 2214 message.append("\n"); 2215 assertTrue("Incorrect output for checkConvertInt2Char2" + 2216 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2217 } 2218 } 2219 } 2220 } 2221 2222 private void checkConvertInt3Char3() { 2223 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0xd74f5be8954a1bd3l, true, 7); 2224 try { 2225 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2226 script.forEach_testConvertChar3Int3Char3(inV, out); 2227 verifyResultsConvertInt3Char3(inV, out, false); 2228 } catch (Exception e) { 2229 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Int3Char3: " + e.toString()); 2230 } 2231 try { 2232 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2233 scriptRelaxed.forEach_testConvertChar3Int3Char3(inV, out); 2234 verifyResultsConvertInt3Char3(inV, out, true); 2235 } catch (Exception e) { 2236 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Int3Char3: " + e.toString()); 2237 } 2238 } 2239 2240 private void verifyResultsConvertInt3Char3(Allocation inV, Allocation out, boolean relaxed) { 2241 int[] arrayInV = new int[INPUTSIZE * 4]; 2242 inV.copyTo(arrayInV); 2243 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2244 out.copyTo(arrayOut); 2245 for (int i = 0; i < INPUTSIZE; i++) { 2246 for (int j = 0; j < 3 ; j++) { 2247 // Extract the inputs. 2248 ArgumentsIntChar args = new ArgumentsIntChar(); 2249 args.inV = arrayInV[i * 4 + j]; 2250 // Figure out what the outputs should have been. 2251 CoreMathVerifier.computeConvert(args); 2252 // Validate the outputs. 2253 boolean valid = true; 2254 if (args.out != arrayOut[i * 4 + j]) { 2255 valid = false; 2256 } 2257 if (!valid) { 2258 StringBuilder message = new StringBuilder(); 2259 message.append("Input inV: "); 2260 message.append(String.format("%d", args.inV)); 2261 message.append("\n"); 2262 message.append("Expected output out: "); 2263 message.append(String.format("%d", args.out)); 2264 message.append("\n"); 2265 message.append("Actual output out: "); 2266 message.append(String.format("%d", arrayOut[i * 4 + j])); 2267 if (args.out != arrayOut[i * 4 + j]) { 2268 message.append(" FAIL"); 2269 } 2270 message.append("\n"); 2271 assertTrue("Incorrect output for checkConvertInt3Char3" + 2272 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2273 } 2274 } 2275 } 2276 } 2277 2278 private void checkConvertInt4Char4() { 2279 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0xd74f6689f451e0c7l, true, 7); 2280 try { 2281 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2282 script.forEach_testConvertChar4Int4Char4(inV, out); 2283 verifyResultsConvertInt4Char4(inV, out, false); 2284 } catch (Exception e) { 2285 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Int4Char4: " + e.toString()); 2286 } 2287 try { 2288 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2289 scriptRelaxed.forEach_testConvertChar4Int4Char4(inV, out); 2290 verifyResultsConvertInt4Char4(inV, out, true); 2291 } catch (Exception e) { 2292 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Int4Char4: " + e.toString()); 2293 } 2294 } 2295 2296 private void verifyResultsConvertInt4Char4(Allocation inV, Allocation out, boolean relaxed) { 2297 int[] arrayInV = new int[INPUTSIZE * 4]; 2298 inV.copyTo(arrayInV); 2299 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2300 out.copyTo(arrayOut); 2301 for (int i = 0; i < INPUTSIZE; i++) { 2302 for (int j = 0; j < 4 ; j++) { 2303 // Extract the inputs. 2304 ArgumentsIntChar args = new ArgumentsIntChar(); 2305 args.inV = arrayInV[i * 4 + j]; 2306 // Figure out what the outputs should have been. 2307 CoreMathVerifier.computeConvert(args); 2308 // Validate the outputs. 2309 boolean valid = true; 2310 if (args.out != arrayOut[i * 4 + j]) { 2311 valid = false; 2312 } 2313 if (!valid) { 2314 StringBuilder message = new StringBuilder(); 2315 message.append("Input inV: "); 2316 message.append(String.format("%d", args.inV)); 2317 message.append("\n"); 2318 message.append("Expected output out: "); 2319 message.append(String.format("%d", args.out)); 2320 message.append("\n"); 2321 message.append("Actual output out: "); 2322 message.append(String.format("%d", arrayOut[i * 4 + j])); 2323 if (args.out != arrayOut[i * 4 + j]) { 2324 message.append(" FAIL"); 2325 } 2326 message.append("\n"); 2327 assertTrue("Incorrect output for checkConvertInt4Char4" + 2328 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2329 } 2330 } 2331 } 2332 } 2333 2334 public class ArgumentsUintChar { 2335 public int inV; 2336 public byte out; 2337 } 2338 2339 private void checkConvertUint2Char2() { 2340 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xe71d083133b67ae2l, false, 7); 2341 try { 2342 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 2343 script.forEach_testConvertChar2Uint2Char2(inV, out); 2344 verifyResultsConvertUint2Char2(inV, out, false); 2345 } catch (Exception e) { 2346 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Uint2Char2: " + e.toString()); 2347 } 2348 try { 2349 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE); 2350 scriptRelaxed.forEach_testConvertChar2Uint2Char2(inV, out); 2351 verifyResultsConvertUint2Char2(inV, out, true); 2352 } catch (Exception e) { 2353 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar2Uint2Char2: " + e.toString()); 2354 } 2355 } 2356 2357 private void verifyResultsConvertUint2Char2(Allocation inV, Allocation out, boolean relaxed) { 2358 int[] arrayInV = new int[INPUTSIZE * 2]; 2359 inV.copyTo(arrayInV); 2360 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2361 out.copyTo(arrayOut); 2362 for (int i = 0; i < INPUTSIZE; i++) { 2363 for (int j = 0; j < 2 ; j++) { 2364 // Extract the inputs. 2365 ArgumentsUintChar args = new ArgumentsUintChar(); 2366 args.inV = arrayInV[i * 2 + j]; 2367 // Figure out what the outputs should have been. 2368 CoreMathVerifier.computeConvert(args); 2369 // Validate the outputs. 2370 boolean valid = true; 2371 if (args.out != arrayOut[i * 2 + j]) { 2372 valid = false; 2373 } 2374 if (!valid) { 2375 StringBuilder message = new StringBuilder(); 2376 message.append("Input inV: "); 2377 message.append(String.format("0x%x", args.inV)); 2378 message.append("\n"); 2379 message.append("Expected output out: "); 2380 message.append(String.format("%d", args.out)); 2381 message.append("\n"); 2382 message.append("Actual output out: "); 2383 message.append(String.format("%d", arrayOut[i * 2 + j])); 2384 if (args.out != arrayOut[i * 2 + j]) { 2385 message.append(" FAIL"); 2386 } 2387 message.append("\n"); 2388 assertTrue("Incorrect output for checkConvertUint2Char2" + 2389 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2390 } 2391 } 2392 } 2393 } 2394 2395 private void checkConvertUint3Char3() { 2396 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0xe71d12d292be3fd6l, false, 7); 2397 try { 2398 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2399 script.forEach_testConvertChar3Uint3Char3(inV, out); 2400 verifyResultsConvertUint3Char3(inV, out, false); 2401 } catch (Exception e) { 2402 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Uint3Char3: " + e.toString()); 2403 } 2404 try { 2405 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE); 2406 scriptRelaxed.forEach_testConvertChar3Uint3Char3(inV, out); 2407 verifyResultsConvertUint3Char3(inV, out, true); 2408 } catch (Exception e) { 2409 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar3Uint3Char3: " + e.toString()); 2410 } 2411 } 2412 2413 private void verifyResultsConvertUint3Char3(Allocation inV, Allocation out, boolean relaxed) { 2414 int[] arrayInV = new int[INPUTSIZE * 4]; 2415 inV.copyTo(arrayInV); 2416 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2417 out.copyTo(arrayOut); 2418 for (int i = 0; i < INPUTSIZE; i++) { 2419 for (int j = 0; j < 3 ; j++) { 2420 // Extract the inputs. 2421 ArgumentsUintChar args = new ArgumentsUintChar(); 2422 args.inV = arrayInV[i * 4 + j]; 2423 // Figure out what the outputs should have been. 2424 CoreMathVerifier.computeConvert(args); 2425 // Validate the outputs. 2426 boolean valid = true; 2427 if (args.out != arrayOut[i * 4 + j]) { 2428 valid = false; 2429 } 2430 if (!valid) { 2431 StringBuilder message = new StringBuilder(); 2432 message.append("Input inV: "); 2433 message.append(String.format("0x%x", args.inV)); 2434 message.append("\n"); 2435 message.append("Expected output out: "); 2436 message.append(String.format("%d", args.out)); 2437 message.append("\n"); 2438 message.append("Actual output out: "); 2439 message.append(String.format("%d", arrayOut[i * 4 + j])); 2440 if (args.out != arrayOut[i * 4 + j]) { 2441 message.append(" FAIL"); 2442 } 2443 message.append("\n"); 2444 assertTrue("Incorrect output for checkConvertUint3Char3" + 2445 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2446 } 2447 } 2448 } 2449 } 2450 2451 private void checkConvertUint4Char4() { 2452 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0xe71d1d73f1c604cal, false, 7); 2453 try { 2454 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2455 script.forEach_testConvertChar4Uint4Char4(inV, out); 2456 verifyResultsConvertUint4Char4(inV, out, false); 2457 } catch (Exception e) { 2458 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Uint4Char4: " + e.toString()); 2459 } 2460 try { 2461 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE); 2462 scriptRelaxed.forEach_testConvertChar4Uint4Char4(inV, out); 2463 verifyResultsConvertUint4Char4(inV, out, true); 2464 } catch (Exception e) { 2465 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertChar4Uint4Char4: " + e.toString()); 2466 } 2467 } 2468 2469 private void verifyResultsConvertUint4Char4(Allocation inV, Allocation out, boolean relaxed) { 2470 int[] arrayInV = new int[INPUTSIZE * 4]; 2471 inV.copyTo(arrayInV); 2472 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2473 out.copyTo(arrayOut); 2474 for (int i = 0; i < INPUTSIZE; i++) { 2475 for (int j = 0; j < 4 ; j++) { 2476 // Extract the inputs. 2477 ArgumentsUintChar args = new ArgumentsUintChar(); 2478 args.inV = arrayInV[i * 4 + j]; 2479 // Figure out what the outputs should have been. 2480 CoreMathVerifier.computeConvert(args); 2481 // Validate the outputs. 2482 boolean valid = true; 2483 if (args.out != arrayOut[i * 4 + j]) { 2484 valid = false; 2485 } 2486 if (!valid) { 2487 StringBuilder message = new StringBuilder(); 2488 message.append("Input inV: "); 2489 message.append(String.format("0x%x", args.inV)); 2490 message.append("\n"); 2491 message.append("Expected output out: "); 2492 message.append(String.format("%d", args.out)); 2493 message.append("\n"); 2494 message.append("Actual output out: "); 2495 message.append(String.format("%d", arrayOut[i * 4 + j])); 2496 if (args.out != arrayOut[i * 4 + j]) { 2497 message.append(" FAIL"); 2498 } 2499 message.append("\n"); 2500 assertTrue("Incorrect output for checkConvertUint4Char4" + 2501 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2502 } 2503 } 2504 } 2505 } 2506 2507 public class ArgumentsFloatUchar { 2508 public float inV; 2509 public byte out; 2510 } 2511 2512 private void checkConvertFloat2Uchar2() { 2513 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xfb52b2f4fac15b79l, 0.0000000000000000000e+00, 2.5500000000000000000e+02); 2514 try { 2515 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2516 script.forEach_testConvertUchar2Float2Uchar2(inV, out); 2517 verifyResultsConvertFloat2Uchar2(inV, out, false); 2518 } catch (Exception e) { 2519 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Float2Uchar2: " + e.toString()); 2520 } 2521 try { 2522 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2523 scriptRelaxed.forEach_testConvertUchar2Float2Uchar2(inV, out); 2524 verifyResultsConvertFloat2Uchar2(inV, out, true); 2525 } catch (Exception e) { 2526 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Float2Uchar2: " + e.toString()); 2527 } 2528 } 2529 2530 private void verifyResultsConvertFloat2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 2531 float[] arrayInV = new float[INPUTSIZE * 2]; 2532 inV.copyTo(arrayInV); 2533 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2534 out.copyTo(arrayOut); 2535 for (int i = 0; i < INPUTSIZE; i++) { 2536 for (int j = 0; j < 2 ; j++) { 2537 // Extract the inputs. 2538 ArgumentsFloatUchar args = new ArgumentsFloatUchar(); 2539 args.inV = arrayInV[i * 2 + j]; 2540 // Figure out what the outputs should have been. 2541 CoreMathVerifier.computeConvert(args); 2542 // Validate the outputs. 2543 boolean valid = true; 2544 if (args.out != arrayOut[i * 2 + j]) { 2545 valid = false; 2546 } 2547 if (!valid) { 2548 StringBuilder message = new StringBuilder(); 2549 message.append("Input inV: "); 2550 message.append(String.format("%14.8g {%8x} %15a", 2551 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 2552 message.append("\n"); 2553 message.append("Expected output out: "); 2554 message.append(String.format("0x%x", args.out)); 2555 message.append("\n"); 2556 message.append("Actual output out: "); 2557 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 2558 if (args.out != arrayOut[i * 2 + j]) { 2559 message.append(" FAIL"); 2560 } 2561 message.append("\n"); 2562 assertTrue("Incorrect output for checkConvertFloat2Uchar2" + 2563 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2564 } 2565 } 2566 } 2567 } 2568 2569 private void checkConvertFloat3Uchar3() { 2570 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0xfb547c0ff0dc7c57l, 0.0000000000000000000e+00, 2.5500000000000000000e+02); 2571 try { 2572 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2573 script.forEach_testConvertUchar3Float3Uchar3(inV, out); 2574 verifyResultsConvertFloat3Uchar3(inV, out, false); 2575 } catch (Exception e) { 2576 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Float3Uchar3: " + e.toString()); 2577 } 2578 try { 2579 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2580 scriptRelaxed.forEach_testConvertUchar3Float3Uchar3(inV, out); 2581 verifyResultsConvertFloat3Uchar3(inV, out, true); 2582 } catch (Exception e) { 2583 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Float3Uchar3: " + e.toString()); 2584 } 2585 } 2586 2587 private void verifyResultsConvertFloat3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 2588 float[] arrayInV = new float[INPUTSIZE * 4]; 2589 inV.copyTo(arrayInV); 2590 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2591 out.copyTo(arrayOut); 2592 for (int i = 0; i < INPUTSIZE; i++) { 2593 for (int j = 0; j < 3 ; j++) { 2594 // Extract the inputs. 2595 ArgumentsFloatUchar args = new ArgumentsFloatUchar(); 2596 args.inV = arrayInV[i * 4 + j]; 2597 // Figure out what the outputs should have been. 2598 CoreMathVerifier.computeConvert(args); 2599 // Validate the outputs. 2600 boolean valid = true; 2601 if (args.out != arrayOut[i * 4 + j]) { 2602 valid = false; 2603 } 2604 if (!valid) { 2605 StringBuilder message = new StringBuilder(); 2606 message.append("Input inV: "); 2607 message.append(String.format("%14.8g {%8x} %15a", 2608 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 2609 message.append("\n"); 2610 message.append("Expected output out: "); 2611 message.append(String.format("0x%x", args.out)); 2612 message.append("\n"); 2613 message.append("Actual output out: "); 2614 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 2615 if (args.out != arrayOut[i * 4 + j]) { 2616 message.append(" FAIL"); 2617 } 2618 message.append("\n"); 2619 assertTrue("Incorrect output for checkConvertFloat3Uchar3" + 2620 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2621 } 2622 } 2623 } 2624 } 2625 2626 private void checkConvertFloat4Uchar4() { 2627 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0xfb56452ae6f79d35l, 0.0000000000000000000e+00, 2.5500000000000000000e+02); 2628 try { 2629 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2630 script.forEach_testConvertUchar4Float4Uchar4(inV, out); 2631 verifyResultsConvertFloat4Uchar4(inV, out, false); 2632 } catch (Exception e) { 2633 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Float4Uchar4: " + e.toString()); 2634 } 2635 try { 2636 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2637 scriptRelaxed.forEach_testConvertUchar4Float4Uchar4(inV, out); 2638 verifyResultsConvertFloat4Uchar4(inV, out, true); 2639 } catch (Exception e) { 2640 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Float4Uchar4: " + e.toString()); 2641 } 2642 } 2643 2644 private void verifyResultsConvertFloat4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 2645 float[] arrayInV = new float[INPUTSIZE * 4]; 2646 inV.copyTo(arrayInV); 2647 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2648 out.copyTo(arrayOut); 2649 for (int i = 0; i < INPUTSIZE; i++) { 2650 for (int j = 0; j < 4 ; j++) { 2651 // Extract the inputs. 2652 ArgumentsFloatUchar args = new ArgumentsFloatUchar(); 2653 args.inV = arrayInV[i * 4 + j]; 2654 // Figure out what the outputs should have been. 2655 CoreMathVerifier.computeConvert(args); 2656 // Validate the outputs. 2657 boolean valid = true; 2658 if (args.out != arrayOut[i * 4 + j]) { 2659 valid = false; 2660 } 2661 if (!valid) { 2662 StringBuilder message = new StringBuilder(); 2663 message.append("Input inV: "); 2664 message.append(String.format("%14.8g {%8x} %15a", 2665 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 2666 message.append("\n"); 2667 message.append("Expected output out: "); 2668 message.append(String.format("0x%x", args.out)); 2669 message.append("\n"); 2670 message.append("Actual output out: "); 2671 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 2672 if (args.out != arrayOut[i * 4 + j]) { 2673 message.append(" FAIL"); 2674 } 2675 message.append("\n"); 2676 assertTrue("Incorrect output for checkConvertFloat4Uchar4" + 2677 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2678 } 2679 } 2680 } 2681 } 2682 2683 public class ArgumentsCharUchar { 2684 public byte inV; 2685 public byte out; 2686 } 2687 2688 private void checkConvertChar2Uchar2() { 2689 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0x58627f46cbea8339l, false, 7); 2690 try { 2691 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2692 script.forEach_testConvertUchar2Char2Uchar2(inV, out); 2693 verifyResultsConvertChar2Uchar2(inV, out, false); 2694 } catch (Exception e) { 2695 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Char2Uchar2: " + e.toString()); 2696 } 2697 try { 2698 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2699 scriptRelaxed.forEach_testConvertUchar2Char2Uchar2(inV, out); 2700 verifyResultsConvertChar2Uchar2(inV, out, true); 2701 } catch (Exception e) { 2702 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Char2Uchar2: " + e.toString()); 2703 } 2704 } 2705 2706 private void verifyResultsConvertChar2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 2707 byte[] arrayInV = new byte[INPUTSIZE * 2]; 2708 inV.copyTo(arrayInV); 2709 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2710 out.copyTo(arrayOut); 2711 for (int i = 0; i < INPUTSIZE; i++) { 2712 for (int j = 0; j < 2 ; j++) { 2713 // Extract the inputs. 2714 ArgumentsCharUchar args = new ArgumentsCharUchar(); 2715 args.inV = arrayInV[i * 2 + j]; 2716 // Figure out what the outputs should have been. 2717 CoreMathVerifier.computeConvert(args); 2718 // Validate the outputs. 2719 boolean valid = true; 2720 if (args.out != arrayOut[i * 2 + j]) { 2721 valid = false; 2722 } 2723 if (!valid) { 2724 StringBuilder message = new StringBuilder(); 2725 message.append("Input inV: "); 2726 message.append(String.format("%d", args.inV)); 2727 message.append("\n"); 2728 message.append("Expected output out: "); 2729 message.append(String.format("0x%x", args.out)); 2730 message.append("\n"); 2731 message.append("Actual output out: "); 2732 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 2733 if (args.out != arrayOut[i * 2 + j]) { 2734 message.append(" FAIL"); 2735 } 2736 message.append("\n"); 2737 assertTrue("Incorrect output for checkConvertChar2Uchar2" + 2738 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2739 } 2740 } 2741 } 2742 } 2743 2744 private void checkConvertChar3Uchar3() { 2745 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0x58644861c205a417l, false, 7); 2746 try { 2747 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2748 script.forEach_testConvertUchar3Char3Uchar3(inV, out); 2749 verifyResultsConvertChar3Uchar3(inV, out, false); 2750 } catch (Exception e) { 2751 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Char3Uchar3: " + e.toString()); 2752 } 2753 try { 2754 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2755 scriptRelaxed.forEach_testConvertUchar3Char3Uchar3(inV, out); 2756 verifyResultsConvertChar3Uchar3(inV, out, true); 2757 } catch (Exception e) { 2758 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Char3Uchar3: " + e.toString()); 2759 } 2760 } 2761 2762 private void verifyResultsConvertChar3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 2763 byte[] arrayInV = new byte[INPUTSIZE * 4]; 2764 inV.copyTo(arrayInV); 2765 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2766 out.copyTo(arrayOut); 2767 for (int i = 0; i < INPUTSIZE; i++) { 2768 for (int j = 0; j < 3 ; j++) { 2769 // Extract the inputs. 2770 ArgumentsCharUchar args = new ArgumentsCharUchar(); 2771 args.inV = arrayInV[i * 4 + j]; 2772 // Figure out what the outputs should have been. 2773 CoreMathVerifier.computeConvert(args); 2774 // Validate the outputs. 2775 boolean valid = true; 2776 if (args.out != arrayOut[i * 4 + j]) { 2777 valid = false; 2778 } 2779 if (!valid) { 2780 StringBuilder message = new StringBuilder(); 2781 message.append("Input inV: "); 2782 message.append(String.format("%d", args.inV)); 2783 message.append("\n"); 2784 message.append("Expected output out: "); 2785 message.append(String.format("0x%x", args.out)); 2786 message.append("\n"); 2787 message.append("Actual output out: "); 2788 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 2789 if (args.out != arrayOut[i * 4 + j]) { 2790 message.append(" FAIL"); 2791 } 2792 message.append("\n"); 2793 assertTrue("Incorrect output for checkConvertChar3Uchar3" + 2794 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2795 } 2796 } 2797 } 2798 } 2799 2800 private void checkConvertChar4Uchar4() { 2801 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0x5866117cb820c4f5l, false, 7); 2802 try { 2803 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2804 script.forEach_testConvertUchar4Char4Uchar4(inV, out); 2805 verifyResultsConvertChar4Uchar4(inV, out, false); 2806 } catch (Exception e) { 2807 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Char4Uchar4: " + e.toString()); 2808 } 2809 try { 2810 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2811 scriptRelaxed.forEach_testConvertUchar4Char4Uchar4(inV, out); 2812 verifyResultsConvertChar4Uchar4(inV, out, true); 2813 } catch (Exception e) { 2814 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Char4Uchar4: " + e.toString()); 2815 } 2816 } 2817 2818 private void verifyResultsConvertChar4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 2819 byte[] arrayInV = new byte[INPUTSIZE * 4]; 2820 inV.copyTo(arrayInV); 2821 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2822 out.copyTo(arrayOut); 2823 for (int i = 0; i < INPUTSIZE; i++) { 2824 for (int j = 0; j < 4 ; j++) { 2825 // Extract the inputs. 2826 ArgumentsCharUchar args = new ArgumentsCharUchar(); 2827 args.inV = arrayInV[i * 4 + j]; 2828 // Figure out what the outputs should have been. 2829 CoreMathVerifier.computeConvert(args); 2830 // Validate the outputs. 2831 boolean valid = true; 2832 if (args.out != arrayOut[i * 4 + j]) { 2833 valid = false; 2834 } 2835 if (!valid) { 2836 StringBuilder message = new StringBuilder(); 2837 message.append("Input inV: "); 2838 message.append(String.format("%d", args.inV)); 2839 message.append("\n"); 2840 message.append("Expected output out: "); 2841 message.append(String.format("0x%x", args.out)); 2842 message.append("\n"); 2843 message.append("Actual output out: "); 2844 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 2845 if (args.out != arrayOut[i * 4 + j]) { 2846 message.append(" FAIL"); 2847 } 2848 message.append("\n"); 2849 assertTrue("Incorrect output for checkConvertChar4Uchar4" + 2850 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2851 } 2852 } 2853 } 2854 } 2855 2856 public class ArgumentsUcharUchar { 2857 public byte inV; 2858 public byte out; 2859 } 2860 2861 private void checkConvertUchar2Uchar2() { 2862 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x7d309f4e67c29ce4l, false, 8); 2863 try { 2864 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2865 script.forEach_testConvertUchar2Uchar2Uchar2(inV, out); 2866 verifyResultsConvertUchar2Uchar2(inV, out, false); 2867 } catch (Exception e) { 2868 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Uchar2Uchar2: " + e.toString()); 2869 } 2870 try { 2871 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 2872 scriptRelaxed.forEach_testConvertUchar2Uchar2Uchar2(inV, out); 2873 verifyResultsConvertUchar2Uchar2(inV, out, true); 2874 } catch (Exception e) { 2875 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Uchar2Uchar2: " + e.toString()); 2876 } 2877 } 2878 2879 private void verifyResultsConvertUchar2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 2880 byte[] arrayInV = new byte[INPUTSIZE * 2]; 2881 inV.copyTo(arrayInV); 2882 byte[] arrayOut = new byte[INPUTSIZE * 2]; 2883 out.copyTo(arrayOut); 2884 for (int i = 0; i < INPUTSIZE; i++) { 2885 for (int j = 0; j < 2 ; j++) { 2886 // Extract the inputs. 2887 ArgumentsUcharUchar args = new ArgumentsUcharUchar(); 2888 args.inV = arrayInV[i * 2 + j]; 2889 // Figure out what the outputs should have been. 2890 CoreMathVerifier.computeConvert(args); 2891 // Validate the outputs. 2892 boolean valid = true; 2893 if (args.out != arrayOut[i * 2 + j]) { 2894 valid = false; 2895 } 2896 if (!valid) { 2897 StringBuilder message = new StringBuilder(); 2898 message.append("Input inV: "); 2899 message.append(String.format("0x%x", args.inV)); 2900 message.append("\n"); 2901 message.append("Expected output out: "); 2902 message.append(String.format("0x%x", args.out)); 2903 message.append("\n"); 2904 message.append("Actual output out: "); 2905 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 2906 if (args.out != arrayOut[i * 2 + j]) { 2907 message.append(" FAIL"); 2908 } 2909 message.append("\n"); 2910 assertTrue("Incorrect output for checkConvertUchar2Uchar2" + 2911 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2912 } 2913 } 2914 } 2915 } 2916 2917 private void checkConvertUchar3Uchar3() { 2918 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x7d3268695dddbdc2l, false, 8); 2919 try { 2920 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2921 script.forEach_testConvertUchar3Uchar3Uchar3(inV, out); 2922 verifyResultsConvertUchar3Uchar3(inV, out, false); 2923 } catch (Exception e) { 2924 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Uchar3Uchar3: " + e.toString()); 2925 } 2926 try { 2927 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 2928 scriptRelaxed.forEach_testConvertUchar3Uchar3Uchar3(inV, out); 2929 verifyResultsConvertUchar3Uchar3(inV, out, true); 2930 } catch (Exception e) { 2931 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Uchar3Uchar3: " + e.toString()); 2932 } 2933 } 2934 2935 private void verifyResultsConvertUchar3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 2936 byte[] arrayInV = new byte[INPUTSIZE * 4]; 2937 inV.copyTo(arrayInV); 2938 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2939 out.copyTo(arrayOut); 2940 for (int i = 0; i < INPUTSIZE; i++) { 2941 for (int j = 0; j < 3 ; j++) { 2942 // Extract the inputs. 2943 ArgumentsUcharUchar args = new ArgumentsUcharUchar(); 2944 args.inV = arrayInV[i * 4 + j]; 2945 // Figure out what the outputs should have been. 2946 CoreMathVerifier.computeConvert(args); 2947 // Validate the outputs. 2948 boolean valid = true; 2949 if (args.out != arrayOut[i * 4 + j]) { 2950 valid = false; 2951 } 2952 if (!valid) { 2953 StringBuilder message = new StringBuilder(); 2954 message.append("Input inV: "); 2955 message.append(String.format("0x%x", args.inV)); 2956 message.append("\n"); 2957 message.append("Expected output out: "); 2958 message.append(String.format("0x%x", args.out)); 2959 message.append("\n"); 2960 message.append("Actual output out: "); 2961 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 2962 if (args.out != arrayOut[i * 4 + j]) { 2963 message.append(" FAIL"); 2964 } 2965 message.append("\n"); 2966 assertTrue("Incorrect output for checkConvertUchar3Uchar3" + 2967 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 2968 } 2969 } 2970 } 2971 } 2972 2973 private void checkConvertUchar4Uchar4() { 2974 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7d34318453f8dea0l, false, 8); 2975 try { 2976 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2977 script.forEach_testConvertUchar4Uchar4Uchar4(inV, out); 2978 verifyResultsConvertUchar4Uchar4(inV, out, false); 2979 } catch (Exception e) { 2980 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Uchar4Uchar4: " + e.toString()); 2981 } 2982 try { 2983 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 2984 scriptRelaxed.forEach_testConvertUchar4Uchar4Uchar4(inV, out); 2985 verifyResultsConvertUchar4Uchar4(inV, out, true); 2986 } catch (Exception e) { 2987 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Uchar4Uchar4: " + e.toString()); 2988 } 2989 } 2990 2991 private void verifyResultsConvertUchar4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 2992 byte[] arrayInV = new byte[INPUTSIZE * 4]; 2993 inV.copyTo(arrayInV); 2994 byte[] arrayOut = new byte[INPUTSIZE * 4]; 2995 out.copyTo(arrayOut); 2996 for (int i = 0; i < INPUTSIZE; i++) { 2997 for (int j = 0; j < 4 ; j++) { 2998 // Extract the inputs. 2999 ArgumentsUcharUchar args = new ArgumentsUcharUchar(); 3000 args.inV = arrayInV[i * 4 + j]; 3001 // Figure out what the outputs should have been. 3002 CoreMathVerifier.computeConvert(args); 3003 // Validate the outputs. 3004 boolean valid = true; 3005 if (args.out != arrayOut[i * 4 + j]) { 3006 valid = false; 3007 } 3008 if (!valid) { 3009 StringBuilder message = new StringBuilder(); 3010 message.append("Input inV: "); 3011 message.append(String.format("0x%x", args.inV)); 3012 message.append("\n"); 3013 message.append("Expected output out: "); 3014 message.append(String.format("0x%x", args.out)); 3015 message.append("\n"); 3016 message.append("Actual output out: "); 3017 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3018 if (args.out != arrayOut[i * 4 + j]) { 3019 message.append(" FAIL"); 3020 } 3021 message.append("\n"); 3022 assertTrue("Incorrect output for checkConvertUchar4Uchar4" + 3023 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3024 } 3025 } 3026 } 3027 } 3028 3029 public class ArgumentsShortUchar { 3030 public short inV; 3031 public byte out; 3032 } 3033 3034 private void checkConvertShort2Uchar2() { 3035 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x94cab57fabc38225l, false, 8); 3036 try { 3037 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3038 script.forEach_testConvertUchar2Short2Uchar2(inV, out); 3039 verifyResultsConvertShort2Uchar2(inV, out, false); 3040 } catch (Exception e) { 3041 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Short2Uchar2: " + e.toString()); 3042 } 3043 try { 3044 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3045 scriptRelaxed.forEach_testConvertUchar2Short2Uchar2(inV, out); 3046 verifyResultsConvertShort2Uchar2(inV, out, true); 3047 } catch (Exception e) { 3048 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Short2Uchar2: " + e.toString()); 3049 } 3050 } 3051 3052 private void verifyResultsConvertShort2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 3053 short[] arrayInV = new short[INPUTSIZE * 2]; 3054 inV.copyTo(arrayInV); 3055 byte[] arrayOut = new byte[INPUTSIZE * 2]; 3056 out.copyTo(arrayOut); 3057 for (int i = 0; i < INPUTSIZE; i++) { 3058 for (int j = 0; j < 2 ; j++) { 3059 // Extract the inputs. 3060 ArgumentsShortUchar args = new ArgumentsShortUchar(); 3061 args.inV = arrayInV[i * 2 + j]; 3062 // Figure out what the outputs should have been. 3063 CoreMathVerifier.computeConvert(args); 3064 // Validate the outputs. 3065 boolean valid = true; 3066 if (args.out != arrayOut[i * 2 + j]) { 3067 valid = false; 3068 } 3069 if (!valid) { 3070 StringBuilder message = new StringBuilder(); 3071 message.append("Input inV: "); 3072 message.append(String.format("%d", args.inV)); 3073 message.append("\n"); 3074 message.append("Expected output out: "); 3075 message.append(String.format("0x%x", args.out)); 3076 message.append("\n"); 3077 message.append("Actual output out: "); 3078 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 3079 if (args.out != arrayOut[i * 2 + j]) { 3080 message.append(" FAIL"); 3081 } 3082 message.append("\n"); 3083 assertTrue("Incorrect output for checkConvertShort2Uchar2" + 3084 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3085 } 3086 } 3087 } 3088 } 3089 3090 private void checkConvertShort3Uchar3() { 3091 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x94cc7e9aa1dea303l, false, 8); 3092 try { 3093 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3094 script.forEach_testConvertUchar3Short3Uchar3(inV, out); 3095 verifyResultsConvertShort3Uchar3(inV, out, false); 3096 } catch (Exception e) { 3097 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Short3Uchar3: " + e.toString()); 3098 } 3099 try { 3100 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3101 scriptRelaxed.forEach_testConvertUchar3Short3Uchar3(inV, out); 3102 verifyResultsConvertShort3Uchar3(inV, out, true); 3103 } catch (Exception e) { 3104 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Short3Uchar3: " + e.toString()); 3105 } 3106 } 3107 3108 private void verifyResultsConvertShort3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 3109 short[] arrayInV = new short[INPUTSIZE * 4]; 3110 inV.copyTo(arrayInV); 3111 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3112 out.copyTo(arrayOut); 3113 for (int i = 0; i < INPUTSIZE; i++) { 3114 for (int j = 0; j < 3 ; j++) { 3115 // Extract the inputs. 3116 ArgumentsShortUchar args = new ArgumentsShortUchar(); 3117 args.inV = arrayInV[i * 4 + j]; 3118 // Figure out what the outputs should have been. 3119 CoreMathVerifier.computeConvert(args); 3120 // Validate the outputs. 3121 boolean valid = true; 3122 if (args.out != arrayOut[i * 4 + j]) { 3123 valid = false; 3124 } 3125 if (!valid) { 3126 StringBuilder message = new StringBuilder(); 3127 message.append("Input inV: "); 3128 message.append(String.format("%d", args.inV)); 3129 message.append("\n"); 3130 message.append("Expected output out: "); 3131 message.append(String.format("0x%x", args.out)); 3132 message.append("\n"); 3133 message.append("Actual output out: "); 3134 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3135 if (args.out != arrayOut[i * 4 + j]) { 3136 message.append(" FAIL"); 3137 } 3138 message.append("\n"); 3139 assertTrue("Incorrect output for checkConvertShort3Uchar3" + 3140 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3141 } 3142 } 3143 } 3144 } 3145 3146 private void checkConvertShort4Uchar4() { 3147 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x94ce47b597f9c3e1l, false, 8); 3148 try { 3149 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3150 script.forEach_testConvertUchar4Short4Uchar4(inV, out); 3151 verifyResultsConvertShort4Uchar4(inV, out, false); 3152 } catch (Exception e) { 3153 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Short4Uchar4: " + e.toString()); 3154 } 3155 try { 3156 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3157 scriptRelaxed.forEach_testConvertUchar4Short4Uchar4(inV, out); 3158 verifyResultsConvertShort4Uchar4(inV, out, true); 3159 } catch (Exception e) { 3160 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Short4Uchar4: " + e.toString()); 3161 } 3162 } 3163 3164 private void verifyResultsConvertShort4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 3165 short[] arrayInV = new short[INPUTSIZE * 4]; 3166 inV.copyTo(arrayInV); 3167 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3168 out.copyTo(arrayOut); 3169 for (int i = 0; i < INPUTSIZE; i++) { 3170 for (int j = 0; j < 4 ; j++) { 3171 // Extract the inputs. 3172 ArgumentsShortUchar args = new ArgumentsShortUchar(); 3173 args.inV = arrayInV[i * 4 + j]; 3174 // Figure out what the outputs should have been. 3175 CoreMathVerifier.computeConvert(args); 3176 // Validate the outputs. 3177 boolean valid = true; 3178 if (args.out != arrayOut[i * 4 + j]) { 3179 valid = false; 3180 } 3181 if (!valid) { 3182 StringBuilder message = new StringBuilder(); 3183 message.append("Input inV: "); 3184 message.append(String.format("%d", args.inV)); 3185 message.append("\n"); 3186 message.append("Expected output out: "); 3187 message.append(String.format("0x%x", args.out)); 3188 message.append("\n"); 3189 message.append("Actual output out: "); 3190 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3191 if (args.out != arrayOut[i * 4 + j]) { 3192 message.append(" FAIL"); 3193 } 3194 message.append("\n"); 3195 assertTrue("Incorrect output for checkConvertShort4Uchar4" + 3196 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3197 } 3198 } 3199 } 3200 } 3201 3202 public class ArgumentsUshortUchar { 3203 public short inV; 3204 public byte out; 3205 } 3206 3207 private void checkConvertUshort2Uchar2() { 3208 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0xc36a16c6d90fd1del, false, 8); 3209 try { 3210 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3211 script.forEach_testConvertUchar2Ushort2Uchar2(inV, out); 3212 verifyResultsConvertUshort2Uchar2(inV, out, false); 3213 } catch (Exception e) { 3214 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Ushort2Uchar2: " + e.toString()); 3215 } 3216 try { 3217 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3218 scriptRelaxed.forEach_testConvertUchar2Ushort2Uchar2(inV, out); 3219 verifyResultsConvertUshort2Uchar2(inV, out, true); 3220 } catch (Exception e) { 3221 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Ushort2Uchar2: " + e.toString()); 3222 } 3223 } 3224 3225 private void verifyResultsConvertUshort2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 3226 short[] arrayInV = new short[INPUTSIZE * 2]; 3227 inV.copyTo(arrayInV); 3228 byte[] arrayOut = new byte[INPUTSIZE * 2]; 3229 out.copyTo(arrayOut); 3230 for (int i = 0; i < INPUTSIZE; i++) { 3231 for (int j = 0; j < 2 ; j++) { 3232 // Extract the inputs. 3233 ArgumentsUshortUchar args = new ArgumentsUshortUchar(); 3234 args.inV = arrayInV[i * 2 + j]; 3235 // Figure out what the outputs should have been. 3236 CoreMathVerifier.computeConvert(args); 3237 // Validate the outputs. 3238 boolean valid = true; 3239 if (args.out != arrayOut[i * 2 + j]) { 3240 valid = false; 3241 } 3242 if (!valid) { 3243 StringBuilder message = new StringBuilder(); 3244 message.append("Input inV: "); 3245 message.append(String.format("0x%x", args.inV)); 3246 message.append("\n"); 3247 message.append("Expected output out: "); 3248 message.append(String.format("0x%x", args.out)); 3249 message.append("\n"); 3250 message.append("Actual output out: "); 3251 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 3252 if (args.out != arrayOut[i * 2 + j]) { 3253 message.append(" FAIL"); 3254 } 3255 message.append("\n"); 3256 assertTrue("Incorrect output for checkConvertUshort2Uchar2" + 3257 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3258 } 3259 } 3260 } 3261 } 3262 3263 private void checkConvertUshort3Uchar3() { 3264 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0xc36bdfe1cf2af2bcl, false, 8); 3265 try { 3266 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3267 script.forEach_testConvertUchar3Ushort3Uchar3(inV, out); 3268 verifyResultsConvertUshort3Uchar3(inV, out, false); 3269 } catch (Exception e) { 3270 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Ushort3Uchar3: " + e.toString()); 3271 } 3272 try { 3273 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3274 scriptRelaxed.forEach_testConvertUchar3Ushort3Uchar3(inV, out); 3275 verifyResultsConvertUshort3Uchar3(inV, out, true); 3276 } catch (Exception e) { 3277 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Ushort3Uchar3: " + e.toString()); 3278 } 3279 } 3280 3281 private void verifyResultsConvertUshort3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 3282 short[] arrayInV = new short[INPUTSIZE * 4]; 3283 inV.copyTo(arrayInV); 3284 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3285 out.copyTo(arrayOut); 3286 for (int i = 0; i < INPUTSIZE; i++) { 3287 for (int j = 0; j < 3 ; j++) { 3288 // Extract the inputs. 3289 ArgumentsUshortUchar args = new ArgumentsUshortUchar(); 3290 args.inV = arrayInV[i * 4 + j]; 3291 // Figure out what the outputs should have been. 3292 CoreMathVerifier.computeConvert(args); 3293 // Validate the outputs. 3294 boolean valid = true; 3295 if (args.out != arrayOut[i * 4 + j]) { 3296 valid = false; 3297 } 3298 if (!valid) { 3299 StringBuilder message = new StringBuilder(); 3300 message.append("Input inV: "); 3301 message.append(String.format("0x%x", args.inV)); 3302 message.append("\n"); 3303 message.append("Expected output out: "); 3304 message.append(String.format("0x%x", args.out)); 3305 message.append("\n"); 3306 message.append("Actual output out: "); 3307 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3308 if (args.out != arrayOut[i * 4 + j]) { 3309 message.append(" FAIL"); 3310 } 3311 message.append("\n"); 3312 assertTrue("Incorrect output for checkConvertUshort3Uchar3" + 3313 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3314 } 3315 } 3316 } 3317 } 3318 3319 private void checkConvertUshort4Uchar4() { 3320 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0xc36da8fcc546139al, false, 8); 3321 try { 3322 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3323 script.forEach_testConvertUchar4Ushort4Uchar4(inV, out); 3324 verifyResultsConvertUshort4Uchar4(inV, out, false); 3325 } catch (Exception e) { 3326 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Ushort4Uchar4: " + e.toString()); 3327 } 3328 try { 3329 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3330 scriptRelaxed.forEach_testConvertUchar4Ushort4Uchar4(inV, out); 3331 verifyResultsConvertUshort4Uchar4(inV, out, true); 3332 } catch (Exception e) { 3333 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Ushort4Uchar4: " + e.toString()); 3334 } 3335 } 3336 3337 private void verifyResultsConvertUshort4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 3338 short[] arrayInV = new short[INPUTSIZE * 4]; 3339 inV.copyTo(arrayInV); 3340 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3341 out.copyTo(arrayOut); 3342 for (int i = 0; i < INPUTSIZE; i++) { 3343 for (int j = 0; j < 4 ; j++) { 3344 // Extract the inputs. 3345 ArgumentsUshortUchar args = new ArgumentsUshortUchar(); 3346 args.inV = arrayInV[i * 4 + j]; 3347 // Figure out what the outputs should have been. 3348 CoreMathVerifier.computeConvert(args); 3349 // Validate the outputs. 3350 boolean valid = true; 3351 if (args.out != arrayOut[i * 4 + j]) { 3352 valid = false; 3353 } 3354 if (!valid) { 3355 StringBuilder message = new StringBuilder(); 3356 message.append("Input inV: "); 3357 message.append(String.format("0x%x", args.inV)); 3358 message.append("\n"); 3359 message.append("Expected output out: "); 3360 message.append(String.format("0x%x", args.out)); 3361 message.append("\n"); 3362 message.append("Actual output out: "); 3363 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3364 if (args.out != arrayOut[i * 4 + j]) { 3365 message.append(" FAIL"); 3366 } 3367 message.append("\n"); 3368 assertTrue("Incorrect output for checkConvertUshort4Uchar4" + 3369 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3370 } 3371 } 3372 } 3373 } 3374 3375 public class ArgumentsIntUchar { 3376 public int inV; 3377 public byte out; 3378 } 3379 3380 private void checkConvertInt2Uchar2() { 3381 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0x2a53651c20a4b078l, false, 8); 3382 try { 3383 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3384 script.forEach_testConvertUchar2Int2Uchar2(inV, out); 3385 verifyResultsConvertInt2Uchar2(inV, out, false); 3386 } catch (Exception e) { 3387 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Int2Uchar2: " + e.toString()); 3388 } 3389 try { 3390 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3391 scriptRelaxed.forEach_testConvertUchar2Int2Uchar2(inV, out); 3392 verifyResultsConvertInt2Uchar2(inV, out, true); 3393 } catch (Exception e) { 3394 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Int2Uchar2: " + e.toString()); 3395 } 3396 } 3397 3398 private void verifyResultsConvertInt2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 3399 int[] arrayInV = new int[INPUTSIZE * 2]; 3400 inV.copyTo(arrayInV); 3401 byte[] arrayOut = new byte[INPUTSIZE * 2]; 3402 out.copyTo(arrayOut); 3403 for (int i = 0; i < INPUTSIZE; i++) { 3404 for (int j = 0; j < 2 ; j++) { 3405 // Extract the inputs. 3406 ArgumentsIntUchar args = new ArgumentsIntUchar(); 3407 args.inV = arrayInV[i * 2 + j]; 3408 // Figure out what the outputs should have been. 3409 CoreMathVerifier.computeConvert(args); 3410 // Validate the outputs. 3411 boolean valid = true; 3412 if (args.out != arrayOut[i * 2 + j]) { 3413 valid = false; 3414 } 3415 if (!valid) { 3416 StringBuilder message = new StringBuilder(); 3417 message.append("Input inV: "); 3418 message.append(String.format("%d", args.inV)); 3419 message.append("\n"); 3420 message.append("Expected output out: "); 3421 message.append(String.format("0x%x", args.out)); 3422 message.append("\n"); 3423 message.append("Actual output out: "); 3424 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 3425 if (args.out != arrayOut[i * 2 + j]) { 3426 message.append(" FAIL"); 3427 } 3428 message.append("\n"); 3429 assertTrue("Incorrect output for checkConvertInt2Uchar2" + 3430 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3431 } 3432 } 3433 } 3434 } 3435 3436 private void checkConvertInt3Uchar3() { 3437 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0x2a552e3716bfd156l, false, 8); 3438 try { 3439 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3440 script.forEach_testConvertUchar3Int3Uchar3(inV, out); 3441 verifyResultsConvertInt3Uchar3(inV, out, false); 3442 } catch (Exception e) { 3443 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Int3Uchar3: " + e.toString()); 3444 } 3445 try { 3446 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3447 scriptRelaxed.forEach_testConvertUchar3Int3Uchar3(inV, out); 3448 verifyResultsConvertInt3Uchar3(inV, out, true); 3449 } catch (Exception e) { 3450 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Int3Uchar3: " + e.toString()); 3451 } 3452 } 3453 3454 private void verifyResultsConvertInt3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 3455 int[] arrayInV = new int[INPUTSIZE * 4]; 3456 inV.copyTo(arrayInV); 3457 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3458 out.copyTo(arrayOut); 3459 for (int i = 0; i < INPUTSIZE; i++) { 3460 for (int j = 0; j < 3 ; j++) { 3461 // Extract the inputs. 3462 ArgumentsIntUchar args = new ArgumentsIntUchar(); 3463 args.inV = arrayInV[i * 4 + j]; 3464 // Figure out what the outputs should have been. 3465 CoreMathVerifier.computeConvert(args); 3466 // Validate the outputs. 3467 boolean valid = true; 3468 if (args.out != arrayOut[i * 4 + j]) { 3469 valid = false; 3470 } 3471 if (!valid) { 3472 StringBuilder message = new StringBuilder(); 3473 message.append("Input inV: "); 3474 message.append(String.format("%d", args.inV)); 3475 message.append("\n"); 3476 message.append("Expected output out: "); 3477 message.append(String.format("0x%x", args.out)); 3478 message.append("\n"); 3479 message.append("Actual output out: "); 3480 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3481 if (args.out != arrayOut[i * 4 + j]) { 3482 message.append(" FAIL"); 3483 } 3484 message.append("\n"); 3485 assertTrue("Incorrect output for checkConvertInt3Uchar3" + 3486 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3487 } 3488 } 3489 } 3490 } 3491 3492 private void checkConvertInt4Uchar4() { 3493 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0x2a56f7520cdaf234l, false, 8); 3494 try { 3495 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3496 script.forEach_testConvertUchar4Int4Uchar4(inV, out); 3497 verifyResultsConvertInt4Uchar4(inV, out, false); 3498 } catch (Exception e) { 3499 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Int4Uchar4: " + e.toString()); 3500 } 3501 try { 3502 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3503 scriptRelaxed.forEach_testConvertUchar4Int4Uchar4(inV, out); 3504 verifyResultsConvertInt4Uchar4(inV, out, true); 3505 } catch (Exception e) { 3506 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Int4Uchar4: " + e.toString()); 3507 } 3508 } 3509 3510 private void verifyResultsConvertInt4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 3511 int[] arrayInV = new int[INPUTSIZE * 4]; 3512 inV.copyTo(arrayInV); 3513 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3514 out.copyTo(arrayOut); 3515 for (int i = 0; i < INPUTSIZE; i++) { 3516 for (int j = 0; j < 4 ; j++) { 3517 // Extract the inputs. 3518 ArgumentsIntUchar args = new ArgumentsIntUchar(); 3519 args.inV = arrayInV[i * 4 + j]; 3520 // Figure out what the outputs should have been. 3521 CoreMathVerifier.computeConvert(args); 3522 // Validate the outputs. 3523 boolean valid = true; 3524 if (args.out != arrayOut[i * 4 + j]) { 3525 valid = false; 3526 } 3527 if (!valid) { 3528 StringBuilder message = new StringBuilder(); 3529 message.append("Input inV: "); 3530 message.append(String.format("%d", args.inV)); 3531 message.append("\n"); 3532 message.append("Expected output out: "); 3533 message.append(String.format("0x%x", args.out)); 3534 message.append("\n"); 3535 message.append("Actual output out: "); 3536 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3537 if (args.out != arrayOut[i * 4 + j]) { 3538 message.append(" FAIL"); 3539 } 3540 message.append("\n"); 3541 assertTrue("Incorrect output for checkConvertInt4Uchar4" + 3542 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3543 } 3544 } 3545 } 3546 } 3547 3548 public class ArgumentsUintUchar { 3549 public int inV; 3550 public byte out; 3551 } 3552 3553 private void checkConvertUint2Uchar2() { 3554 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xd1e11e69b326bcf9l, false, 8); 3555 try { 3556 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3557 script.forEach_testConvertUchar2Uint2Uchar2(inV, out); 3558 verifyResultsConvertUint2Uchar2(inV, out, false); 3559 } catch (Exception e) { 3560 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Uint2Uchar2: " + e.toString()); 3561 } 3562 try { 3563 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE); 3564 scriptRelaxed.forEach_testConvertUchar2Uint2Uchar2(inV, out); 3565 verifyResultsConvertUint2Uchar2(inV, out, true); 3566 } catch (Exception e) { 3567 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar2Uint2Uchar2: " + e.toString()); 3568 } 3569 } 3570 3571 private void verifyResultsConvertUint2Uchar2(Allocation inV, Allocation out, boolean relaxed) { 3572 int[] arrayInV = new int[INPUTSIZE * 2]; 3573 inV.copyTo(arrayInV); 3574 byte[] arrayOut = new byte[INPUTSIZE * 2]; 3575 out.copyTo(arrayOut); 3576 for (int i = 0; i < INPUTSIZE; i++) { 3577 for (int j = 0; j < 2 ; j++) { 3578 // Extract the inputs. 3579 ArgumentsUintUchar args = new ArgumentsUintUchar(); 3580 args.inV = arrayInV[i * 2 + j]; 3581 // Figure out what the outputs should have been. 3582 CoreMathVerifier.computeConvert(args); 3583 // Validate the outputs. 3584 boolean valid = true; 3585 if (args.out != arrayOut[i * 2 + j]) { 3586 valid = false; 3587 } 3588 if (!valid) { 3589 StringBuilder message = new StringBuilder(); 3590 message.append("Input inV: "); 3591 message.append(String.format("0x%x", args.inV)); 3592 message.append("\n"); 3593 message.append("Expected output out: "); 3594 message.append(String.format("0x%x", args.out)); 3595 message.append("\n"); 3596 message.append("Actual output out: "); 3597 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 3598 if (args.out != arrayOut[i * 2 + j]) { 3599 message.append(" FAIL"); 3600 } 3601 message.append("\n"); 3602 assertTrue("Incorrect output for checkConvertUint2Uchar2" + 3603 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3604 } 3605 } 3606 } 3607 } 3608 3609 private void checkConvertUint3Uchar3() { 3610 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0xd1e2e784a941ddd7l, false, 8); 3611 try { 3612 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3613 script.forEach_testConvertUchar3Uint3Uchar3(inV, out); 3614 verifyResultsConvertUint3Uchar3(inV, out, false); 3615 } catch (Exception e) { 3616 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Uint3Uchar3: " + e.toString()); 3617 } 3618 try { 3619 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE); 3620 scriptRelaxed.forEach_testConvertUchar3Uint3Uchar3(inV, out); 3621 verifyResultsConvertUint3Uchar3(inV, out, true); 3622 } catch (Exception e) { 3623 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar3Uint3Uchar3: " + e.toString()); 3624 } 3625 } 3626 3627 private void verifyResultsConvertUint3Uchar3(Allocation inV, Allocation out, boolean relaxed) { 3628 int[] arrayInV = new int[INPUTSIZE * 4]; 3629 inV.copyTo(arrayInV); 3630 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3631 out.copyTo(arrayOut); 3632 for (int i = 0; i < INPUTSIZE; i++) { 3633 for (int j = 0; j < 3 ; j++) { 3634 // Extract the inputs. 3635 ArgumentsUintUchar args = new ArgumentsUintUchar(); 3636 args.inV = arrayInV[i * 4 + j]; 3637 // Figure out what the outputs should have been. 3638 CoreMathVerifier.computeConvert(args); 3639 // Validate the outputs. 3640 boolean valid = true; 3641 if (args.out != arrayOut[i * 4 + j]) { 3642 valid = false; 3643 } 3644 if (!valid) { 3645 StringBuilder message = new StringBuilder(); 3646 message.append("Input inV: "); 3647 message.append(String.format("0x%x", args.inV)); 3648 message.append("\n"); 3649 message.append("Expected output out: "); 3650 message.append(String.format("0x%x", args.out)); 3651 message.append("\n"); 3652 message.append("Actual output out: "); 3653 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3654 if (args.out != arrayOut[i * 4 + j]) { 3655 message.append(" FAIL"); 3656 } 3657 message.append("\n"); 3658 assertTrue("Incorrect output for checkConvertUint3Uchar3" + 3659 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3660 } 3661 } 3662 } 3663 } 3664 3665 private void checkConvertUint4Uchar4() { 3666 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0xd1e4b09f9f5cfeb5l, false, 8); 3667 try { 3668 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3669 script.forEach_testConvertUchar4Uint4Uchar4(inV, out); 3670 verifyResultsConvertUint4Uchar4(inV, out, false); 3671 } catch (Exception e) { 3672 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Uint4Uchar4: " + e.toString()); 3673 } 3674 try { 3675 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE); 3676 scriptRelaxed.forEach_testConvertUchar4Uint4Uchar4(inV, out); 3677 verifyResultsConvertUint4Uchar4(inV, out, true); 3678 } catch (Exception e) { 3679 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUchar4Uint4Uchar4: " + e.toString()); 3680 } 3681 } 3682 3683 private void verifyResultsConvertUint4Uchar4(Allocation inV, Allocation out, boolean relaxed) { 3684 int[] arrayInV = new int[INPUTSIZE * 4]; 3685 inV.copyTo(arrayInV); 3686 byte[] arrayOut = new byte[INPUTSIZE * 4]; 3687 out.copyTo(arrayOut); 3688 for (int i = 0; i < INPUTSIZE; i++) { 3689 for (int j = 0; j < 4 ; j++) { 3690 // Extract the inputs. 3691 ArgumentsUintUchar args = new ArgumentsUintUchar(); 3692 args.inV = arrayInV[i * 4 + j]; 3693 // Figure out what the outputs should have been. 3694 CoreMathVerifier.computeConvert(args); 3695 // Validate the outputs. 3696 boolean valid = true; 3697 if (args.out != arrayOut[i * 4 + j]) { 3698 valid = false; 3699 } 3700 if (!valid) { 3701 StringBuilder message = new StringBuilder(); 3702 message.append("Input inV: "); 3703 message.append(String.format("0x%x", args.inV)); 3704 message.append("\n"); 3705 message.append("Expected output out: "); 3706 message.append(String.format("0x%x", args.out)); 3707 message.append("\n"); 3708 message.append("Actual output out: "); 3709 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 3710 if (args.out != arrayOut[i * 4 + j]) { 3711 message.append(" FAIL"); 3712 } 3713 message.append("\n"); 3714 assertTrue("Incorrect output for checkConvertUint4Uchar4" + 3715 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3716 } 3717 } 3718 } 3719 } 3720 3721 public class ArgumentsFloatShort { 3722 public float inV; 3723 public short out; 3724 } 3725 3726 private void checkConvertFloat2Short2() { 3727 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xfb529ef98fcf2692l, -3.2768000000000000000e+04, 3.2767000000000000000e+04); 3728 try { 3729 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 3730 script.forEach_testConvertShort2Float2Short2(inV, out); 3731 verifyResultsConvertFloat2Short2(inV, out, false); 3732 } catch (Exception e) { 3733 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Float2Short2: " + e.toString()); 3734 } 3735 try { 3736 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 3737 scriptRelaxed.forEach_testConvertShort2Float2Short2(inV, out); 3738 verifyResultsConvertFloat2Short2(inV, out, true); 3739 } catch (Exception e) { 3740 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Float2Short2: " + e.toString()); 3741 } 3742 } 3743 3744 private void verifyResultsConvertFloat2Short2(Allocation inV, Allocation out, boolean relaxed) { 3745 float[] arrayInV = new float[INPUTSIZE * 2]; 3746 inV.copyTo(arrayInV); 3747 short[] arrayOut = new short[INPUTSIZE * 2]; 3748 out.copyTo(arrayOut); 3749 for (int i = 0; i < INPUTSIZE; i++) { 3750 for (int j = 0; j < 2 ; j++) { 3751 // Extract the inputs. 3752 ArgumentsFloatShort args = new ArgumentsFloatShort(); 3753 args.inV = arrayInV[i * 2 + j]; 3754 // Figure out what the outputs should have been. 3755 CoreMathVerifier.computeConvert(args); 3756 // Validate the outputs. 3757 boolean valid = true; 3758 if (args.out != arrayOut[i * 2 + j]) { 3759 valid = false; 3760 } 3761 if (!valid) { 3762 StringBuilder message = new StringBuilder(); 3763 message.append("Input inV: "); 3764 message.append(String.format("%14.8g {%8x} %15a", 3765 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 3766 message.append("\n"); 3767 message.append("Expected output out: "); 3768 message.append(String.format("%d", args.out)); 3769 message.append("\n"); 3770 message.append("Actual output out: "); 3771 message.append(String.format("%d", arrayOut[i * 2 + j])); 3772 if (args.out != arrayOut[i * 2 + j]) { 3773 message.append(" FAIL"); 3774 } 3775 message.append("\n"); 3776 assertTrue("Incorrect output for checkConvertFloat2Short2" + 3777 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3778 } 3779 } 3780 } 3781 } 3782 3783 private void checkConvertFloat3Short3() { 3784 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0xfb54681485ea4770l, -3.2768000000000000000e+04, 3.2767000000000000000e+04); 3785 try { 3786 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 3787 script.forEach_testConvertShort3Float3Short3(inV, out); 3788 verifyResultsConvertFloat3Short3(inV, out, false); 3789 } catch (Exception e) { 3790 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Float3Short3: " + e.toString()); 3791 } 3792 try { 3793 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 3794 scriptRelaxed.forEach_testConvertShort3Float3Short3(inV, out); 3795 verifyResultsConvertFloat3Short3(inV, out, true); 3796 } catch (Exception e) { 3797 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Float3Short3: " + e.toString()); 3798 } 3799 } 3800 3801 private void verifyResultsConvertFloat3Short3(Allocation inV, Allocation out, boolean relaxed) { 3802 float[] arrayInV = new float[INPUTSIZE * 4]; 3803 inV.copyTo(arrayInV); 3804 short[] arrayOut = new short[INPUTSIZE * 4]; 3805 out.copyTo(arrayOut); 3806 for (int i = 0; i < INPUTSIZE; i++) { 3807 for (int j = 0; j < 3 ; j++) { 3808 // Extract the inputs. 3809 ArgumentsFloatShort args = new ArgumentsFloatShort(); 3810 args.inV = arrayInV[i * 4 + j]; 3811 // Figure out what the outputs should have been. 3812 CoreMathVerifier.computeConvert(args); 3813 // Validate the outputs. 3814 boolean valid = true; 3815 if (args.out != arrayOut[i * 4 + j]) { 3816 valid = false; 3817 } 3818 if (!valid) { 3819 StringBuilder message = new StringBuilder(); 3820 message.append("Input inV: "); 3821 message.append(String.format("%14.8g {%8x} %15a", 3822 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 3823 message.append("\n"); 3824 message.append("Expected output out: "); 3825 message.append(String.format("%d", args.out)); 3826 message.append("\n"); 3827 message.append("Actual output out: "); 3828 message.append(String.format("%d", arrayOut[i * 4 + j])); 3829 if (args.out != arrayOut[i * 4 + j]) { 3830 message.append(" FAIL"); 3831 } 3832 message.append("\n"); 3833 assertTrue("Incorrect output for checkConvertFloat3Short3" + 3834 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3835 } 3836 } 3837 } 3838 } 3839 3840 private void checkConvertFloat4Short4() { 3841 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0xfb56312f7c05684el, -3.2768000000000000000e+04, 3.2767000000000000000e+04); 3842 try { 3843 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 3844 script.forEach_testConvertShort4Float4Short4(inV, out); 3845 verifyResultsConvertFloat4Short4(inV, out, false); 3846 } catch (Exception e) { 3847 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Float4Short4: " + e.toString()); 3848 } 3849 try { 3850 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 3851 scriptRelaxed.forEach_testConvertShort4Float4Short4(inV, out); 3852 verifyResultsConvertFloat4Short4(inV, out, true); 3853 } catch (Exception e) { 3854 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Float4Short4: " + e.toString()); 3855 } 3856 } 3857 3858 private void verifyResultsConvertFloat4Short4(Allocation inV, Allocation out, boolean relaxed) { 3859 float[] arrayInV = new float[INPUTSIZE * 4]; 3860 inV.copyTo(arrayInV); 3861 short[] arrayOut = new short[INPUTSIZE * 4]; 3862 out.copyTo(arrayOut); 3863 for (int i = 0; i < INPUTSIZE; i++) { 3864 for (int j = 0; j < 4 ; j++) { 3865 // Extract the inputs. 3866 ArgumentsFloatShort args = new ArgumentsFloatShort(); 3867 args.inV = arrayInV[i * 4 + j]; 3868 // Figure out what the outputs should have been. 3869 CoreMathVerifier.computeConvert(args); 3870 // Validate the outputs. 3871 boolean valid = true; 3872 if (args.out != arrayOut[i * 4 + j]) { 3873 valid = false; 3874 } 3875 if (!valid) { 3876 StringBuilder message = new StringBuilder(); 3877 message.append("Input inV: "); 3878 message.append(String.format("%14.8g {%8x} %15a", 3879 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 3880 message.append("\n"); 3881 message.append("Expected output out: "); 3882 message.append(String.format("%d", args.out)); 3883 message.append("\n"); 3884 message.append("Actual output out: "); 3885 message.append(String.format("%d", arrayOut[i * 4 + j])); 3886 if (args.out != arrayOut[i * 4 + j]) { 3887 message.append(" FAIL"); 3888 } 3889 message.append("\n"); 3890 assertTrue("Incorrect output for checkConvertFloat4Short4" + 3891 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3892 } 3893 } 3894 } 3895 } 3896 3897 public class ArgumentsCharShort { 3898 public byte inV; 3899 public short out; 3900 } 3901 3902 private void checkConvertChar2Short2() { 3903 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0x58626b4b60f84e52l, true, 7); 3904 try { 3905 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 3906 script.forEach_testConvertShort2Char2Short2(inV, out); 3907 verifyResultsConvertChar2Short2(inV, out, false); 3908 } catch (Exception e) { 3909 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Char2Short2: " + e.toString()); 3910 } 3911 try { 3912 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 3913 scriptRelaxed.forEach_testConvertShort2Char2Short2(inV, out); 3914 verifyResultsConvertChar2Short2(inV, out, true); 3915 } catch (Exception e) { 3916 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Char2Short2: " + e.toString()); 3917 } 3918 } 3919 3920 private void verifyResultsConvertChar2Short2(Allocation inV, Allocation out, boolean relaxed) { 3921 byte[] arrayInV = new byte[INPUTSIZE * 2]; 3922 inV.copyTo(arrayInV); 3923 short[] arrayOut = new short[INPUTSIZE * 2]; 3924 out.copyTo(arrayOut); 3925 for (int i = 0; i < INPUTSIZE; i++) { 3926 for (int j = 0; j < 2 ; j++) { 3927 // Extract the inputs. 3928 ArgumentsCharShort args = new ArgumentsCharShort(); 3929 args.inV = arrayInV[i * 2 + j]; 3930 // Figure out what the outputs should have been. 3931 CoreMathVerifier.computeConvert(args); 3932 // Validate the outputs. 3933 boolean valid = true; 3934 if (args.out != arrayOut[i * 2 + j]) { 3935 valid = false; 3936 } 3937 if (!valid) { 3938 StringBuilder message = new StringBuilder(); 3939 message.append("Input inV: "); 3940 message.append(String.format("%d", args.inV)); 3941 message.append("\n"); 3942 message.append("Expected output out: "); 3943 message.append(String.format("%d", args.out)); 3944 message.append("\n"); 3945 message.append("Actual output out: "); 3946 message.append(String.format("%d", arrayOut[i * 2 + j])); 3947 if (args.out != arrayOut[i * 2 + j]) { 3948 message.append(" FAIL"); 3949 } 3950 message.append("\n"); 3951 assertTrue("Incorrect output for checkConvertChar2Short2" + 3952 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 3953 } 3954 } 3955 } 3956 } 3957 3958 private void checkConvertChar3Short3() { 3959 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0x5864346657136f30l, true, 7); 3960 try { 3961 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 3962 script.forEach_testConvertShort3Char3Short3(inV, out); 3963 verifyResultsConvertChar3Short3(inV, out, false); 3964 } catch (Exception e) { 3965 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Char3Short3: " + e.toString()); 3966 } 3967 try { 3968 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 3969 scriptRelaxed.forEach_testConvertShort3Char3Short3(inV, out); 3970 verifyResultsConvertChar3Short3(inV, out, true); 3971 } catch (Exception e) { 3972 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Char3Short3: " + e.toString()); 3973 } 3974 } 3975 3976 private void verifyResultsConvertChar3Short3(Allocation inV, Allocation out, boolean relaxed) { 3977 byte[] arrayInV = new byte[INPUTSIZE * 4]; 3978 inV.copyTo(arrayInV); 3979 short[] arrayOut = new short[INPUTSIZE * 4]; 3980 out.copyTo(arrayOut); 3981 for (int i = 0; i < INPUTSIZE; i++) { 3982 for (int j = 0; j < 3 ; j++) { 3983 // Extract the inputs. 3984 ArgumentsCharShort args = new ArgumentsCharShort(); 3985 args.inV = arrayInV[i * 4 + j]; 3986 // Figure out what the outputs should have been. 3987 CoreMathVerifier.computeConvert(args); 3988 // Validate the outputs. 3989 boolean valid = true; 3990 if (args.out != arrayOut[i * 4 + j]) { 3991 valid = false; 3992 } 3993 if (!valid) { 3994 StringBuilder message = new StringBuilder(); 3995 message.append("Input inV: "); 3996 message.append(String.format("%d", args.inV)); 3997 message.append("\n"); 3998 message.append("Expected output out: "); 3999 message.append(String.format("%d", args.out)); 4000 message.append("\n"); 4001 message.append("Actual output out: "); 4002 message.append(String.format("%d", arrayOut[i * 4 + j])); 4003 if (args.out != arrayOut[i * 4 + j]) { 4004 message.append(" FAIL"); 4005 } 4006 message.append("\n"); 4007 assertTrue("Incorrect output for checkConvertChar3Short3" + 4008 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4009 } 4010 } 4011 } 4012 } 4013 4014 private void checkConvertChar4Short4() { 4015 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0x5865fd814d2e900el, true, 7); 4016 try { 4017 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4018 script.forEach_testConvertShort4Char4Short4(inV, out); 4019 verifyResultsConvertChar4Short4(inV, out, false); 4020 } catch (Exception e) { 4021 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Char4Short4: " + e.toString()); 4022 } 4023 try { 4024 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4025 scriptRelaxed.forEach_testConvertShort4Char4Short4(inV, out); 4026 verifyResultsConvertChar4Short4(inV, out, true); 4027 } catch (Exception e) { 4028 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Char4Short4: " + e.toString()); 4029 } 4030 } 4031 4032 private void verifyResultsConvertChar4Short4(Allocation inV, Allocation out, boolean relaxed) { 4033 byte[] arrayInV = new byte[INPUTSIZE * 4]; 4034 inV.copyTo(arrayInV); 4035 short[] arrayOut = new short[INPUTSIZE * 4]; 4036 out.copyTo(arrayOut); 4037 for (int i = 0; i < INPUTSIZE; i++) { 4038 for (int j = 0; j < 4 ; j++) { 4039 // Extract the inputs. 4040 ArgumentsCharShort args = new ArgumentsCharShort(); 4041 args.inV = arrayInV[i * 4 + j]; 4042 // Figure out what the outputs should have been. 4043 CoreMathVerifier.computeConvert(args); 4044 // Validate the outputs. 4045 boolean valid = true; 4046 if (args.out != arrayOut[i * 4 + j]) { 4047 valid = false; 4048 } 4049 if (!valid) { 4050 StringBuilder message = new StringBuilder(); 4051 message.append("Input inV: "); 4052 message.append(String.format("%d", args.inV)); 4053 message.append("\n"); 4054 message.append("Expected output out: "); 4055 message.append(String.format("%d", args.out)); 4056 message.append("\n"); 4057 message.append("Actual output out: "); 4058 message.append(String.format("%d", arrayOut[i * 4 + j])); 4059 if (args.out != arrayOut[i * 4 + j]) { 4060 message.append(" FAIL"); 4061 } 4062 message.append("\n"); 4063 assertTrue("Incorrect output for checkConvertChar4Short4" + 4064 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4065 } 4066 } 4067 } 4068 } 4069 4070 public class ArgumentsUcharShort { 4071 public byte inV; 4072 public short out; 4073 } 4074 4075 private void checkConvertUchar2Short2() { 4076 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x7d308b52fcd067fdl, false, 8); 4077 try { 4078 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4079 script.forEach_testConvertShort2Uchar2Short2(inV, out); 4080 verifyResultsConvertUchar2Short2(inV, out, false); 4081 } catch (Exception e) { 4082 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Uchar2Short2: " + e.toString()); 4083 } 4084 try { 4085 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4086 scriptRelaxed.forEach_testConvertShort2Uchar2Short2(inV, out); 4087 verifyResultsConvertUchar2Short2(inV, out, true); 4088 } catch (Exception e) { 4089 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Uchar2Short2: " + e.toString()); 4090 } 4091 } 4092 4093 private void verifyResultsConvertUchar2Short2(Allocation inV, Allocation out, boolean relaxed) { 4094 byte[] arrayInV = new byte[INPUTSIZE * 2]; 4095 inV.copyTo(arrayInV); 4096 short[] arrayOut = new short[INPUTSIZE * 2]; 4097 out.copyTo(arrayOut); 4098 for (int i = 0; i < INPUTSIZE; i++) { 4099 for (int j = 0; j < 2 ; j++) { 4100 // Extract the inputs. 4101 ArgumentsUcharShort args = new ArgumentsUcharShort(); 4102 args.inV = arrayInV[i * 2 + j]; 4103 // Figure out what the outputs should have been. 4104 CoreMathVerifier.computeConvert(args); 4105 // Validate the outputs. 4106 boolean valid = true; 4107 if (args.out != arrayOut[i * 2 + j]) { 4108 valid = false; 4109 } 4110 if (!valid) { 4111 StringBuilder message = new StringBuilder(); 4112 message.append("Input inV: "); 4113 message.append(String.format("0x%x", args.inV)); 4114 message.append("\n"); 4115 message.append("Expected output out: "); 4116 message.append(String.format("%d", args.out)); 4117 message.append("\n"); 4118 message.append("Actual output out: "); 4119 message.append(String.format("%d", arrayOut[i * 2 + j])); 4120 if (args.out != arrayOut[i * 2 + j]) { 4121 message.append(" FAIL"); 4122 } 4123 message.append("\n"); 4124 assertTrue("Incorrect output for checkConvertUchar2Short2" + 4125 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4126 } 4127 } 4128 } 4129 } 4130 4131 private void checkConvertUchar3Short3() { 4132 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x7d32546df2eb88dbl, false, 8); 4133 try { 4134 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4135 script.forEach_testConvertShort3Uchar3Short3(inV, out); 4136 verifyResultsConvertUchar3Short3(inV, out, false); 4137 } catch (Exception e) { 4138 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Uchar3Short3: " + e.toString()); 4139 } 4140 try { 4141 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4142 scriptRelaxed.forEach_testConvertShort3Uchar3Short3(inV, out); 4143 verifyResultsConvertUchar3Short3(inV, out, true); 4144 } catch (Exception e) { 4145 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Uchar3Short3: " + e.toString()); 4146 } 4147 } 4148 4149 private void verifyResultsConvertUchar3Short3(Allocation inV, Allocation out, boolean relaxed) { 4150 byte[] arrayInV = new byte[INPUTSIZE * 4]; 4151 inV.copyTo(arrayInV); 4152 short[] arrayOut = new short[INPUTSIZE * 4]; 4153 out.copyTo(arrayOut); 4154 for (int i = 0; i < INPUTSIZE; i++) { 4155 for (int j = 0; j < 3 ; j++) { 4156 // Extract the inputs. 4157 ArgumentsUcharShort args = new ArgumentsUcharShort(); 4158 args.inV = arrayInV[i * 4 + j]; 4159 // Figure out what the outputs should have been. 4160 CoreMathVerifier.computeConvert(args); 4161 // Validate the outputs. 4162 boolean valid = true; 4163 if (args.out != arrayOut[i * 4 + j]) { 4164 valid = false; 4165 } 4166 if (!valid) { 4167 StringBuilder message = new StringBuilder(); 4168 message.append("Input inV: "); 4169 message.append(String.format("0x%x", args.inV)); 4170 message.append("\n"); 4171 message.append("Expected output out: "); 4172 message.append(String.format("%d", args.out)); 4173 message.append("\n"); 4174 message.append("Actual output out: "); 4175 message.append(String.format("%d", arrayOut[i * 4 + j])); 4176 if (args.out != arrayOut[i * 4 + j]) { 4177 message.append(" FAIL"); 4178 } 4179 message.append("\n"); 4180 assertTrue("Incorrect output for checkConvertUchar3Short3" + 4181 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4182 } 4183 } 4184 } 4185 } 4186 4187 private void checkConvertUchar4Short4() { 4188 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7d341d88e906a9b9l, false, 8); 4189 try { 4190 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4191 script.forEach_testConvertShort4Uchar4Short4(inV, out); 4192 verifyResultsConvertUchar4Short4(inV, out, false); 4193 } catch (Exception e) { 4194 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Uchar4Short4: " + e.toString()); 4195 } 4196 try { 4197 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4198 scriptRelaxed.forEach_testConvertShort4Uchar4Short4(inV, out); 4199 verifyResultsConvertUchar4Short4(inV, out, true); 4200 } catch (Exception e) { 4201 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Uchar4Short4: " + e.toString()); 4202 } 4203 } 4204 4205 private void verifyResultsConvertUchar4Short4(Allocation inV, Allocation out, boolean relaxed) { 4206 byte[] arrayInV = new byte[INPUTSIZE * 4]; 4207 inV.copyTo(arrayInV); 4208 short[] arrayOut = new short[INPUTSIZE * 4]; 4209 out.copyTo(arrayOut); 4210 for (int i = 0; i < INPUTSIZE; i++) { 4211 for (int j = 0; j < 4 ; j++) { 4212 // Extract the inputs. 4213 ArgumentsUcharShort args = new ArgumentsUcharShort(); 4214 args.inV = arrayInV[i * 4 + j]; 4215 // Figure out what the outputs should have been. 4216 CoreMathVerifier.computeConvert(args); 4217 // Validate the outputs. 4218 boolean valid = true; 4219 if (args.out != arrayOut[i * 4 + j]) { 4220 valid = false; 4221 } 4222 if (!valid) { 4223 StringBuilder message = new StringBuilder(); 4224 message.append("Input inV: "); 4225 message.append(String.format("0x%x", args.inV)); 4226 message.append("\n"); 4227 message.append("Expected output out: "); 4228 message.append(String.format("%d", args.out)); 4229 message.append("\n"); 4230 message.append("Actual output out: "); 4231 message.append(String.format("%d", arrayOut[i * 4 + j])); 4232 if (args.out != arrayOut[i * 4 + j]) { 4233 message.append(" FAIL"); 4234 } 4235 message.append("\n"); 4236 assertTrue("Incorrect output for checkConvertUchar4Short4" + 4237 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4238 } 4239 } 4240 } 4241 } 4242 4243 public class ArgumentsShortShort { 4244 public short inV; 4245 public short out; 4246 } 4247 4248 private void checkConvertShort2Short2() { 4249 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x94caa18440d14d3el, true, 15); 4250 try { 4251 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4252 script.forEach_testConvertShort2Short2Short2(inV, out); 4253 verifyResultsConvertShort2Short2(inV, out, false); 4254 } catch (Exception e) { 4255 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Short2Short2: " + e.toString()); 4256 } 4257 try { 4258 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4259 scriptRelaxed.forEach_testConvertShort2Short2Short2(inV, out); 4260 verifyResultsConvertShort2Short2(inV, out, true); 4261 } catch (Exception e) { 4262 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Short2Short2: " + e.toString()); 4263 } 4264 } 4265 4266 private void verifyResultsConvertShort2Short2(Allocation inV, Allocation out, boolean relaxed) { 4267 short[] arrayInV = new short[INPUTSIZE * 2]; 4268 inV.copyTo(arrayInV); 4269 short[] arrayOut = new short[INPUTSIZE * 2]; 4270 out.copyTo(arrayOut); 4271 for (int i = 0; i < INPUTSIZE; i++) { 4272 for (int j = 0; j < 2 ; j++) { 4273 // Extract the inputs. 4274 ArgumentsShortShort args = new ArgumentsShortShort(); 4275 args.inV = arrayInV[i * 2 + j]; 4276 // Figure out what the outputs should have been. 4277 CoreMathVerifier.computeConvert(args); 4278 // Validate the outputs. 4279 boolean valid = true; 4280 if (args.out != arrayOut[i * 2 + j]) { 4281 valid = false; 4282 } 4283 if (!valid) { 4284 StringBuilder message = new StringBuilder(); 4285 message.append("Input inV: "); 4286 message.append(String.format("%d", args.inV)); 4287 message.append("\n"); 4288 message.append("Expected output out: "); 4289 message.append(String.format("%d", args.out)); 4290 message.append("\n"); 4291 message.append("Actual output out: "); 4292 message.append(String.format("%d", arrayOut[i * 2 + j])); 4293 if (args.out != arrayOut[i * 2 + j]) { 4294 message.append(" FAIL"); 4295 } 4296 message.append("\n"); 4297 assertTrue("Incorrect output for checkConvertShort2Short2" + 4298 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4299 } 4300 } 4301 } 4302 } 4303 4304 private void checkConvertShort3Short3() { 4305 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x94cc6a9f36ec6e1cl, true, 15); 4306 try { 4307 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4308 script.forEach_testConvertShort3Short3Short3(inV, out); 4309 verifyResultsConvertShort3Short3(inV, out, false); 4310 } catch (Exception e) { 4311 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Short3Short3: " + e.toString()); 4312 } 4313 try { 4314 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4315 scriptRelaxed.forEach_testConvertShort3Short3Short3(inV, out); 4316 verifyResultsConvertShort3Short3(inV, out, true); 4317 } catch (Exception e) { 4318 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Short3Short3: " + e.toString()); 4319 } 4320 } 4321 4322 private void verifyResultsConvertShort3Short3(Allocation inV, Allocation out, boolean relaxed) { 4323 short[] arrayInV = new short[INPUTSIZE * 4]; 4324 inV.copyTo(arrayInV); 4325 short[] arrayOut = new short[INPUTSIZE * 4]; 4326 out.copyTo(arrayOut); 4327 for (int i = 0; i < INPUTSIZE; i++) { 4328 for (int j = 0; j < 3 ; j++) { 4329 // Extract the inputs. 4330 ArgumentsShortShort args = new ArgumentsShortShort(); 4331 args.inV = arrayInV[i * 4 + j]; 4332 // Figure out what the outputs should have been. 4333 CoreMathVerifier.computeConvert(args); 4334 // Validate the outputs. 4335 boolean valid = true; 4336 if (args.out != arrayOut[i * 4 + j]) { 4337 valid = false; 4338 } 4339 if (!valid) { 4340 StringBuilder message = new StringBuilder(); 4341 message.append("Input inV: "); 4342 message.append(String.format("%d", args.inV)); 4343 message.append("\n"); 4344 message.append("Expected output out: "); 4345 message.append(String.format("%d", args.out)); 4346 message.append("\n"); 4347 message.append("Actual output out: "); 4348 message.append(String.format("%d", arrayOut[i * 4 + j])); 4349 if (args.out != arrayOut[i * 4 + j]) { 4350 message.append(" FAIL"); 4351 } 4352 message.append("\n"); 4353 assertTrue("Incorrect output for checkConvertShort3Short3" + 4354 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4355 } 4356 } 4357 } 4358 } 4359 4360 private void checkConvertShort4Short4() { 4361 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x94ce33ba2d078efal, true, 15); 4362 try { 4363 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4364 script.forEach_testConvertShort4Short4Short4(inV, out); 4365 verifyResultsConvertShort4Short4(inV, out, false); 4366 } catch (Exception e) { 4367 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Short4Short4: " + e.toString()); 4368 } 4369 try { 4370 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4371 scriptRelaxed.forEach_testConvertShort4Short4Short4(inV, out); 4372 verifyResultsConvertShort4Short4(inV, out, true); 4373 } catch (Exception e) { 4374 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Short4Short4: " + e.toString()); 4375 } 4376 } 4377 4378 private void verifyResultsConvertShort4Short4(Allocation inV, Allocation out, boolean relaxed) { 4379 short[] arrayInV = new short[INPUTSIZE * 4]; 4380 inV.copyTo(arrayInV); 4381 short[] arrayOut = new short[INPUTSIZE * 4]; 4382 out.copyTo(arrayOut); 4383 for (int i = 0; i < INPUTSIZE; i++) { 4384 for (int j = 0; j < 4 ; j++) { 4385 // Extract the inputs. 4386 ArgumentsShortShort args = new ArgumentsShortShort(); 4387 args.inV = arrayInV[i * 4 + j]; 4388 // Figure out what the outputs should have been. 4389 CoreMathVerifier.computeConvert(args); 4390 // Validate the outputs. 4391 boolean valid = true; 4392 if (args.out != arrayOut[i * 4 + j]) { 4393 valid = false; 4394 } 4395 if (!valid) { 4396 StringBuilder message = new StringBuilder(); 4397 message.append("Input inV: "); 4398 message.append(String.format("%d", args.inV)); 4399 message.append("\n"); 4400 message.append("Expected output out: "); 4401 message.append(String.format("%d", args.out)); 4402 message.append("\n"); 4403 message.append("Actual output out: "); 4404 message.append(String.format("%d", arrayOut[i * 4 + j])); 4405 if (args.out != arrayOut[i * 4 + j]) { 4406 message.append(" FAIL"); 4407 } 4408 message.append("\n"); 4409 assertTrue("Incorrect output for checkConvertShort4Short4" + 4410 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4411 } 4412 } 4413 } 4414 } 4415 4416 public class ArgumentsUshortShort { 4417 public short inV; 4418 public short out; 4419 } 4420 4421 private void checkConvertUshort2Short2() { 4422 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0xc36a02cb6e1d9cf7l, false, 15); 4423 try { 4424 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4425 script.forEach_testConvertShort2Ushort2Short2(inV, out); 4426 verifyResultsConvertUshort2Short2(inV, out, false); 4427 } catch (Exception e) { 4428 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Ushort2Short2: " + e.toString()); 4429 } 4430 try { 4431 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4432 scriptRelaxed.forEach_testConvertShort2Ushort2Short2(inV, out); 4433 verifyResultsConvertUshort2Short2(inV, out, true); 4434 } catch (Exception e) { 4435 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Ushort2Short2: " + e.toString()); 4436 } 4437 } 4438 4439 private void verifyResultsConvertUshort2Short2(Allocation inV, Allocation out, boolean relaxed) { 4440 short[] arrayInV = new short[INPUTSIZE * 2]; 4441 inV.copyTo(arrayInV); 4442 short[] arrayOut = new short[INPUTSIZE * 2]; 4443 out.copyTo(arrayOut); 4444 for (int i = 0; i < INPUTSIZE; i++) { 4445 for (int j = 0; j < 2 ; j++) { 4446 // Extract the inputs. 4447 ArgumentsUshortShort args = new ArgumentsUshortShort(); 4448 args.inV = arrayInV[i * 2 + j]; 4449 // Figure out what the outputs should have been. 4450 CoreMathVerifier.computeConvert(args); 4451 // Validate the outputs. 4452 boolean valid = true; 4453 if (args.out != arrayOut[i * 2 + j]) { 4454 valid = false; 4455 } 4456 if (!valid) { 4457 StringBuilder message = new StringBuilder(); 4458 message.append("Input inV: "); 4459 message.append(String.format("0x%x", args.inV)); 4460 message.append("\n"); 4461 message.append("Expected output out: "); 4462 message.append(String.format("%d", args.out)); 4463 message.append("\n"); 4464 message.append("Actual output out: "); 4465 message.append(String.format("%d", arrayOut[i * 2 + j])); 4466 if (args.out != arrayOut[i * 2 + j]) { 4467 message.append(" FAIL"); 4468 } 4469 message.append("\n"); 4470 assertTrue("Incorrect output for checkConvertUshort2Short2" + 4471 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4472 } 4473 } 4474 } 4475 } 4476 4477 private void checkConvertUshort3Short3() { 4478 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0xc36bcbe66438bdd5l, false, 15); 4479 try { 4480 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4481 script.forEach_testConvertShort3Ushort3Short3(inV, out); 4482 verifyResultsConvertUshort3Short3(inV, out, false); 4483 } catch (Exception e) { 4484 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Ushort3Short3: " + e.toString()); 4485 } 4486 try { 4487 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4488 scriptRelaxed.forEach_testConvertShort3Ushort3Short3(inV, out); 4489 verifyResultsConvertUshort3Short3(inV, out, true); 4490 } catch (Exception e) { 4491 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Ushort3Short3: " + e.toString()); 4492 } 4493 } 4494 4495 private void verifyResultsConvertUshort3Short3(Allocation inV, Allocation out, boolean relaxed) { 4496 short[] arrayInV = new short[INPUTSIZE * 4]; 4497 inV.copyTo(arrayInV); 4498 short[] arrayOut = new short[INPUTSIZE * 4]; 4499 out.copyTo(arrayOut); 4500 for (int i = 0; i < INPUTSIZE; i++) { 4501 for (int j = 0; j < 3 ; j++) { 4502 // Extract the inputs. 4503 ArgumentsUshortShort args = new ArgumentsUshortShort(); 4504 args.inV = arrayInV[i * 4 + j]; 4505 // Figure out what the outputs should have been. 4506 CoreMathVerifier.computeConvert(args); 4507 // Validate the outputs. 4508 boolean valid = true; 4509 if (args.out != arrayOut[i * 4 + j]) { 4510 valid = false; 4511 } 4512 if (!valid) { 4513 StringBuilder message = new StringBuilder(); 4514 message.append("Input inV: "); 4515 message.append(String.format("0x%x", args.inV)); 4516 message.append("\n"); 4517 message.append("Expected output out: "); 4518 message.append(String.format("%d", args.out)); 4519 message.append("\n"); 4520 message.append("Actual output out: "); 4521 message.append(String.format("%d", arrayOut[i * 4 + j])); 4522 if (args.out != arrayOut[i * 4 + j]) { 4523 message.append(" FAIL"); 4524 } 4525 message.append("\n"); 4526 assertTrue("Incorrect output for checkConvertUshort3Short3" + 4527 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4528 } 4529 } 4530 } 4531 } 4532 4533 private void checkConvertUshort4Short4() { 4534 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0xc36d95015a53deb3l, false, 15); 4535 try { 4536 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4537 script.forEach_testConvertShort4Ushort4Short4(inV, out); 4538 verifyResultsConvertUshort4Short4(inV, out, false); 4539 } catch (Exception e) { 4540 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Ushort4Short4: " + e.toString()); 4541 } 4542 try { 4543 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4544 scriptRelaxed.forEach_testConvertShort4Ushort4Short4(inV, out); 4545 verifyResultsConvertUshort4Short4(inV, out, true); 4546 } catch (Exception e) { 4547 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Ushort4Short4: " + e.toString()); 4548 } 4549 } 4550 4551 private void verifyResultsConvertUshort4Short4(Allocation inV, Allocation out, boolean relaxed) { 4552 short[] arrayInV = new short[INPUTSIZE * 4]; 4553 inV.copyTo(arrayInV); 4554 short[] arrayOut = new short[INPUTSIZE * 4]; 4555 out.copyTo(arrayOut); 4556 for (int i = 0; i < INPUTSIZE; i++) { 4557 for (int j = 0; j < 4 ; j++) { 4558 // Extract the inputs. 4559 ArgumentsUshortShort args = new ArgumentsUshortShort(); 4560 args.inV = arrayInV[i * 4 + j]; 4561 // Figure out what the outputs should have been. 4562 CoreMathVerifier.computeConvert(args); 4563 // Validate the outputs. 4564 boolean valid = true; 4565 if (args.out != arrayOut[i * 4 + j]) { 4566 valid = false; 4567 } 4568 if (!valid) { 4569 StringBuilder message = new StringBuilder(); 4570 message.append("Input inV: "); 4571 message.append(String.format("0x%x", args.inV)); 4572 message.append("\n"); 4573 message.append("Expected output out: "); 4574 message.append(String.format("%d", args.out)); 4575 message.append("\n"); 4576 message.append("Actual output out: "); 4577 message.append(String.format("%d", arrayOut[i * 4 + j])); 4578 if (args.out != arrayOut[i * 4 + j]) { 4579 message.append(" FAIL"); 4580 } 4581 message.append("\n"); 4582 assertTrue("Incorrect output for checkConvertUshort4Short4" + 4583 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4584 } 4585 } 4586 } 4587 } 4588 4589 public class ArgumentsIntShort { 4590 public int inV; 4591 public short out; 4592 } 4593 4594 private void checkConvertInt2Short2() { 4595 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0x2a535120b5b27b91l, true, 15); 4596 try { 4597 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4598 script.forEach_testConvertShort2Int2Short2(inV, out); 4599 verifyResultsConvertInt2Short2(inV, out, false); 4600 } catch (Exception e) { 4601 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Int2Short2: " + e.toString()); 4602 } 4603 try { 4604 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4605 scriptRelaxed.forEach_testConvertShort2Int2Short2(inV, out); 4606 verifyResultsConvertInt2Short2(inV, out, true); 4607 } catch (Exception e) { 4608 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Int2Short2: " + e.toString()); 4609 } 4610 } 4611 4612 private void verifyResultsConvertInt2Short2(Allocation inV, Allocation out, boolean relaxed) { 4613 int[] arrayInV = new int[INPUTSIZE * 2]; 4614 inV.copyTo(arrayInV); 4615 short[] arrayOut = new short[INPUTSIZE * 2]; 4616 out.copyTo(arrayOut); 4617 for (int i = 0; i < INPUTSIZE; i++) { 4618 for (int j = 0; j < 2 ; j++) { 4619 // Extract the inputs. 4620 ArgumentsIntShort args = new ArgumentsIntShort(); 4621 args.inV = arrayInV[i * 2 + j]; 4622 // Figure out what the outputs should have been. 4623 CoreMathVerifier.computeConvert(args); 4624 // Validate the outputs. 4625 boolean valid = true; 4626 if (args.out != arrayOut[i * 2 + j]) { 4627 valid = false; 4628 } 4629 if (!valid) { 4630 StringBuilder message = new StringBuilder(); 4631 message.append("Input inV: "); 4632 message.append(String.format("%d", args.inV)); 4633 message.append("\n"); 4634 message.append("Expected output out: "); 4635 message.append(String.format("%d", args.out)); 4636 message.append("\n"); 4637 message.append("Actual output out: "); 4638 message.append(String.format("%d", arrayOut[i * 2 + j])); 4639 if (args.out != arrayOut[i * 2 + j]) { 4640 message.append(" FAIL"); 4641 } 4642 message.append("\n"); 4643 assertTrue("Incorrect output for checkConvertInt2Short2" + 4644 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4645 } 4646 } 4647 } 4648 } 4649 4650 private void checkConvertInt3Short3() { 4651 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0x2a551a3babcd9c6fl, true, 15); 4652 try { 4653 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4654 script.forEach_testConvertShort3Int3Short3(inV, out); 4655 verifyResultsConvertInt3Short3(inV, out, false); 4656 } catch (Exception e) { 4657 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Int3Short3: " + e.toString()); 4658 } 4659 try { 4660 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4661 scriptRelaxed.forEach_testConvertShort3Int3Short3(inV, out); 4662 verifyResultsConvertInt3Short3(inV, out, true); 4663 } catch (Exception e) { 4664 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Int3Short3: " + e.toString()); 4665 } 4666 } 4667 4668 private void verifyResultsConvertInt3Short3(Allocation inV, Allocation out, boolean relaxed) { 4669 int[] arrayInV = new int[INPUTSIZE * 4]; 4670 inV.copyTo(arrayInV); 4671 short[] arrayOut = new short[INPUTSIZE * 4]; 4672 out.copyTo(arrayOut); 4673 for (int i = 0; i < INPUTSIZE; i++) { 4674 for (int j = 0; j < 3 ; j++) { 4675 // Extract the inputs. 4676 ArgumentsIntShort args = new ArgumentsIntShort(); 4677 args.inV = arrayInV[i * 4 + j]; 4678 // Figure out what the outputs should have been. 4679 CoreMathVerifier.computeConvert(args); 4680 // Validate the outputs. 4681 boolean valid = true; 4682 if (args.out != arrayOut[i * 4 + j]) { 4683 valid = false; 4684 } 4685 if (!valid) { 4686 StringBuilder message = new StringBuilder(); 4687 message.append("Input inV: "); 4688 message.append(String.format("%d", args.inV)); 4689 message.append("\n"); 4690 message.append("Expected output out: "); 4691 message.append(String.format("%d", args.out)); 4692 message.append("\n"); 4693 message.append("Actual output out: "); 4694 message.append(String.format("%d", arrayOut[i * 4 + j])); 4695 if (args.out != arrayOut[i * 4 + j]) { 4696 message.append(" FAIL"); 4697 } 4698 message.append("\n"); 4699 assertTrue("Incorrect output for checkConvertInt3Short3" + 4700 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4701 } 4702 } 4703 } 4704 } 4705 4706 private void checkConvertInt4Short4() { 4707 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0x2a56e356a1e8bd4dl, true, 15); 4708 try { 4709 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4710 script.forEach_testConvertShort4Int4Short4(inV, out); 4711 verifyResultsConvertInt4Short4(inV, out, false); 4712 } catch (Exception e) { 4713 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Int4Short4: " + e.toString()); 4714 } 4715 try { 4716 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4717 scriptRelaxed.forEach_testConvertShort4Int4Short4(inV, out); 4718 verifyResultsConvertInt4Short4(inV, out, true); 4719 } catch (Exception e) { 4720 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Int4Short4: " + e.toString()); 4721 } 4722 } 4723 4724 private void verifyResultsConvertInt4Short4(Allocation inV, Allocation out, boolean relaxed) { 4725 int[] arrayInV = new int[INPUTSIZE * 4]; 4726 inV.copyTo(arrayInV); 4727 short[] arrayOut = new short[INPUTSIZE * 4]; 4728 out.copyTo(arrayOut); 4729 for (int i = 0; i < INPUTSIZE; i++) { 4730 for (int j = 0; j < 4 ; j++) { 4731 // Extract the inputs. 4732 ArgumentsIntShort args = new ArgumentsIntShort(); 4733 args.inV = arrayInV[i * 4 + j]; 4734 // Figure out what the outputs should have been. 4735 CoreMathVerifier.computeConvert(args); 4736 // Validate the outputs. 4737 boolean valid = true; 4738 if (args.out != arrayOut[i * 4 + j]) { 4739 valid = false; 4740 } 4741 if (!valid) { 4742 StringBuilder message = new StringBuilder(); 4743 message.append("Input inV: "); 4744 message.append(String.format("%d", args.inV)); 4745 message.append("\n"); 4746 message.append("Expected output out: "); 4747 message.append(String.format("%d", args.out)); 4748 message.append("\n"); 4749 message.append("Actual output out: "); 4750 message.append(String.format("%d", arrayOut[i * 4 + j])); 4751 if (args.out != arrayOut[i * 4 + j]) { 4752 message.append(" FAIL"); 4753 } 4754 message.append("\n"); 4755 assertTrue("Incorrect output for checkConvertInt4Short4" + 4756 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4757 } 4758 } 4759 } 4760 } 4761 4762 public class ArgumentsUintShort { 4763 public int inV; 4764 public short out; 4765 } 4766 4767 private void checkConvertUint2Short2() { 4768 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xd1e10a6e48348812l, false, 15); 4769 try { 4770 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4771 script.forEach_testConvertShort2Uint2Short2(inV, out); 4772 verifyResultsConvertUint2Short2(inV, out, false); 4773 } catch (Exception e) { 4774 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Uint2Short2: " + e.toString()); 4775 } 4776 try { 4777 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE); 4778 scriptRelaxed.forEach_testConvertShort2Uint2Short2(inV, out); 4779 verifyResultsConvertUint2Short2(inV, out, true); 4780 } catch (Exception e) { 4781 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort2Uint2Short2: " + e.toString()); 4782 } 4783 } 4784 4785 private void verifyResultsConvertUint2Short2(Allocation inV, Allocation out, boolean relaxed) { 4786 int[] arrayInV = new int[INPUTSIZE * 2]; 4787 inV.copyTo(arrayInV); 4788 short[] arrayOut = new short[INPUTSIZE * 2]; 4789 out.copyTo(arrayOut); 4790 for (int i = 0; i < INPUTSIZE; i++) { 4791 for (int j = 0; j < 2 ; j++) { 4792 // Extract the inputs. 4793 ArgumentsUintShort args = new ArgumentsUintShort(); 4794 args.inV = arrayInV[i * 2 + j]; 4795 // Figure out what the outputs should have been. 4796 CoreMathVerifier.computeConvert(args); 4797 // Validate the outputs. 4798 boolean valid = true; 4799 if (args.out != arrayOut[i * 2 + j]) { 4800 valid = false; 4801 } 4802 if (!valid) { 4803 StringBuilder message = new StringBuilder(); 4804 message.append("Input inV: "); 4805 message.append(String.format("0x%x", args.inV)); 4806 message.append("\n"); 4807 message.append("Expected output out: "); 4808 message.append(String.format("%d", args.out)); 4809 message.append("\n"); 4810 message.append("Actual output out: "); 4811 message.append(String.format("%d", arrayOut[i * 2 + j])); 4812 if (args.out != arrayOut[i * 2 + j]) { 4813 message.append(" FAIL"); 4814 } 4815 message.append("\n"); 4816 assertTrue("Incorrect output for checkConvertUint2Short2" + 4817 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4818 } 4819 } 4820 } 4821 } 4822 4823 private void checkConvertUint3Short3() { 4824 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0xd1e2d3893e4fa8f0l, false, 15); 4825 try { 4826 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4827 script.forEach_testConvertShort3Uint3Short3(inV, out); 4828 verifyResultsConvertUint3Short3(inV, out, false); 4829 } catch (Exception e) { 4830 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Uint3Short3: " + e.toString()); 4831 } 4832 try { 4833 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE); 4834 scriptRelaxed.forEach_testConvertShort3Uint3Short3(inV, out); 4835 verifyResultsConvertUint3Short3(inV, out, true); 4836 } catch (Exception e) { 4837 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort3Uint3Short3: " + e.toString()); 4838 } 4839 } 4840 4841 private void verifyResultsConvertUint3Short3(Allocation inV, Allocation out, boolean relaxed) { 4842 int[] arrayInV = new int[INPUTSIZE * 4]; 4843 inV.copyTo(arrayInV); 4844 short[] arrayOut = new short[INPUTSIZE * 4]; 4845 out.copyTo(arrayOut); 4846 for (int i = 0; i < INPUTSIZE; i++) { 4847 for (int j = 0; j < 3 ; j++) { 4848 // Extract the inputs. 4849 ArgumentsUintShort args = new ArgumentsUintShort(); 4850 args.inV = arrayInV[i * 4 + j]; 4851 // Figure out what the outputs should have been. 4852 CoreMathVerifier.computeConvert(args); 4853 // Validate the outputs. 4854 boolean valid = true; 4855 if (args.out != arrayOut[i * 4 + j]) { 4856 valid = false; 4857 } 4858 if (!valid) { 4859 StringBuilder message = new StringBuilder(); 4860 message.append("Input inV: "); 4861 message.append(String.format("0x%x", args.inV)); 4862 message.append("\n"); 4863 message.append("Expected output out: "); 4864 message.append(String.format("%d", args.out)); 4865 message.append("\n"); 4866 message.append("Actual output out: "); 4867 message.append(String.format("%d", arrayOut[i * 4 + j])); 4868 if (args.out != arrayOut[i * 4 + j]) { 4869 message.append(" FAIL"); 4870 } 4871 message.append("\n"); 4872 assertTrue("Incorrect output for checkConvertUint3Short3" + 4873 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4874 } 4875 } 4876 } 4877 } 4878 4879 private void checkConvertUint4Short4() { 4880 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0xd1e49ca4346ac9cel, false, 15); 4881 try { 4882 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4883 script.forEach_testConvertShort4Uint4Short4(inV, out); 4884 verifyResultsConvertUint4Short4(inV, out, false); 4885 } catch (Exception e) { 4886 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Uint4Short4: " + e.toString()); 4887 } 4888 try { 4889 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE); 4890 scriptRelaxed.forEach_testConvertShort4Uint4Short4(inV, out); 4891 verifyResultsConvertUint4Short4(inV, out, true); 4892 } catch (Exception e) { 4893 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertShort4Uint4Short4: " + e.toString()); 4894 } 4895 } 4896 4897 private void verifyResultsConvertUint4Short4(Allocation inV, Allocation out, boolean relaxed) { 4898 int[] arrayInV = new int[INPUTSIZE * 4]; 4899 inV.copyTo(arrayInV); 4900 short[] arrayOut = new short[INPUTSIZE * 4]; 4901 out.copyTo(arrayOut); 4902 for (int i = 0; i < INPUTSIZE; i++) { 4903 for (int j = 0; j < 4 ; j++) { 4904 // Extract the inputs. 4905 ArgumentsUintShort args = new ArgumentsUintShort(); 4906 args.inV = arrayInV[i * 4 + j]; 4907 // Figure out what the outputs should have been. 4908 CoreMathVerifier.computeConvert(args); 4909 // Validate the outputs. 4910 boolean valid = true; 4911 if (args.out != arrayOut[i * 4 + j]) { 4912 valid = false; 4913 } 4914 if (!valid) { 4915 StringBuilder message = new StringBuilder(); 4916 message.append("Input inV: "); 4917 message.append(String.format("0x%x", args.inV)); 4918 message.append("\n"); 4919 message.append("Expected output out: "); 4920 message.append(String.format("%d", args.out)); 4921 message.append("\n"); 4922 message.append("Actual output out: "); 4923 message.append(String.format("%d", arrayOut[i * 4 + j])); 4924 if (args.out != arrayOut[i * 4 + j]) { 4925 message.append(" FAIL"); 4926 } 4927 message.append("\n"); 4928 assertTrue("Incorrect output for checkConvertUint4Short4" + 4929 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4930 } 4931 } 4932 } 4933 } 4934 4935 public class ArgumentsFloatUshort { 4936 public float inV; 4937 public short out; 4938 } 4939 4940 private void checkConvertFloat2Ushort2() { 4941 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0x36e4b950b708416fl, 0.0000000000000000000e+00, 6.5535000000000000000e+04); 4942 try { 4943 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 4944 script.forEach_testConvertUshort2Float2Ushort2(inV, out); 4945 verifyResultsConvertFloat2Ushort2(inV, out, false); 4946 } catch (Exception e) { 4947 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Float2Ushort2: " + e.toString()); 4948 } 4949 try { 4950 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 4951 scriptRelaxed.forEach_testConvertUshort2Float2Ushort2(inV, out); 4952 verifyResultsConvertFloat2Ushort2(inV, out, true); 4953 } catch (Exception e) { 4954 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Float2Ushort2: " + e.toString()); 4955 } 4956 } 4957 4958 private void verifyResultsConvertFloat2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 4959 float[] arrayInV = new float[INPUTSIZE * 2]; 4960 inV.copyTo(arrayInV); 4961 short[] arrayOut = new short[INPUTSIZE * 2]; 4962 out.copyTo(arrayOut); 4963 for (int i = 0; i < INPUTSIZE; i++) { 4964 for (int j = 0; j < 2 ; j++) { 4965 // Extract the inputs. 4966 ArgumentsFloatUshort args = new ArgumentsFloatUshort(); 4967 args.inV = arrayInV[i * 2 + j]; 4968 // Figure out what the outputs should have been. 4969 CoreMathVerifier.computeConvert(args); 4970 // Validate the outputs. 4971 boolean valid = true; 4972 if (args.out != arrayOut[i * 2 + j]) { 4973 valid = false; 4974 } 4975 if (!valid) { 4976 StringBuilder message = new StringBuilder(); 4977 message.append("Input inV: "); 4978 message.append(String.format("%14.8g {%8x} %15a", 4979 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 4980 message.append("\n"); 4981 message.append("Expected output out: "); 4982 message.append(String.format("0x%x", args.out)); 4983 message.append("\n"); 4984 message.append("Actual output out: "); 4985 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 4986 if (args.out != arrayOut[i * 2 + j]) { 4987 message.append(" FAIL"); 4988 } 4989 message.append("\n"); 4990 assertTrue("Incorrect output for checkConvertFloat2Ushort2" + 4991 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 4992 } 4993 } 4994 } 4995 } 4996 4997 private void checkConvertFloat3Ushort3() { 4998 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x373180d80d63d29bl, 0.0000000000000000000e+00, 6.5535000000000000000e+04); 4999 try { 5000 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5001 script.forEach_testConvertUshort3Float3Ushort3(inV, out); 5002 verifyResultsConvertFloat3Ushort3(inV, out, false); 5003 } catch (Exception e) { 5004 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Float3Ushort3: " + e.toString()); 5005 } 5006 try { 5007 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5008 scriptRelaxed.forEach_testConvertUshort3Float3Ushort3(inV, out); 5009 verifyResultsConvertFloat3Ushort3(inV, out, true); 5010 } catch (Exception e) { 5011 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Float3Ushort3: " + e.toString()); 5012 } 5013 } 5014 5015 private void verifyResultsConvertFloat3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5016 float[] arrayInV = new float[INPUTSIZE * 4]; 5017 inV.copyTo(arrayInV); 5018 short[] arrayOut = new short[INPUTSIZE * 4]; 5019 out.copyTo(arrayOut); 5020 for (int i = 0; i < INPUTSIZE; i++) { 5021 for (int j = 0; j < 3 ; j++) { 5022 // Extract the inputs. 5023 ArgumentsFloatUshort args = new ArgumentsFloatUshort(); 5024 args.inV = arrayInV[i * 4 + j]; 5025 // Figure out what the outputs should have been. 5026 CoreMathVerifier.computeConvert(args); 5027 // Validate the outputs. 5028 boolean valid = true; 5029 if (args.out != arrayOut[i * 4 + j]) { 5030 valid = false; 5031 } 5032 if (!valid) { 5033 StringBuilder message = new StringBuilder(); 5034 message.append("Input inV: "); 5035 message.append(String.format("%14.8g {%8x} %15a", 5036 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 5037 message.append("\n"); 5038 message.append("Expected output out: "); 5039 message.append(String.format("0x%x", args.out)); 5040 message.append("\n"); 5041 message.append("Actual output out: "); 5042 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5043 if (args.out != arrayOut[i * 4 + j]) { 5044 message.append(" FAIL"); 5045 } 5046 message.append("\n"); 5047 assertTrue("Incorrect output for checkConvertFloat3Ushort3" + 5048 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5049 } 5050 } 5051 } 5052 } 5053 5054 private void checkConvertFloat4Ushort4() { 5055 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x377e485f63bf63c7l, 0.0000000000000000000e+00, 6.5535000000000000000e+04); 5056 try { 5057 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5058 script.forEach_testConvertUshort4Float4Ushort4(inV, out); 5059 verifyResultsConvertFloat4Ushort4(inV, out, false); 5060 } catch (Exception e) { 5061 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Float4Ushort4: " + e.toString()); 5062 } 5063 try { 5064 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5065 scriptRelaxed.forEach_testConvertUshort4Float4Ushort4(inV, out); 5066 verifyResultsConvertFloat4Ushort4(inV, out, true); 5067 } catch (Exception e) { 5068 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Float4Ushort4: " + e.toString()); 5069 } 5070 } 5071 5072 private void verifyResultsConvertFloat4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5073 float[] arrayInV = new float[INPUTSIZE * 4]; 5074 inV.copyTo(arrayInV); 5075 short[] arrayOut = new short[INPUTSIZE * 4]; 5076 out.copyTo(arrayOut); 5077 for (int i = 0; i < INPUTSIZE; i++) { 5078 for (int j = 0; j < 4 ; j++) { 5079 // Extract the inputs. 5080 ArgumentsFloatUshort args = new ArgumentsFloatUshort(); 5081 args.inV = arrayInV[i * 4 + j]; 5082 // Figure out what the outputs should have been. 5083 CoreMathVerifier.computeConvert(args); 5084 // Validate the outputs. 5085 boolean valid = true; 5086 if (args.out != arrayOut[i * 4 + j]) { 5087 valid = false; 5088 } 5089 if (!valid) { 5090 StringBuilder message = new StringBuilder(); 5091 message.append("Input inV: "); 5092 message.append(String.format("%14.8g {%8x} %15a", 5093 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 5094 message.append("\n"); 5095 message.append("Expected output out: "); 5096 message.append(String.format("0x%x", args.out)); 5097 message.append("\n"); 5098 message.append("Actual output out: "); 5099 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5100 if (args.out != arrayOut[i * 4 + j]) { 5101 message.append(" FAIL"); 5102 } 5103 message.append("\n"); 5104 assertTrue("Incorrect output for checkConvertFloat4Ushort4" + 5105 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5106 } 5107 } 5108 } 5109 } 5110 5111 public class ArgumentsCharUshort { 5112 public byte inV; 5113 public short out; 5114 } 5115 5116 private void checkConvertChar2Ushort2() { 5117 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0xd88c0b0ed8f1eeafl, false, 7); 5118 try { 5119 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5120 script.forEach_testConvertUshort2Char2Ushort2(inV, out); 5121 verifyResultsConvertChar2Ushort2(inV, out, false); 5122 } catch (Exception e) { 5123 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Char2Ushort2: " + e.toString()); 5124 } 5125 try { 5126 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5127 scriptRelaxed.forEach_testConvertUshort2Char2Ushort2(inV, out); 5128 verifyResultsConvertChar2Ushort2(inV, out, true); 5129 } catch (Exception e) { 5130 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Char2Ushort2: " + e.toString()); 5131 } 5132 } 5133 5134 private void verifyResultsConvertChar2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 5135 byte[] arrayInV = new byte[INPUTSIZE * 2]; 5136 inV.copyTo(arrayInV); 5137 short[] arrayOut = new short[INPUTSIZE * 2]; 5138 out.copyTo(arrayOut); 5139 for (int i = 0; i < INPUTSIZE; i++) { 5140 for (int j = 0; j < 2 ; j++) { 5141 // Extract the inputs. 5142 ArgumentsCharUshort args = new ArgumentsCharUshort(); 5143 args.inV = arrayInV[i * 2 + j]; 5144 // Figure out what the outputs should have been. 5145 CoreMathVerifier.computeConvert(args); 5146 // Validate the outputs. 5147 boolean valid = true; 5148 if (args.out != arrayOut[i * 2 + j]) { 5149 valid = false; 5150 } 5151 if (!valid) { 5152 StringBuilder message = new StringBuilder(); 5153 message.append("Input inV: "); 5154 message.append(String.format("%d", args.inV)); 5155 message.append("\n"); 5156 message.append("Expected output out: "); 5157 message.append(String.format("0x%x", args.out)); 5158 message.append("\n"); 5159 message.append("Actual output out: "); 5160 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 5161 if (args.out != arrayOut[i * 2 + j]) { 5162 message.append(" FAIL"); 5163 } 5164 message.append("\n"); 5165 assertTrue("Incorrect output for checkConvertChar2Ushort2" + 5166 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5167 } 5168 } 5169 } 5170 } 5171 5172 private void checkConvertChar3Ushort3() { 5173 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0xd8d8d2962f4d7fdbl, false, 7); 5174 try { 5175 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5176 script.forEach_testConvertUshort3Char3Ushort3(inV, out); 5177 verifyResultsConvertChar3Ushort3(inV, out, false); 5178 } catch (Exception e) { 5179 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Char3Ushort3: " + e.toString()); 5180 } 5181 try { 5182 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5183 scriptRelaxed.forEach_testConvertUshort3Char3Ushort3(inV, out); 5184 verifyResultsConvertChar3Ushort3(inV, out, true); 5185 } catch (Exception e) { 5186 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Char3Ushort3: " + e.toString()); 5187 } 5188 } 5189 5190 private void verifyResultsConvertChar3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5191 byte[] arrayInV = new byte[INPUTSIZE * 4]; 5192 inV.copyTo(arrayInV); 5193 short[] arrayOut = new short[INPUTSIZE * 4]; 5194 out.copyTo(arrayOut); 5195 for (int i = 0; i < INPUTSIZE; i++) { 5196 for (int j = 0; j < 3 ; j++) { 5197 // Extract the inputs. 5198 ArgumentsCharUshort args = new ArgumentsCharUshort(); 5199 args.inV = arrayInV[i * 4 + j]; 5200 // Figure out what the outputs should have been. 5201 CoreMathVerifier.computeConvert(args); 5202 // Validate the outputs. 5203 boolean valid = true; 5204 if (args.out != arrayOut[i * 4 + j]) { 5205 valid = false; 5206 } 5207 if (!valid) { 5208 StringBuilder message = new StringBuilder(); 5209 message.append("Input inV: "); 5210 message.append(String.format("%d", args.inV)); 5211 message.append("\n"); 5212 message.append("Expected output out: "); 5213 message.append(String.format("0x%x", args.out)); 5214 message.append("\n"); 5215 message.append("Actual output out: "); 5216 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5217 if (args.out != arrayOut[i * 4 + j]) { 5218 message.append(" FAIL"); 5219 } 5220 message.append("\n"); 5221 assertTrue("Incorrect output for checkConvertChar3Ushort3" + 5222 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5223 } 5224 } 5225 } 5226 } 5227 5228 private void checkConvertChar4Ushort4() { 5229 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0xd9259a1d85a91107l, false, 7); 5230 try { 5231 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5232 script.forEach_testConvertUshort4Char4Ushort4(inV, out); 5233 verifyResultsConvertChar4Ushort4(inV, out, false); 5234 } catch (Exception e) { 5235 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Char4Ushort4: " + e.toString()); 5236 } 5237 try { 5238 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5239 scriptRelaxed.forEach_testConvertUshort4Char4Ushort4(inV, out); 5240 verifyResultsConvertChar4Ushort4(inV, out, true); 5241 } catch (Exception e) { 5242 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Char4Ushort4: " + e.toString()); 5243 } 5244 } 5245 5246 private void verifyResultsConvertChar4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5247 byte[] arrayInV = new byte[INPUTSIZE * 4]; 5248 inV.copyTo(arrayInV); 5249 short[] arrayOut = new short[INPUTSIZE * 4]; 5250 out.copyTo(arrayOut); 5251 for (int i = 0; i < INPUTSIZE; i++) { 5252 for (int j = 0; j < 4 ; j++) { 5253 // Extract the inputs. 5254 ArgumentsCharUshort args = new ArgumentsCharUshort(); 5255 args.inV = arrayInV[i * 4 + j]; 5256 // Figure out what the outputs should have been. 5257 CoreMathVerifier.computeConvert(args); 5258 // Validate the outputs. 5259 boolean valid = true; 5260 if (args.out != arrayOut[i * 4 + j]) { 5261 valid = false; 5262 } 5263 if (!valid) { 5264 StringBuilder message = new StringBuilder(); 5265 message.append("Input inV: "); 5266 message.append(String.format("%d", args.inV)); 5267 message.append("\n"); 5268 message.append("Expected output out: "); 5269 message.append(String.format("0x%x", args.out)); 5270 message.append("\n"); 5271 message.append("Actual output out: "); 5272 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5273 if (args.out != arrayOut[i * 4 + j]) { 5274 message.append(" FAIL"); 5275 } 5276 message.append("\n"); 5277 assertTrue("Incorrect output for checkConvertChar4Ushort4" + 5278 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5279 } 5280 } 5281 } 5282 } 5283 5284 public class ArgumentsUcharUshort { 5285 public byte inV; 5286 public short out; 5287 } 5288 5289 private void checkConvertUchar2Ushort2() { 5290 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x72b6c56063e3e68l, false, 8); 5291 try { 5292 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5293 script.forEach_testConvertUshort2Uchar2Ushort2(inV, out); 5294 verifyResultsConvertUchar2Ushort2(inV, out, false); 5295 } catch (Exception e) { 5296 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Uchar2Ushort2: " + e.toString()); 5297 } 5298 try { 5299 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5300 scriptRelaxed.forEach_testConvertUshort2Uchar2Ushort2(inV, out); 5301 verifyResultsConvertUchar2Ushort2(inV, out, true); 5302 } catch (Exception e) { 5303 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Uchar2Ushort2: " + e.toString()); 5304 } 5305 } 5306 5307 private void verifyResultsConvertUchar2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 5308 byte[] arrayInV = new byte[INPUTSIZE * 2]; 5309 inV.copyTo(arrayInV); 5310 short[] arrayOut = new short[INPUTSIZE * 2]; 5311 out.copyTo(arrayOut); 5312 for (int i = 0; i < INPUTSIZE; i++) { 5313 for (int j = 0; j < 2 ; j++) { 5314 // Extract the inputs. 5315 ArgumentsUcharUshort args = new ArgumentsUcharUshort(); 5316 args.inV = arrayInV[i * 2 + j]; 5317 // Figure out what the outputs should have been. 5318 CoreMathVerifier.computeConvert(args); 5319 // Validate the outputs. 5320 boolean valid = true; 5321 if (args.out != arrayOut[i * 2 + j]) { 5322 valid = false; 5323 } 5324 if (!valid) { 5325 StringBuilder message = new StringBuilder(); 5326 message.append("Input inV: "); 5327 message.append(String.format("0x%x", args.inV)); 5328 message.append("\n"); 5329 message.append("Expected output out: "); 5330 message.append(String.format("0x%x", args.out)); 5331 message.append("\n"); 5332 message.append("Actual output out: "); 5333 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 5334 if (args.out != arrayOut[i * 2 + j]) { 5335 message.append(" FAIL"); 5336 } 5337 message.append("\n"); 5338 assertTrue("Incorrect output for checkConvertUchar2Ushort2" + 5339 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5340 } 5341 } 5342 } 5343 } 5344 5345 private void checkConvertUchar3Ushort3() { 5346 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x77833dd5c99cf94l, false, 8); 5347 try { 5348 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5349 script.forEach_testConvertUshort3Uchar3Ushort3(inV, out); 5350 verifyResultsConvertUchar3Ushort3(inV, out, false); 5351 } catch (Exception e) { 5352 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Uchar3Ushort3: " + e.toString()); 5353 } 5354 try { 5355 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5356 scriptRelaxed.forEach_testConvertUshort3Uchar3Ushort3(inV, out); 5357 verifyResultsConvertUchar3Ushort3(inV, out, true); 5358 } catch (Exception e) { 5359 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Uchar3Ushort3: " + e.toString()); 5360 } 5361 } 5362 5363 private void verifyResultsConvertUchar3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5364 byte[] arrayInV = new byte[INPUTSIZE * 4]; 5365 inV.copyTo(arrayInV); 5366 short[] arrayOut = new short[INPUTSIZE * 4]; 5367 out.copyTo(arrayOut); 5368 for (int i = 0; i < INPUTSIZE; i++) { 5369 for (int j = 0; j < 3 ; j++) { 5370 // Extract the inputs. 5371 ArgumentsUcharUshort args = new ArgumentsUcharUshort(); 5372 args.inV = arrayInV[i * 4 + j]; 5373 // Figure out what the outputs should have been. 5374 CoreMathVerifier.computeConvert(args); 5375 // Validate the outputs. 5376 boolean valid = true; 5377 if (args.out != arrayOut[i * 4 + j]) { 5378 valid = false; 5379 } 5380 if (!valid) { 5381 StringBuilder message = new StringBuilder(); 5382 message.append("Input inV: "); 5383 message.append(String.format("0x%x", args.inV)); 5384 message.append("\n"); 5385 message.append("Expected output out: "); 5386 message.append(String.format("0x%x", args.out)); 5387 message.append("\n"); 5388 message.append("Actual output out: "); 5389 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5390 if (args.out != arrayOut[i * 4 + j]) { 5391 message.append(" FAIL"); 5392 } 5393 message.append("\n"); 5394 assertTrue("Incorrect output for checkConvertUchar3Ushort3" + 5395 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5396 } 5397 } 5398 } 5399 } 5400 5401 private void checkConvertUchar4Ushort4() { 5402 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7c4fb64b2f560c0l, false, 8); 5403 try { 5404 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5405 script.forEach_testConvertUshort4Uchar4Ushort4(inV, out); 5406 verifyResultsConvertUchar4Ushort4(inV, out, false); 5407 } catch (Exception e) { 5408 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Uchar4Ushort4: " + e.toString()); 5409 } 5410 try { 5411 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5412 scriptRelaxed.forEach_testConvertUshort4Uchar4Ushort4(inV, out); 5413 verifyResultsConvertUchar4Ushort4(inV, out, true); 5414 } catch (Exception e) { 5415 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Uchar4Ushort4: " + e.toString()); 5416 } 5417 } 5418 5419 private void verifyResultsConvertUchar4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5420 byte[] arrayInV = new byte[INPUTSIZE * 4]; 5421 inV.copyTo(arrayInV); 5422 short[] arrayOut = new short[INPUTSIZE * 4]; 5423 out.copyTo(arrayOut); 5424 for (int i = 0; i < INPUTSIZE; i++) { 5425 for (int j = 0; j < 4 ; j++) { 5426 // Extract the inputs. 5427 ArgumentsUcharUshort args = new ArgumentsUcharUshort(); 5428 args.inV = arrayInV[i * 4 + j]; 5429 // Figure out what the outputs should have been. 5430 CoreMathVerifier.computeConvert(args); 5431 // Validate the outputs. 5432 boolean valid = true; 5433 if (args.out != arrayOut[i * 4 + j]) { 5434 valid = false; 5435 } 5436 if (!valid) { 5437 StringBuilder message = new StringBuilder(); 5438 message.append("Input inV: "); 5439 message.append(String.format("0x%x", args.inV)); 5440 message.append("\n"); 5441 message.append("Expected output out: "); 5442 message.append(String.format("0x%x", args.out)); 5443 message.append("\n"); 5444 message.append("Actual output out: "); 5445 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5446 if (args.out != arrayOut[i * 4 + j]) { 5447 message.append(" FAIL"); 5448 } 5449 message.append("\n"); 5450 assertTrue("Incorrect output for checkConvertUchar4Ushort4" + 5451 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5452 } 5453 } 5454 } 5455 } 5456 5457 public class ArgumentsShortUshort { 5458 public short inV; 5459 public short out; 5460 } 5461 5462 private void checkConvertShort2Ushort2() { 5463 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0xfe0d269c7264c053l, false, 15); 5464 try { 5465 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5466 script.forEach_testConvertUshort2Short2Ushort2(inV, out); 5467 verifyResultsConvertShort2Ushort2(inV, out, false); 5468 } catch (Exception e) { 5469 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Short2Ushort2: " + e.toString()); 5470 } 5471 try { 5472 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5473 scriptRelaxed.forEach_testConvertUshort2Short2Ushort2(inV, out); 5474 verifyResultsConvertShort2Ushort2(inV, out, true); 5475 } catch (Exception e) { 5476 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Short2Ushort2: " + e.toString()); 5477 } 5478 } 5479 5480 private void verifyResultsConvertShort2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 5481 short[] arrayInV = new short[INPUTSIZE * 2]; 5482 inV.copyTo(arrayInV); 5483 short[] arrayOut = new short[INPUTSIZE * 2]; 5484 out.copyTo(arrayOut); 5485 for (int i = 0; i < INPUTSIZE; i++) { 5486 for (int j = 0; j < 2 ; j++) { 5487 // Extract the inputs. 5488 ArgumentsShortUshort args = new ArgumentsShortUshort(); 5489 args.inV = arrayInV[i * 2 + j]; 5490 // Figure out what the outputs should have been. 5491 CoreMathVerifier.computeConvert(args); 5492 // Validate the outputs. 5493 boolean valid = true; 5494 if (args.out != arrayOut[i * 2 + j]) { 5495 valid = false; 5496 } 5497 if (!valid) { 5498 StringBuilder message = new StringBuilder(); 5499 message.append("Input inV: "); 5500 message.append(String.format("%d", args.inV)); 5501 message.append("\n"); 5502 message.append("Expected output out: "); 5503 message.append(String.format("0x%x", args.out)); 5504 message.append("\n"); 5505 message.append("Actual output out: "); 5506 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 5507 if (args.out != arrayOut[i * 2 + j]) { 5508 message.append(" FAIL"); 5509 } 5510 message.append("\n"); 5511 assertTrue("Incorrect output for checkConvertShort2Ushort2" + 5512 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5513 } 5514 } 5515 } 5516 } 5517 5518 private void checkConvertShort3Ushort3() { 5519 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0xfe59ee23c8c0517fl, false, 15); 5520 try { 5521 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5522 script.forEach_testConvertUshort3Short3Ushort3(inV, out); 5523 verifyResultsConvertShort3Ushort3(inV, out, false); 5524 } catch (Exception e) { 5525 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Short3Ushort3: " + e.toString()); 5526 } 5527 try { 5528 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5529 scriptRelaxed.forEach_testConvertUshort3Short3Ushort3(inV, out); 5530 verifyResultsConvertShort3Ushort3(inV, out, true); 5531 } catch (Exception e) { 5532 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Short3Ushort3: " + e.toString()); 5533 } 5534 } 5535 5536 private void verifyResultsConvertShort3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5537 short[] arrayInV = new short[INPUTSIZE * 4]; 5538 inV.copyTo(arrayInV); 5539 short[] arrayOut = new short[INPUTSIZE * 4]; 5540 out.copyTo(arrayOut); 5541 for (int i = 0; i < INPUTSIZE; i++) { 5542 for (int j = 0; j < 3 ; j++) { 5543 // Extract the inputs. 5544 ArgumentsShortUshort args = new ArgumentsShortUshort(); 5545 args.inV = arrayInV[i * 4 + j]; 5546 // Figure out what the outputs should have been. 5547 CoreMathVerifier.computeConvert(args); 5548 // Validate the outputs. 5549 boolean valid = true; 5550 if (args.out != arrayOut[i * 4 + j]) { 5551 valid = false; 5552 } 5553 if (!valid) { 5554 StringBuilder message = new StringBuilder(); 5555 message.append("Input inV: "); 5556 message.append(String.format("%d", args.inV)); 5557 message.append("\n"); 5558 message.append("Expected output out: "); 5559 message.append(String.format("0x%x", args.out)); 5560 message.append("\n"); 5561 message.append("Actual output out: "); 5562 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5563 if (args.out != arrayOut[i * 4 + j]) { 5564 message.append(" FAIL"); 5565 } 5566 message.append("\n"); 5567 assertTrue("Incorrect output for checkConvertShort3Ushort3" + 5568 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5569 } 5570 } 5571 } 5572 } 5573 5574 private void checkConvertShort4Ushort4() { 5575 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0xfea6b5ab1f1be2abl, false, 15); 5576 try { 5577 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5578 script.forEach_testConvertUshort4Short4Ushort4(inV, out); 5579 verifyResultsConvertShort4Ushort4(inV, out, false); 5580 } catch (Exception e) { 5581 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Short4Ushort4: " + e.toString()); 5582 } 5583 try { 5584 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5585 scriptRelaxed.forEach_testConvertUshort4Short4Ushort4(inV, out); 5586 verifyResultsConvertShort4Ushort4(inV, out, true); 5587 } catch (Exception e) { 5588 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Short4Ushort4: " + e.toString()); 5589 } 5590 } 5591 5592 private void verifyResultsConvertShort4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5593 short[] arrayInV = new short[INPUTSIZE * 4]; 5594 inV.copyTo(arrayInV); 5595 short[] arrayOut = new short[INPUTSIZE * 4]; 5596 out.copyTo(arrayOut); 5597 for (int i = 0; i < INPUTSIZE; i++) { 5598 for (int j = 0; j < 4 ; j++) { 5599 // Extract the inputs. 5600 ArgumentsShortUshort args = new ArgumentsShortUshort(); 5601 args.inV = arrayInV[i * 4 + j]; 5602 // Figure out what the outputs should have been. 5603 CoreMathVerifier.computeConvert(args); 5604 // Validate the outputs. 5605 boolean valid = true; 5606 if (args.out != arrayOut[i * 4 + j]) { 5607 valid = false; 5608 } 5609 if (!valid) { 5610 StringBuilder message = new StringBuilder(); 5611 message.append("Input inV: "); 5612 message.append(String.format("%d", args.inV)); 5613 message.append("\n"); 5614 message.append("Expected output out: "); 5615 message.append(String.format("0x%x", args.out)); 5616 message.append("\n"); 5617 message.append("Actual output out: "); 5618 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5619 if (args.out != arrayOut[i * 4 + j]) { 5620 message.append(" FAIL"); 5621 } 5622 message.append("\n"); 5623 assertTrue("Incorrect output for checkConvertShort4Ushort4" + 5624 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5625 } 5626 } 5627 } 5628 } 5629 5630 public class ArgumentsUshortUshort { 5631 public short inV; 5632 public short out; 5633 } 5634 5635 private void checkConvertUshort2Ushort2() { 5636 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0xd2d27d910e362466l, false, 16); 5637 try { 5638 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5639 script.forEach_testConvertUshort2Ushort2Ushort2(inV, out); 5640 verifyResultsConvertUshort2Ushort2(inV, out, false); 5641 } catch (Exception e) { 5642 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Ushort2Ushort2: " + e.toString()); 5643 } 5644 try { 5645 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5646 scriptRelaxed.forEach_testConvertUshort2Ushort2Ushort2(inV, out); 5647 verifyResultsConvertUshort2Ushort2(inV, out, true); 5648 } catch (Exception e) { 5649 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Ushort2Ushort2: " + e.toString()); 5650 } 5651 } 5652 5653 private void verifyResultsConvertUshort2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 5654 short[] arrayInV = new short[INPUTSIZE * 2]; 5655 inV.copyTo(arrayInV); 5656 short[] arrayOut = new short[INPUTSIZE * 2]; 5657 out.copyTo(arrayOut); 5658 for (int i = 0; i < INPUTSIZE; i++) { 5659 for (int j = 0; j < 2 ; j++) { 5660 // Extract the inputs. 5661 ArgumentsUshortUshort args = new ArgumentsUshortUshort(); 5662 args.inV = arrayInV[i * 2 + j]; 5663 // Figure out what the outputs should have been. 5664 CoreMathVerifier.computeConvert(args); 5665 // Validate the outputs. 5666 boolean valid = true; 5667 if (args.out != arrayOut[i * 2 + j]) { 5668 valid = false; 5669 } 5670 if (!valid) { 5671 StringBuilder message = new StringBuilder(); 5672 message.append("Input inV: "); 5673 message.append(String.format("0x%x", args.inV)); 5674 message.append("\n"); 5675 message.append("Expected output out: "); 5676 message.append(String.format("0x%x", args.out)); 5677 message.append("\n"); 5678 message.append("Actual output out: "); 5679 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 5680 if (args.out != arrayOut[i * 2 + j]) { 5681 message.append(" FAIL"); 5682 } 5683 message.append("\n"); 5684 assertTrue("Incorrect output for checkConvertUshort2Ushort2" + 5685 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5686 } 5687 } 5688 } 5689 } 5690 5691 private void checkConvertUshort3Ushort3() { 5692 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0xd31f45186491b592l, false, 16); 5693 try { 5694 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5695 script.forEach_testConvertUshort3Ushort3Ushort3(inV, out); 5696 verifyResultsConvertUshort3Ushort3(inV, out, false); 5697 } catch (Exception e) { 5698 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Ushort3Ushort3: " + e.toString()); 5699 } 5700 try { 5701 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5702 scriptRelaxed.forEach_testConvertUshort3Ushort3Ushort3(inV, out); 5703 verifyResultsConvertUshort3Ushort3(inV, out, true); 5704 } catch (Exception e) { 5705 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Ushort3Ushort3: " + e.toString()); 5706 } 5707 } 5708 5709 private void verifyResultsConvertUshort3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5710 short[] arrayInV = new short[INPUTSIZE * 4]; 5711 inV.copyTo(arrayInV); 5712 short[] arrayOut = new short[INPUTSIZE * 4]; 5713 out.copyTo(arrayOut); 5714 for (int i = 0; i < INPUTSIZE; i++) { 5715 for (int j = 0; j < 3 ; j++) { 5716 // Extract the inputs. 5717 ArgumentsUshortUshort args = new ArgumentsUshortUshort(); 5718 args.inV = arrayInV[i * 4 + j]; 5719 // Figure out what the outputs should have been. 5720 CoreMathVerifier.computeConvert(args); 5721 // Validate the outputs. 5722 boolean valid = true; 5723 if (args.out != arrayOut[i * 4 + j]) { 5724 valid = false; 5725 } 5726 if (!valid) { 5727 StringBuilder message = new StringBuilder(); 5728 message.append("Input inV: "); 5729 message.append(String.format("0x%x", args.inV)); 5730 message.append("\n"); 5731 message.append("Expected output out: "); 5732 message.append(String.format("0x%x", args.out)); 5733 message.append("\n"); 5734 message.append("Actual output out: "); 5735 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5736 if (args.out != arrayOut[i * 4 + j]) { 5737 message.append(" FAIL"); 5738 } 5739 message.append("\n"); 5740 assertTrue("Incorrect output for checkConvertUshort3Ushort3" + 5741 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5742 } 5743 } 5744 } 5745 } 5746 5747 private void checkConvertUshort4Ushort4() { 5748 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0xd36c0c9fbaed46bel, false, 16); 5749 try { 5750 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5751 script.forEach_testConvertUshort4Ushort4Ushort4(inV, out); 5752 verifyResultsConvertUshort4Ushort4(inV, out, false); 5753 } catch (Exception e) { 5754 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Ushort4Ushort4: " + e.toString()); 5755 } 5756 try { 5757 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5758 scriptRelaxed.forEach_testConvertUshort4Ushort4Ushort4(inV, out); 5759 verifyResultsConvertUshort4Ushort4(inV, out, true); 5760 } catch (Exception e) { 5761 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Ushort4Ushort4: " + e.toString()); 5762 } 5763 } 5764 5765 private void verifyResultsConvertUshort4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5766 short[] arrayInV = new short[INPUTSIZE * 4]; 5767 inV.copyTo(arrayInV); 5768 short[] arrayOut = new short[INPUTSIZE * 4]; 5769 out.copyTo(arrayOut); 5770 for (int i = 0; i < INPUTSIZE; i++) { 5771 for (int j = 0; j < 4 ; j++) { 5772 // Extract the inputs. 5773 ArgumentsUshortUshort args = new ArgumentsUshortUshort(); 5774 args.inV = arrayInV[i * 4 + j]; 5775 // Figure out what the outputs should have been. 5776 CoreMathVerifier.computeConvert(args); 5777 // Validate the outputs. 5778 boolean valid = true; 5779 if (args.out != arrayOut[i * 4 + j]) { 5780 valid = false; 5781 } 5782 if (!valid) { 5783 StringBuilder message = new StringBuilder(); 5784 message.append("Input inV: "); 5785 message.append(String.format("0x%x", args.inV)); 5786 message.append("\n"); 5787 message.append("Expected output out: "); 5788 message.append(String.format("0x%x", args.out)); 5789 message.append("\n"); 5790 message.append("Actual output out: "); 5791 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5792 if (args.out != arrayOut[i * 4 + j]) { 5793 message.append(" FAIL"); 5794 } 5795 message.append("\n"); 5796 assertTrue("Incorrect output for checkConvertUshort4Ushort4" + 5797 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5798 } 5799 } 5800 } 5801 } 5802 5803 public class ArgumentsIntUshort { 5804 public int inV; 5805 public short out; 5806 } 5807 5808 private void checkConvertInt2Ushort2() { 5809 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0x1c02a5e414378844l, false, 16); 5810 try { 5811 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5812 script.forEach_testConvertUshort2Int2Ushort2(inV, out); 5813 verifyResultsConvertInt2Ushort2(inV, out, false); 5814 } catch (Exception e) { 5815 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Int2Ushort2: " + e.toString()); 5816 } 5817 try { 5818 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5819 scriptRelaxed.forEach_testConvertUshort2Int2Ushort2(inV, out); 5820 verifyResultsConvertInt2Ushort2(inV, out, true); 5821 } catch (Exception e) { 5822 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Int2Ushort2: " + e.toString()); 5823 } 5824 } 5825 5826 private void verifyResultsConvertInt2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 5827 int[] arrayInV = new int[INPUTSIZE * 2]; 5828 inV.copyTo(arrayInV); 5829 short[] arrayOut = new short[INPUTSIZE * 2]; 5830 out.copyTo(arrayOut); 5831 for (int i = 0; i < INPUTSIZE; i++) { 5832 for (int j = 0; j < 2 ; j++) { 5833 // Extract the inputs. 5834 ArgumentsIntUshort args = new ArgumentsIntUshort(); 5835 args.inV = arrayInV[i * 2 + j]; 5836 // Figure out what the outputs should have been. 5837 CoreMathVerifier.computeConvert(args); 5838 // Validate the outputs. 5839 boolean valid = true; 5840 if (args.out != arrayOut[i * 2 + j]) { 5841 valid = false; 5842 } 5843 if (!valid) { 5844 StringBuilder message = new StringBuilder(); 5845 message.append("Input inV: "); 5846 message.append(String.format("%d", args.inV)); 5847 message.append("\n"); 5848 message.append("Expected output out: "); 5849 message.append(String.format("0x%x", args.out)); 5850 message.append("\n"); 5851 message.append("Actual output out: "); 5852 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 5853 if (args.out != arrayOut[i * 2 + j]) { 5854 message.append(" FAIL"); 5855 } 5856 message.append("\n"); 5857 assertTrue("Incorrect output for checkConvertInt2Ushort2" + 5858 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5859 } 5860 } 5861 } 5862 } 5863 5864 private void checkConvertInt3Ushort3() { 5865 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0x1c4f6d6b6a931970l, false, 16); 5866 try { 5867 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5868 script.forEach_testConvertUshort3Int3Ushort3(inV, out); 5869 verifyResultsConvertInt3Ushort3(inV, out, false); 5870 } catch (Exception e) { 5871 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Int3Ushort3: " + e.toString()); 5872 } 5873 try { 5874 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 5875 scriptRelaxed.forEach_testConvertUshort3Int3Ushort3(inV, out); 5876 verifyResultsConvertInt3Ushort3(inV, out, true); 5877 } catch (Exception e) { 5878 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Int3Ushort3: " + e.toString()); 5879 } 5880 } 5881 5882 private void verifyResultsConvertInt3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 5883 int[] arrayInV = new int[INPUTSIZE * 4]; 5884 inV.copyTo(arrayInV); 5885 short[] arrayOut = new short[INPUTSIZE * 4]; 5886 out.copyTo(arrayOut); 5887 for (int i = 0; i < INPUTSIZE; i++) { 5888 for (int j = 0; j < 3 ; j++) { 5889 // Extract the inputs. 5890 ArgumentsIntUshort args = new ArgumentsIntUshort(); 5891 args.inV = arrayInV[i * 4 + j]; 5892 // Figure out what the outputs should have been. 5893 CoreMathVerifier.computeConvert(args); 5894 // Validate the outputs. 5895 boolean valid = true; 5896 if (args.out != arrayOut[i * 4 + j]) { 5897 valid = false; 5898 } 5899 if (!valid) { 5900 StringBuilder message = new StringBuilder(); 5901 message.append("Input inV: "); 5902 message.append(String.format("%d", args.inV)); 5903 message.append("\n"); 5904 message.append("Expected output out: "); 5905 message.append(String.format("0x%x", args.out)); 5906 message.append("\n"); 5907 message.append("Actual output out: "); 5908 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5909 if (args.out != arrayOut[i * 4 + j]) { 5910 message.append(" FAIL"); 5911 } 5912 message.append("\n"); 5913 assertTrue("Incorrect output for checkConvertInt3Ushort3" + 5914 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5915 } 5916 } 5917 } 5918 } 5919 5920 private void checkConvertInt4Ushort4() { 5921 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0x1c9c34f2c0eeaa9cl, false, 16); 5922 try { 5923 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5924 script.forEach_testConvertUshort4Int4Ushort4(inV, out); 5925 verifyResultsConvertInt4Ushort4(inV, out, false); 5926 } catch (Exception e) { 5927 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Int4Ushort4: " + e.toString()); 5928 } 5929 try { 5930 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 5931 scriptRelaxed.forEach_testConvertUshort4Int4Ushort4(inV, out); 5932 verifyResultsConvertInt4Ushort4(inV, out, true); 5933 } catch (Exception e) { 5934 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Int4Ushort4: " + e.toString()); 5935 } 5936 } 5937 5938 private void verifyResultsConvertInt4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 5939 int[] arrayInV = new int[INPUTSIZE * 4]; 5940 inV.copyTo(arrayInV); 5941 short[] arrayOut = new short[INPUTSIZE * 4]; 5942 out.copyTo(arrayOut); 5943 for (int i = 0; i < INPUTSIZE; i++) { 5944 for (int j = 0; j < 4 ; j++) { 5945 // Extract the inputs. 5946 ArgumentsIntUshort args = new ArgumentsIntUshort(); 5947 args.inV = arrayInV[i * 4 + j]; 5948 // Figure out what the outputs should have been. 5949 CoreMathVerifier.computeConvert(args); 5950 // Validate the outputs. 5951 boolean valid = true; 5952 if (args.out != arrayOut[i * 4 + j]) { 5953 valid = false; 5954 } 5955 if (!valid) { 5956 StringBuilder message = new StringBuilder(); 5957 message.append("Input inV: "); 5958 message.append(String.format("%d", args.inV)); 5959 message.append("\n"); 5960 message.append("Expected output out: "); 5961 message.append(String.format("0x%x", args.out)); 5962 message.append("\n"); 5963 message.append("Actual output out: "); 5964 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 5965 if (args.out != arrayOut[i * 4 + j]) { 5966 message.append(" FAIL"); 5967 } 5968 message.append("\n"); 5969 assertTrue("Incorrect output for checkConvertInt4Ushort4" + 5970 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 5971 } 5972 } 5973 } 5974 } 5975 5976 public class ArgumentsUintUshort { 5977 public int inV; 5978 public short out; 5979 } 5980 5981 private void checkConvertUint2Ushort2() { 5982 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0x40d0c5ebb00fa1efl, false, 16); 5983 try { 5984 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5985 script.forEach_testConvertUshort2Uint2Ushort2(inV, out); 5986 verifyResultsConvertUint2Ushort2(inV, out, false); 5987 } catch (Exception e) { 5988 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Uint2Ushort2: " + e.toString()); 5989 } 5990 try { 5991 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE); 5992 scriptRelaxed.forEach_testConvertUshort2Uint2Ushort2(inV, out); 5993 verifyResultsConvertUint2Ushort2(inV, out, true); 5994 } catch (Exception e) { 5995 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort2Uint2Ushort2: " + e.toString()); 5996 } 5997 } 5998 5999 private void verifyResultsConvertUint2Ushort2(Allocation inV, Allocation out, boolean relaxed) { 6000 int[] arrayInV = new int[INPUTSIZE * 2]; 6001 inV.copyTo(arrayInV); 6002 short[] arrayOut = new short[INPUTSIZE * 2]; 6003 out.copyTo(arrayOut); 6004 for (int i = 0; i < INPUTSIZE; i++) { 6005 for (int j = 0; j < 2 ; j++) { 6006 // Extract the inputs. 6007 ArgumentsUintUshort args = new ArgumentsUintUshort(); 6008 args.inV = arrayInV[i * 2 + j]; 6009 // Figure out what the outputs should have been. 6010 CoreMathVerifier.computeConvert(args); 6011 // Validate the outputs. 6012 boolean valid = true; 6013 if (args.out != arrayOut[i * 2 + j]) { 6014 valid = false; 6015 } 6016 if (!valid) { 6017 StringBuilder message = new StringBuilder(); 6018 message.append("Input inV: "); 6019 message.append(String.format("0x%x", args.inV)); 6020 message.append("\n"); 6021 message.append("Expected output out: "); 6022 message.append(String.format("0x%x", args.out)); 6023 message.append("\n"); 6024 message.append("Actual output out: "); 6025 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 6026 if (args.out != arrayOut[i * 2 + j]) { 6027 message.append(" FAIL"); 6028 } 6029 message.append("\n"); 6030 assertTrue("Incorrect output for checkConvertUint2Ushort2" + 6031 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6032 } 6033 } 6034 } 6035 } 6036 6037 private void checkConvertUint3Ushort3() { 6038 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0x411d8d73066b331bl, false, 16); 6039 try { 6040 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 6041 script.forEach_testConvertUshort3Uint3Ushort3(inV, out); 6042 verifyResultsConvertUint3Ushort3(inV, out, false); 6043 } catch (Exception e) { 6044 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Uint3Ushort3: " + e.toString()); 6045 } 6046 try { 6047 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE); 6048 scriptRelaxed.forEach_testConvertUshort3Uint3Ushort3(inV, out); 6049 verifyResultsConvertUint3Ushort3(inV, out, true); 6050 } catch (Exception e) { 6051 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort3Uint3Ushort3: " + e.toString()); 6052 } 6053 } 6054 6055 private void verifyResultsConvertUint3Ushort3(Allocation inV, Allocation out, boolean relaxed) { 6056 int[] arrayInV = new int[INPUTSIZE * 4]; 6057 inV.copyTo(arrayInV); 6058 short[] arrayOut = new short[INPUTSIZE * 4]; 6059 out.copyTo(arrayOut); 6060 for (int i = 0; i < INPUTSIZE; i++) { 6061 for (int j = 0; j < 3 ; j++) { 6062 // Extract the inputs. 6063 ArgumentsUintUshort args = new ArgumentsUintUshort(); 6064 args.inV = arrayInV[i * 4 + j]; 6065 // Figure out what the outputs should have been. 6066 CoreMathVerifier.computeConvert(args); 6067 // Validate the outputs. 6068 boolean valid = true; 6069 if (args.out != arrayOut[i * 4 + j]) { 6070 valid = false; 6071 } 6072 if (!valid) { 6073 StringBuilder message = new StringBuilder(); 6074 message.append("Input inV: "); 6075 message.append(String.format("0x%x", args.inV)); 6076 message.append("\n"); 6077 message.append("Expected output out: "); 6078 message.append(String.format("0x%x", args.out)); 6079 message.append("\n"); 6080 message.append("Actual output out: "); 6081 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 6082 if (args.out != arrayOut[i * 4 + j]) { 6083 message.append(" FAIL"); 6084 } 6085 message.append("\n"); 6086 assertTrue("Incorrect output for checkConvertUint3Ushort3" + 6087 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6088 } 6089 } 6090 } 6091 } 6092 6093 private void checkConvertUint4Ushort4() { 6094 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0x416a54fa5cc6c447l, false, 16); 6095 try { 6096 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 6097 script.forEach_testConvertUshort4Uint4Ushort4(inV, out); 6098 verifyResultsConvertUint4Ushort4(inV, out, false); 6099 } catch (Exception e) { 6100 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Uint4Ushort4: " + e.toString()); 6101 } 6102 try { 6103 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE); 6104 scriptRelaxed.forEach_testConvertUshort4Uint4Ushort4(inV, out); 6105 verifyResultsConvertUint4Ushort4(inV, out, true); 6106 } catch (Exception e) { 6107 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUshort4Uint4Ushort4: " + e.toString()); 6108 } 6109 } 6110 6111 private void verifyResultsConvertUint4Ushort4(Allocation inV, Allocation out, boolean relaxed) { 6112 int[] arrayInV = new int[INPUTSIZE * 4]; 6113 inV.copyTo(arrayInV); 6114 short[] arrayOut = new short[INPUTSIZE * 4]; 6115 out.copyTo(arrayOut); 6116 for (int i = 0; i < INPUTSIZE; i++) { 6117 for (int j = 0; j < 4 ; j++) { 6118 // Extract the inputs. 6119 ArgumentsUintUshort args = new ArgumentsUintUshort(); 6120 args.inV = arrayInV[i * 4 + j]; 6121 // Figure out what the outputs should have been. 6122 CoreMathVerifier.computeConvert(args); 6123 // Validate the outputs. 6124 boolean valid = true; 6125 if (args.out != arrayOut[i * 4 + j]) { 6126 valid = false; 6127 } 6128 if (!valid) { 6129 StringBuilder message = new StringBuilder(); 6130 message.append("Input inV: "); 6131 message.append(String.format("0x%x", args.inV)); 6132 message.append("\n"); 6133 message.append("Expected output out: "); 6134 message.append(String.format("0x%x", args.out)); 6135 message.append("\n"); 6136 message.append("Actual output out: "); 6137 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 6138 if (args.out != arrayOut[i * 4 + j]) { 6139 message.append(" FAIL"); 6140 } 6141 message.append("\n"); 6142 assertTrue("Incorrect output for checkConvertUint4Ushort4" + 6143 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6144 } 6145 } 6146 } 6147 } 6148 6149 public class ArgumentsFloatInt { 6150 public float inV; 6151 public int out; 6152 } 6153 6154 private void checkConvertFloat2Int2() { 6155 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0x8fb63fb7c069dd5dl, -2.1474835210000000000e+09, 2.1474835200000000000e+09); 6156 try { 6157 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6158 script.forEach_testConvertInt2Float2Int2(inV, out); 6159 verifyResultsConvertFloat2Int2(inV, out, false); 6160 } catch (Exception e) { 6161 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Float2Int2: " + e.toString()); 6162 } 6163 try { 6164 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6165 scriptRelaxed.forEach_testConvertInt2Float2Int2(inV, out); 6166 verifyResultsConvertFloat2Int2(inV, out, true); 6167 } catch (Exception e) { 6168 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Float2Int2: " + e.toString()); 6169 } 6170 } 6171 6172 private void verifyResultsConvertFloat2Int2(Allocation inV, Allocation out, boolean relaxed) { 6173 float[] arrayInV = new float[INPUTSIZE * 2]; 6174 inV.copyTo(arrayInV); 6175 int[] arrayOut = new int[INPUTSIZE * 2]; 6176 out.copyTo(arrayOut); 6177 for (int i = 0; i < INPUTSIZE; i++) { 6178 for (int j = 0; j < 2 ; j++) { 6179 // Extract the inputs. 6180 ArgumentsFloatInt args = new ArgumentsFloatInt(); 6181 args.inV = arrayInV[i * 2 + j]; 6182 // Figure out what the outputs should have been. 6183 CoreMathVerifier.computeConvert(args); 6184 // Validate the outputs. 6185 boolean valid = true; 6186 if (args.out != arrayOut[i * 2 + j]) { 6187 valid = false; 6188 } 6189 if (!valid) { 6190 StringBuilder message = new StringBuilder(); 6191 message.append("Input inV: "); 6192 message.append(String.format("%14.8g {%8x} %15a", 6193 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 6194 message.append("\n"); 6195 message.append("Expected output out: "); 6196 message.append(String.format("%d", args.out)); 6197 message.append("\n"); 6198 message.append("Actual output out: "); 6199 message.append(String.format("%d", arrayOut[i * 2 + j])); 6200 if (args.out != arrayOut[i * 2 + j]) { 6201 message.append(" FAIL"); 6202 } 6203 message.append("\n"); 6204 assertTrue("Incorrect output for checkConvertFloat2Int2" + 6205 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6206 } 6207 } 6208 } 6209 } 6210 6211 private void checkConvertFloat3Int3() { 6212 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x8fb63ff70a11ed93l, -2.1474835210000000000e+09, 2.1474835200000000000e+09); 6213 try { 6214 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6215 script.forEach_testConvertInt3Float3Int3(inV, out); 6216 verifyResultsConvertFloat3Int3(inV, out, false); 6217 } catch (Exception e) { 6218 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Float3Int3: " + e.toString()); 6219 } 6220 try { 6221 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6222 scriptRelaxed.forEach_testConvertInt3Float3Int3(inV, out); 6223 verifyResultsConvertFloat3Int3(inV, out, true); 6224 } catch (Exception e) { 6225 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Float3Int3: " + e.toString()); 6226 } 6227 } 6228 6229 private void verifyResultsConvertFloat3Int3(Allocation inV, Allocation out, boolean relaxed) { 6230 float[] arrayInV = new float[INPUTSIZE * 4]; 6231 inV.copyTo(arrayInV); 6232 int[] arrayOut = new int[INPUTSIZE * 4]; 6233 out.copyTo(arrayOut); 6234 for (int i = 0; i < INPUTSIZE; i++) { 6235 for (int j = 0; j < 3 ; j++) { 6236 // Extract the inputs. 6237 ArgumentsFloatInt args = new ArgumentsFloatInt(); 6238 args.inV = arrayInV[i * 4 + j]; 6239 // Figure out what the outputs should have been. 6240 CoreMathVerifier.computeConvert(args); 6241 // Validate the outputs. 6242 boolean valid = true; 6243 if (args.out != arrayOut[i * 4 + j]) { 6244 valid = false; 6245 } 6246 if (!valid) { 6247 StringBuilder message = new StringBuilder(); 6248 message.append("Input inV: "); 6249 message.append(String.format("%14.8g {%8x} %15a", 6250 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 6251 message.append("\n"); 6252 message.append("Expected output out: "); 6253 message.append(String.format("%d", args.out)); 6254 message.append("\n"); 6255 message.append("Actual output out: "); 6256 message.append(String.format("%d", arrayOut[i * 4 + j])); 6257 if (args.out != arrayOut[i * 4 + j]) { 6258 message.append(" FAIL"); 6259 } 6260 message.append("\n"); 6261 assertTrue("Incorrect output for checkConvertFloat3Int3" + 6262 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6263 } 6264 } 6265 } 6266 } 6267 6268 private void checkConvertFloat4Int4() { 6269 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x8fb6403653b9fdc9l, -2.1474835210000000000e+09, 2.1474835200000000000e+09); 6270 try { 6271 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6272 script.forEach_testConvertInt4Float4Int4(inV, out); 6273 verifyResultsConvertFloat4Int4(inV, out, false); 6274 } catch (Exception e) { 6275 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Float4Int4: " + e.toString()); 6276 } 6277 try { 6278 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6279 scriptRelaxed.forEach_testConvertInt4Float4Int4(inV, out); 6280 verifyResultsConvertFloat4Int4(inV, out, true); 6281 } catch (Exception e) { 6282 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Float4Int4: " + e.toString()); 6283 } 6284 } 6285 6286 private void verifyResultsConvertFloat4Int4(Allocation inV, Allocation out, boolean relaxed) { 6287 float[] arrayInV = new float[INPUTSIZE * 4]; 6288 inV.copyTo(arrayInV); 6289 int[] arrayOut = new int[INPUTSIZE * 4]; 6290 out.copyTo(arrayOut); 6291 for (int i = 0; i < INPUTSIZE; i++) { 6292 for (int j = 0; j < 4 ; j++) { 6293 // Extract the inputs. 6294 ArgumentsFloatInt args = new ArgumentsFloatInt(); 6295 args.inV = arrayInV[i * 4 + j]; 6296 // Figure out what the outputs should have been. 6297 CoreMathVerifier.computeConvert(args); 6298 // Validate the outputs. 6299 boolean valid = true; 6300 if (args.out != arrayOut[i * 4 + j]) { 6301 valid = false; 6302 } 6303 if (!valid) { 6304 StringBuilder message = new StringBuilder(); 6305 message.append("Input inV: "); 6306 message.append(String.format("%14.8g {%8x} %15a", 6307 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 6308 message.append("\n"); 6309 message.append("Expected output out: "); 6310 message.append(String.format("%d", args.out)); 6311 message.append("\n"); 6312 message.append("Actual output out: "); 6313 message.append(String.format("%d", arrayOut[i * 4 + j])); 6314 if (args.out != arrayOut[i * 4 + j]) { 6315 message.append(" FAIL"); 6316 } 6317 message.append("\n"); 6318 assertTrue("Incorrect output for checkConvertFloat4Int4" + 6319 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6320 } 6321 } 6322 } 6323 } 6324 6325 public class ArgumentsCharInt { 6326 public byte inV; 6327 public int out; 6328 } 6329 6330 private void checkConvertChar2Int2() { 6331 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0x880244ac94c6831dl, true, 7); 6332 try { 6333 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6334 script.forEach_testConvertInt2Char2Int2(inV, out); 6335 verifyResultsConvertChar2Int2(inV, out, false); 6336 } catch (Exception e) { 6337 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Char2Int2: " + e.toString()); 6338 } 6339 try { 6340 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6341 scriptRelaxed.forEach_testConvertInt2Char2Int2(inV, out); 6342 verifyResultsConvertChar2Int2(inV, out, true); 6343 } catch (Exception e) { 6344 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Char2Int2: " + e.toString()); 6345 } 6346 } 6347 6348 private void verifyResultsConvertChar2Int2(Allocation inV, Allocation out, boolean relaxed) { 6349 byte[] arrayInV = new byte[INPUTSIZE * 2]; 6350 inV.copyTo(arrayInV); 6351 int[] arrayOut = new int[INPUTSIZE * 2]; 6352 out.copyTo(arrayOut); 6353 for (int i = 0; i < INPUTSIZE; i++) { 6354 for (int j = 0; j < 2 ; j++) { 6355 // Extract the inputs. 6356 ArgumentsCharInt args = new ArgumentsCharInt(); 6357 args.inV = arrayInV[i * 2 + j]; 6358 // Figure out what the outputs should have been. 6359 CoreMathVerifier.computeConvert(args); 6360 // Validate the outputs. 6361 boolean valid = true; 6362 if (args.out != arrayOut[i * 2 + j]) { 6363 valid = false; 6364 } 6365 if (!valid) { 6366 StringBuilder message = new StringBuilder(); 6367 message.append("Input inV: "); 6368 message.append(String.format("%d", args.inV)); 6369 message.append("\n"); 6370 message.append("Expected output out: "); 6371 message.append(String.format("%d", args.out)); 6372 message.append("\n"); 6373 message.append("Actual output out: "); 6374 message.append(String.format("%d", arrayOut[i * 2 + j])); 6375 if (args.out != arrayOut[i * 2 + j]) { 6376 message.append(" FAIL"); 6377 } 6378 message.append("\n"); 6379 assertTrue("Incorrect output for checkConvertChar2Int2" + 6380 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6381 } 6382 } 6383 } 6384 } 6385 6386 private void checkConvertChar3Int3() { 6387 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0x880244ebde6e9353l, true, 7); 6388 try { 6389 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6390 script.forEach_testConvertInt3Char3Int3(inV, out); 6391 verifyResultsConvertChar3Int3(inV, out, false); 6392 } catch (Exception e) { 6393 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Char3Int3: " + e.toString()); 6394 } 6395 try { 6396 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6397 scriptRelaxed.forEach_testConvertInt3Char3Int3(inV, out); 6398 verifyResultsConvertChar3Int3(inV, out, true); 6399 } catch (Exception e) { 6400 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Char3Int3: " + e.toString()); 6401 } 6402 } 6403 6404 private void verifyResultsConvertChar3Int3(Allocation inV, Allocation out, boolean relaxed) { 6405 byte[] arrayInV = new byte[INPUTSIZE * 4]; 6406 inV.copyTo(arrayInV); 6407 int[] arrayOut = new int[INPUTSIZE * 4]; 6408 out.copyTo(arrayOut); 6409 for (int i = 0; i < INPUTSIZE; i++) { 6410 for (int j = 0; j < 3 ; j++) { 6411 // Extract the inputs. 6412 ArgumentsCharInt args = new ArgumentsCharInt(); 6413 args.inV = arrayInV[i * 4 + j]; 6414 // Figure out what the outputs should have been. 6415 CoreMathVerifier.computeConvert(args); 6416 // Validate the outputs. 6417 boolean valid = true; 6418 if (args.out != arrayOut[i * 4 + j]) { 6419 valid = false; 6420 } 6421 if (!valid) { 6422 StringBuilder message = new StringBuilder(); 6423 message.append("Input inV: "); 6424 message.append(String.format("%d", args.inV)); 6425 message.append("\n"); 6426 message.append("Expected output out: "); 6427 message.append(String.format("%d", args.out)); 6428 message.append("\n"); 6429 message.append("Actual output out: "); 6430 message.append(String.format("%d", arrayOut[i * 4 + j])); 6431 if (args.out != arrayOut[i * 4 + j]) { 6432 message.append(" FAIL"); 6433 } 6434 message.append("\n"); 6435 assertTrue("Incorrect output for checkConvertChar3Int3" + 6436 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6437 } 6438 } 6439 } 6440 } 6441 6442 private void checkConvertChar4Int4() { 6443 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0x8802452b2816a389l, true, 7); 6444 try { 6445 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6446 script.forEach_testConvertInt4Char4Int4(inV, out); 6447 verifyResultsConvertChar4Int4(inV, out, false); 6448 } catch (Exception e) { 6449 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Char4Int4: " + e.toString()); 6450 } 6451 try { 6452 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6453 scriptRelaxed.forEach_testConvertInt4Char4Int4(inV, out); 6454 verifyResultsConvertChar4Int4(inV, out, true); 6455 } catch (Exception e) { 6456 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Char4Int4: " + e.toString()); 6457 } 6458 } 6459 6460 private void verifyResultsConvertChar4Int4(Allocation inV, Allocation out, boolean relaxed) { 6461 byte[] arrayInV = new byte[INPUTSIZE * 4]; 6462 inV.copyTo(arrayInV); 6463 int[] arrayOut = new int[INPUTSIZE * 4]; 6464 out.copyTo(arrayOut); 6465 for (int i = 0; i < INPUTSIZE; i++) { 6466 for (int j = 0; j < 4 ; j++) { 6467 // Extract the inputs. 6468 ArgumentsCharInt args = new ArgumentsCharInt(); 6469 args.inV = arrayInV[i * 4 + j]; 6470 // Figure out what the outputs should have been. 6471 CoreMathVerifier.computeConvert(args); 6472 // Validate the outputs. 6473 boolean valid = true; 6474 if (args.out != arrayOut[i * 4 + j]) { 6475 valid = false; 6476 } 6477 if (!valid) { 6478 StringBuilder message = new StringBuilder(); 6479 message.append("Input inV: "); 6480 message.append(String.format("%d", args.inV)); 6481 message.append("\n"); 6482 message.append("Expected output out: "); 6483 message.append(String.format("%d", args.out)); 6484 message.append("\n"); 6485 message.append("Actual output out: "); 6486 message.append(String.format("%d", arrayOut[i * 4 + j])); 6487 if (args.out != arrayOut[i * 4 + j]) { 6488 message.append(" FAIL"); 6489 } 6490 message.append("\n"); 6491 assertTrue("Incorrect output for checkConvertChar4Int4" + 6492 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6493 } 6494 } 6495 } 6496 } 6497 6498 public class ArgumentsUcharInt { 6499 public byte inV; 6500 public int out; 6501 } 6502 6503 private void checkConvertUchar2Int2() { 6504 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x97cffb96923aa720l, false, 8); 6505 try { 6506 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6507 script.forEach_testConvertInt2Uchar2Int2(inV, out); 6508 verifyResultsConvertUchar2Int2(inV, out, false); 6509 } catch (Exception e) { 6510 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Uchar2Int2: " + e.toString()); 6511 } 6512 try { 6513 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6514 scriptRelaxed.forEach_testConvertInt2Uchar2Int2(inV, out); 6515 verifyResultsConvertUchar2Int2(inV, out, true); 6516 } catch (Exception e) { 6517 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Uchar2Int2: " + e.toString()); 6518 } 6519 } 6520 6521 private void verifyResultsConvertUchar2Int2(Allocation inV, Allocation out, boolean relaxed) { 6522 byte[] arrayInV = new byte[INPUTSIZE * 2]; 6523 inV.copyTo(arrayInV); 6524 int[] arrayOut = new int[INPUTSIZE * 2]; 6525 out.copyTo(arrayOut); 6526 for (int i = 0; i < INPUTSIZE; i++) { 6527 for (int j = 0; j < 2 ; j++) { 6528 // Extract the inputs. 6529 ArgumentsUcharInt args = new ArgumentsUcharInt(); 6530 args.inV = arrayInV[i * 2 + j]; 6531 // Figure out what the outputs should have been. 6532 CoreMathVerifier.computeConvert(args); 6533 // Validate the outputs. 6534 boolean valid = true; 6535 if (args.out != arrayOut[i * 2 + j]) { 6536 valid = false; 6537 } 6538 if (!valid) { 6539 StringBuilder message = new StringBuilder(); 6540 message.append("Input inV: "); 6541 message.append(String.format("0x%x", args.inV)); 6542 message.append("\n"); 6543 message.append("Expected output out: "); 6544 message.append(String.format("%d", args.out)); 6545 message.append("\n"); 6546 message.append("Actual output out: "); 6547 message.append(String.format("%d", arrayOut[i * 2 + j])); 6548 if (args.out != arrayOut[i * 2 + j]) { 6549 message.append(" FAIL"); 6550 } 6551 message.append("\n"); 6552 assertTrue("Incorrect output for checkConvertUchar2Int2" + 6553 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6554 } 6555 } 6556 } 6557 } 6558 6559 private void checkConvertUchar3Int3() { 6560 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x97cffbd5dbe2b756l, false, 8); 6561 try { 6562 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6563 script.forEach_testConvertInt3Uchar3Int3(inV, out); 6564 verifyResultsConvertUchar3Int3(inV, out, false); 6565 } catch (Exception e) { 6566 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Uchar3Int3: " + e.toString()); 6567 } 6568 try { 6569 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6570 scriptRelaxed.forEach_testConvertInt3Uchar3Int3(inV, out); 6571 verifyResultsConvertUchar3Int3(inV, out, true); 6572 } catch (Exception e) { 6573 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Uchar3Int3: " + e.toString()); 6574 } 6575 } 6576 6577 private void verifyResultsConvertUchar3Int3(Allocation inV, Allocation out, boolean relaxed) { 6578 byte[] arrayInV = new byte[INPUTSIZE * 4]; 6579 inV.copyTo(arrayInV); 6580 int[] arrayOut = new int[INPUTSIZE * 4]; 6581 out.copyTo(arrayOut); 6582 for (int i = 0; i < INPUTSIZE; i++) { 6583 for (int j = 0; j < 3 ; j++) { 6584 // Extract the inputs. 6585 ArgumentsUcharInt args = new ArgumentsUcharInt(); 6586 args.inV = arrayInV[i * 4 + j]; 6587 // Figure out what the outputs should have been. 6588 CoreMathVerifier.computeConvert(args); 6589 // Validate the outputs. 6590 boolean valid = true; 6591 if (args.out != arrayOut[i * 4 + j]) { 6592 valid = false; 6593 } 6594 if (!valid) { 6595 StringBuilder message = new StringBuilder(); 6596 message.append("Input inV: "); 6597 message.append(String.format("0x%x", args.inV)); 6598 message.append("\n"); 6599 message.append("Expected output out: "); 6600 message.append(String.format("%d", args.out)); 6601 message.append("\n"); 6602 message.append("Actual output out: "); 6603 message.append(String.format("%d", arrayOut[i * 4 + j])); 6604 if (args.out != arrayOut[i * 4 + j]) { 6605 message.append(" FAIL"); 6606 } 6607 message.append("\n"); 6608 assertTrue("Incorrect output for checkConvertUchar3Int3" + 6609 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6610 } 6611 } 6612 } 6613 } 6614 6615 private void checkConvertUchar4Int4() { 6616 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x97cffc15258ac78cl, false, 8); 6617 try { 6618 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6619 script.forEach_testConvertInt4Uchar4Int4(inV, out); 6620 verifyResultsConvertUchar4Int4(inV, out, false); 6621 } catch (Exception e) { 6622 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Uchar4Int4: " + e.toString()); 6623 } 6624 try { 6625 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6626 scriptRelaxed.forEach_testConvertInt4Uchar4Int4(inV, out); 6627 verifyResultsConvertUchar4Int4(inV, out, true); 6628 } catch (Exception e) { 6629 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Uchar4Int4: " + e.toString()); 6630 } 6631 } 6632 6633 private void verifyResultsConvertUchar4Int4(Allocation inV, Allocation out, boolean relaxed) { 6634 byte[] arrayInV = new byte[INPUTSIZE * 4]; 6635 inV.copyTo(arrayInV); 6636 int[] arrayOut = new int[INPUTSIZE * 4]; 6637 out.copyTo(arrayOut); 6638 for (int i = 0; i < INPUTSIZE; i++) { 6639 for (int j = 0; j < 4 ; j++) { 6640 // Extract the inputs. 6641 ArgumentsUcharInt args = new ArgumentsUcharInt(); 6642 args.inV = arrayInV[i * 4 + j]; 6643 // Figure out what the outputs should have been. 6644 CoreMathVerifier.computeConvert(args); 6645 // Validate the outputs. 6646 boolean valid = true; 6647 if (args.out != arrayOut[i * 4 + j]) { 6648 valid = false; 6649 } 6650 if (!valid) { 6651 StringBuilder message = new StringBuilder(); 6652 message.append("Input inV: "); 6653 message.append(String.format("0x%x", args.inV)); 6654 message.append("\n"); 6655 message.append("Expected output out: "); 6656 message.append(String.format("%d", args.out)); 6657 message.append("\n"); 6658 message.append("Actual output out: "); 6659 message.append(String.format("%d", arrayOut[i * 4 + j])); 6660 if (args.out != arrayOut[i * 4 + j]) { 6661 message.append(" FAIL"); 6662 } 6663 message.append("\n"); 6664 assertTrue("Incorrect output for checkConvertUchar4Int4" + 6665 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6666 } 6667 } 6668 } 6669 } 6670 6671 public class ArgumentsShortInt { 6672 public short inV; 6673 public int out; 6674 } 6675 6676 private void checkConvertShort2Int2() { 6677 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x85693203252a2d69l, true, 15); 6678 try { 6679 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6680 script.forEach_testConvertInt2Short2Int2(inV, out); 6681 verifyResultsConvertShort2Int2(inV, out, false); 6682 } catch (Exception e) { 6683 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Short2Int2: " + e.toString()); 6684 } 6685 try { 6686 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6687 scriptRelaxed.forEach_testConvertInt2Short2Int2(inV, out); 6688 verifyResultsConvertShort2Int2(inV, out, true); 6689 } catch (Exception e) { 6690 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Short2Int2: " + e.toString()); 6691 } 6692 } 6693 6694 private void verifyResultsConvertShort2Int2(Allocation inV, Allocation out, boolean relaxed) { 6695 short[] arrayInV = new short[INPUTSIZE * 2]; 6696 inV.copyTo(arrayInV); 6697 int[] arrayOut = new int[INPUTSIZE * 2]; 6698 out.copyTo(arrayOut); 6699 for (int i = 0; i < INPUTSIZE; i++) { 6700 for (int j = 0; j < 2 ; j++) { 6701 // Extract the inputs. 6702 ArgumentsShortInt args = new ArgumentsShortInt(); 6703 args.inV = arrayInV[i * 2 + j]; 6704 // Figure out what the outputs should have been. 6705 CoreMathVerifier.computeConvert(args); 6706 // Validate the outputs. 6707 boolean valid = true; 6708 if (args.out != arrayOut[i * 2 + j]) { 6709 valid = false; 6710 } 6711 if (!valid) { 6712 StringBuilder message = new StringBuilder(); 6713 message.append("Input inV: "); 6714 message.append(String.format("%d", args.inV)); 6715 message.append("\n"); 6716 message.append("Expected output out: "); 6717 message.append(String.format("%d", args.out)); 6718 message.append("\n"); 6719 message.append("Actual output out: "); 6720 message.append(String.format("%d", arrayOut[i * 2 + j])); 6721 if (args.out != arrayOut[i * 2 + j]) { 6722 message.append(" FAIL"); 6723 } 6724 message.append("\n"); 6725 assertTrue("Incorrect output for checkConvertShort2Int2" + 6726 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6727 } 6728 } 6729 } 6730 } 6731 6732 private void checkConvertShort3Int3() { 6733 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x856932426ed23d9fl, true, 15); 6734 try { 6735 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6736 script.forEach_testConvertInt3Short3Int3(inV, out); 6737 verifyResultsConvertShort3Int3(inV, out, false); 6738 } catch (Exception e) { 6739 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Short3Int3: " + e.toString()); 6740 } 6741 try { 6742 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6743 scriptRelaxed.forEach_testConvertInt3Short3Int3(inV, out); 6744 verifyResultsConvertShort3Int3(inV, out, true); 6745 } catch (Exception e) { 6746 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Short3Int3: " + e.toString()); 6747 } 6748 } 6749 6750 private void verifyResultsConvertShort3Int3(Allocation inV, Allocation out, boolean relaxed) { 6751 short[] arrayInV = new short[INPUTSIZE * 4]; 6752 inV.copyTo(arrayInV); 6753 int[] arrayOut = new int[INPUTSIZE * 4]; 6754 out.copyTo(arrayOut); 6755 for (int i = 0; i < INPUTSIZE; i++) { 6756 for (int j = 0; j < 3 ; j++) { 6757 // Extract the inputs. 6758 ArgumentsShortInt args = new ArgumentsShortInt(); 6759 args.inV = arrayInV[i * 4 + j]; 6760 // Figure out what the outputs should have been. 6761 CoreMathVerifier.computeConvert(args); 6762 // Validate the outputs. 6763 boolean valid = true; 6764 if (args.out != arrayOut[i * 4 + j]) { 6765 valid = false; 6766 } 6767 if (!valid) { 6768 StringBuilder message = new StringBuilder(); 6769 message.append("Input inV: "); 6770 message.append(String.format("%d", args.inV)); 6771 message.append("\n"); 6772 message.append("Expected output out: "); 6773 message.append(String.format("%d", args.out)); 6774 message.append("\n"); 6775 message.append("Actual output out: "); 6776 message.append(String.format("%d", arrayOut[i * 4 + j])); 6777 if (args.out != arrayOut[i * 4 + j]) { 6778 message.append(" FAIL"); 6779 } 6780 message.append("\n"); 6781 assertTrue("Incorrect output for checkConvertShort3Int3" + 6782 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6783 } 6784 } 6785 } 6786 } 6787 6788 private void checkConvertShort4Int4() { 6789 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x85693281b87a4dd5l, true, 15); 6790 try { 6791 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6792 script.forEach_testConvertInt4Short4Int4(inV, out); 6793 verifyResultsConvertShort4Int4(inV, out, false); 6794 } catch (Exception e) { 6795 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Short4Int4: " + e.toString()); 6796 } 6797 try { 6798 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6799 scriptRelaxed.forEach_testConvertInt4Short4Int4(inV, out); 6800 verifyResultsConvertShort4Int4(inV, out, true); 6801 } catch (Exception e) { 6802 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Short4Int4: " + e.toString()); 6803 } 6804 } 6805 6806 private void verifyResultsConvertShort4Int4(Allocation inV, Allocation out, boolean relaxed) { 6807 short[] arrayInV = new short[INPUTSIZE * 4]; 6808 inV.copyTo(arrayInV); 6809 int[] arrayOut = new int[INPUTSIZE * 4]; 6810 out.copyTo(arrayOut); 6811 for (int i = 0; i < INPUTSIZE; i++) { 6812 for (int j = 0; j < 4 ; j++) { 6813 // Extract the inputs. 6814 ArgumentsShortInt args = new ArgumentsShortInt(); 6815 args.inV = arrayInV[i * 4 + j]; 6816 // Figure out what the outputs should have been. 6817 CoreMathVerifier.computeConvert(args); 6818 // Validate the outputs. 6819 boolean valid = true; 6820 if (args.out != arrayOut[i * 4 + j]) { 6821 valid = false; 6822 } 6823 if (!valid) { 6824 StringBuilder message = new StringBuilder(); 6825 message.append("Input inV: "); 6826 message.append(String.format("%d", args.inV)); 6827 message.append("\n"); 6828 message.append("Expected output out: "); 6829 message.append(String.format("%d", args.out)); 6830 message.append("\n"); 6831 message.append("Actual output out: "); 6832 message.append(String.format("%d", arrayOut[i * 4 + j])); 6833 if (args.out != arrayOut[i * 4 + j]) { 6834 message.append(" FAIL"); 6835 } 6836 message.append("\n"); 6837 assertTrue("Incorrect output for checkConvertShort4Int4" + 6838 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6839 } 6840 } 6841 } 6842 } 6843 6844 public class ArgumentsUshortInt { 6845 public short inV; 6846 public int out; 6847 } 6848 6849 private void checkConvertUshort2Int2() { 6850 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0x2cf6eb50b7ac39eal, false, 16); 6851 try { 6852 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6853 script.forEach_testConvertInt2Ushort2Int2(inV, out); 6854 verifyResultsConvertUshort2Int2(inV, out, false); 6855 } catch (Exception e) { 6856 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Ushort2Int2: " + e.toString()); 6857 } 6858 try { 6859 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 6860 scriptRelaxed.forEach_testConvertInt2Ushort2Int2(inV, out); 6861 verifyResultsConvertUshort2Int2(inV, out, true); 6862 } catch (Exception e) { 6863 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Ushort2Int2: " + e.toString()); 6864 } 6865 } 6866 6867 private void verifyResultsConvertUshort2Int2(Allocation inV, Allocation out, boolean relaxed) { 6868 short[] arrayInV = new short[INPUTSIZE * 2]; 6869 inV.copyTo(arrayInV); 6870 int[] arrayOut = new int[INPUTSIZE * 2]; 6871 out.copyTo(arrayOut); 6872 for (int i = 0; i < INPUTSIZE; i++) { 6873 for (int j = 0; j < 2 ; j++) { 6874 // Extract the inputs. 6875 ArgumentsUshortInt args = new ArgumentsUshortInt(); 6876 args.inV = arrayInV[i * 2 + j]; 6877 // Figure out what the outputs should have been. 6878 CoreMathVerifier.computeConvert(args); 6879 // Validate the outputs. 6880 boolean valid = true; 6881 if (args.out != arrayOut[i * 2 + j]) { 6882 valid = false; 6883 } 6884 if (!valid) { 6885 StringBuilder message = new StringBuilder(); 6886 message.append("Input inV: "); 6887 message.append(String.format("0x%x", args.inV)); 6888 message.append("\n"); 6889 message.append("Expected output out: "); 6890 message.append(String.format("%d", args.out)); 6891 message.append("\n"); 6892 message.append("Actual output out: "); 6893 message.append(String.format("%d", arrayOut[i * 2 + j])); 6894 if (args.out != arrayOut[i * 2 + j]) { 6895 message.append(" FAIL"); 6896 } 6897 message.append("\n"); 6898 assertTrue("Incorrect output for checkConvertUshort2Int2" + 6899 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6900 } 6901 } 6902 } 6903 } 6904 6905 private void checkConvertUshort3Int3() { 6906 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0x2cf6eb9001544a20l, false, 16); 6907 try { 6908 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6909 script.forEach_testConvertInt3Ushort3Int3(inV, out); 6910 verifyResultsConvertUshort3Int3(inV, out, false); 6911 } catch (Exception e) { 6912 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Ushort3Int3: " + e.toString()); 6913 } 6914 try { 6915 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 6916 scriptRelaxed.forEach_testConvertInt3Ushort3Int3(inV, out); 6917 verifyResultsConvertUshort3Int3(inV, out, true); 6918 } catch (Exception e) { 6919 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Ushort3Int3: " + e.toString()); 6920 } 6921 } 6922 6923 private void verifyResultsConvertUshort3Int3(Allocation inV, Allocation out, boolean relaxed) { 6924 short[] arrayInV = new short[INPUTSIZE * 4]; 6925 inV.copyTo(arrayInV); 6926 int[] arrayOut = new int[INPUTSIZE * 4]; 6927 out.copyTo(arrayOut); 6928 for (int i = 0; i < INPUTSIZE; i++) { 6929 for (int j = 0; j < 3 ; j++) { 6930 // Extract the inputs. 6931 ArgumentsUshortInt args = new ArgumentsUshortInt(); 6932 args.inV = arrayInV[i * 4 + j]; 6933 // Figure out what the outputs should have been. 6934 CoreMathVerifier.computeConvert(args); 6935 // Validate the outputs. 6936 boolean valid = true; 6937 if (args.out != arrayOut[i * 4 + j]) { 6938 valid = false; 6939 } 6940 if (!valid) { 6941 StringBuilder message = new StringBuilder(); 6942 message.append("Input inV: "); 6943 message.append(String.format("0x%x", args.inV)); 6944 message.append("\n"); 6945 message.append("Expected output out: "); 6946 message.append(String.format("%d", args.out)); 6947 message.append("\n"); 6948 message.append("Actual output out: "); 6949 message.append(String.format("%d", arrayOut[i * 4 + j])); 6950 if (args.out != arrayOut[i * 4 + j]) { 6951 message.append(" FAIL"); 6952 } 6953 message.append("\n"); 6954 assertTrue("Incorrect output for checkConvertUshort3Int3" + 6955 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 6956 } 6957 } 6958 } 6959 } 6960 6961 private void checkConvertUshort4Int4() { 6962 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0x2cf6ebcf4afc5a56l, false, 16); 6963 try { 6964 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6965 script.forEach_testConvertInt4Ushort4Int4(inV, out); 6966 verifyResultsConvertUshort4Int4(inV, out, false); 6967 } catch (Exception e) { 6968 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Ushort4Int4: " + e.toString()); 6969 } 6970 try { 6971 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 6972 scriptRelaxed.forEach_testConvertInt4Ushort4Int4(inV, out); 6973 verifyResultsConvertUshort4Int4(inV, out, true); 6974 } catch (Exception e) { 6975 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Ushort4Int4: " + e.toString()); 6976 } 6977 } 6978 6979 private void verifyResultsConvertUshort4Int4(Allocation inV, Allocation out, boolean relaxed) { 6980 short[] arrayInV = new short[INPUTSIZE * 4]; 6981 inV.copyTo(arrayInV); 6982 int[] arrayOut = new int[INPUTSIZE * 4]; 6983 out.copyTo(arrayOut); 6984 for (int i = 0; i < INPUTSIZE; i++) { 6985 for (int j = 0; j < 4 ; j++) { 6986 // Extract the inputs. 6987 ArgumentsUshortInt args = new ArgumentsUshortInt(); 6988 args.inV = arrayInV[i * 4 + j]; 6989 // Figure out what the outputs should have been. 6990 CoreMathVerifier.computeConvert(args); 6991 // Validate the outputs. 6992 boolean valid = true; 6993 if (args.out != arrayOut[i * 4 + j]) { 6994 valid = false; 6995 } 6996 if (!valid) { 6997 StringBuilder message = new StringBuilder(); 6998 message.append("Input inV: "); 6999 message.append(String.format("0x%x", args.inV)); 7000 message.append("\n"); 7001 message.append("Expected output out: "); 7002 message.append(String.format("%d", args.out)); 7003 message.append("\n"); 7004 message.append("Actual output out: "); 7005 message.append(String.format("%d", arrayOut[i * 4 + j])); 7006 if (args.out != arrayOut[i * 4 + j]) { 7007 message.append(" FAIL"); 7008 } 7009 message.append("\n"); 7010 assertTrue("Incorrect output for checkConvertUshort4Int4" + 7011 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7012 } 7013 } 7014 } 7015 } 7016 7017 public class ArgumentsIntInt { 7018 public int inV; 7019 public int out; 7020 } 7021 7022 private void checkConvertInt2Int2() { 7023 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0x501d84049a42354l, true, 31); 7024 try { 7025 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 7026 script.forEach_testConvertInt2Int2Int2(inV, out); 7027 verifyResultsConvertInt2Int2(inV, out, false); 7028 } catch (Exception e) { 7029 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Int2Int2: " + e.toString()); 7030 } 7031 try { 7032 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 7033 scriptRelaxed.forEach_testConvertInt2Int2Int2(inV, out); 7034 verifyResultsConvertInt2Int2(inV, out, true); 7035 } catch (Exception e) { 7036 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Int2Int2: " + e.toString()); 7037 } 7038 } 7039 7040 private void verifyResultsConvertInt2Int2(Allocation inV, Allocation out, boolean relaxed) { 7041 int[] arrayInV = new int[INPUTSIZE * 2]; 7042 inV.copyTo(arrayInV); 7043 int[] arrayOut = new int[INPUTSIZE * 2]; 7044 out.copyTo(arrayOut); 7045 for (int i = 0; i < INPUTSIZE; i++) { 7046 for (int j = 0; j < 2 ; j++) { 7047 // Extract the inputs. 7048 ArgumentsIntInt args = new ArgumentsIntInt(); 7049 args.inV = arrayInV[i * 2 + j]; 7050 // Figure out what the outputs should have been. 7051 CoreMathVerifier.computeConvert(args); 7052 // Validate the outputs. 7053 boolean valid = true; 7054 if (args.out != arrayOut[i * 2 + j]) { 7055 valid = false; 7056 } 7057 if (!valid) { 7058 StringBuilder message = new StringBuilder(); 7059 message.append("Input inV: "); 7060 message.append(String.format("%d", args.inV)); 7061 message.append("\n"); 7062 message.append("Expected output out: "); 7063 message.append(String.format("%d", args.out)); 7064 message.append("\n"); 7065 message.append("Actual output out: "); 7066 message.append(String.format("%d", arrayOut[i * 2 + j])); 7067 if (args.out != arrayOut[i * 2 + j]) { 7068 message.append(" FAIL"); 7069 } 7070 message.append("\n"); 7071 assertTrue("Incorrect output for checkConvertInt2Int2" + 7072 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7073 } 7074 } 7075 } 7076 } 7077 7078 private void checkConvertInt3Int3() { 7079 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0x501d87f934c338al, true, 31); 7080 try { 7081 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 7082 script.forEach_testConvertInt3Int3Int3(inV, out); 7083 verifyResultsConvertInt3Int3(inV, out, false); 7084 } catch (Exception e) { 7085 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Int3Int3: " + e.toString()); 7086 } 7087 try { 7088 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 7089 scriptRelaxed.forEach_testConvertInt3Int3Int3(inV, out); 7090 verifyResultsConvertInt3Int3(inV, out, true); 7091 } catch (Exception e) { 7092 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Int3Int3: " + e.toString()); 7093 } 7094 } 7095 7096 private void verifyResultsConvertInt3Int3(Allocation inV, Allocation out, boolean relaxed) { 7097 int[] arrayInV = new int[INPUTSIZE * 4]; 7098 inV.copyTo(arrayInV); 7099 int[] arrayOut = new int[INPUTSIZE * 4]; 7100 out.copyTo(arrayOut); 7101 for (int i = 0; i < INPUTSIZE; i++) { 7102 for (int j = 0; j < 3 ; j++) { 7103 // Extract the inputs. 7104 ArgumentsIntInt args = new ArgumentsIntInt(); 7105 args.inV = arrayInV[i * 4 + j]; 7106 // Figure out what the outputs should have been. 7107 CoreMathVerifier.computeConvert(args); 7108 // Validate the outputs. 7109 boolean valid = true; 7110 if (args.out != arrayOut[i * 4 + j]) { 7111 valid = false; 7112 } 7113 if (!valid) { 7114 StringBuilder message = new StringBuilder(); 7115 message.append("Input inV: "); 7116 message.append(String.format("%d", args.inV)); 7117 message.append("\n"); 7118 message.append("Expected output out: "); 7119 message.append(String.format("%d", args.out)); 7120 message.append("\n"); 7121 message.append("Actual output out: "); 7122 message.append(String.format("%d", arrayOut[i * 4 + j])); 7123 if (args.out != arrayOut[i * 4 + j]) { 7124 message.append(" FAIL"); 7125 } 7126 message.append("\n"); 7127 assertTrue("Incorrect output for checkConvertInt3Int3" + 7128 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7129 } 7130 } 7131 } 7132 } 7133 7134 private void checkConvertInt4Int4() { 7135 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0x501d8bedcf443c0l, true, 31); 7136 try { 7137 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 7138 script.forEach_testConvertInt4Int4Int4(inV, out); 7139 verifyResultsConvertInt4Int4(inV, out, false); 7140 } catch (Exception e) { 7141 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Int4Int4: " + e.toString()); 7142 } 7143 try { 7144 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 7145 scriptRelaxed.forEach_testConvertInt4Int4Int4(inV, out); 7146 verifyResultsConvertInt4Int4(inV, out, true); 7147 } catch (Exception e) { 7148 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Int4Int4: " + e.toString()); 7149 } 7150 } 7151 7152 private void verifyResultsConvertInt4Int4(Allocation inV, Allocation out, boolean relaxed) { 7153 int[] arrayInV = new int[INPUTSIZE * 4]; 7154 inV.copyTo(arrayInV); 7155 int[] arrayOut = new int[INPUTSIZE * 4]; 7156 out.copyTo(arrayOut); 7157 for (int i = 0; i < INPUTSIZE; i++) { 7158 for (int j = 0; j < 4 ; j++) { 7159 // Extract the inputs. 7160 ArgumentsIntInt args = new ArgumentsIntInt(); 7161 args.inV = arrayInV[i * 4 + j]; 7162 // Figure out what the outputs should have been. 7163 CoreMathVerifier.computeConvert(args); 7164 // Validate the outputs. 7165 boolean valid = true; 7166 if (args.out != arrayOut[i * 4 + j]) { 7167 valid = false; 7168 } 7169 if (!valid) { 7170 StringBuilder message = new StringBuilder(); 7171 message.append("Input inV: "); 7172 message.append(String.format("%d", args.inV)); 7173 message.append("\n"); 7174 message.append("Expected output out: "); 7175 message.append(String.format("%d", args.out)); 7176 message.append("\n"); 7177 message.append("Actual output out: "); 7178 message.append(String.format("%d", arrayOut[i * 4 + j])); 7179 if (args.out != arrayOut[i * 4 + j]) { 7180 message.append(" FAIL"); 7181 } 7182 message.append("\n"); 7183 assertTrue("Incorrect output for checkConvertInt4Int4" + 7184 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7185 } 7186 } 7187 } 7188 } 7189 7190 public class ArgumentsUintInt { 7191 public int inV; 7192 public int out; 7193 } 7194 7195 private void checkConvertUint2Int2() { 7196 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0x70899b043daccaddl, false, 31); 7197 try { 7198 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 7199 script.forEach_testConvertInt2Uint2Int2(inV, out); 7200 verifyResultsConvertUint2Int2(inV, out, false); 7201 } catch (Exception e) { 7202 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Uint2Int2: " + e.toString()); 7203 } 7204 try { 7205 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE); 7206 scriptRelaxed.forEach_testConvertInt2Uint2Int2(inV, out); 7207 verifyResultsConvertUint2Int2(inV, out, true); 7208 } catch (Exception e) { 7209 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt2Uint2Int2: " + e.toString()); 7210 } 7211 } 7212 7213 private void verifyResultsConvertUint2Int2(Allocation inV, Allocation out, boolean relaxed) { 7214 int[] arrayInV = new int[INPUTSIZE * 2]; 7215 inV.copyTo(arrayInV); 7216 int[] arrayOut = new int[INPUTSIZE * 2]; 7217 out.copyTo(arrayOut); 7218 for (int i = 0; i < INPUTSIZE; i++) { 7219 for (int j = 0; j < 2 ; j++) { 7220 // Extract the inputs. 7221 ArgumentsUintInt args = new ArgumentsUintInt(); 7222 args.inV = arrayInV[i * 2 + j]; 7223 // Figure out what the outputs should have been. 7224 CoreMathVerifier.computeConvert(args); 7225 // Validate the outputs. 7226 boolean valid = true; 7227 if (args.out != arrayOut[i * 2 + j]) { 7228 valid = false; 7229 } 7230 if (!valid) { 7231 StringBuilder message = new StringBuilder(); 7232 message.append("Input inV: "); 7233 message.append(String.format("0x%x", args.inV)); 7234 message.append("\n"); 7235 message.append("Expected output out: "); 7236 message.append(String.format("%d", args.out)); 7237 message.append("\n"); 7238 message.append("Actual output out: "); 7239 message.append(String.format("%d", arrayOut[i * 2 + j])); 7240 if (args.out != arrayOut[i * 2 + j]) { 7241 message.append(" FAIL"); 7242 } 7243 message.append("\n"); 7244 assertTrue("Incorrect output for checkConvertUint2Int2" + 7245 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7246 } 7247 } 7248 } 7249 } 7250 7251 private void checkConvertUint3Int3() { 7252 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0x70899b438754db13l, false, 31); 7253 try { 7254 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 7255 script.forEach_testConvertInt3Uint3Int3(inV, out); 7256 verifyResultsConvertUint3Int3(inV, out, false); 7257 } catch (Exception e) { 7258 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Uint3Int3: " + e.toString()); 7259 } 7260 try { 7261 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE); 7262 scriptRelaxed.forEach_testConvertInt3Uint3Int3(inV, out); 7263 verifyResultsConvertUint3Int3(inV, out, true); 7264 } catch (Exception e) { 7265 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt3Uint3Int3: " + e.toString()); 7266 } 7267 } 7268 7269 private void verifyResultsConvertUint3Int3(Allocation inV, Allocation out, boolean relaxed) { 7270 int[] arrayInV = new int[INPUTSIZE * 4]; 7271 inV.copyTo(arrayInV); 7272 int[] arrayOut = new int[INPUTSIZE * 4]; 7273 out.copyTo(arrayOut); 7274 for (int i = 0; i < INPUTSIZE; i++) { 7275 for (int j = 0; j < 3 ; j++) { 7276 // Extract the inputs. 7277 ArgumentsUintInt args = new ArgumentsUintInt(); 7278 args.inV = arrayInV[i * 4 + j]; 7279 // Figure out what the outputs should have been. 7280 CoreMathVerifier.computeConvert(args); 7281 // Validate the outputs. 7282 boolean valid = true; 7283 if (args.out != arrayOut[i * 4 + j]) { 7284 valid = false; 7285 } 7286 if (!valid) { 7287 StringBuilder message = new StringBuilder(); 7288 message.append("Input inV: "); 7289 message.append(String.format("0x%x", args.inV)); 7290 message.append("\n"); 7291 message.append("Expected output out: "); 7292 message.append(String.format("%d", args.out)); 7293 message.append("\n"); 7294 message.append("Actual output out: "); 7295 message.append(String.format("%d", arrayOut[i * 4 + j])); 7296 if (args.out != arrayOut[i * 4 + j]) { 7297 message.append(" FAIL"); 7298 } 7299 message.append("\n"); 7300 assertTrue("Incorrect output for checkConvertUint3Int3" + 7301 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7302 } 7303 } 7304 } 7305 } 7306 7307 private void checkConvertUint4Int4() { 7308 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0x70899b82d0fceb49l, false, 31); 7309 try { 7310 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 7311 script.forEach_testConvertInt4Uint4Int4(inV, out); 7312 verifyResultsConvertUint4Int4(inV, out, false); 7313 } catch (Exception e) { 7314 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Uint4Int4: " + e.toString()); 7315 } 7316 try { 7317 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE); 7318 scriptRelaxed.forEach_testConvertInt4Uint4Int4(inV, out); 7319 verifyResultsConvertUint4Int4(inV, out, true); 7320 } catch (Exception e) { 7321 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertInt4Uint4Int4: " + e.toString()); 7322 } 7323 } 7324 7325 private void verifyResultsConvertUint4Int4(Allocation inV, Allocation out, boolean relaxed) { 7326 int[] arrayInV = new int[INPUTSIZE * 4]; 7327 inV.copyTo(arrayInV); 7328 int[] arrayOut = new int[INPUTSIZE * 4]; 7329 out.copyTo(arrayOut); 7330 for (int i = 0; i < INPUTSIZE; i++) { 7331 for (int j = 0; j < 4 ; j++) { 7332 // Extract the inputs. 7333 ArgumentsUintInt args = new ArgumentsUintInt(); 7334 args.inV = arrayInV[i * 4 + j]; 7335 // Figure out what the outputs should have been. 7336 CoreMathVerifier.computeConvert(args); 7337 // Validate the outputs. 7338 boolean valid = true; 7339 if (args.out != arrayOut[i * 4 + j]) { 7340 valid = false; 7341 } 7342 if (!valid) { 7343 StringBuilder message = new StringBuilder(); 7344 message.append("Input inV: "); 7345 message.append(String.format("0x%x", args.inV)); 7346 message.append("\n"); 7347 message.append("Expected output out: "); 7348 message.append(String.format("%d", args.out)); 7349 message.append("\n"); 7350 message.append("Actual output out: "); 7351 message.append(String.format("%d", arrayOut[i * 4 + j])); 7352 if (args.out != arrayOut[i * 4 + j]) { 7353 message.append(" FAIL"); 7354 } 7355 message.append("\n"); 7356 assertTrue("Incorrect output for checkConvertUint4Int4" + 7357 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7358 } 7359 } 7360 } 7361 } 7362 7363 public class ArgumentsFloatUint { 7364 public float inV; 7365 public int out; 7366 } 7367 7368 private void checkConvertFloat2Uint2() { 7369 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 2, 0x239cb6cd424dca22l, 0.0000000000000000000e+00, 4.2949670400000000000e+09); 7370 try { 7371 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7372 script.forEach_testConvertUint2Float2Uint2(inV, out); 7373 verifyResultsConvertFloat2Uint2(inV, out, false); 7374 } catch (Exception e) { 7375 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Float2Uint2: " + e.toString()); 7376 } 7377 try { 7378 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7379 scriptRelaxed.forEach_testConvertUint2Float2Uint2(inV, out); 7380 verifyResultsConvertFloat2Uint2(inV, out, true); 7381 } catch (Exception e) { 7382 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Float2Uint2: " + e.toString()); 7383 } 7384 } 7385 7386 private void verifyResultsConvertFloat2Uint2(Allocation inV, Allocation out, boolean relaxed) { 7387 float[] arrayInV = new float[INPUTSIZE * 2]; 7388 inV.copyTo(arrayInV); 7389 int[] arrayOut = new int[INPUTSIZE * 2]; 7390 out.copyTo(arrayOut); 7391 for (int i = 0; i < INPUTSIZE; i++) { 7392 for (int j = 0; j < 2 ; j++) { 7393 // Extract the inputs. 7394 ArgumentsFloatUint args = new ArgumentsFloatUint(); 7395 args.inV = arrayInV[i * 2 + j]; 7396 // Figure out what the outputs should have been. 7397 CoreMathVerifier.computeConvert(args); 7398 // Validate the outputs. 7399 boolean valid = true; 7400 if (args.out != arrayOut[i * 2 + j]) { 7401 valid = false; 7402 } 7403 if (!valid) { 7404 StringBuilder message = new StringBuilder(); 7405 message.append("Input inV: "); 7406 message.append(String.format("%14.8g {%8x} %15a", 7407 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 7408 message.append("\n"); 7409 message.append("Expected output out: "); 7410 message.append(String.format("0x%x", args.out)); 7411 message.append("\n"); 7412 message.append("Actual output out: "); 7413 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 7414 if (args.out != arrayOut[i * 2 + j]) { 7415 message.append(" FAIL"); 7416 } 7417 message.append("\n"); 7418 assertTrue("Incorrect output for checkConvertFloat2Uint2" + 7419 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7420 } 7421 } 7422 } 7423 } 7424 7425 private void checkConvertFloat3Uint3() { 7426 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x239cc16ea1558f16l, 0.0000000000000000000e+00, 4.2949670400000000000e+09); 7427 try { 7428 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7429 script.forEach_testConvertUint3Float3Uint3(inV, out); 7430 verifyResultsConvertFloat3Uint3(inV, out, false); 7431 } catch (Exception e) { 7432 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Float3Uint3: " + e.toString()); 7433 } 7434 try { 7435 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7436 scriptRelaxed.forEach_testConvertUint3Float3Uint3(inV, out); 7437 verifyResultsConvertFloat3Uint3(inV, out, true); 7438 } catch (Exception e) { 7439 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Float3Uint3: " + e.toString()); 7440 } 7441 } 7442 7443 private void verifyResultsConvertFloat3Uint3(Allocation inV, Allocation out, boolean relaxed) { 7444 float[] arrayInV = new float[INPUTSIZE * 4]; 7445 inV.copyTo(arrayInV); 7446 int[] arrayOut = new int[INPUTSIZE * 4]; 7447 out.copyTo(arrayOut); 7448 for (int i = 0; i < INPUTSIZE; i++) { 7449 for (int j = 0; j < 3 ; j++) { 7450 // Extract the inputs. 7451 ArgumentsFloatUint args = new ArgumentsFloatUint(); 7452 args.inV = arrayInV[i * 4 + j]; 7453 // Figure out what the outputs should have been. 7454 CoreMathVerifier.computeConvert(args); 7455 // Validate the outputs. 7456 boolean valid = true; 7457 if (args.out != arrayOut[i * 4 + j]) { 7458 valid = false; 7459 } 7460 if (!valid) { 7461 StringBuilder message = new StringBuilder(); 7462 message.append("Input inV: "); 7463 message.append(String.format("%14.8g {%8x} %15a", 7464 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 7465 message.append("\n"); 7466 message.append("Expected output out: "); 7467 message.append(String.format("0x%x", args.out)); 7468 message.append("\n"); 7469 message.append("Actual output out: "); 7470 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7471 if (args.out != arrayOut[i * 4 + j]) { 7472 message.append(" FAIL"); 7473 } 7474 message.append("\n"); 7475 assertTrue("Incorrect output for checkConvertFloat3Uint3" + 7476 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7477 } 7478 } 7479 } 7480 } 7481 7482 private void checkConvertFloat4Uint4() { 7483 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x239ccc10005d540al, 0.0000000000000000000e+00, 4.2949670400000000000e+09); 7484 try { 7485 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7486 script.forEach_testConvertUint4Float4Uint4(inV, out); 7487 verifyResultsConvertFloat4Uint4(inV, out, false); 7488 } catch (Exception e) { 7489 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Float4Uint4: " + e.toString()); 7490 } 7491 try { 7492 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7493 scriptRelaxed.forEach_testConvertUint4Float4Uint4(inV, out); 7494 verifyResultsConvertFloat4Uint4(inV, out, true); 7495 } catch (Exception e) { 7496 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Float4Uint4: " + e.toString()); 7497 } 7498 } 7499 7500 private void verifyResultsConvertFloat4Uint4(Allocation inV, Allocation out, boolean relaxed) { 7501 float[] arrayInV = new float[INPUTSIZE * 4]; 7502 inV.copyTo(arrayInV); 7503 int[] arrayOut = new int[INPUTSIZE * 4]; 7504 out.copyTo(arrayOut); 7505 for (int i = 0; i < INPUTSIZE; i++) { 7506 for (int j = 0; j < 4 ; j++) { 7507 // Extract the inputs. 7508 ArgumentsFloatUint args = new ArgumentsFloatUint(); 7509 args.inV = arrayInV[i * 4 + j]; 7510 // Figure out what the outputs should have been. 7511 CoreMathVerifier.computeConvert(args); 7512 // Validate the outputs. 7513 boolean valid = true; 7514 if (args.out != arrayOut[i * 4 + j]) { 7515 valid = false; 7516 } 7517 if (!valid) { 7518 StringBuilder message = new StringBuilder(); 7519 message.append("Input inV: "); 7520 message.append(String.format("%14.8g {%8x} %15a", 7521 args.inV, Float.floatToRawIntBits(args.inV), args.inV)); 7522 message.append("\n"); 7523 message.append("Expected output out: "); 7524 message.append(String.format("0x%x", args.out)); 7525 message.append("\n"); 7526 message.append("Actual output out: "); 7527 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7528 if (args.out != arrayOut[i * 4 + j]) { 7529 message.append(" FAIL"); 7530 } 7531 message.append("\n"); 7532 assertTrue("Incorrect output for checkConvertFloat4Uint4" + 7533 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7534 } 7535 } 7536 } 7537 } 7538 7539 public class ArgumentsCharUint { 7540 public byte inV; 7541 public int out; 7542 } 7543 7544 private void checkConvertChar2Uint2() { 7545 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 2, 0xd8618beceddda162l, false, 7); 7546 try { 7547 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7548 script.forEach_testConvertUint2Char2Uint2(inV, out); 7549 verifyResultsConvertChar2Uint2(inV, out, false); 7550 } catch (Exception e) { 7551 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Char2Uint2: " + e.toString()); 7552 } 7553 try { 7554 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7555 scriptRelaxed.forEach_testConvertUint2Char2Uint2(inV, out); 7556 verifyResultsConvertChar2Uint2(inV, out, true); 7557 } catch (Exception e) { 7558 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Char2Uint2: " + e.toString()); 7559 } 7560 } 7561 7562 private void verifyResultsConvertChar2Uint2(Allocation inV, Allocation out, boolean relaxed) { 7563 byte[] arrayInV = new byte[INPUTSIZE * 2]; 7564 inV.copyTo(arrayInV); 7565 int[] arrayOut = new int[INPUTSIZE * 2]; 7566 out.copyTo(arrayOut); 7567 for (int i = 0; i < INPUTSIZE; i++) { 7568 for (int j = 0; j < 2 ; j++) { 7569 // Extract the inputs. 7570 ArgumentsCharUint args = new ArgumentsCharUint(); 7571 args.inV = arrayInV[i * 2 + j]; 7572 // Figure out what the outputs should have been. 7573 CoreMathVerifier.computeConvert(args); 7574 // Validate the outputs. 7575 boolean valid = true; 7576 if (args.out != arrayOut[i * 2 + j]) { 7577 valid = false; 7578 } 7579 if (!valid) { 7580 StringBuilder message = new StringBuilder(); 7581 message.append("Input inV: "); 7582 message.append(String.format("%d", args.inV)); 7583 message.append("\n"); 7584 message.append("Expected output out: "); 7585 message.append(String.format("0x%x", args.out)); 7586 message.append("\n"); 7587 message.append("Actual output out: "); 7588 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 7589 if (args.out != arrayOut[i * 2 + j]) { 7590 message.append(" FAIL"); 7591 } 7592 message.append("\n"); 7593 assertTrue("Incorrect output for checkConvertChar2Uint2" + 7594 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7595 } 7596 } 7597 } 7598 } 7599 7600 private void checkConvertChar3Uint3() { 7601 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 3, 0xd861968e4ce56656l, false, 7); 7602 try { 7603 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7604 script.forEach_testConvertUint3Char3Uint3(inV, out); 7605 verifyResultsConvertChar3Uint3(inV, out, false); 7606 } catch (Exception e) { 7607 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Char3Uint3: " + e.toString()); 7608 } 7609 try { 7610 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7611 scriptRelaxed.forEach_testConvertUint3Char3Uint3(inV, out); 7612 verifyResultsConvertChar3Uint3(inV, out, true); 7613 } catch (Exception e) { 7614 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Char3Uint3: " + e.toString()); 7615 } 7616 } 7617 7618 private void verifyResultsConvertChar3Uint3(Allocation inV, Allocation out, boolean relaxed) { 7619 byte[] arrayInV = new byte[INPUTSIZE * 4]; 7620 inV.copyTo(arrayInV); 7621 int[] arrayOut = new int[INPUTSIZE * 4]; 7622 out.copyTo(arrayOut); 7623 for (int i = 0; i < INPUTSIZE; i++) { 7624 for (int j = 0; j < 3 ; j++) { 7625 // Extract the inputs. 7626 ArgumentsCharUint args = new ArgumentsCharUint(); 7627 args.inV = arrayInV[i * 4 + j]; 7628 // Figure out what the outputs should have been. 7629 CoreMathVerifier.computeConvert(args); 7630 // Validate the outputs. 7631 boolean valid = true; 7632 if (args.out != arrayOut[i * 4 + j]) { 7633 valid = false; 7634 } 7635 if (!valid) { 7636 StringBuilder message = new StringBuilder(); 7637 message.append("Input inV: "); 7638 message.append(String.format("%d", args.inV)); 7639 message.append("\n"); 7640 message.append("Expected output out: "); 7641 message.append(String.format("0x%x", args.out)); 7642 message.append("\n"); 7643 message.append("Actual output out: "); 7644 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7645 if (args.out != arrayOut[i * 4 + j]) { 7646 message.append(" FAIL"); 7647 } 7648 message.append("\n"); 7649 assertTrue("Incorrect output for checkConvertChar3Uint3" + 7650 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7651 } 7652 } 7653 } 7654 } 7655 7656 private void checkConvertChar4Uint4() { 7657 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_8, 4, 0xd861a12fabed2b4al, false, 7); 7658 try { 7659 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7660 script.forEach_testConvertUint4Char4Uint4(inV, out); 7661 verifyResultsConvertChar4Uint4(inV, out, false); 7662 } catch (Exception e) { 7663 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Char4Uint4: " + e.toString()); 7664 } 7665 try { 7666 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7667 scriptRelaxed.forEach_testConvertUint4Char4Uint4(inV, out); 7668 verifyResultsConvertChar4Uint4(inV, out, true); 7669 } catch (Exception e) { 7670 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Char4Uint4: " + e.toString()); 7671 } 7672 } 7673 7674 private void verifyResultsConvertChar4Uint4(Allocation inV, Allocation out, boolean relaxed) { 7675 byte[] arrayInV = new byte[INPUTSIZE * 4]; 7676 inV.copyTo(arrayInV); 7677 int[] arrayOut = new int[INPUTSIZE * 4]; 7678 out.copyTo(arrayOut); 7679 for (int i = 0; i < INPUTSIZE; i++) { 7680 for (int j = 0; j < 4 ; j++) { 7681 // Extract the inputs. 7682 ArgumentsCharUint args = new ArgumentsCharUint(); 7683 args.inV = arrayInV[i * 4 + j]; 7684 // Figure out what the outputs should have been. 7685 CoreMathVerifier.computeConvert(args); 7686 // Validate the outputs. 7687 boolean valid = true; 7688 if (args.out != arrayOut[i * 4 + j]) { 7689 valid = false; 7690 } 7691 if (!valid) { 7692 StringBuilder message = new StringBuilder(); 7693 message.append("Input inV: "); 7694 message.append(String.format("%d", args.inV)); 7695 message.append("\n"); 7696 message.append("Expected output out: "); 7697 message.append(String.format("0x%x", args.out)); 7698 message.append("\n"); 7699 message.append("Actual output out: "); 7700 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7701 if (args.out != arrayOut[i * 4 + j]) { 7702 message.append(" FAIL"); 7703 } 7704 message.append("\n"); 7705 assertTrue("Incorrect output for checkConvertChar4Uint4" + 7706 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7707 } 7708 } 7709 } 7710 } 7711 7712 public class ArgumentsUcharUint { 7713 public byte inV; 7714 public int out; 7715 } 7716 7717 private void checkConvertUchar2Uint2() { 7718 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x7fef453a805fade3l, false, 8); 7719 try { 7720 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7721 script.forEach_testConvertUint2Uchar2Uint2(inV, out); 7722 verifyResultsConvertUchar2Uint2(inV, out, false); 7723 } catch (Exception e) { 7724 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Uchar2Uint2: " + e.toString()); 7725 } 7726 try { 7727 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7728 scriptRelaxed.forEach_testConvertUint2Uchar2Uint2(inV, out); 7729 verifyResultsConvertUchar2Uint2(inV, out, true); 7730 } catch (Exception e) { 7731 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Uchar2Uint2: " + e.toString()); 7732 } 7733 } 7734 7735 private void verifyResultsConvertUchar2Uint2(Allocation inV, Allocation out, boolean relaxed) { 7736 byte[] arrayInV = new byte[INPUTSIZE * 2]; 7737 inV.copyTo(arrayInV); 7738 int[] arrayOut = new int[INPUTSIZE * 2]; 7739 out.copyTo(arrayOut); 7740 for (int i = 0; i < INPUTSIZE; i++) { 7741 for (int j = 0; j < 2 ; j++) { 7742 // Extract the inputs. 7743 ArgumentsUcharUint args = new ArgumentsUcharUint(); 7744 args.inV = arrayInV[i * 2 + j]; 7745 // Figure out what the outputs should have been. 7746 CoreMathVerifier.computeConvert(args); 7747 // Validate the outputs. 7748 boolean valid = true; 7749 if (args.out != arrayOut[i * 2 + j]) { 7750 valid = false; 7751 } 7752 if (!valid) { 7753 StringBuilder message = new StringBuilder(); 7754 message.append("Input inV: "); 7755 message.append(String.format("0x%x", args.inV)); 7756 message.append("\n"); 7757 message.append("Expected output out: "); 7758 message.append(String.format("0x%x", args.out)); 7759 message.append("\n"); 7760 message.append("Actual output out: "); 7761 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 7762 if (args.out != arrayOut[i * 2 + j]) { 7763 message.append(" FAIL"); 7764 } 7765 message.append("\n"); 7766 assertTrue("Incorrect output for checkConvertUchar2Uint2" + 7767 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7768 } 7769 } 7770 } 7771 } 7772 7773 private void checkConvertUchar3Uint3() { 7774 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x7fef4fdbdf6772d7l, false, 8); 7775 try { 7776 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7777 script.forEach_testConvertUint3Uchar3Uint3(inV, out); 7778 verifyResultsConvertUchar3Uint3(inV, out, false); 7779 } catch (Exception e) { 7780 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Uchar3Uint3: " + e.toString()); 7781 } 7782 try { 7783 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7784 scriptRelaxed.forEach_testConvertUint3Uchar3Uint3(inV, out); 7785 verifyResultsConvertUchar3Uint3(inV, out, true); 7786 } catch (Exception e) { 7787 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Uchar3Uint3: " + e.toString()); 7788 } 7789 } 7790 7791 private void verifyResultsConvertUchar3Uint3(Allocation inV, Allocation out, boolean relaxed) { 7792 byte[] arrayInV = new byte[INPUTSIZE * 4]; 7793 inV.copyTo(arrayInV); 7794 int[] arrayOut = new int[INPUTSIZE * 4]; 7795 out.copyTo(arrayOut); 7796 for (int i = 0; i < INPUTSIZE; i++) { 7797 for (int j = 0; j < 3 ; j++) { 7798 // Extract the inputs. 7799 ArgumentsUcharUint args = new ArgumentsUcharUint(); 7800 args.inV = arrayInV[i * 4 + j]; 7801 // Figure out what the outputs should have been. 7802 CoreMathVerifier.computeConvert(args); 7803 // Validate the outputs. 7804 boolean valid = true; 7805 if (args.out != arrayOut[i * 4 + j]) { 7806 valid = false; 7807 } 7808 if (!valid) { 7809 StringBuilder message = new StringBuilder(); 7810 message.append("Input inV: "); 7811 message.append(String.format("0x%x", args.inV)); 7812 message.append("\n"); 7813 message.append("Expected output out: "); 7814 message.append(String.format("0x%x", args.out)); 7815 message.append("\n"); 7816 message.append("Actual output out: "); 7817 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7818 if (args.out != arrayOut[i * 4 + j]) { 7819 message.append(" FAIL"); 7820 } 7821 message.append("\n"); 7822 assertTrue("Incorrect output for checkConvertUchar3Uint3" + 7823 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7824 } 7825 } 7826 } 7827 } 7828 7829 private void checkConvertUchar4Uint4() { 7830 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0x7fef5a7d3e6f37cbl, false, 8); 7831 try { 7832 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7833 script.forEach_testConvertUint4Uchar4Uint4(inV, out); 7834 verifyResultsConvertUchar4Uint4(inV, out, false); 7835 } catch (Exception e) { 7836 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Uchar4Uint4: " + e.toString()); 7837 } 7838 try { 7839 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 7840 scriptRelaxed.forEach_testConvertUint4Uchar4Uint4(inV, out); 7841 verifyResultsConvertUchar4Uint4(inV, out, true); 7842 } catch (Exception e) { 7843 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Uchar4Uint4: " + e.toString()); 7844 } 7845 } 7846 7847 private void verifyResultsConvertUchar4Uint4(Allocation inV, Allocation out, boolean relaxed) { 7848 byte[] arrayInV = new byte[INPUTSIZE * 4]; 7849 inV.copyTo(arrayInV); 7850 int[] arrayOut = new int[INPUTSIZE * 4]; 7851 out.copyTo(arrayOut); 7852 for (int i = 0; i < INPUTSIZE; i++) { 7853 for (int j = 0; j < 4 ; j++) { 7854 // Extract the inputs. 7855 ArgumentsUcharUint args = new ArgumentsUcharUint(); 7856 args.inV = arrayInV[i * 4 + j]; 7857 // Figure out what the outputs should have been. 7858 CoreMathVerifier.computeConvert(args); 7859 // Validate the outputs. 7860 boolean valid = true; 7861 if (args.out != arrayOut[i * 4 + j]) { 7862 valid = false; 7863 } 7864 if (!valid) { 7865 StringBuilder message = new StringBuilder(); 7866 message.append("Input inV: "); 7867 message.append(String.format("0x%x", args.inV)); 7868 message.append("\n"); 7869 message.append("Expected output out: "); 7870 message.append(String.format("0x%x", args.out)); 7871 message.append("\n"); 7872 message.append("Actual output out: "); 7873 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7874 if (args.out != arrayOut[i * 4 + j]) { 7875 message.append(" FAIL"); 7876 } 7877 message.append("\n"); 7878 assertTrue("Incorrect output for checkConvertUchar4Uint4" + 7879 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7880 } 7881 } 7882 } 7883 } 7884 7885 public class ArgumentsShortUint { 7886 public short inV; 7887 public int out; 7888 } 7889 7890 private void checkConvertShort2Uint2() { 7891 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x68ab69772e9b3c26l, false, 15); 7892 try { 7893 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7894 script.forEach_testConvertUint2Short2Uint2(inV, out); 7895 verifyResultsConvertShort2Uint2(inV, out, false); 7896 } catch (Exception e) { 7897 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Short2Uint2: " + e.toString()); 7898 } 7899 try { 7900 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 7901 scriptRelaxed.forEach_testConvertUint2Short2Uint2(inV, out); 7902 verifyResultsConvertShort2Uint2(inV, out, true); 7903 } catch (Exception e) { 7904 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Short2Uint2: " + e.toString()); 7905 } 7906 } 7907 7908 private void verifyResultsConvertShort2Uint2(Allocation inV, Allocation out, boolean relaxed) { 7909 short[] arrayInV = new short[INPUTSIZE * 2]; 7910 inV.copyTo(arrayInV); 7911 int[] arrayOut = new int[INPUTSIZE * 2]; 7912 out.copyTo(arrayOut); 7913 for (int i = 0; i < INPUTSIZE; i++) { 7914 for (int j = 0; j < 2 ; j++) { 7915 // Extract the inputs. 7916 ArgumentsShortUint args = new ArgumentsShortUint(); 7917 args.inV = arrayInV[i * 2 + j]; 7918 // Figure out what the outputs should have been. 7919 CoreMathVerifier.computeConvert(args); 7920 // Validate the outputs. 7921 boolean valid = true; 7922 if (args.out != arrayOut[i * 2 + j]) { 7923 valid = false; 7924 } 7925 if (!valid) { 7926 StringBuilder message = new StringBuilder(); 7927 message.append("Input inV: "); 7928 message.append(String.format("%d", args.inV)); 7929 message.append("\n"); 7930 message.append("Expected output out: "); 7931 message.append(String.format("0x%x", args.out)); 7932 message.append("\n"); 7933 message.append("Actual output out: "); 7934 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 7935 if (args.out != arrayOut[i * 2 + j]) { 7936 message.append(" FAIL"); 7937 } 7938 message.append("\n"); 7939 assertTrue("Incorrect output for checkConvertShort2Uint2" + 7940 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7941 } 7942 } 7943 } 7944 } 7945 7946 private void checkConvertShort3Uint3() { 7947 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x68ab74188da3011al, false, 15); 7948 try { 7949 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7950 script.forEach_testConvertUint3Short3Uint3(inV, out); 7951 verifyResultsConvertShort3Uint3(inV, out, false); 7952 } catch (Exception e) { 7953 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Short3Uint3: " + e.toString()); 7954 } 7955 try { 7956 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 7957 scriptRelaxed.forEach_testConvertUint3Short3Uint3(inV, out); 7958 verifyResultsConvertShort3Uint3(inV, out, true); 7959 } catch (Exception e) { 7960 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Short3Uint3: " + e.toString()); 7961 } 7962 } 7963 7964 private void verifyResultsConvertShort3Uint3(Allocation inV, Allocation out, boolean relaxed) { 7965 short[] arrayInV = new short[INPUTSIZE * 4]; 7966 inV.copyTo(arrayInV); 7967 int[] arrayOut = new int[INPUTSIZE * 4]; 7968 out.copyTo(arrayOut); 7969 for (int i = 0; i < INPUTSIZE; i++) { 7970 for (int j = 0; j < 3 ; j++) { 7971 // Extract the inputs. 7972 ArgumentsShortUint args = new ArgumentsShortUint(); 7973 args.inV = arrayInV[i * 4 + j]; 7974 // Figure out what the outputs should have been. 7975 CoreMathVerifier.computeConvert(args); 7976 // Validate the outputs. 7977 boolean valid = true; 7978 if (args.out != arrayOut[i * 4 + j]) { 7979 valid = false; 7980 } 7981 if (!valid) { 7982 StringBuilder message = new StringBuilder(); 7983 message.append("Input inV: "); 7984 message.append(String.format("%d", args.inV)); 7985 message.append("\n"); 7986 message.append("Expected output out: "); 7987 message.append(String.format("0x%x", args.out)); 7988 message.append("\n"); 7989 message.append("Actual output out: "); 7990 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 7991 if (args.out != arrayOut[i * 4 + j]) { 7992 message.append(" FAIL"); 7993 } 7994 message.append("\n"); 7995 assertTrue("Incorrect output for checkConvertShort3Uint3" + 7996 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 7997 } 7998 } 7999 } 8000 } 8001 8002 private void checkConvertShort4Uint4() { 8003 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x68ab7eb9ecaac60el, false, 15); 8004 try { 8005 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8006 script.forEach_testConvertUint4Short4Uint4(inV, out); 8007 verifyResultsConvertShort4Uint4(inV, out, false); 8008 } catch (Exception e) { 8009 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Short4Uint4: " + e.toString()); 8010 } 8011 try { 8012 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8013 scriptRelaxed.forEach_testConvertUint4Short4Uint4(inV, out); 8014 verifyResultsConvertShort4Uint4(inV, out, true); 8015 } catch (Exception e) { 8016 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Short4Uint4: " + e.toString()); 8017 } 8018 } 8019 8020 private void verifyResultsConvertShort4Uint4(Allocation inV, Allocation out, boolean relaxed) { 8021 short[] arrayInV = new short[INPUTSIZE * 4]; 8022 inV.copyTo(arrayInV); 8023 int[] arrayOut = new int[INPUTSIZE * 4]; 8024 out.copyTo(arrayOut); 8025 for (int i = 0; i < INPUTSIZE; i++) { 8026 for (int j = 0; j < 4 ; j++) { 8027 // Extract the inputs. 8028 ArgumentsShortUint args = new ArgumentsShortUint(); 8029 args.inV = arrayInV[i * 4 + j]; 8030 // Figure out what the outputs should have been. 8031 CoreMathVerifier.computeConvert(args); 8032 // Validate the outputs. 8033 boolean valid = true; 8034 if (args.out != arrayOut[i * 4 + j]) { 8035 valid = false; 8036 } 8037 if (!valid) { 8038 StringBuilder message = new StringBuilder(); 8039 message.append("Input inV: "); 8040 message.append(String.format("%d", args.inV)); 8041 message.append("\n"); 8042 message.append("Expected output out: "); 8043 message.append(String.format("0x%x", args.out)); 8044 message.append("\n"); 8045 message.append("Actual output out: "); 8046 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8047 if (args.out != arrayOut[i * 4 + j]) { 8048 message.append(" FAIL"); 8049 } 8050 message.append("\n"); 8051 assertTrue("Incorrect output for checkConvertShort4Uint4" + 8052 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8053 } 8054 } 8055 } 8056 } 8057 8058 public class ArgumentsUshortUint { 8059 public short inV; 8060 public int out; 8061 } 8062 8063 private void checkConvertUshort2Uint2() { 8064 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0x8d79897eca7355d1l, false, 16); 8065 try { 8066 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8067 script.forEach_testConvertUint2Ushort2Uint2(inV, out); 8068 verifyResultsConvertUshort2Uint2(inV, out, false); 8069 } catch (Exception e) { 8070 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Ushort2Uint2: " + e.toString()); 8071 } 8072 try { 8073 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8074 scriptRelaxed.forEach_testConvertUint2Ushort2Uint2(inV, out); 8075 verifyResultsConvertUshort2Uint2(inV, out, true); 8076 } catch (Exception e) { 8077 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Ushort2Uint2: " + e.toString()); 8078 } 8079 } 8080 8081 private void verifyResultsConvertUshort2Uint2(Allocation inV, Allocation out, boolean relaxed) { 8082 short[] arrayInV = new short[INPUTSIZE * 2]; 8083 inV.copyTo(arrayInV); 8084 int[] arrayOut = new int[INPUTSIZE * 2]; 8085 out.copyTo(arrayOut); 8086 for (int i = 0; i < INPUTSIZE; i++) { 8087 for (int j = 0; j < 2 ; j++) { 8088 // Extract the inputs. 8089 ArgumentsUshortUint args = new ArgumentsUshortUint(); 8090 args.inV = arrayInV[i * 2 + j]; 8091 // Figure out what the outputs should have been. 8092 CoreMathVerifier.computeConvert(args); 8093 // Validate the outputs. 8094 boolean valid = true; 8095 if (args.out != arrayOut[i * 2 + j]) { 8096 valid = false; 8097 } 8098 if (!valid) { 8099 StringBuilder message = new StringBuilder(); 8100 message.append("Input inV: "); 8101 message.append(String.format("0x%x", args.inV)); 8102 message.append("\n"); 8103 message.append("Expected output out: "); 8104 message.append(String.format("0x%x", args.out)); 8105 message.append("\n"); 8106 message.append("Actual output out: "); 8107 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 8108 if (args.out != arrayOut[i * 2 + j]) { 8109 message.append(" FAIL"); 8110 } 8111 message.append("\n"); 8112 assertTrue("Incorrect output for checkConvertUshort2Uint2" + 8113 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8114 } 8115 } 8116 } 8117 } 8118 8119 private void checkConvertUshort3Uint3() { 8120 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0x8d799420297b1ac5l, false, 16); 8121 try { 8122 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8123 script.forEach_testConvertUint3Ushort3Uint3(inV, out); 8124 verifyResultsConvertUshort3Uint3(inV, out, false); 8125 } catch (Exception e) { 8126 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Ushort3Uint3: " + e.toString()); 8127 } 8128 try { 8129 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8130 scriptRelaxed.forEach_testConvertUint3Ushort3Uint3(inV, out); 8131 verifyResultsConvertUshort3Uint3(inV, out, true); 8132 } catch (Exception e) { 8133 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Ushort3Uint3: " + e.toString()); 8134 } 8135 } 8136 8137 private void verifyResultsConvertUshort3Uint3(Allocation inV, Allocation out, boolean relaxed) { 8138 short[] arrayInV = new short[INPUTSIZE * 4]; 8139 inV.copyTo(arrayInV); 8140 int[] arrayOut = new int[INPUTSIZE * 4]; 8141 out.copyTo(arrayOut); 8142 for (int i = 0; i < INPUTSIZE; i++) { 8143 for (int j = 0; j < 3 ; j++) { 8144 // Extract the inputs. 8145 ArgumentsUshortUint args = new ArgumentsUshortUint(); 8146 args.inV = arrayInV[i * 4 + j]; 8147 // Figure out what the outputs should have been. 8148 CoreMathVerifier.computeConvert(args); 8149 // Validate the outputs. 8150 boolean valid = true; 8151 if (args.out != arrayOut[i * 4 + j]) { 8152 valid = false; 8153 } 8154 if (!valid) { 8155 StringBuilder message = new StringBuilder(); 8156 message.append("Input inV: "); 8157 message.append(String.format("0x%x", args.inV)); 8158 message.append("\n"); 8159 message.append("Expected output out: "); 8160 message.append(String.format("0x%x", args.out)); 8161 message.append("\n"); 8162 message.append("Actual output out: "); 8163 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8164 if (args.out != arrayOut[i * 4 + j]) { 8165 message.append(" FAIL"); 8166 } 8167 message.append("\n"); 8168 assertTrue("Incorrect output for checkConvertUshort3Uint3" + 8169 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8170 } 8171 } 8172 } 8173 } 8174 8175 private void checkConvertUshort4Uint4() { 8176 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0x8d799ec18882dfb9l, false, 16); 8177 try { 8178 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8179 script.forEach_testConvertUint4Ushort4Uint4(inV, out); 8180 verifyResultsConvertUshort4Uint4(inV, out, false); 8181 } catch (Exception e) { 8182 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Ushort4Uint4: " + e.toString()); 8183 } 8184 try { 8185 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8186 scriptRelaxed.forEach_testConvertUint4Ushort4Uint4(inV, out); 8187 verifyResultsConvertUshort4Uint4(inV, out, true); 8188 } catch (Exception e) { 8189 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Ushort4Uint4: " + e.toString()); 8190 } 8191 } 8192 8193 private void verifyResultsConvertUshort4Uint4(Allocation inV, Allocation out, boolean relaxed) { 8194 short[] arrayInV = new short[INPUTSIZE * 4]; 8195 inV.copyTo(arrayInV); 8196 int[] arrayOut = new int[INPUTSIZE * 4]; 8197 out.copyTo(arrayOut); 8198 for (int i = 0; i < INPUTSIZE; i++) { 8199 for (int j = 0; j < 4 ; j++) { 8200 // Extract the inputs. 8201 ArgumentsUshortUint args = new ArgumentsUshortUint(); 8202 args.inV = arrayInV[i * 4 + j]; 8203 // Figure out what the outputs should have been. 8204 CoreMathVerifier.computeConvert(args); 8205 // Validate the outputs. 8206 boolean valid = true; 8207 if (args.out != arrayOut[i * 4 + j]) { 8208 valid = false; 8209 } 8210 if (!valid) { 8211 StringBuilder message = new StringBuilder(); 8212 message.append("Input inV: "); 8213 message.append(String.format("0x%x", args.inV)); 8214 message.append("\n"); 8215 message.append("Expected output out: "); 8216 message.append(String.format("0x%x", args.out)); 8217 message.append("\n"); 8218 message.append("Actual output out: "); 8219 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8220 if (args.out != arrayOut[i * 4 + j]) { 8221 message.append(" FAIL"); 8222 } 8223 message.append("\n"); 8224 assertTrue("Incorrect output for checkConvertUshort4Uint4" + 8225 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8226 } 8227 } 8228 } 8229 } 8230 8231 public class ArgumentsIntUint { 8232 public int inV; 8233 public int out; 8234 } 8235 8236 private void checkConvertInt2Uint2() { 8237 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 2, 0xd74f55bc4f178a9fl, false, 31); 8238 try { 8239 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8240 script.forEach_testConvertUint2Int2Uint2(inV, out); 8241 verifyResultsConvertInt2Uint2(inV, out, false); 8242 } catch (Exception e) { 8243 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Int2Uint2: " + e.toString()); 8244 } 8245 try { 8246 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8247 scriptRelaxed.forEach_testConvertUint2Int2Uint2(inV, out); 8248 verifyResultsConvertInt2Uint2(inV, out, true); 8249 } catch (Exception e) { 8250 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Int2Uint2: " + e.toString()); 8251 } 8252 } 8253 8254 private void verifyResultsConvertInt2Uint2(Allocation inV, Allocation out, boolean relaxed) { 8255 int[] arrayInV = new int[INPUTSIZE * 2]; 8256 inV.copyTo(arrayInV); 8257 int[] arrayOut = new int[INPUTSIZE * 2]; 8258 out.copyTo(arrayOut); 8259 for (int i = 0; i < INPUTSIZE; i++) { 8260 for (int j = 0; j < 2 ; j++) { 8261 // Extract the inputs. 8262 ArgumentsIntUint args = new ArgumentsIntUint(); 8263 args.inV = arrayInV[i * 2 + j]; 8264 // Figure out what the outputs should have been. 8265 CoreMathVerifier.computeConvert(args); 8266 // Validate the outputs. 8267 boolean valid = true; 8268 if (args.out != arrayOut[i * 2 + j]) { 8269 valid = false; 8270 } 8271 if (!valid) { 8272 StringBuilder message = new StringBuilder(); 8273 message.append("Input inV: "); 8274 message.append(String.format("%d", args.inV)); 8275 message.append("\n"); 8276 message.append("Expected output out: "); 8277 message.append(String.format("0x%x", args.out)); 8278 message.append("\n"); 8279 message.append("Actual output out: "); 8280 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 8281 if (args.out != arrayOut[i * 2 + j]) { 8282 message.append(" FAIL"); 8283 } 8284 message.append("\n"); 8285 assertTrue("Incorrect output for checkConvertInt2Uint2" + 8286 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8287 } 8288 } 8289 } 8290 } 8291 8292 private void checkConvertInt3Uint3() { 8293 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 3, 0xd74f605dae1f4f93l, false, 31); 8294 try { 8295 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8296 script.forEach_testConvertUint3Int3Uint3(inV, out); 8297 verifyResultsConvertInt3Uint3(inV, out, false); 8298 } catch (Exception e) { 8299 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Int3Uint3: " + e.toString()); 8300 } 8301 try { 8302 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8303 scriptRelaxed.forEach_testConvertUint3Int3Uint3(inV, out); 8304 verifyResultsConvertInt3Uint3(inV, out, true); 8305 } catch (Exception e) { 8306 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Int3Uint3: " + e.toString()); 8307 } 8308 } 8309 8310 private void verifyResultsConvertInt3Uint3(Allocation inV, Allocation out, boolean relaxed) { 8311 int[] arrayInV = new int[INPUTSIZE * 4]; 8312 inV.copyTo(arrayInV); 8313 int[] arrayOut = new int[INPUTSIZE * 4]; 8314 out.copyTo(arrayOut); 8315 for (int i = 0; i < INPUTSIZE; i++) { 8316 for (int j = 0; j < 3 ; j++) { 8317 // Extract the inputs. 8318 ArgumentsIntUint args = new ArgumentsIntUint(); 8319 args.inV = arrayInV[i * 4 + j]; 8320 // Figure out what the outputs should have been. 8321 CoreMathVerifier.computeConvert(args); 8322 // Validate the outputs. 8323 boolean valid = true; 8324 if (args.out != arrayOut[i * 4 + j]) { 8325 valid = false; 8326 } 8327 if (!valid) { 8328 StringBuilder message = new StringBuilder(); 8329 message.append("Input inV: "); 8330 message.append(String.format("%d", args.inV)); 8331 message.append("\n"); 8332 message.append("Expected output out: "); 8333 message.append(String.format("0x%x", args.out)); 8334 message.append("\n"); 8335 message.append("Actual output out: "); 8336 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8337 if (args.out != arrayOut[i * 4 + j]) { 8338 message.append(" FAIL"); 8339 } 8340 message.append("\n"); 8341 assertTrue("Incorrect output for checkConvertInt3Uint3" + 8342 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8343 } 8344 } 8345 } 8346 } 8347 8348 private void checkConvertInt4Uint4() { 8349 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_32, 4, 0xd74f6aff0d271487l, false, 31); 8350 try { 8351 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8352 script.forEach_testConvertUint4Int4Uint4(inV, out); 8353 verifyResultsConvertInt4Uint4(inV, out, false); 8354 } catch (Exception e) { 8355 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Int4Uint4: " + e.toString()); 8356 } 8357 try { 8358 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8359 scriptRelaxed.forEach_testConvertUint4Int4Uint4(inV, out); 8360 verifyResultsConvertInt4Uint4(inV, out, true); 8361 } catch (Exception e) { 8362 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Int4Uint4: " + e.toString()); 8363 } 8364 } 8365 8366 private void verifyResultsConvertInt4Uint4(Allocation inV, Allocation out, boolean relaxed) { 8367 int[] arrayInV = new int[INPUTSIZE * 4]; 8368 inV.copyTo(arrayInV); 8369 int[] arrayOut = new int[INPUTSIZE * 4]; 8370 out.copyTo(arrayOut); 8371 for (int i = 0; i < INPUTSIZE; i++) { 8372 for (int j = 0; j < 4 ; j++) { 8373 // Extract the inputs. 8374 ArgumentsIntUint args = new ArgumentsIntUint(); 8375 args.inV = arrayInV[i * 4 + j]; 8376 // Figure out what the outputs should have been. 8377 CoreMathVerifier.computeConvert(args); 8378 // Validate the outputs. 8379 boolean valid = true; 8380 if (args.out != arrayOut[i * 4 + j]) { 8381 valid = false; 8382 } 8383 if (!valid) { 8384 StringBuilder message = new StringBuilder(); 8385 message.append("Input inV: "); 8386 message.append(String.format("%d", args.inV)); 8387 message.append("\n"); 8388 message.append("Expected output out: "); 8389 message.append(String.format("0x%x", args.out)); 8390 message.append("\n"); 8391 message.append("Actual output out: "); 8392 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8393 if (args.out != arrayOut[i * 4 + j]) { 8394 message.append(" FAIL"); 8395 } 8396 message.append("\n"); 8397 assertTrue("Incorrect output for checkConvertInt4Uint4" + 8398 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8399 } 8400 } 8401 } 8402 } 8403 8404 public class ArgumentsUintUint { 8405 public int inV; 8406 public int out; 8407 } 8408 8409 private void checkConvertUint2Uint2() { 8410 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xe71d0ca64c8baea2l, false, 32); 8411 try { 8412 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8413 script.forEach_testConvertUint2Uint2Uint2(inV, out); 8414 verifyResultsConvertUint2Uint2(inV, out, false); 8415 } catch (Exception e) { 8416 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Uint2Uint2: " + e.toString()); 8417 } 8418 try { 8419 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE); 8420 scriptRelaxed.forEach_testConvertUint2Uint2Uint2(inV, out); 8421 verifyResultsConvertUint2Uint2(inV, out, true); 8422 } catch (Exception e) { 8423 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint2Uint2Uint2: " + e.toString()); 8424 } 8425 } 8426 8427 private void verifyResultsConvertUint2Uint2(Allocation inV, Allocation out, boolean relaxed) { 8428 int[] arrayInV = new int[INPUTSIZE * 2]; 8429 inV.copyTo(arrayInV); 8430 int[] arrayOut = new int[INPUTSIZE * 2]; 8431 out.copyTo(arrayOut); 8432 for (int i = 0; i < INPUTSIZE; i++) { 8433 for (int j = 0; j < 2 ; j++) { 8434 // Extract the inputs. 8435 ArgumentsUintUint args = new ArgumentsUintUint(); 8436 args.inV = arrayInV[i * 2 + j]; 8437 // Figure out what the outputs should have been. 8438 CoreMathVerifier.computeConvert(args); 8439 // Validate the outputs. 8440 boolean valid = true; 8441 if (args.out != arrayOut[i * 2 + j]) { 8442 valid = false; 8443 } 8444 if (!valid) { 8445 StringBuilder message = new StringBuilder(); 8446 message.append("Input inV: "); 8447 message.append(String.format("0x%x", args.inV)); 8448 message.append("\n"); 8449 message.append("Expected output out: "); 8450 message.append(String.format("0x%x", args.out)); 8451 message.append("\n"); 8452 message.append("Actual output out: "); 8453 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 8454 if (args.out != arrayOut[i * 2 + j]) { 8455 message.append(" FAIL"); 8456 } 8457 message.append("\n"); 8458 assertTrue("Incorrect output for checkConvertUint2Uint2" + 8459 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8460 } 8461 } 8462 } 8463 } 8464 8465 private void checkConvertUint3Uint3() { 8466 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0xe71d1747ab937396l, false, 32); 8467 try { 8468 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8469 script.forEach_testConvertUint3Uint3Uint3(inV, out); 8470 verifyResultsConvertUint3Uint3(inV, out, false); 8471 } catch (Exception e) { 8472 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Uint3Uint3: " + e.toString()); 8473 } 8474 try { 8475 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE); 8476 scriptRelaxed.forEach_testConvertUint3Uint3Uint3(inV, out); 8477 verifyResultsConvertUint3Uint3(inV, out, true); 8478 } catch (Exception e) { 8479 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint3Uint3Uint3: " + e.toString()); 8480 } 8481 } 8482 8483 private void verifyResultsConvertUint3Uint3(Allocation inV, Allocation out, boolean relaxed) { 8484 int[] arrayInV = new int[INPUTSIZE * 4]; 8485 inV.copyTo(arrayInV); 8486 int[] arrayOut = new int[INPUTSIZE * 4]; 8487 out.copyTo(arrayOut); 8488 for (int i = 0; i < INPUTSIZE; i++) { 8489 for (int j = 0; j < 3 ; j++) { 8490 // Extract the inputs. 8491 ArgumentsUintUint args = new ArgumentsUintUint(); 8492 args.inV = arrayInV[i * 4 + j]; 8493 // Figure out what the outputs should have been. 8494 CoreMathVerifier.computeConvert(args); 8495 // Validate the outputs. 8496 boolean valid = true; 8497 if (args.out != arrayOut[i * 4 + j]) { 8498 valid = false; 8499 } 8500 if (!valid) { 8501 StringBuilder message = new StringBuilder(); 8502 message.append("Input inV: "); 8503 message.append(String.format("0x%x", args.inV)); 8504 message.append("\n"); 8505 message.append("Expected output out: "); 8506 message.append(String.format("0x%x", args.out)); 8507 message.append("\n"); 8508 message.append("Actual output out: "); 8509 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8510 if (args.out != arrayOut[i * 4 + j]) { 8511 message.append(" FAIL"); 8512 } 8513 message.append("\n"); 8514 assertTrue("Incorrect output for checkConvertUint3Uint3" + 8515 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8516 } 8517 } 8518 } 8519 } 8520 8521 private void checkConvertUint4Uint4() { 8522 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0xe71d21e90a9b388al, false, 32); 8523 try { 8524 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8525 script.forEach_testConvertUint4Uint4Uint4(inV, out); 8526 verifyResultsConvertUint4Uint4(inV, out, false); 8527 } catch (Exception e) { 8528 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Uint4Uint4: " + e.toString()); 8529 } 8530 try { 8531 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE); 8532 scriptRelaxed.forEach_testConvertUint4Uint4Uint4(inV, out); 8533 verifyResultsConvertUint4Uint4(inV, out, true); 8534 } catch (Exception e) { 8535 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUint4Uint4Uint4: " + e.toString()); 8536 } 8537 } 8538 8539 private void verifyResultsConvertUint4Uint4(Allocation inV, Allocation out, boolean relaxed) { 8540 int[] arrayInV = new int[INPUTSIZE * 4]; 8541 inV.copyTo(arrayInV); 8542 int[] arrayOut = new int[INPUTSIZE * 4]; 8543 out.copyTo(arrayOut); 8544 for (int i = 0; i < INPUTSIZE; i++) { 8545 for (int j = 0; j < 4 ; j++) { 8546 // Extract the inputs. 8547 ArgumentsUintUint args = new ArgumentsUintUint(); 8548 args.inV = arrayInV[i * 4 + j]; 8549 // Figure out what the outputs should have been. 8550 CoreMathVerifier.computeConvert(args); 8551 // Validate the outputs. 8552 boolean valid = true; 8553 if (args.out != arrayOut[i * 4 + j]) { 8554 valid = false; 8555 } 8556 if (!valid) { 8557 StringBuilder message = new StringBuilder(); 8558 message.append("Input inV: "); 8559 message.append(String.format("0x%x", args.inV)); 8560 message.append("\n"); 8561 message.append("Expected output out: "); 8562 message.append(String.format("0x%x", args.out)); 8563 message.append("\n"); 8564 message.append("Actual output out: "); 8565 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 8566 if (args.out != arrayOut[i * 4 + j]) { 8567 message.append(" FAIL"); 8568 } 8569 message.append("\n"); 8570 assertTrue("Incorrect output for checkConvertUint4Uint4" + 8571 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8572 } 8573 } 8574 } 8575 } 8576 8577 public class ArgumentsDoubleDouble { 8578 public double inV; 8579 public Target.Floaty out; 8580 } 8581 8582 private void checkConvertDouble2Double2() { 8583 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 2, 0x345b4a823902786el, -8.5390423905960001625e+307, 8.5390423905960001625e+307); 8584 try { 8585 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8586 script.forEach_testConvertDouble2Double2Double2(inV, out); 8587 verifyResultsConvertDouble2Double2(inV, out, false); 8588 } catch (Exception e) { 8589 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Double2Double2: " + e.toString()); 8590 } 8591 try { 8592 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8593 scriptRelaxed.forEach_testConvertDouble2Double2Double2(inV, out); 8594 verifyResultsConvertDouble2Double2(inV, out, true); 8595 } catch (Exception e) { 8596 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Double2Double2: " + e.toString()); 8597 } 8598 } 8599 8600 private void verifyResultsConvertDouble2Double2(Allocation inV, Allocation out, boolean relaxed) { 8601 double[] arrayInV = new double[INPUTSIZE * 2]; 8602 inV.copyTo(arrayInV); 8603 double[] arrayOut = new double[INPUTSIZE * 2]; 8604 out.copyTo(arrayOut); 8605 for (int i = 0; i < INPUTSIZE; i++) { 8606 for (int j = 0; j < 2 ; j++) { 8607 // Extract the inputs. 8608 ArgumentsDoubleDouble args = new ArgumentsDoubleDouble(); 8609 args.inV = arrayInV[i * 2 + j]; 8610 // Figure out what the outputs should have been. 8611 Target target = new Target(relaxed); 8612 CoreMathVerifier.computeConvert(args, target); 8613 // Validate the outputs. 8614 boolean valid = true; 8615 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8616 valid = false; 8617 } 8618 if (!valid) { 8619 StringBuilder message = new StringBuilder(); 8620 message.append("Input inV: "); 8621 message.append(String.format("%24.8g {%16x} %31a", 8622 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 8623 message.append("\n"); 8624 message.append("Expected output out: "); 8625 message.append(args.out.toString()); 8626 message.append("\n"); 8627 message.append("Actual output out: "); 8628 message.append(String.format("%24.8g {%16x} %31a", 8629 arrayOut[i * 2 + j], Double.doubleToRawLongBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 8630 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8631 message.append(" FAIL"); 8632 } 8633 message.append("\n"); 8634 assertTrue("Incorrect output for checkConvertDouble2Double2" + 8635 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8636 } 8637 } 8638 } 8639 } 8640 8641 private void checkConvertDouble3Double3() { 8642 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 3, 0x34a812098f5e099al, -8.5390423905960001625e+307, 8.5390423905960001625e+307); 8643 try { 8644 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 8645 script.forEach_testConvertDouble3Double3Double3(inV, out); 8646 verifyResultsConvertDouble3Double3(inV, out, false); 8647 } catch (Exception e) { 8648 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Double3Double3: " + e.toString()); 8649 } 8650 try { 8651 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 8652 scriptRelaxed.forEach_testConvertDouble3Double3Double3(inV, out); 8653 verifyResultsConvertDouble3Double3(inV, out, true); 8654 } catch (Exception e) { 8655 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Double3Double3: " + e.toString()); 8656 } 8657 } 8658 8659 private void verifyResultsConvertDouble3Double3(Allocation inV, Allocation out, boolean relaxed) { 8660 double[] arrayInV = new double[INPUTSIZE * 4]; 8661 inV.copyTo(arrayInV); 8662 double[] arrayOut = new double[INPUTSIZE * 4]; 8663 out.copyTo(arrayOut); 8664 for (int i = 0; i < INPUTSIZE; i++) { 8665 for (int j = 0; j < 3 ; j++) { 8666 // Extract the inputs. 8667 ArgumentsDoubleDouble args = new ArgumentsDoubleDouble(); 8668 args.inV = arrayInV[i * 4 + j]; 8669 // Figure out what the outputs should have been. 8670 Target target = new Target(relaxed); 8671 CoreMathVerifier.computeConvert(args, target); 8672 // Validate the outputs. 8673 boolean valid = true; 8674 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8675 valid = false; 8676 } 8677 if (!valid) { 8678 StringBuilder message = new StringBuilder(); 8679 message.append("Input inV: "); 8680 message.append(String.format("%24.8g {%16x} %31a", 8681 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 8682 message.append("\n"); 8683 message.append("Expected output out: "); 8684 message.append(args.out.toString()); 8685 message.append("\n"); 8686 message.append("Actual output out: "); 8687 message.append(String.format("%24.8g {%16x} %31a", 8688 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 8689 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8690 message.append(" FAIL"); 8691 } 8692 message.append("\n"); 8693 assertTrue("Incorrect output for checkConvertDouble3Double3" + 8694 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8695 } 8696 } 8697 } 8698 } 8699 8700 private void checkConvertDouble4Double4() { 8701 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 4, 0x34f4d990e5b99ac6l, -8.5390423905960001625e+307, 8.5390423905960001625e+307); 8702 try { 8703 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 8704 script.forEach_testConvertDouble4Double4Double4(inV, out); 8705 verifyResultsConvertDouble4Double4(inV, out, false); 8706 } catch (Exception e) { 8707 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Double4Double4: " + e.toString()); 8708 } 8709 try { 8710 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 8711 scriptRelaxed.forEach_testConvertDouble4Double4Double4(inV, out); 8712 verifyResultsConvertDouble4Double4(inV, out, true); 8713 } catch (Exception e) { 8714 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Double4Double4: " + e.toString()); 8715 } 8716 } 8717 8718 private void verifyResultsConvertDouble4Double4(Allocation inV, Allocation out, boolean relaxed) { 8719 double[] arrayInV = new double[INPUTSIZE * 4]; 8720 inV.copyTo(arrayInV); 8721 double[] arrayOut = new double[INPUTSIZE * 4]; 8722 out.copyTo(arrayOut); 8723 for (int i = 0; i < INPUTSIZE; i++) { 8724 for (int j = 0; j < 4 ; j++) { 8725 // Extract the inputs. 8726 ArgumentsDoubleDouble args = new ArgumentsDoubleDouble(); 8727 args.inV = arrayInV[i * 4 + j]; 8728 // Figure out what the outputs should have been. 8729 Target target = new Target(relaxed); 8730 CoreMathVerifier.computeConvert(args, target); 8731 // Validate the outputs. 8732 boolean valid = true; 8733 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8734 valid = false; 8735 } 8736 if (!valid) { 8737 StringBuilder message = new StringBuilder(); 8738 message.append("Input inV: "); 8739 message.append(String.format("%24.8g {%16x} %31a", 8740 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 8741 message.append("\n"); 8742 message.append("Expected output out: "); 8743 message.append(args.out.toString()); 8744 message.append("\n"); 8745 message.append("Actual output out: "); 8746 message.append(String.format("%24.8g {%16x} %31a", 8747 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 8748 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8749 message.append(" FAIL"); 8750 } 8751 message.append("\n"); 8752 assertTrue("Incorrect output for checkConvertDouble4Double4" + 8753 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8754 } 8755 } 8756 } 8757 } 8758 8759 public class ArgumentsLongDouble { 8760 public long inV; 8761 public Target.Floaty out; 8762 } 8763 8764 private void checkConvertLong2Double2() { 8765 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 2, 0x7b7807124c70299bl, true, 63); 8766 try { 8767 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8768 script.forEach_testConvertDouble2Long2Double2(inV, out); 8769 verifyResultsConvertLong2Double2(inV, out, false); 8770 } catch (Exception e) { 8771 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Long2Double2: " + e.toString()); 8772 } 8773 try { 8774 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8775 scriptRelaxed.forEach_testConvertDouble2Long2Double2(inV, out); 8776 verifyResultsConvertLong2Double2(inV, out, true); 8777 } catch (Exception e) { 8778 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Long2Double2: " + e.toString()); 8779 } 8780 } 8781 8782 private void verifyResultsConvertLong2Double2(Allocation inV, Allocation out, boolean relaxed) { 8783 long[] arrayInV = new long[INPUTSIZE * 2]; 8784 inV.copyTo(arrayInV); 8785 double[] arrayOut = new double[INPUTSIZE * 2]; 8786 out.copyTo(arrayOut); 8787 for (int i = 0; i < INPUTSIZE; i++) { 8788 for (int j = 0; j < 2 ; j++) { 8789 // Extract the inputs. 8790 ArgumentsLongDouble args = new ArgumentsLongDouble(); 8791 args.inV = arrayInV[i * 2 + j]; 8792 // Figure out what the outputs should have been. 8793 Target target = new Target(relaxed); 8794 CoreMathVerifier.computeConvert(args, target); 8795 // Validate the outputs. 8796 boolean valid = true; 8797 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8798 valid = false; 8799 } 8800 if (!valid) { 8801 StringBuilder message = new StringBuilder(); 8802 message.append("Input inV: "); 8803 message.append(String.format("%d", args.inV)); 8804 message.append("\n"); 8805 message.append("Expected output out: "); 8806 message.append(args.out.toString()); 8807 message.append("\n"); 8808 message.append("Actual output out: "); 8809 message.append(String.format("%24.8g {%16x} %31a", 8810 arrayOut[i * 2 + j], Double.doubleToRawLongBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 8811 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8812 message.append(" FAIL"); 8813 } 8814 message.append("\n"); 8815 assertTrue("Incorrect output for checkConvertLong2Double2" + 8816 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8817 } 8818 } 8819 } 8820 } 8821 8822 private void checkConvertLong3Double3() { 8823 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 3, 0x7bc4ce99a2cbbac7l, true, 63); 8824 try { 8825 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 8826 script.forEach_testConvertDouble3Long3Double3(inV, out); 8827 verifyResultsConvertLong3Double3(inV, out, false); 8828 } catch (Exception e) { 8829 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Long3Double3: " + e.toString()); 8830 } 8831 try { 8832 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 8833 scriptRelaxed.forEach_testConvertDouble3Long3Double3(inV, out); 8834 verifyResultsConvertLong3Double3(inV, out, true); 8835 } catch (Exception e) { 8836 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Long3Double3: " + e.toString()); 8837 } 8838 } 8839 8840 private void verifyResultsConvertLong3Double3(Allocation inV, Allocation out, boolean relaxed) { 8841 long[] arrayInV = new long[INPUTSIZE * 4]; 8842 inV.copyTo(arrayInV); 8843 double[] arrayOut = new double[INPUTSIZE * 4]; 8844 out.copyTo(arrayOut); 8845 for (int i = 0; i < INPUTSIZE; i++) { 8846 for (int j = 0; j < 3 ; j++) { 8847 // Extract the inputs. 8848 ArgumentsLongDouble args = new ArgumentsLongDouble(); 8849 args.inV = arrayInV[i * 4 + j]; 8850 // Figure out what the outputs should have been. 8851 Target target = new Target(relaxed); 8852 CoreMathVerifier.computeConvert(args, target); 8853 // Validate the outputs. 8854 boolean valid = true; 8855 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8856 valid = false; 8857 } 8858 if (!valid) { 8859 StringBuilder message = new StringBuilder(); 8860 message.append("Input inV: "); 8861 message.append(String.format("%d", args.inV)); 8862 message.append("\n"); 8863 message.append("Expected output out: "); 8864 message.append(args.out.toString()); 8865 message.append("\n"); 8866 message.append("Actual output out: "); 8867 message.append(String.format("%24.8g {%16x} %31a", 8868 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 8869 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8870 message.append(" FAIL"); 8871 } 8872 message.append("\n"); 8873 assertTrue("Incorrect output for checkConvertLong3Double3" + 8874 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8875 } 8876 } 8877 } 8878 } 8879 8880 private void checkConvertLong4Double4() { 8881 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 4, 0x7c119620f9274bf3l, true, 63); 8882 try { 8883 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 8884 script.forEach_testConvertDouble4Long4Double4(inV, out); 8885 verifyResultsConvertLong4Double4(inV, out, false); 8886 } catch (Exception e) { 8887 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Long4Double4: " + e.toString()); 8888 } 8889 try { 8890 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 8891 scriptRelaxed.forEach_testConvertDouble4Long4Double4(inV, out); 8892 verifyResultsConvertLong4Double4(inV, out, true); 8893 } catch (Exception e) { 8894 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Long4Double4: " + e.toString()); 8895 } 8896 } 8897 8898 private void verifyResultsConvertLong4Double4(Allocation inV, Allocation out, boolean relaxed) { 8899 long[] arrayInV = new long[INPUTSIZE * 4]; 8900 inV.copyTo(arrayInV); 8901 double[] arrayOut = new double[INPUTSIZE * 4]; 8902 out.copyTo(arrayOut); 8903 for (int i = 0; i < INPUTSIZE; i++) { 8904 for (int j = 0; j < 4 ; j++) { 8905 // Extract the inputs. 8906 ArgumentsLongDouble args = new ArgumentsLongDouble(); 8907 args.inV = arrayInV[i * 4 + j]; 8908 // Figure out what the outputs should have been. 8909 Target target = new Target(relaxed); 8910 CoreMathVerifier.computeConvert(args, target); 8911 // Validate the outputs. 8912 boolean valid = true; 8913 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8914 valid = false; 8915 } 8916 if (!valid) { 8917 StringBuilder message = new StringBuilder(); 8918 message.append("Input inV: "); 8919 message.append(String.format("%d", args.inV)); 8920 message.append("\n"); 8921 message.append("Expected output out: "); 8922 message.append(args.out.toString()); 8923 message.append("\n"); 8924 message.append("Actual output out: "); 8925 message.append(String.format("%24.8g {%16x} %31a", 8926 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 8927 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 8928 message.append(" FAIL"); 8929 } 8930 message.append("\n"); 8931 assertTrue("Incorrect output for checkConvertLong4Double4" + 8932 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8933 } 8934 } 8935 } 8936 } 8937 8938 public class ArgumentsUlongDouble { 8939 public long inV; 8940 public Target.Floaty out; 8941 } 8942 8943 private void checkConvertUlong2Double2() { 8944 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 2, 0xaa17685979bc7954l, false, 64); 8945 try { 8946 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8947 script.forEach_testConvertDouble2Ulong2Double2(inV, out); 8948 verifyResultsConvertUlong2Double2(inV, out, false); 8949 } catch (Exception e) { 8950 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Ulong2Double2: " + e.toString()); 8951 } 8952 try { 8953 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 2), INPUTSIZE); 8954 scriptRelaxed.forEach_testConvertDouble2Ulong2Double2(inV, out); 8955 verifyResultsConvertUlong2Double2(inV, out, true); 8956 } catch (Exception e) { 8957 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble2Ulong2Double2: " + e.toString()); 8958 } 8959 } 8960 8961 private void verifyResultsConvertUlong2Double2(Allocation inV, Allocation out, boolean relaxed) { 8962 long[] arrayInV = new long[INPUTSIZE * 2]; 8963 inV.copyTo(arrayInV); 8964 double[] arrayOut = new double[INPUTSIZE * 2]; 8965 out.copyTo(arrayOut); 8966 for (int i = 0; i < INPUTSIZE; i++) { 8967 for (int j = 0; j < 2 ; j++) { 8968 // Extract the inputs. 8969 ArgumentsUlongDouble args = new ArgumentsUlongDouble(); 8970 args.inV = arrayInV[i * 2 + j]; 8971 // Figure out what the outputs should have been. 8972 Target target = new Target(relaxed); 8973 CoreMathVerifier.computeConvert(args, target); 8974 // Validate the outputs. 8975 boolean valid = true; 8976 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8977 valid = false; 8978 } 8979 if (!valid) { 8980 StringBuilder message = new StringBuilder(); 8981 message.append("Input inV: "); 8982 message.append(String.format("0x%x", args.inV)); 8983 message.append("\n"); 8984 message.append("Expected output out: "); 8985 message.append(args.out.toString()); 8986 message.append("\n"); 8987 message.append("Actual output out: "); 8988 message.append(String.format("%24.8g {%16x} %31a", 8989 arrayOut[i * 2 + j], Double.doubleToRawLongBits(arrayOut[i * 2 + j]), arrayOut[i * 2 + j])); 8990 if (!args.out.couldBe(arrayOut[i * 2 + j])) { 8991 message.append(" FAIL"); 8992 } 8993 message.append("\n"); 8994 assertTrue("Incorrect output for checkConvertUlong2Double2" + 8995 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 8996 } 8997 } 8998 } 8999 } 9000 9001 private void checkConvertUlong3Double3() { 9002 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 3, 0xaa642fe0d0180a80l, false, 64); 9003 try { 9004 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 9005 script.forEach_testConvertDouble3Ulong3Double3(inV, out); 9006 verifyResultsConvertUlong3Double3(inV, out, false); 9007 } catch (Exception e) { 9008 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Ulong3Double3: " + e.toString()); 9009 } 9010 try { 9011 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 3), INPUTSIZE); 9012 scriptRelaxed.forEach_testConvertDouble3Ulong3Double3(inV, out); 9013 verifyResultsConvertUlong3Double3(inV, out, true); 9014 } catch (Exception e) { 9015 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble3Ulong3Double3: " + e.toString()); 9016 } 9017 } 9018 9019 private void verifyResultsConvertUlong3Double3(Allocation inV, Allocation out, boolean relaxed) { 9020 long[] arrayInV = new long[INPUTSIZE * 4]; 9021 inV.copyTo(arrayInV); 9022 double[] arrayOut = new double[INPUTSIZE * 4]; 9023 out.copyTo(arrayOut); 9024 for (int i = 0; i < INPUTSIZE; i++) { 9025 for (int j = 0; j < 3 ; j++) { 9026 // Extract the inputs. 9027 ArgumentsUlongDouble args = new ArgumentsUlongDouble(); 9028 args.inV = arrayInV[i * 4 + j]; 9029 // Figure out what the outputs should have been. 9030 Target target = new Target(relaxed); 9031 CoreMathVerifier.computeConvert(args, target); 9032 // Validate the outputs. 9033 boolean valid = true; 9034 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 9035 valid = false; 9036 } 9037 if (!valid) { 9038 StringBuilder message = new StringBuilder(); 9039 message.append("Input inV: "); 9040 message.append(String.format("0x%x", args.inV)); 9041 message.append("\n"); 9042 message.append("Expected output out: "); 9043 message.append(args.out.toString()); 9044 message.append("\n"); 9045 message.append("Actual output out: "); 9046 message.append(String.format("%24.8g {%16x} %31a", 9047 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 9048 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 9049 message.append(" FAIL"); 9050 } 9051 message.append("\n"); 9052 assertTrue("Incorrect output for checkConvertUlong3Double3" + 9053 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9054 } 9055 } 9056 } 9057 } 9058 9059 private void checkConvertUlong4Double4() { 9060 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 4, 0xaab0f76826739bacl, false, 64); 9061 try { 9062 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 9063 script.forEach_testConvertDouble4Ulong4Double4(inV, out); 9064 verifyResultsConvertUlong4Double4(inV, out, false); 9065 } catch (Exception e) { 9066 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Ulong4Double4: " + e.toString()); 9067 } 9068 try { 9069 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_64, 4), INPUTSIZE); 9070 scriptRelaxed.forEach_testConvertDouble4Ulong4Double4(inV, out); 9071 verifyResultsConvertUlong4Double4(inV, out, true); 9072 } catch (Exception e) { 9073 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertDouble4Ulong4Double4: " + e.toString()); 9074 } 9075 } 9076 9077 private void verifyResultsConvertUlong4Double4(Allocation inV, Allocation out, boolean relaxed) { 9078 long[] arrayInV = new long[INPUTSIZE * 4]; 9079 inV.copyTo(arrayInV); 9080 double[] arrayOut = new double[INPUTSIZE * 4]; 9081 out.copyTo(arrayOut); 9082 for (int i = 0; i < INPUTSIZE; i++) { 9083 for (int j = 0; j < 4 ; j++) { 9084 // Extract the inputs. 9085 ArgumentsUlongDouble args = new ArgumentsUlongDouble(); 9086 args.inV = arrayInV[i * 4 + j]; 9087 // Figure out what the outputs should have been. 9088 Target target = new Target(relaxed); 9089 CoreMathVerifier.computeConvert(args, target); 9090 // Validate the outputs. 9091 boolean valid = true; 9092 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 9093 valid = false; 9094 } 9095 if (!valid) { 9096 StringBuilder message = new StringBuilder(); 9097 message.append("Input inV: "); 9098 message.append(String.format("0x%x", args.inV)); 9099 message.append("\n"); 9100 message.append("Expected output out: "); 9101 message.append(args.out.toString()); 9102 message.append("\n"); 9103 message.append("Actual output out: "); 9104 message.append(String.format("%24.8g {%16x} %31a", 9105 arrayOut[i * 4 + j], Double.doubleToRawLongBits(arrayOut[i * 4 + j]), arrayOut[i * 4 + j])); 9106 if (!args.out.couldBe(arrayOut[i * 4 + j])) { 9107 message.append(" FAIL"); 9108 } 9109 message.append("\n"); 9110 assertTrue("Incorrect output for checkConvertUlong4Double4" + 9111 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9112 } 9113 } 9114 } 9115 } 9116 9117 public class ArgumentsDoubleLong { 9118 public double inV; 9119 public long out; 9120 } 9121 9122 private void checkConvertDouble2Long2() { 9123 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 2, 0xcbf84dc0430cbe95l, -9.2233720368547747840e+18, 9.2233720368547747840e+18); 9124 try { 9125 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9126 script.forEach_testConvertLong2Double2Long2(inV, out); 9127 verifyResultsConvertDouble2Long2(inV, out, false); 9128 } catch (Exception e) { 9129 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Double2Long2: " + e.toString()); 9130 } 9131 try { 9132 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9133 scriptRelaxed.forEach_testConvertLong2Double2Long2(inV, out); 9134 verifyResultsConvertDouble2Long2(inV, out, true); 9135 } catch (Exception e) { 9136 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Double2Long2: " + e.toString()); 9137 } 9138 } 9139 9140 private void verifyResultsConvertDouble2Long2(Allocation inV, Allocation out, boolean relaxed) { 9141 double[] arrayInV = new double[INPUTSIZE * 2]; 9142 inV.copyTo(arrayInV); 9143 long[] arrayOut = new long[INPUTSIZE * 2]; 9144 out.copyTo(arrayOut); 9145 for (int i = 0; i < INPUTSIZE; i++) { 9146 for (int j = 0; j < 2 ; j++) { 9147 // Extract the inputs. 9148 ArgumentsDoubleLong args = new ArgumentsDoubleLong(); 9149 args.inV = arrayInV[i * 2 + j]; 9150 // Figure out what the outputs should have been. 9151 CoreMathVerifier.computeConvert(args); 9152 // Validate the outputs. 9153 boolean valid = true; 9154 if (args.out != arrayOut[i * 2 + j]) { 9155 valid = false; 9156 } 9157 if (!valid) { 9158 StringBuilder message = new StringBuilder(); 9159 message.append("Input inV: "); 9160 message.append(String.format("%24.8g {%16x} %31a", 9161 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9162 message.append("\n"); 9163 message.append("Expected output out: "); 9164 message.append(String.format("%d", args.out)); 9165 message.append("\n"); 9166 message.append("Actual output out: "); 9167 message.append(String.format("%d", arrayOut[i * 2 + j])); 9168 if (args.out != arrayOut[i * 2 + j]) { 9169 message.append(" FAIL"); 9170 } 9171 message.append("\n"); 9172 assertTrue("Incorrect output for checkConvertDouble2Long2" + 9173 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9174 } 9175 } 9176 } 9177 } 9178 9179 private void checkConvertDouble3Long3() { 9180 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 3, 0xcbf85861a2148389l, -9.2233720368547747840e+18, 9.2233720368547747840e+18); 9181 try { 9182 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9183 script.forEach_testConvertLong3Double3Long3(inV, out); 9184 verifyResultsConvertDouble3Long3(inV, out, false); 9185 } catch (Exception e) { 9186 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Double3Long3: " + e.toString()); 9187 } 9188 try { 9189 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9190 scriptRelaxed.forEach_testConvertLong3Double3Long3(inV, out); 9191 verifyResultsConvertDouble3Long3(inV, out, true); 9192 } catch (Exception e) { 9193 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Double3Long3: " + e.toString()); 9194 } 9195 } 9196 9197 private void verifyResultsConvertDouble3Long3(Allocation inV, Allocation out, boolean relaxed) { 9198 double[] arrayInV = new double[INPUTSIZE * 4]; 9199 inV.copyTo(arrayInV); 9200 long[] arrayOut = new long[INPUTSIZE * 4]; 9201 out.copyTo(arrayOut); 9202 for (int i = 0; i < INPUTSIZE; i++) { 9203 for (int j = 0; j < 3 ; j++) { 9204 // Extract the inputs. 9205 ArgumentsDoubleLong args = new ArgumentsDoubleLong(); 9206 args.inV = arrayInV[i * 4 + j]; 9207 // Figure out what the outputs should have been. 9208 CoreMathVerifier.computeConvert(args); 9209 // Validate the outputs. 9210 boolean valid = true; 9211 if (args.out != arrayOut[i * 4 + j]) { 9212 valid = false; 9213 } 9214 if (!valid) { 9215 StringBuilder message = new StringBuilder(); 9216 message.append("Input inV: "); 9217 message.append(String.format("%24.8g {%16x} %31a", 9218 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9219 message.append("\n"); 9220 message.append("Expected output out: "); 9221 message.append(String.format("%d", args.out)); 9222 message.append("\n"); 9223 message.append("Actual output out: "); 9224 message.append(String.format("%d", arrayOut[i * 4 + j])); 9225 if (args.out != arrayOut[i * 4 + j]) { 9226 message.append(" FAIL"); 9227 } 9228 message.append("\n"); 9229 assertTrue("Incorrect output for checkConvertDouble3Long3" + 9230 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9231 } 9232 } 9233 } 9234 } 9235 9236 private void checkConvertDouble4Long4() { 9237 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 4, 0xcbf86303011c487dl, -9.2233720368547747840e+18, 9.2233720368547747840e+18); 9238 try { 9239 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9240 script.forEach_testConvertLong4Double4Long4(inV, out); 9241 verifyResultsConvertDouble4Long4(inV, out, false); 9242 } catch (Exception e) { 9243 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Double4Long4: " + e.toString()); 9244 } 9245 try { 9246 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9247 scriptRelaxed.forEach_testConvertLong4Double4Long4(inV, out); 9248 verifyResultsConvertDouble4Long4(inV, out, true); 9249 } catch (Exception e) { 9250 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Double4Long4: " + e.toString()); 9251 } 9252 } 9253 9254 private void verifyResultsConvertDouble4Long4(Allocation inV, Allocation out, boolean relaxed) { 9255 double[] arrayInV = new double[INPUTSIZE * 4]; 9256 inV.copyTo(arrayInV); 9257 long[] arrayOut = new long[INPUTSIZE * 4]; 9258 out.copyTo(arrayOut); 9259 for (int i = 0; i < INPUTSIZE; i++) { 9260 for (int j = 0; j < 4 ; j++) { 9261 // Extract the inputs. 9262 ArgumentsDoubleLong args = new ArgumentsDoubleLong(); 9263 args.inV = arrayInV[i * 4 + j]; 9264 // Figure out what the outputs should have been. 9265 CoreMathVerifier.computeConvert(args); 9266 // Validate the outputs. 9267 boolean valid = true; 9268 if (args.out != arrayOut[i * 4 + j]) { 9269 valid = false; 9270 } 9271 if (!valid) { 9272 StringBuilder message = new StringBuilder(); 9273 message.append("Input inV: "); 9274 message.append(String.format("%24.8g {%16x} %31a", 9275 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9276 message.append("\n"); 9277 message.append("Expected output out: "); 9278 message.append(String.format("%d", args.out)); 9279 message.append("\n"); 9280 message.append("Actual output out: "); 9281 message.append(String.format("%d", arrayOut[i * 4 + j])); 9282 if (args.out != arrayOut[i * 4 + j]) { 9283 message.append(" FAIL"); 9284 } 9285 message.append("\n"); 9286 assertTrue("Incorrect output for checkConvertDouble4Long4" + 9287 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9288 } 9289 } 9290 } 9291 } 9292 9293 public class ArgumentsLongLong { 9294 public long inV; 9295 public long out; 9296 } 9297 9298 private void checkConvertLong2Long2() { 9299 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 2, 0xb570c607c81d242al, true, 63); 9300 try { 9301 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9302 script.forEach_testConvertLong2Long2Long2(inV, out); 9303 verifyResultsConvertLong2Long2(inV, out, false); 9304 } catch (Exception e) { 9305 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Long2Long2: " + e.toString()); 9306 } 9307 try { 9308 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9309 scriptRelaxed.forEach_testConvertLong2Long2Long2(inV, out); 9310 verifyResultsConvertLong2Long2(inV, out, true); 9311 } catch (Exception e) { 9312 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Long2Long2: " + e.toString()); 9313 } 9314 } 9315 9316 private void verifyResultsConvertLong2Long2(Allocation inV, Allocation out, boolean relaxed) { 9317 long[] arrayInV = new long[INPUTSIZE * 2]; 9318 inV.copyTo(arrayInV); 9319 long[] arrayOut = new long[INPUTSIZE * 2]; 9320 out.copyTo(arrayOut); 9321 for (int i = 0; i < INPUTSIZE; i++) { 9322 for (int j = 0; j < 2 ; j++) { 9323 // Extract the inputs. 9324 ArgumentsLongLong args = new ArgumentsLongLong(); 9325 args.inV = arrayInV[i * 2 + j]; 9326 // Figure out what the outputs should have been. 9327 CoreMathVerifier.computeConvert(args); 9328 // Validate the outputs. 9329 boolean valid = true; 9330 if (args.out != arrayOut[i * 2 + j]) { 9331 valid = false; 9332 } 9333 if (!valid) { 9334 StringBuilder message = new StringBuilder(); 9335 message.append("Input inV: "); 9336 message.append(String.format("%d", args.inV)); 9337 message.append("\n"); 9338 message.append("Expected output out: "); 9339 message.append(String.format("%d", args.out)); 9340 message.append("\n"); 9341 message.append("Actual output out: "); 9342 message.append(String.format("%d", arrayOut[i * 2 + j])); 9343 if (args.out != arrayOut[i * 2 + j]) { 9344 message.append(" FAIL"); 9345 } 9346 message.append("\n"); 9347 assertTrue("Incorrect output for checkConvertLong2Long2" + 9348 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9349 } 9350 } 9351 } 9352 } 9353 9354 private void checkConvertLong3Long3() { 9355 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 3, 0xb570d0a92724e91el, true, 63); 9356 try { 9357 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9358 script.forEach_testConvertLong3Long3Long3(inV, out); 9359 verifyResultsConvertLong3Long3(inV, out, false); 9360 } catch (Exception e) { 9361 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Long3Long3: " + e.toString()); 9362 } 9363 try { 9364 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9365 scriptRelaxed.forEach_testConvertLong3Long3Long3(inV, out); 9366 verifyResultsConvertLong3Long3(inV, out, true); 9367 } catch (Exception e) { 9368 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Long3Long3: " + e.toString()); 9369 } 9370 } 9371 9372 private void verifyResultsConvertLong3Long3(Allocation inV, Allocation out, boolean relaxed) { 9373 long[] arrayInV = new long[INPUTSIZE * 4]; 9374 inV.copyTo(arrayInV); 9375 long[] arrayOut = new long[INPUTSIZE * 4]; 9376 out.copyTo(arrayOut); 9377 for (int i = 0; i < INPUTSIZE; i++) { 9378 for (int j = 0; j < 3 ; j++) { 9379 // Extract the inputs. 9380 ArgumentsLongLong args = new ArgumentsLongLong(); 9381 args.inV = arrayInV[i * 4 + j]; 9382 // Figure out what the outputs should have been. 9383 CoreMathVerifier.computeConvert(args); 9384 // Validate the outputs. 9385 boolean valid = true; 9386 if (args.out != arrayOut[i * 4 + j]) { 9387 valid = false; 9388 } 9389 if (!valid) { 9390 StringBuilder message = new StringBuilder(); 9391 message.append("Input inV: "); 9392 message.append(String.format("%d", args.inV)); 9393 message.append("\n"); 9394 message.append("Expected output out: "); 9395 message.append(String.format("%d", args.out)); 9396 message.append("\n"); 9397 message.append("Actual output out: "); 9398 message.append(String.format("%d", arrayOut[i * 4 + j])); 9399 if (args.out != arrayOut[i * 4 + j]) { 9400 message.append(" FAIL"); 9401 } 9402 message.append("\n"); 9403 assertTrue("Incorrect output for checkConvertLong3Long3" + 9404 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9405 } 9406 } 9407 } 9408 } 9409 9410 private void checkConvertLong4Long4() { 9411 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 4, 0xb570db4a862cae12l, true, 63); 9412 try { 9413 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9414 script.forEach_testConvertLong4Long4Long4(inV, out); 9415 verifyResultsConvertLong4Long4(inV, out, false); 9416 } catch (Exception e) { 9417 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Long4Long4: " + e.toString()); 9418 } 9419 try { 9420 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9421 scriptRelaxed.forEach_testConvertLong4Long4Long4(inV, out); 9422 verifyResultsConvertLong4Long4(inV, out, true); 9423 } catch (Exception e) { 9424 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Long4Long4: " + e.toString()); 9425 } 9426 } 9427 9428 private void verifyResultsConvertLong4Long4(Allocation inV, Allocation out, boolean relaxed) { 9429 long[] arrayInV = new long[INPUTSIZE * 4]; 9430 inV.copyTo(arrayInV); 9431 long[] arrayOut = new long[INPUTSIZE * 4]; 9432 out.copyTo(arrayOut); 9433 for (int i = 0; i < INPUTSIZE; i++) { 9434 for (int j = 0; j < 4 ; j++) { 9435 // Extract the inputs. 9436 ArgumentsLongLong args = new ArgumentsLongLong(); 9437 args.inV = arrayInV[i * 4 + j]; 9438 // Figure out what the outputs should have been. 9439 CoreMathVerifier.computeConvert(args); 9440 // Validate the outputs. 9441 boolean valid = true; 9442 if (args.out != arrayOut[i * 4 + j]) { 9443 valid = false; 9444 } 9445 if (!valid) { 9446 StringBuilder message = new StringBuilder(); 9447 message.append("Input inV: "); 9448 message.append(String.format("%d", args.inV)); 9449 message.append("\n"); 9450 message.append("Expected output out: "); 9451 message.append(String.format("%d", args.out)); 9452 message.append("\n"); 9453 message.append("Actual output out: "); 9454 message.append(String.format("%d", arrayOut[i * 4 + j])); 9455 if (args.out != arrayOut[i * 4 + j]) { 9456 message.append(" FAIL"); 9457 } 9458 message.append("\n"); 9459 assertTrue("Incorrect output for checkConvertLong4Long4" + 9460 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9461 } 9462 } 9463 } 9464 } 9465 9466 public class ArgumentsUlongLong { 9467 public long inV; 9468 public long out; 9469 } 9470 9471 private void checkConvertUlong2Long2() { 9472 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 2, 0x5cfe7f555a9f30abl, false, 63); 9473 try { 9474 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9475 script.forEach_testConvertLong2Ulong2Long2(inV, out); 9476 verifyResultsConvertUlong2Long2(inV, out, false); 9477 } catch (Exception e) { 9478 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Ulong2Long2: " + e.toString()); 9479 } 9480 try { 9481 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 2), INPUTSIZE); 9482 scriptRelaxed.forEach_testConvertLong2Ulong2Long2(inV, out); 9483 verifyResultsConvertUlong2Long2(inV, out, true); 9484 } catch (Exception e) { 9485 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong2Ulong2Long2: " + e.toString()); 9486 } 9487 } 9488 9489 private void verifyResultsConvertUlong2Long2(Allocation inV, Allocation out, boolean relaxed) { 9490 long[] arrayInV = new long[INPUTSIZE * 2]; 9491 inV.copyTo(arrayInV); 9492 long[] arrayOut = new long[INPUTSIZE * 2]; 9493 out.copyTo(arrayOut); 9494 for (int i = 0; i < INPUTSIZE; i++) { 9495 for (int j = 0; j < 2 ; j++) { 9496 // Extract the inputs. 9497 ArgumentsUlongLong args = new ArgumentsUlongLong(); 9498 args.inV = arrayInV[i * 2 + j]; 9499 // Figure out what the outputs should have been. 9500 CoreMathVerifier.computeConvert(args); 9501 // Validate the outputs. 9502 boolean valid = true; 9503 if (args.out != arrayOut[i * 2 + j]) { 9504 valid = false; 9505 } 9506 if (!valid) { 9507 StringBuilder message = new StringBuilder(); 9508 message.append("Input inV: "); 9509 message.append(String.format("0x%x", args.inV)); 9510 message.append("\n"); 9511 message.append("Expected output out: "); 9512 message.append(String.format("%d", args.out)); 9513 message.append("\n"); 9514 message.append("Actual output out: "); 9515 message.append(String.format("%d", arrayOut[i * 2 + j])); 9516 if (args.out != arrayOut[i * 2 + j]) { 9517 message.append(" FAIL"); 9518 } 9519 message.append("\n"); 9520 assertTrue("Incorrect output for checkConvertUlong2Long2" + 9521 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9522 } 9523 } 9524 } 9525 } 9526 9527 private void checkConvertUlong3Long3() { 9528 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 3, 0x5cfe89f6b9a6f59fl, false, 63); 9529 try { 9530 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9531 script.forEach_testConvertLong3Ulong3Long3(inV, out); 9532 verifyResultsConvertUlong3Long3(inV, out, false); 9533 } catch (Exception e) { 9534 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Ulong3Long3: " + e.toString()); 9535 } 9536 try { 9537 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 3), INPUTSIZE); 9538 scriptRelaxed.forEach_testConvertLong3Ulong3Long3(inV, out); 9539 verifyResultsConvertUlong3Long3(inV, out, true); 9540 } catch (Exception e) { 9541 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong3Ulong3Long3: " + e.toString()); 9542 } 9543 } 9544 9545 private void verifyResultsConvertUlong3Long3(Allocation inV, Allocation out, boolean relaxed) { 9546 long[] arrayInV = new long[INPUTSIZE * 4]; 9547 inV.copyTo(arrayInV); 9548 long[] arrayOut = new long[INPUTSIZE * 4]; 9549 out.copyTo(arrayOut); 9550 for (int i = 0; i < INPUTSIZE; i++) { 9551 for (int j = 0; j < 3 ; j++) { 9552 // Extract the inputs. 9553 ArgumentsUlongLong args = new ArgumentsUlongLong(); 9554 args.inV = arrayInV[i * 4 + j]; 9555 // Figure out what the outputs should have been. 9556 CoreMathVerifier.computeConvert(args); 9557 // Validate the outputs. 9558 boolean valid = true; 9559 if (args.out != arrayOut[i * 4 + j]) { 9560 valid = false; 9561 } 9562 if (!valid) { 9563 StringBuilder message = new StringBuilder(); 9564 message.append("Input inV: "); 9565 message.append(String.format("0x%x", args.inV)); 9566 message.append("\n"); 9567 message.append("Expected output out: "); 9568 message.append(String.format("%d", args.out)); 9569 message.append("\n"); 9570 message.append("Actual output out: "); 9571 message.append(String.format("%d", arrayOut[i * 4 + j])); 9572 if (args.out != arrayOut[i * 4 + j]) { 9573 message.append(" FAIL"); 9574 } 9575 message.append("\n"); 9576 assertTrue("Incorrect output for checkConvertUlong3Long3" + 9577 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9578 } 9579 } 9580 } 9581 } 9582 9583 private void checkConvertUlong4Long4() { 9584 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 4, 0x5cfe949818aeba93l, false, 63); 9585 try { 9586 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9587 script.forEach_testConvertLong4Ulong4Long4(inV, out); 9588 verifyResultsConvertUlong4Long4(inV, out, false); 9589 } catch (Exception e) { 9590 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Ulong4Long4: " + e.toString()); 9591 } 9592 try { 9593 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_64, 4), INPUTSIZE); 9594 scriptRelaxed.forEach_testConvertLong4Ulong4Long4(inV, out); 9595 verifyResultsConvertUlong4Long4(inV, out, true); 9596 } catch (Exception e) { 9597 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertLong4Ulong4Long4: " + e.toString()); 9598 } 9599 } 9600 9601 private void verifyResultsConvertUlong4Long4(Allocation inV, Allocation out, boolean relaxed) { 9602 long[] arrayInV = new long[INPUTSIZE * 4]; 9603 inV.copyTo(arrayInV); 9604 long[] arrayOut = new long[INPUTSIZE * 4]; 9605 out.copyTo(arrayOut); 9606 for (int i = 0; i < INPUTSIZE; i++) { 9607 for (int j = 0; j < 4 ; j++) { 9608 // Extract the inputs. 9609 ArgumentsUlongLong args = new ArgumentsUlongLong(); 9610 args.inV = arrayInV[i * 4 + j]; 9611 // Figure out what the outputs should have been. 9612 CoreMathVerifier.computeConvert(args); 9613 // Validate the outputs. 9614 boolean valid = true; 9615 if (args.out != arrayOut[i * 4 + j]) { 9616 valid = false; 9617 } 9618 if (!valid) { 9619 StringBuilder message = new StringBuilder(); 9620 message.append("Input inV: "); 9621 message.append(String.format("0x%x", args.inV)); 9622 message.append("\n"); 9623 message.append("Expected output out: "); 9624 message.append(String.format("%d", args.out)); 9625 message.append("\n"); 9626 message.append("Actual output out: "); 9627 message.append(String.format("%d", arrayOut[i * 4 + j])); 9628 if (args.out != arrayOut[i * 4 + j]) { 9629 message.append(" FAIL"); 9630 } 9631 message.append("\n"); 9632 assertTrue("Incorrect output for checkConvertUlong4Long4" + 9633 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9634 } 9635 } 9636 } 9637 } 9638 9639 public class ArgumentsDoubleUlong { 9640 public double inV; 9641 public long out; 9642 } 9643 9644 private void checkConvertDouble2Ulong2() { 9645 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 2, 0x42b56e3b7e12ff5el, 0.0000000000000000000e+00, 1.8446744073709549568e+19); 9646 try { 9647 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 9648 script.forEach_testConvertUlong2Double2Ulong2(inV, out); 9649 verifyResultsConvertDouble2Ulong2(inV, out, false); 9650 } catch (Exception e) { 9651 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Double2Ulong2: " + e.toString()); 9652 } 9653 try { 9654 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 9655 scriptRelaxed.forEach_testConvertUlong2Double2Ulong2(inV, out); 9656 verifyResultsConvertDouble2Ulong2(inV, out, true); 9657 } catch (Exception e) { 9658 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Double2Ulong2: " + e.toString()); 9659 } 9660 } 9661 9662 private void verifyResultsConvertDouble2Ulong2(Allocation inV, Allocation out, boolean relaxed) { 9663 double[] arrayInV = new double[INPUTSIZE * 2]; 9664 inV.copyTo(arrayInV); 9665 long[] arrayOut = new long[INPUTSIZE * 2]; 9666 out.copyTo(arrayOut); 9667 for (int i = 0; i < INPUTSIZE; i++) { 9668 for (int j = 0; j < 2 ; j++) { 9669 // Extract the inputs. 9670 ArgumentsDoubleUlong args = new ArgumentsDoubleUlong(); 9671 args.inV = arrayInV[i * 2 + j]; 9672 // Figure out what the outputs should have been. 9673 CoreMathVerifier.computeConvert(args); 9674 // Validate the outputs. 9675 boolean valid = true; 9676 if (args.out != arrayOut[i * 2 + j]) { 9677 valid = false; 9678 } 9679 if (!valid) { 9680 StringBuilder message = new StringBuilder(); 9681 message.append("Input inV: "); 9682 message.append(String.format("%24.8g {%16x} %31a", 9683 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9684 message.append("\n"); 9685 message.append("Expected output out: "); 9686 message.append(String.format("0x%x", args.out)); 9687 message.append("\n"); 9688 message.append("Actual output out: "); 9689 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 9690 if (args.out != arrayOut[i * 2 + j]) { 9691 message.append(" FAIL"); 9692 } 9693 message.append("\n"); 9694 assertTrue("Incorrect output for checkConvertDouble2Ulong2" + 9695 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9696 } 9697 } 9698 } 9699 } 9700 9701 private void checkConvertDouble3Ulong3() { 9702 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 3, 0x42b73756742e203cl, 0.0000000000000000000e+00, 1.8446744073709549568e+19); 9703 try { 9704 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 9705 script.forEach_testConvertUlong3Double3Ulong3(inV, out); 9706 verifyResultsConvertDouble3Ulong3(inV, out, false); 9707 } catch (Exception e) { 9708 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Double3Ulong3: " + e.toString()); 9709 } 9710 try { 9711 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 9712 scriptRelaxed.forEach_testConvertUlong3Double3Ulong3(inV, out); 9713 verifyResultsConvertDouble3Ulong3(inV, out, true); 9714 } catch (Exception e) { 9715 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Double3Ulong3: " + e.toString()); 9716 } 9717 } 9718 9719 private void verifyResultsConvertDouble3Ulong3(Allocation inV, Allocation out, boolean relaxed) { 9720 double[] arrayInV = new double[INPUTSIZE * 4]; 9721 inV.copyTo(arrayInV); 9722 long[] arrayOut = new long[INPUTSIZE * 4]; 9723 out.copyTo(arrayOut); 9724 for (int i = 0; i < INPUTSIZE; i++) { 9725 for (int j = 0; j < 3 ; j++) { 9726 // Extract the inputs. 9727 ArgumentsDoubleUlong args = new ArgumentsDoubleUlong(); 9728 args.inV = arrayInV[i * 4 + j]; 9729 // Figure out what the outputs should have been. 9730 CoreMathVerifier.computeConvert(args); 9731 // Validate the outputs. 9732 boolean valid = true; 9733 if (args.out != arrayOut[i * 4 + j]) { 9734 valid = false; 9735 } 9736 if (!valid) { 9737 StringBuilder message = new StringBuilder(); 9738 message.append("Input inV: "); 9739 message.append(String.format("%24.8g {%16x} %31a", 9740 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9741 message.append("\n"); 9742 message.append("Expected output out: "); 9743 message.append(String.format("0x%x", args.out)); 9744 message.append("\n"); 9745 message.append("Actual output out: "); 9746 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 9747 if (args.out != arrayOut[i * 4 + j]) { 9748 message.append(" FAIL"); 9749 } 9750 message.append("\n"); 9751 assertTrue("Incorrect output for checkConvertDouble3Ulong3" + 9752 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9753 } 9754 } 9755 } 9756 } 9757 9758 private void checkConvertDouble4Ulong4() { 9759 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 4, 0x42b900716a49411al, 0.0000000000000000000e+00, 1.8446744073709549568e+19); 9760 try { 9761 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 9762 script.forEach_testConvertUlong4Double4Ulong4(inV, out); 9763 verifyResultsConvertDouble4Ulong4(inV, out, false); 9764 } catch (Exception e) { 9765 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Double4Ulong4: " + e.toString()); 9766 } 9767 try { 9768 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 9769 scriptRelaxed.forEach_testConvertUlong4Double4Ulong4(inV, out); 9770 verifyResultsConvertDouble4Ulong4(inV, out, true); 9771 } catch (Exception e) { 9772 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Double4Ulong4: " + e.toString()); 9773 } 9774 } 9775 9776 private void verifyResultsConvertDouble4Ulong4(Allocation inV, Allocation out, boolean relaxed) { 9777 double[] arrayInV = new double[INPUTSIZE * 4]; 9778 inV.copyTo(arrayInV); 9779 long[] arrayOut = new long[INPUTSIZE * 4]; 9780 out.copyTo(arrayOut); 9781 for (int i = 0; i < INPUTSIZE; i++) { 9782 for (int j = 0; j < 4 ; j++) { 9783 // Extract the inputs. 9784 ArgumentsDoubleUlong args = new ArgumentsDoubleUlong(); 9785 args.inV = arrayInV[i * 4 + j]; 9786 // Figure out what the outputs should have been. 9787 CoreMathVerifier.computeConvert(args); 9788 // Validate the outputs. 9789 boolean valid = true; 9790 if (args.out != arrayOut[i * 4 + j]) { 9791 valid = false; 9792 } 9793 if (!valid) { 9794 StringBuilder message = new StringBuilder(); 9795 message.append("Input inV: "); 9796 message.append(String.format("%24.8g {%16x} %31a", 9797 args.inV, Double.doubleToRawLongBits(args.inV), args.inV)); 9798 message.append("\n"); 9799 message.append("Expected output out: "); 9800 message.append(String.format("0x%x", args.out)); 9801 message.append("\n"); 9802 message.append("Actual output out: "); 9803 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 9804 if (args.out != arrayOut[i * 4 + j]) { 9805 message.append(" FAIL"); 9806 } 9807 message.append("\n"); 9808 assertTrue("Incorrect output for checkConvertDouble4Ulong4" + 9809 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9810 } 9811 } 9812 } 9813 } 9814 9815 public class ArgumentsLongUlong { 9816 public long inV; 9817 public long out; 9818 } 9819 9820 private void checkConvertLong2Ulong2() { 9821 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 2, 0x79f1a23ed7d40f65l, false, 63); 9822 try { 9823 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 9824 script.forEach_testConvertUlong2Long2Ulong2(inV, out); 9825 verifyResultsConvertLong2Ulong2(inV, out, false); 9826 } catch (Exception e) { 9827 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Long2Ulong2: " + e.toString()); 9828 } 9829 try { 9830 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 9831 scriptRelaxed.forEach_testConvertUlong2Long2Ulong2(inV, out); 9832 verifyResultsConvertLong2Ulong2(inV, out, true); 9833 } catch (Exception e) { 9834 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Long2Ulong2: " + e.toString()); 9835 } 9836 } 9837 9838 private void verifyResultsConvertLong2Ulong2(Allocation inV, Allocation out, boolean relaxed) { 9839 long[] arrayInV = new long[INPUTSIZE * 2]; 9840 inV.copyTo(arrayInV); 9841 long[] arrayOut = new long[INPUTSIZE * 2]; 9842 out.copyTo(arrayOut); 9843 for (int i = 0; i < INPUTSIZE; i++) { 9844 for (int j = 0; j < 2 ; j++) { 9845 // Extract the inputs. 9846 ArgumentsLongUlong args = new ArgumentsLongUlong(); 9847 args.inV = arrayInV[i * 2 + j]; 9848 // Figure out what the outputs should have been. 9849 CoreMathVerifier.computeConvert(args); 9850 // Validate the outputs. 9851 boolean valid = true; 9852 if (args.out != arrayOut[i * 2 + j]) { 9853 valid = false; 9854 } 9855 if (!valid) { 9856 StringBuilder message = new StringBuilder(); 9857 message.append("Input inV: "); 9858 message.append(String.format("%d", args.inV)); 9859 message.append("\n"); 9860 message.append("Expected output out: "); 9861 message.append(String.format("0x%x", args.out)); 9862 message.append("\n"); 9863 message.append("Actual output out: "); 9864 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 9865 if (args.out != arrayOut[i * 2 + j]) { 9866 message.append(" FAIL"); 9867 } 9868 message.append("\n"); 9869 assertTrue("Incorrect output for checkConvertLong2Ulong2" + 9870 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9871 } 9872 } 9873 } 9874 } 9875 9876 private void checkConvertLong3Ulong3() { 9877 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 3, 0x79f36b59cdef3043l, false, 63); 9878 try { 9879 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 9880 script.forEach_testConvertUlong3Long3Ulong3(inV, out); 9881 verifyResultsConvertLong3Ulong3(inV, out, false); 9882 } catch (Exception e) { 9883 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Long3Ulong3: " + e.toString()); 9884 } 9885 try { 9886 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 9887 scriptRelaxed.forEach_testConvertUlong3Long3Ulong3(inV, out); 9888 verifyResultsConvertLong3Ulong3(inV, out, true); 9889 } catch (Exception e) { 9890 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Long3Ulong3: " + e.toString()); 9891 } 9892 } 9893 9894 private void verifyResultsConvertLong3Ulong3(Allocation inV, Allocation out, boolean relaxed) { 9895 long[] arrayInV = new long[INPUTSIZE * 4]; 9896 inV.copyTo(arrayInV); 9897 long[] arrayOut = new long[INPUTSIZE * 4]; 9898 out.copyTo(arrayOut); 9899 for (int i = 0; i < INPUTSIZE; i++) { 9900 for (int j = 0; j < 3 ; j++) { 9901 // Extract the inputs. 9902 ArgumentsLongUlong args = new ArgumentsLongUlong(); 9903 args.inV = arrayInV[i * 4 + j]; 9904 // Figure out what the outputs should have been. 9905 CoreMathVerifier.computeConvert(args); 9906 // Validate the outputs. 9907 boolean valid = true; 9908 if (args.out != arrayOut[i * 4 + j]) { 9909 valid = false; 9910 } 9911 if (!valid) { 9912 StringBuilder message = new StringBuilder(); 9913 message.append("Input inV: "); 9914 message.append(String.format("%d", args.inV)); 9915 message.append("\n"); 9916 message.append("Expected output out: "); 9917 message.append(String.format("0x%x", args.out)); 9918 message.append("\n"); 9919 message.append("Actual output out: "); 9920 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 9921 if (args.out != arrayOut[i * 4 + j]) { 9922 message.append(" FAIL"); 9923 } 9924 message.append("\n"); 9925 assertTrue("Incorrect output for checkConvertLong3Ulong3" + 9926 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9927 } 9928 } 9929 } 9930 } 9931 9932 private void checkConvertLong4Ulong4() { 9933 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.SIGNED_64, 4, 0x79f53474c40a5121l, false, 63); 9934 try { 9935 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 9936 script.forEach_testConvertUlong4Long4Ulong4(inV, out); 9937 verifyResultsConvertLong4Ulong4(inV, out, false); 9938 } catch (Exception e) { 9939 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Long4Ulong4: " + e.toString()); 9940 } 9941 try { 9942 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 9943 scriptRelaxed.forEach_testConvertUlong4Long4Ulong4(inV, out); 9944 verifyResultsConvertLong4Ulong4(inV, out, true); 9945 } catch (Exception e) { 9946 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Long4Ulong4: " + e.toString()); 9947 } 9948 } 9949 9950 private void verifyResultsConvertLong4Ulong4(Allocation inV, Allocation out, boolean relaxed) { 9951 long[] arrayInV = new long[INPUTSIZE * 4]; 9952 inV.copyTo(arrayInV); 9953 long[] arrayOut = new long[INPUTSIZE * 4]; 9954 out.copyTo(arrayOut); 9955 for (int i = 0; i < INPUTSIZE; i++) { 9956 for (int j = 0; j < 4 ; j++) { 9957 // Extract the inputs. 9958 ArgumentsLongUlong args = new ArgumentsLongUlong(); 9959 args.inV = arrayInV[i * 4 + j]; 9960 // Figure out what the outputs should have been. 9961 CoreMathVerifier.computeConvert(args); 9962 // Validate the outputs. 9963 boolean valid = true; 9964 if (args.out != arrayOut[i * 4 + j]) { 9965 valid = false; 9966 } 9967 if (!valid) { 9968 StringBuilder message = new StringBuilder(); 9969 message.append("Input inV: "); 9970 message.append(String.format("%d", args.inV)); 9971 message.append("\n"); 9972 message.append("Expected output out: "); 9973 message.append(String.format("0x%x", args.out)); 9974 message.append("\n"); 9975 message.append("Actual output out: "); 9976 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 9977 if (args.out != arrayOut[i * 4 + j]) { 9978 message.append(" FAIL"); 9979 } 9980 message.append("\n"); 9981 assertTrue("Incorrect output for checkConvertLong4Ulong4" + 9982 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 9983 } 9984 } 9985 } 9986 } 9987 9988 public class ArgumentsUlongUlong { 9989 public long inV; 9990 public long out; 9991 } 9992 9993 private void checkConvertUlong2Ulong2() { 9994 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 2, 0x9ebfc24673ac2910l, false, 64); 9995 try { 9996 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 9997 script.forEach_testConvertUlong2Ulong2Ulong2(inV, out); 9998 verifyResultsConvertUlong2Ulong2(inV, out, false); 9999 } catch (Exception e) { 10000 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Ulong2Ulong2: " + e.toString()); 10001 } 10002 try { 10003 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 2), INPUTSIZE); 10004 scriptRelaxed.forEach_testConvertUlong2Ulong2Ulong2(inV, out); 10005 verifyResultsConvertUlong2Ulong2(inV, out, true); 10006 } catch (Exception e) { 10007 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong2Ulong2Ulong2: " + e.toString()); 10008 } 10009 } 10010 10011 private void verifyResultsConvertUlong2Ulong2(Allocation inV, Allocation out, boolean relaxed) { 10012 long[] arrayInV = new long[INPUTSIZE * 2]; 10013 inV.copyTo(arrayInV); 10014 long[] arrayOut = new long[INPUTSIZE * 2]; 10015 out.copyTo(arrayOut); 10016 for (int i = 0; i < INPUTSIZE; i++) { 10017 for (int j = 0; j < 2 ; j++) { 10018 // Extract the inputs. 10019 ArgumentsUlongUlong args = new ArgumentsUlongUlong(); 10020 args.inV = arrayInV[i * 2 + j]; 10021 // Figure out what the outputs should have been. 10022 CoreMathVerifier.computeConvert(args); 10023 // Validate the outputs. 10024 boolean valid = true; 10025 if (args.out != arrayOut[i * 2 + j]) { 10026 valid = false; 10027 } 10028 if (!valid) { 10029 StringBuilder message = new StringBuilder(); 10030 message.append("Input inV: "); 10031 message.append(String.format("0x%x", args.inV)); 10032 message.append("\n"); 10033 message.append("Expected output out: "); 10034 message.append(String.format("0x%x", args.out)); 10035 message.append("\n"); 10036 message.append("Actual output out: "); 10037 message.append(String.format("0x%x", arrayOut[i * 2 + j])); 10038 if (args.out != arrayOut[i * 2 + j]) { 10039 message.append(" FAIL"); 10040 } 10041 message.append("\n"); 10042 assertTrue("Incorrect output for checkConvertUlong2Ulong2" + 10043 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 10044 } 10045 } 10046 } 10047 } 10048 10049 private void checkConvertUlong3Ulong3() { 10050 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 3, 0x9ec18b6169c749eel, false, 64); 10051 try { 10052 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 10053 script.forEach_testConvertUlong3Ulong3Ulong3(inV, out); 10054 verifyResultsConvertUlong3Ulong3(inV, out, false); 10055 } catch (Exception e) { 10056 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Ulong3Ulong3: " + e.toString()); 10057 } 10058 try { 10059 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 3), INPUTSIZE); 10060 scriptRelaxed.forEach_testConvertUlong3Ulong3Ulong3(inV, out); 10061 verifyResultsConvertUlong3Ulong3(inV, out, true); 10062 } catch (Exception e) { 10063 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong3Ulong3Ulong3: " + e.toString()); 10064 } 10065 } 10066 10067 private void verifyResultsConvertUlong3Ulong3(Allocation inV, Allocation out, boolean relaxed) { 10068 long[] arrayInV = new long[INPUTSIZE * 4]; 10069 inV.copyTo(arrayInV); 10070 long[] arrayOut = new long[INPUTSIZE * 4]; 10071 out.copyTo(arrayOut); 10072 for (int i = 0; i < INPUTSIZE; i++) { 10073 for (int j = 0; j < 3 ; j++) { 10074 // Extract the inputs. 10075 ArgumentsUlongUlong args = new ArgumentsUlongUlong(); 10076 args.inV = arrayInV[i * 4 + j]; 10077 // Figure out what the outputs should have been. 10078 CoreMathVerifier.computeConvert(args); 10079 // Validate the outputs. 10080 boolean valid = true; 10081 if (args.out != arrayOut[i * 4 + j]) { 10082 valid = false; 10083 } 10084 if (!valid) { 10085 StringBuilder message = new StringBuilder(); 10086 message.append("Input inV: "); 10087 message.append(String.format("0x%x", args.inV)); 10088 message.append("\n"); 10089 message.append("Expected output out: "); 10090 message.append(String.format("0x%x", args.out)); 10091 message.append("\n"); 10092 message.append("Actual output out: "); 10093 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 10094 if (args.out != arrayOut[i * 4 + j]) { 10095 message.append(" FAIL"); 10096 } 10097 message.append("\n"); 10098 assertTrue("Incorrect output for checkConvertUlong3Ulong3" + 10099 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 10100 } 10101 } 10102 } 10103 } 10104 10105 private void checkConvertUlong4Ulong4() { 10106 Allocation inV = createRandomIntegerAllocation(mRS, Element.DataType.UNSIGNED_64, 4, 0x9ec3547c5fe26accl, false, 64); 10107 try { 10108 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 10109 script.forEach_testConvertUlong4Ulong4Ulong4(inV, out); 10110 verifyResultsConvertUlong4Ulong4(inV, out, false); 10111 } catch (Exception e) { 10112 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Ulong4Ulong4: " + e.toString()); 10113 } 10114 try { 10115 Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_64, 4), INPUTSIZE); 10116 scriptRelaxed.forEach_testConvertUlong4Ulong4Ulong4(inV, out); 10117 verifyResultsConvertUlong4Ulong4(inV, out, true); 10118 } catch (Exception e) { 10119 throw new RSRuntimeException("RenderScript. Can't invoke forEach_testConvertUlong4Ulong4Ulong4: " + e.toString()); 10120 } 10121 } 10122 10123 private void verifyResultsConvertUlong4Ulong4(Allocation inV, Allocation out, boolean relaxed) { 10124 long[] arrayInV = new long[INPUTSIZE * 4]; 10125 inV.copyTo(arrayInV); 10126 long[] arrayOut = new long[INPUTSIZE * 4]; 10127 out.copyTo(arrayOut); 10128 for (int i = 0; i < INPUTSIZE; i++) { 10129 for (int j = 0; j < 4 ; j++) { 10130 // Extract the inputs. 10131 ArgumentsUlongUlong args = new ArgumentsUlongUlong(); 10132 args.inV = arrayInV[i * 4 + j]; 10133 // Figure out what the outputs should have been. 10134 CoreMathVerifier.computeConvert(args); 10135 // Validate the outputs. 10136 boolean valid = true; 10137 if (args.out != arrayOut[i * 4 + j]) { 10138 valid = false; 10139 } 10140 if (!valid) { 10141 StringBuilder message = new StringBuilder(); 10142 message.append("Input inV: "); 10143 message.append(String.format("0x%x", args.inV)); 10144 message.append("\n"); 10145 message.append("Expected output out: "); 10146 message.append(String.format("0x%x", args.out)); 10147 message.append("\n"); 10148 message.append("Actual output out: "); 10149 message.append(String.format("0x%x", arrayOut[i * 4 + j])); 10150 if (args.out != arrayOut[i * 4 + j]) { 10151 message.append(" FAIL"); 10152 } 10153 message.append("\n"); 10154 assertTrue("Incorrect output for checkConvertUlong4Ulong4" + 10155 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), valid); 10156 } 10157 } 10158 } 10159 } 10160 10161 public class ArgumentsDoubleFloat { 10162 public double inV; 10163 public Target.Floaty out; 10164 } 10165 10166 private void checkConvertDouble2Float2() { 10167 Allocation inV = createRandomFloatAllocation(mRS, Element.DataType.FLOAT_64, 2, 0x42b4cec67d6d9a2dl, -1.61