Home | History | Annotate | Download | only in generated
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 // Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
     18 
     19 package android.renderscript.cts;
     20 
     21 import android.renderscript.Allocation;
     22 import android.renderscript.RSRuntimeException;
     23 import android.renderscript.Element;
     24 import android.renderscript.cts.Target;
     25 
     26 import java.util.Arrays;
     27 
     28 public class TestClz extends RSBaseCompute {
     29 
     30     private ScriptC_TestClz script;
     31     private ScriptC_TestClzRelaxed scriptRelaxed;
     32 
     33     @Override
     34     protected void setUp() throws Exception {
     35         super.setUp();
     36         script = new ScriptC_TestClz(mRS);
     37         scriptRelaxed = new ScriptC_TestClzRelaxed(mRS);
     38     }
     39 
     40     @Override
     41     protected void tearDown() throws Exception {
     42         script.destroy();
     43         scriptRelaxed.destroy();
     44         super.tearDown();
     45     }
     46 
     47     public class ArgumentsCharChar {
     48         public byte inValue;
     49         public byte out;
     50     }
     51 
     52     private void checkClzCharChar() {
     53         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 1, 0xf6f3a15e2f7765afl, false);
     54         try {
     55             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 1), INPUTSIZE);
     56             script.forEach_testClzCharChar(inValue, out);
     57             verifyResultsClzCharChar(inValue, out, false);
     58             out.destroy();
     59         } catch (Exception e) {
     60             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzCharChar: " + e.toString());
     61         }
     62         try {
     63             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 1), INPUTSIZE);
     64             scriptRelaxed.forEach_testClzCharChar(inValue, out);
     65             verifyResultsClzCharChar(inValue, out, true);
     66             out.destroy();
     67         } catch (Exception e) {
     68             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzCharChar: " + e.toString());
     69         }
     70         inValue.destroy();
     71     }
     72 
     73     private void verifyResultsClzCharChar(Allocation inValue, Allocation out, boolean relaxed) {
     74         byte[] arrayInValue = new byte[INPUTSIZE * 1];
     75         Arrays.fill(arrayInValue, (byte) 42);
     76         inValue.copyTo(arrayInValue);
     77         byte[] arrayOut = new byte[INPUTSIZE * 1];
     78         Arrays.fill(arrayOut, (byte) 42);
     79         out.copyTo(arrayOut);
     80         StringBuilder message = new StringBuilder();
     81         boolean errorFound = false;
     82         for (int i = 0; i < INPUTSIZE; i++) {
     83             for (int j = 0; j < 1 ; j++) {
     84                 // Extract the inputs.
     85                 ArgumentsCharChar args = new ArgumentsCharChar();
     86                 args.inValue = arrayInValue[i];
     87                 // Figure out what the outputs should have been.
     88                 CoreMathVerifier.computeClz(args);
     89                 // Validate the outputs.
     90                 boolean valid = true;
     91                 if (args.out != arrayOut[i * 1 + j]) {
     92                     valid = false;
     93                 }
     94                 if (!valid) {
     95                     if (!errorFound) {
     96                         errorFound = true;
     97                         message.append("Input inValue: ");
     98                         appendVariableToMessage(message, args.inValue);
     99                         message.append("\n");
    100                         message.append("Expected output out: ");
    101                         appendVariableToMessage(message, args.out);
    102                         message.append("\n");
    103                         message.append("Actual   output out: ");
    104                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
    105                         if (args.out != arrayOut[i * 1 + j]) {
    106                             message.append(" FAIL");
    107                         }
    108                         message.append("\n");
    109                         message.append("Errors at");
    110                     }
    111                     message.append(" [");
    112                     message.append(Integer.toString(i));
    113                     message.append(", ");
    114                     message.append(Integer.toString(j));
    115                     message.append("]");
    116                 }
    117             }
    118         }
    119         assertFalse("Incorrect output for checkClzCharChar" +
    120                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    121     }
    122 
    123     private void checkClzChar2Char2() {
    124         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 2, 0xf718b99dcaca5e93l, false);
    125         try {
    126             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE);
    127             script.forEach_testClzChar2Char2(inValue, out);
    128             verifyResultsClzChar2Char2(inValue, out, false);
    129             out.destroy();
    130         } catch (Exception e) {
    131             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar2Char2: " + e.toString());
    132         }
    133         try {
    134             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 2), INPUTSIZE);
    135             scriptRelaxed.forEach_testClzChar2Char2(inValue, out);
    136             verifyResultsClzChar2Char2(inValue, out, true);
    137             out.destroy();
    138         } catch (Exception e) {
    139             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar2Char2: " + e.toString());
    140         }
    141         inValue.destroy();
    142     }
    143 
    144     private void verifyResultsClzChar2Char2(Allocation inValue, Allocation out, boolean relaxed) {
    145         byte[] arrayInValue = new byte[INPUTSIZE * 2];
    146         Arrays.fill(arrayInValue, (byte) 42);
    147         inValue.copyTo(arrayInValue);
    148         byte[] arrayOut = new byte[INPUTSIZE * 2];
    149         Arrays.fill(arrayOut, (byte) 42);
    150         out.copyTo(arrayOut);
    151         StringBuilder message = new StringBuilder();
    152         boolean errorFound = false;
    153         for (int i = 0; i < INPUTSIZE; i++) {
    154             for (int j = 0; j < 2 ; j++) {
    155                 // Extract the inputs.
    156                 ArgumentsCharChar args = new ArgumentsCharChar();
    157                 args.inValue = arrayInValue[i * 2 + j];
    158                 // Figure out what the outputs should have been.
    159                 CoreMathVerifier.computeClz(args);
    160                 // Validate the outputs.
    161                 boolean valid = true;
    162                 if (args.out != arrayOut[i * 2 + j]) {
    163                     valid = false;
    164                 }
    165                 if (!valid) {
    166                     if (!errorFound) {
    167                         errorFound = true;
    168                         message.append("Input inValue: ");
    169                         appendVariableToMessage(message, args.inValue);
    170                         message.append("\n");
    171                         message.append("Expected output out: ");
    172                         appendVariableToMessage(message, args.out);
    173                         message.append("\n");
    174                         message.append("Actual   output out: ");
    175                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
    176                         if (args.out != arrayOut[i * 2 + j]) {
    177                             message.append(" FAIL");
    178                         }
    179                         message.append("\n");
    180                         message.append("Errors at");
    181                     }
    182                     message.append(" [");
    183                     message.append(Integer.toString(i));
    184                     message.append(", ");
    185                     message.append(Integer.toString(j));
    186                     message.append("]");
    187                 }
    188             }
    189         }
    190         assertFalse("Incorrect output for checkClzChar2Char2" +
    191                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    192     }
    193 
    194     private void checkClzChar3Char3() {
    195         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 3, 0x21a5da5bc7099347l, false);
    196         try {
    197             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE);
    198             script.forEach_testClzChar3Char3(inValue, out);
    199             verifyResultsClzChar3Char3(inValue, out, false);
    200             out.destroy();
    201         } catch (Exception e) {
    202             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar3Char3: " + e.toString());
    203         }
    204         try {
    205             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 3), INPUTSIZE);
    206             scriptRelaxed.forEach_testClzChar3Char3(inValue, out);
    207             verifyResultsClzChar3Char3(inValue, out, true);
    208             out.destroy();
    209         } catch (Exception e) {
    210             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar3Char3: " + e.toString());
    211         }
    212         inValue.destroy();
    213     }
    214 
    215     private void verifyResultsClzChar3Char3(Allocation inValue, Allocation out, boolean relaxed) {
    216         byte[] arrayInValue = new byte[INPUTSIZE * 4];
    217         Arrays.fill(arrayInValue, (byte) 42);
    218         inValue.copyTo(arrayInValue);
    219         byte[] arrayOut = new byte[INPUTSIZE * 4];
    220         Arrays.fill(arrayOut, (byte) 42);
    221         out.copyTo(arrayOut);
    222         StringBuilder message = new StringBuilder();
    223         boolean errorFound = false;
    224         for (int i = 0; i < INPUTSIZE; i++) {
    225             for (int j = 0; j < 3 ; j++) {
    226                 // Extract the inputs.
    227                 ArgumentsCharChar args = new ArgumentsCharChar();
    228                 args.inValue = arrayInValue[i * 4 + j];
    229                 // Figure out what the outputs should have been.
    230                 CoreMathVerifier.computeClz(args);
    231                 // Validate the outputs.
    232                 boolean valid = true;
    233                 if (args.out != arrayOut[i * 4 + j]) {
    234                     valid = false;
    235                 }
    236                 if (!valid) {
    237                     if (!errorFound) {
    238                         errorFound = true;
    239                         message.append("Input inValue: ");
    240                         appendVariableToMessage(message, args.inValue);
    241                         message.append("\n");
    242                         message.append("Expected output out: ");
    243                         appendVariableToMessage(message, args.out);
    244                         message.append("\n");
    245                         message.append("Actual   output out: ");
    246                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    247                         if (args.out != arrayOut[i * 4 + j]) {
    248                             message.append(" FAIL");
    249                         }
    250                         message.append("\n");
    251                         message.append("Errors at");
    252                     }
    253                     message.append(" [");
    254                     message.append(Integer.toString(i));
    255                     message.append(", ");
    256                     message.append(Integer.toString(j));
    257                     message.append("]");
    258                 }
    259             }
    260         }
    261         assertFalse("Incorrect output for checkClzChar3Char3" +
    262                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    263     }
    264 
    265     private void checkClzChar4Char4() {
    266         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 4, 0x4c32fb19c348c7fbl, false);
    267         try {
    268             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE);
    269             script.forEach_testClzChar4Char4(inValue, out);
    270             verifyResultsClzChar4Char4(inValue, out, false);
    271             out.destroy();
    272         } catch (Exception e) {
    273             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar4Char4: " + e.toString());
    274         }
    275         try {
    276             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_8, 4), INPUTSIZE);
    277             scriptRelaxed.forEach_testClzChar4Char4(inValue, out);
    278             verifyResultsClzChar4Char4(inValue, out, true);
    279             out.destroy();
    280         } catch (Exception e) {
    281             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzChar4Char4: " + e.toString());
    282         }
    283         inValue.destroy();
    284     }
    285 
    286     private void verifyResultsClzChar4Char4(Allocation inValue, Allocation out, boolean relaxed) {
    287         byte[] arrayInValue = new byte[INPUTSIZE * 4];
    288         Arrays.fill(arrayInValue, (byte) 42);
    289         inValue.copyTo(arrayInValue);
    290         byte[] arrayOut = new byte[INPUTSIZE * 4];
    291         Arrays.fill(arrayOut, (byte) 42);
    292         out.copyTo(arrayOut);
    293         StringBuilder message = new StringBuilder();
    294         boolean errorFound = false;
    295         for (int i = 0; i < INPUTSIZE; i++) {
    296             for (int j = 0; j < 4 ; j++) {
    297                 // Extract the inputs.
    298                 ArgumentsCharChar args = new ArgumentsCharChar();
    299                 args.inValue = arrayInValue[i * 4 + j];
    300                 // Figure out what the outputs should have been.
    301                 CoreMathVerifier.computeClz(args);
    302                 // Validate the outputs.
    303                 boolean valid = true;
    304                 if (args.out != arrayOut[i * 4 + j]) {
    305                     valid = false;
    306                 }
    307                 if (!valid) {
    308                     if (!errorFound) {
    309                         errorFound = true;
    310                         message.append("Input inValue: ");
    311                         appendVariableToMessage(message, args.inValue);
    312                         message.append("\n");
    313                         message.append("Expected output out: ");
    314                         appendVariableToMessage(message, args.out);
    315                         message.append("\n");
    316                         message.append("Actual   output out: ");
    317                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    318                         if (args.out != arrayOut[i * 4 + j]) {
    319                             message.append(" FAIL");
    320                         }
    321                         message.append("\n");
    322                         message.append("Errors at");
    323                     }
    324                     message.append(" [");
    325                     message.append(Integer.toString(i));
    326                     message.append(", ");
    327                     message.append(Integer.toString(j));
    328                     message.append("]");
    329                 }
    330             }
    331         }
    332         assertFalse("Incorrect output for checkClzChar4Char4" +
    333                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    334     }
    335 
    336     public class ArgumentsUcharUchar {
    337         public byte inValue;
    338         public byte out;
    339     }
    340 
    341     private void checkClzUcharUchar() {
    342         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_8, 1, 0xd2e451b48b84f57fl, false);
    343         try {
    344             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 1), INPUTSIZE);
    345             script.forEach_testClzUcharUchar(inValue, out);
    346             verifyResultsClzUcharUchar(inValue, out, false);
    347             out.destroy();
    348         } catch (Exception e) {
    349             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUcharUchar: " + e.toString());
    350         }
    351         try {
    352             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 1), INPUTSIZE);
    353             scriptRelaxed.forEach_testClzUcharUchar(inValue, out);
    354             verifyResultsClzUcharUchar(inValue, out, true);
    355             out.destroy();
    356         } catch (Exception e) {
    357             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUcharUchar: " + e.toString());
    358         }
    359         inValue.destroy();
    360     }
    361 
    362     private void verifyResultsClzUcharUchar(Allocation inValue, Allocation out, boolean relaxed) {
    363         byte[] arrayInValue = new byte[INPUTSIZE * 1];
    364         Arrays.fill(arrayInValue, (byte) 42);
    365         inValue.copyTo(arrayInValue);
    366         byte[] arrayOut = new byte[INPUTSIZE * 1];
    367         Arrays.fill(arrayOut, (byte) 42);
    368         out.copyTo(arrayOut);
    369         StringBuilder message = new StringBuilder();
    370         boolean errorFound = false;
    371         for (int i = 0; i < INPUTSIZE; i++) {
    372             for (int j = 0; j < 1 ; j++) {
    373                 // Extract the inputs.
    374                 ArgumentsUcharUchar args = new ArgumentsUcharUchar();
    375                 args.inValue = arrayInValue[i];
    376                 // Figure out what the outputs should have been.
    377                 CoreMathVerifier.computeClz(args);
    378                 // Validate the outputs.
    379                 boolean valid = true;
    380                 if (args.out != arrayOut[i * 1 + j]) {
    381                     valid = false;
    382                 }
    383                 if (!valid) {
    384                     if (!errorFound) {
    385                         errorFound = true;
    386                         message.append("Input inValue: ");
    387                         appendVariableToMessage(message, args.inValue);
    388                         message.append("\n");
    389                         message.append("Expected output out: ");
    390                         appendVariableToMessage(message, args.out);
    391                         message.append("\n");
    392                         message.append("Actual   output out: ");
    393                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
    394                         if (args.out != arrayOut[i * 1 + j]) {
    395                             message.append(" FAIL");
    396                         }
    397                         message.append("\n");
    398                         message.append("Errors at");
    399                     }
    400                     message.append(" [");
    401                     message.append(Integer.toString(i));
    402                     message.append(", ");
    403                     message.append(Integer.toString(j));
    404                     message.append("]");
    405                 }
    406             }
    407         }
    408         assertFalse("Incorrect output for checkClzUcharUchar" +
    409                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    410     }
    411 
    412     private void checkClzUchar2Uchar2() {
    413         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_8, 2, 0x792e2970f47ebc85l, false);
    414         try {
    415             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE);
    416             script.forEach_testClzUchar2Uchar2(inValue, out);
    417             verifyResultsClzUchar2Uchar2(inValue, out, false);
    418             out.destroy();
    419         } catch (Exception e) {
    420             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar2Uchar2: " + e.toString());
    421         }
    422         try {
    423             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE);
    424             scriptRelaxed.forEach_testClzUchar2Uchar2(inValue, out);
    425             verifyResultsClzUchar2Uchar2(inValue, out, true);
    426             out.destroy();
    427         } catch (Exception e) {
    428             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar2Uchar2: " + e.toString());
    429         }
    430         inValue.destroy();
    431     }
    432 
    433     private void verifyResultsClzUchar2Uchar2(Allocation inValue, Allocation out, boolean relaxed) {
    434         byte[] arrayInValue = new byte[INPUTSIZE * 2];
    435         Arrays.fill(arrayInValue, (byte) 42);
    436         inValue.copyTo(arrayInValue);
    437         byte[] arrayOut = new byte[INPUTSIZE * 2];
    438         Arrays.fill(arrayOut, (byte) 42);
    439         out.copyTo(arrayOut);
    440         StringBuilder message = new StringBuilder();
    441         boolean errorFound = false;
    442         for (int i = 0; i < INPUTSIZE; i++) {
    443             for (int j = 0; j < 2 ; j++) {
    444                 // Extract the inputs.
    445                 ArgumentsUcharUchar args = new ArgumentsUcharUchar();
    446                 args.inValue = arrayInValue[i * 2 + j];
    447                 // Figure out what the outputs should have been.
    448                 CoreMathVerifier.computeClz(args);
    449                 // Validate the outputs.
    450                 boolean valid = true;
    451                 if (args.out != arrayOut[i * 2 + j]) {
    452                     valid = false;
    453                 }
    454                 if (!valid) {
    455                     if (!errorFound) {
    456                         errorFound = true;
    457                         message.append("Input inValue: ");
    458                         appendVariableToMessage(message, args.inValue);
    459                         message.append("\n");
    460                         message.append("Expected output out: ");
    461                         appendVariableToMessage(message, args.out);
    462                         message.append("\n");
    463                         message.append("Actual   output out: ");
    464                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
    465                         if (args.out != arrayOut[i * 2 + j]) {
    466                             message.append(" FAIL");
    467                         }
    468                         message.append("\n");
    469                         message.append("Errors at");
    470                     }
    471                     message.append(" [");
    472                     message.append(Integer.toString(i));
    473                     message.append(", ");
    474                     message.append(Integer.toString(j));
    475                     message.append("]");
    476                 }
    477             }
    478         }
    479         assertFalse("Incorrect output for checkClzUchar2Uchar2" +
    480                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    481     }
    482 
    483     private void checkClzUchar3Uchar3() {
    484         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_8, 3, 0x9ee29ef83dbce203l, false);
    485         try {
    486             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE);
    487             script.forEach_testClzUchar3Uchar3(inValue, out);
    488             verifyResultsClzUchar3Uchar3(inValue, out, false);
    489             out.destroy();
    490         } catch (Exception e) {
    491             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar3Uchar3: " + e.toString());
    492         }
    493         try {
    494             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE);
    495             scriptRelaxed.forEach_testClzUchar3Uchar3(inValue, out);
    496             verifyResultsClzUchar3Uchar3(inValue, out, true);
    497             out.destroy();
    498         } catch (Exception e) {
    499             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar3Uchar3: " + e.toString());
    500         }
    501         inValue.destroy();
    502     }
    503 
    504     private void verifyResultsClzUchar3Uchar3(Allocation inValue, Allocation out, boolean relaxed) {
    505         byte[] arrayInValue = new byte[INPUTSIZE * 4];
    506         Arrays.fill(arrayInValue, (byte) 42);
    507         inValue.copyTo(arrayInValue);
    508         byte[] arrayOut = new byte[INPUTSIZE * 4];
    509         Arrays.fill(arrayOut, (byte) 42);
    510         out.copyTo(arrayOut);
    511         StringBuilder message = new StringBuilder();
    512         boolean errorFound = false;
    513         for (int i = 0; i < INPUTSIZE; i++) {
    514             for (int j = 0; j < 3 ; j++) {
    515                 // Extract the inputs.
    516                 ArgumentsUcharUchar args = new ArgumentsUcharUchar();
    517                 args.inValue = arrayInValue[i * 4 + j];
    518                 // Figure out what the outputs should have been.
    519                 CoreMathVerifier.computeClz(args);
    520                 // Validate the outputs.
    521                 boolean valid = true;
    522                 if (args.out != arrayOut[i * 4 + j]) {
    523                     valid = false;
    524                 }
    525                 if (!valid) {
    526                     if (!errorFound) {
    527                         errorFound = true;
    528                         message.append("Input inValue: ");
    529                         appendVariableToMessage(message, args.inValue);
    530                         message.append("\n");
    531                         message.append("Expected output out: ");
    532                         appendVariableToMessage(message, args.out);
    533                         message.append("\n");
    534                         message.append("Actual   output out: ");
    535                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    536                         if (args.out != arrayOut[i * 4 + j]) {
    537                             message.append(" FAIL");
    538                         }
    539                         message.append("\n");
    540                         message.append("Errors at");
    541                     }
    542                     message.append(" [");
    543                     message.append(Integer.toString(i));
    544                     message.append(", ");
    545                     message.append(Integer.toString(j));
    546                     message.append("]");
    547                 }
    548             }
    549         }
    550         assertFalse("Incorrect output for checkClzUchar3Uchar3" +
    551                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    552     }
    553 
    554     private void checkClzUchar4Uchar4() {
    555         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_8, 4, 0xc497147f86fb0781l, false);
    556         try {
    557             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE);
    558             script.forEach_testClzUchar4Uchar4(inValue, out);
    559             verifyResultsClzUchar4Uchar4(inValue, out, false);
    560             out.destroy();
    561         } catch (Exception e) {
    562             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar4Uchar4: " + e.toString());
    563         }
    564         try {
    565             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE);
    566             scriptRelaxed.forEach_testClzUchar4Uchar4(inValue, out);
    567             verifyResultsClzUchar4Uchar4(inValue, out, true);
    568             out.destroy();
    569         } catch (Exception e) {
    570             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUchar4Uchar4: " + e.toString());
    571         }
    572         inValue.destroy();
    573     }
    574 
    575     private void verifyResultsClzUchar4Uchar4(Allocation inValue, Allocation out, boolean relaxed) {
    576         byte[] arrayInValue = new byte[INPUTSIZE * 4];
    577         Arrays.fill(arrayInValue, (byte) 42);
    578         inValue.copyTo(arrayInValue);
    579         byte[] arrayOut = new byte[INPUTSIZE * 4];
    580         Arrays.fill(arrayOut, (byte) 42);
    581         out.copyTo(arrayOut);
    582         StringBuilder message = new StringBuilder();
    583         boolean errorFound = false;
    584         for (int i = 0; i < INPUTSIZE; i++) {
    585             for (int j = 0; j < 4 ; j++) {
    586                 // Extract the inputs.
    587                 ArgumentsUcharUchar args = new ArgumentsUcharUchar();
    588                 args.inValue = arrayInValue[i * 4 + j];
    589                 // Figure out what the outputs should have been.
    590                 CoreMathVerifier.computeClz(args);
    591                 // Validate the outputs.
    592                 boolean valid = true;
    593                 if (args.out != arrayOut[i * 4 + j]) {
    594                     valid = false;
    595                 }
    596                 if (!valid) {
    597                     if (!errorFound) {
    598                         errorFound = true;
    599                         message.append("Input inValue: ");
    600                         appendVariableToMessage(message, args.inValue);
    601                         message.append("\n");
    602                         message.append("Expected output out: ");
    603                         appendVariableToMessage(message, args.out);
    604                         message.append("\n");
    605                         message.append("Actual   output out: ");
    606                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    607                         if (args.out != arrayOut[i * 4 + j]) {
    608                             message.append(" FAIL");
    609                         }
    610                         message.append("\n");
    611                         message.append("Errors at");
    612                     }
    613                     message.append(" [");
    614                     message.append(Integer.toString(i));
    615                     message.append(", ");
    616                     message.append(Integer.toString(j));
    617                     message.append("]");
    618                 }
    619             }
    620         }
    621         assertFalse("Incorrect output for checkClzUchar4Uchar4" +
    622                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    623     }
    624 
    625     public class ArgumentsShortShort {
    626         public short inValue;
    627         public short out;
    628     }
    629 
    630     private void checkClzShortShort() {
    631         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 1, 0x3290aea900d8ad53l, false);
    632         try {
    633             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 1), INPUTSIZE);
    634             script.forEach_testClzShortShort(inValue, out);
    635             verifyResultsClzShortShort(inValue, out, false);
    636             out.destroy();
    637         } catch (Exception e) {
    638             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShortShort: " + e.toString());
    639         }
    640         try {
    641             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 1), INPUTSIZE);
    642             scriptRelaxed.forEach_testClzShortShort(inValue, out);
    643             verifyResultsClzShortShort(inValue, out, true);
    644             out.destroy();
    645         } catch (Exception e) {
    646             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShortShort: " + e.toString());
    647         }
    648         inValue.destroy();
    649     }
    650 
    651     private void verifyResultsClzShortShort(Allocation inValue, Allocation out, boolean relaxed) {
    652         short[] arrayInValue = new short[INPUTSIZE * 1];
    653         Arrays.fill(arrayInValue, (short) 42);
    654         inValue.copyTo(arrayInValue);
    655         short[] arrayOut = new short[INPUTSIZE * 1];
    656         Arrays.fill(arrayOut, (short) 42);
    657         out.copyTo(arrayOut);
    658         StringBuilder message = new StringBuilder();
    659         boolean errorFound = false;
    660         for (int i = 0; i < INPUTSIZE; i++) {
    661             for (int j = 0; j < 1 ; j++) {
    662                 // Extract the inputs.
    663                 ArgumentsShortShort args = new ArgumentsShortShort();
    664                 args.inValue = arrayInValue[i];
    665                 // Figure out what the outputs should have been.
    666                 CoreMathVerifier.computeClz(args);
    667                 // Validate the outputs.
    668                 boolean valid = true;
    669                 if (args.out != arrayOut[i * 1 + j]) {
    670                     valid = false;
    671                 }
    672                 if (!valid) {
    673                     if (!errorFound) {
    674                         errorFound = true;
    675                         message.append("Input inValue: ");
    676                         appendVariableToMessage(message, args.inValue);
    677                         message.append("\n");
    678                         message.append("Expected output out: ");
    679                         appendVariableToMessage(message, args.out);
    680                         message.append("\n");
    681                         message.append("Actual   output out: ");
    682                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
    683                         if (args.out != arrayOut[i * 1 + j]) {
    684                             message.append(" FAIL");
    685                         }
    686                         message.append("\n");
    687                         message.append("Errors at");
    688                     }
    689                     message.append(" [");
    690                     message.append(Integer.toString(i));
    691                     message.append(", ");
    692                     message.append(Integer.toString(j));
    693                     message.append("]");
    694                 }
    695             }
    696         }
    697         assertFalse("Incorrect output for checkClzShortShort" +
    698                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    699     }
    700 
    701     private void checkClzShort2Short2() {
    702         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x81f69d4442dd6ebfl, false);
    703         try {
    704             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE);
    705             script.forEach_testClzShort2Short2(inValue, out);
    706             verifyResultsClzShort2Short2(inValue, out, false);
    707             out.destroy();
    708         } catch (Exception e) {
    709             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort2Short2: " + e.toString());
    710         }
    711         try {
    712             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 2), INPUTSIZE);
    713             scriptRelaxed.forEach_testClzShort2Short2(inValue, out);
    714             verifyResultsClzShort2Short2(inValue, out, true);
    715             out.destroy();
    716         } catch (Exception e) {
    717             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort2Short2: " + e.toString());
    718         }
    719         inValue.destroy();
    720     }
    721 
    722     private void verifyResultsClzShort2Short2(Allocation inValue, Allocation out, boolean relaxed) {
    723         short[] arrayInValue = new short[INPUTSIZE * 2];
    724         Arrays.fill(arrayInValue, (short) 42);
    725         inValue.copyTo(arrayInValue);
    726         short[] arrayOut = new short[INPUTSIZE * 2];
    727         Arrays.fill(arrayOut, (short) 42);
    728         out.copyTo(arrayOut);
    729         StringBuilder message = new StringBuilder();
    730         boolean errorFound = false;
    731         for (int i = 0; i < INPUTSIZE; i++) {
    732             for (int j = 0; j < 2 ; j++) {
    733                 // Extract the inputs.
    734                 ArgumentsShortShort args = new ArgumentsShortShort();
    735                 args.inValue = arrayInValue[i * 2 + j];
    736                 // Figure out what the outputs should have been.
    737                 CoreMathVerifier.computeClz(args);
    738                 // Validate the outputs.
    739                 boolean valid = true;
    740                 if (args.out != arrayOut[i * 2 + j]) {
    741                     valid = false;
    742                 }
    743                 if (!valid) {
    744                     if (!errorFound) {
    745                         errorFound = true;
    746                         message.append("Input inValue: ");
    747                         appendVariableToMessage(message, args.inValue);
    748                         message.append("\n");
    749                         message.append("Expected output out: ");
    750                         appendVariableToMessage(message, args.out);
    751                         message.append("\n");
    752                         message.append("Actual   output out: ");
    753                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
    754                         if (args.out != arrayOut[i * 2 + j]) {
    755                             message.append(" FAIL");
    756                         }
    757                         message.append("\n");
    758                         message.append("Errors at");
    759                     }
    760                     message.append(" [");
    761                     message.append(Integer.toString(i));
    762                     message.append(", ");
    763                     message.append(Integer.toString(j));
    764                     message.append("]");
    765                 }
    766             }
    767         }
    768         assertFalse("Incorrect output for checkClzShort2Short2" +
    769                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    770     }
    771 
    772     private void checkClzShort3Short3() {
    773         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 3, 0xa7ab12cb8c1b943dl, false);
    774         try {
    775             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE);
    776             script.forEach_testClzShort3Short3(inValue, out);
    777             verifyResultsClzShort3Short3(inValue, out, false);
    778             out.destroy();
    779         } catch (Exception e) {
    780             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort3Short3: " + e.toString());
    781         }
    782         try {
    783             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 3), INPUTSIZE);
    784             scriptRelaxed.forEach_testClzShort3Short3(inValue, out);
    785             verifyResultsClzShort3Short3(inValue, out, true);
    786             out.destroy();
    787         } catch (Exception e) {
    788             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort3Short3: " + e.toString());
    789         }
    790         inValue.destroy();
    791     }
    792 
    793     private void verifyResultsClzShort3Short3(Allocation inValue, Allocation out, boolean relaxed) {
    794         short[] arrayInValue = new short[INPUTSIZE * 4];
    795         Arrays.fill(arrayInValue, (short) 42);
    796         inValue.copyTo(arrayInValue);
    797         short[] arrayOut = new short[INPUTSIZE * 4];
    798         Arrays.fill(arrayOut, (short) 42);
    799         out.copyTo(arrayOut);
    800         StringBuilder message = new StringBuilder();
    801         boolean errorFound = false;
    802         for (int i = 0; i < INPUTSIZE; i++) {
    803             for (int j = 0; j < 3 ; j++) {
    804                 // Extract the inputs.
    805                 ArgumentsShortShort args = new ArgumentsShortShort();
    806                 args.inValue = arrayInValue[i * 4 + j];
    807                 // Figure out what the outputs should have been.
    808                 CoreMathVerifier.computeClz(args);
    809                 // Validate the outputs.
    810                 boolean valid = true;
    811                 if (args.out != arrayOut[i * 4 + j]) {
    812                     valid = false;
    813                 }
    814                 if (!valid) {
    815                     if (!errorFound) {
    816                         errorFound = true;
    817                         message.append("Input inValue: ");
    818                         appendVariableToMessage(message, args.inValue);
    819                         message.append("\n");
    820                         message.append("Expected output out: ");
    821                         appendVariableToMessage(message, args.out);
    822                         message.append("\n");
    823                         message.append("Actual   output out: ");
    824                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    825                         if (args.out != arrayOut[i * 4 + j]) {
    826                             message.append(" FAIL");
    827                         }
    828                         message.append("\n");
    829                         message.append("Errors at");
    830                     }
    831                     message.append(" [");
    832                     message.append(Integer.toString(i));
    833                     message.append(", ");
    834                     message.append(Integer.toString(j));
    835                     message.append("]");
    836                 }
    837             }
    838         }
    839         assertFalse("Incorrect output for checkClzShort3Short3" +
    840                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    841     }
    842 
    843     private void checkClzShort4Short4() {
    844         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 4, 0xcd5f8852d559b9bbl, false);
    845         try {
    846             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE);
    847             script.forEach_testClzShort4Short4(inValue, out);
    848             verifyResultsClzShort4Short4(inValue, out, false);
    849             out.destroy();
    850         } catch (Exception e) {
    851             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort4Short4: " + e.toString());
    852         }
    853         try {
    854             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_16, 4), INPUTSIZE);
    855             scriptRelaxed.forEach_testClzShort4Short4(inValue, out);
    856             verifyResultsClzShort4Short4(inValue, out, true);
    857             out.destroy();
    858         } catch (Exception e) {
    859             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzShort4Short4: " + e.toString());
    860         }
    861         inValue.destroy();
    862     }
    863 
    864     private void verifyResultsClzShort4Short4(Allocation inValue, Allocation out, boolean relaxed) {
    865         short[] arrayInValue = new short[INPUTSIZE * 4];
    866         Arrays.fill(arrayInValue, (short) 42);
    867         inValue.copyTo(arrayInValue);
    868         short[] arrayOut = new short[INPUTSIZE * 4];
    869         Arrays.fill(arrayOut, (short) 42);
    870         out.copyTo(arrayOut);
    871         StringBuilder message = new StringBuilder();
    872         boolean errorFound = false;
    873         for (int i = 0; i < INPUTSIZE; i++) {
    874             for (int j = 0; j < 4 ; j++) {
    875                 // Extract the inputs.
    876                 ArgumentsShortShort args = new ArgumentsShortShort();
    877                 args.inValue = arrayInValue[i * 4 + j];
    878                 // Figure out what the outputs should have been.
    879                 CoreMathVerifier.computeClz(args);
    880                 // Validate the outputs.
    881                 boolean valid = true;
    882                 if (args.out != arrayOut[i * 4 + j]) {
    883                     valid = false;
    884                 }
    885                 if (!valid) {
    886                     if (!errorFound) {
    887                         errorFound = true;
    888                         message.append("Input inValue: ");
    889                         appendVariableToMessage(message, args.inValue);
    890                         message.append("\n");
    891                         message.append("Expected output out: ");
    892                         appendVariableToMessage(message, args.out);
    893                         message.append("\n");
    894                         message.append("Actual   output out: ");
    895                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
    896                         if (args.out != arrayOut[i * 4 + j]) {
    897                             message.append(" FAIL");
    898                         }
    899                         message.append("\n");
    900                         message.append("Errors at");
    901                     }
    902                     message.append(" [");
    903                     message.append(Integer.toString(i));
    904                     message.append(", ");
    905                     message.append(Integer.toString(j));
    906                     message.append("]");
    907                 }
    908             }
    909         }
    910         assertFalse("Incorrect output for checkClzShort4Short4" +
    911                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    912     }
    913 
    914     public class ArgumentsUshortUshort {
    915         public short inValue;
    916         public short out;
    917     }
    918 
    919     private void checkClzUshortUshort() {
    920         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_16, 1, 0x97bdeee92c0103a5l, false);
    921         try {
    922             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 1), INPUTSIZE);
    923             script.forEach_testClzUshortUshort(inValue, out);
    924             verifyResultsClzUshortUshort(inValue, out, false);
    925             out.destroy();
    926         } catch (Exception e) {
    927             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshortUshort: " + e.toString());
    928         }
    929         try {
    930             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 1), INPUTSIZE);
    931             scriptRelaxed.forEach_testClzUshortUshort(inValue, out);
    932             verifyResultsClzUshortUshort(inValue, out, true);
    933             out.destroy();
    934         } catch (Exception e) {
    935             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshortUshort: " + e.toString());
    936         }
    937         inValue.destroy();
    938     }
    939 
    940     private void verifyResultsClzUshortUshort(Allocation inValue, Allocation out, boolean relaxed) {
    941         short[] arrayInValue = new short[INPUTSIZE * 1];
    942         Arrays.fill(arrayInValue, (short) 42);
    943         inValue.copyTo(arrayInValue);
    944         short[] arrayOut = new short[INPUTSIZE * 1];
    945         Arrays.fill(arrayOut, (short) 42);
    946         out.copyTo(arrayOut);
    947         StringBuilder message = new StringBuilder();
    948         boolean errorFound = false;
    949         for (int i = 0; i < INPUTSIZE; i++) {
    950             for (int j = 0; j < 1 ; j++) {
    951                 // Extract the inputs.
    952                 ArgumentsUshortUshort args = new ArgumentsUshortUshort();
    953                 args.inValue = arrayInValue[i];
    954                 // Figure out what the outputs should have been.
    955                 CoreMathVerifier.computeClz(args);
    956                 // Validate the outputs.
    957                 boolean valid = true;
    958                 if (args.out != arrayOut[i * 1 + j]) {
    959                     valid = false;
    960                 }
    961                 if (!valid) {
    962                     if (!errorFound) {
    963                         errorFound = true;
    964                         message.append("Input inValue: ");
    965                         appendVariableToMessage(message, args.inValue);
    966                         message.append("\n");
    967                         message.append("Expected output out: ");
    968                         appendVariableToMessage(message, args.out);
    969                         message.append("\n");
    970                         message.append("Actual   output out: ");
    971                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
    972                         if (args.out != arrayOut[i * 1 + j]) {
    973                             message.append(" FAIL");
    974                         }
    975                         message.append("\n");
    976                         message.append("Errors at");
    977                     }
    978                     message.append(" [");
    979                     message.append(Integer.toString(i));
    980                     message.append(", ");
    981                     message.append(Integer.toString(j));
    982                     message.append("]");
    983                 }
    984             }
    985         }
    986         assertFalse("Incorrect output for checkClzUshortUshort" +
    987                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    988     }
    989 
    990     private void checkClzUshort2Ushort2() {
    991         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_16, 2, 0x5ea7a024b2913837l, false);
    992         try {
    993             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE);
    994             script.forEach_testClzUshort2Ushort2(inValue, out);
    995             verifyResultsClzUshort2Ushort2(inValue, out, false);
    996             out.destroy();
    997         } catch (Exception e) {
    998             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort2Ushort2: " + e.toString());
    999         }
   1000         try {
   1001             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE);
   1002             scriptRelaxed.forEach_testClzUshort2Ushort2(inValue, out);
   1003             verifyResultsClzUshort2Ushort2(inValue, out, true);
   1004             out.destroy();
   1005         } catch (Exception e) {
   1006             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort2Ushort2: " + e.toString());
   1007         }
   1008         inValue.destroy();
   1009     }
   1010 
   1011     private void verifyResultsClzUshort2Ushort2(Allocation inValue, Allocation out, boolean relaxed) {
   1012         short[] arrayInValue = new short[INPUTSIZE * 2];
   1013         Arrays.fill(arrayInValue, (short) 42);
   1014         inValue.copyTo(arrayInValue);
   1015         short[] arrayOut = new short[INPUTSIZE * 2];
   1016         Arrays.fill(arrayOut, (short) 42);
   1017         out.copyTo(arrayOut);
   1018         StringBuilder message = new StringBuilder();
   1019         boolean errorFound = false;
   1020         for (int i = 0; i < INPUTSIZE; i++) {
   1021             for (int j = 0; j < 2 ; j++) {
   1022                 // Extract the inputs.
   1023                 ArgumentsUshortUshort args = new ArgumentsUshortUshort();
   1024                 args.inValue = arrayInValue[i * 2 + j];
   1025                 // Figure out what the outputs should have been.
   1026                 CoreMathVerifier.computeClz(args);
   1027                 // Validate the outputs.
   1028                 boolean valid = true;
   1029                 if (args.out != arrayOut[i * 2 + j]) {
   1030                     valid = false;
   1031                 }
   1032                 if (!valid) {
   1033                     if (!errorFound) {
   1034                         errorFound = true;
   1035                         message.append("Input inValue: ");
   1036                         appendVariableToMessage(message, args.inValue);
   1037                         message.append("\n");
   1038                         message.append("Expected output out: ");
   1039                         appendVariableToMessage(message, args.out);
   1040                         message.append("\n");
   1041                         message.append("Actual   output out: ");
   1042                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
   1043                         if (args.out != arrayOut[i * 2 + j]) {
   1044                             message.append(" FAIL");
   1045                         }
   1046                         message.append("\n");
   1047                         message.append("Errors at");
   1048                     }
   1049                     message.append(" [");
   1050                     message.append(Integer.toString(i));
   1051                     message.append(", ");
   1052                     message.append(Integer.toString(j));
   1053                     message.append("]");
   1054                 }
   1055             }
   1056         }
   1057         assertFalse("Incorrect output for checkClzUshort2Ushort2" +
   1058                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1059     }
   1060 
   1061     private void checkClzUshort3Ushort3() {
   1062         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_16, 3, 0xb3f7537beaa1cfa3l, false);
   1063         try {
   1064             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE);
   1065             script.forEach_testClzUshort3Ushort3(inValue, out);
   1066             verifyResultsClzUshort3Ushort3(inValue, out, false);
   1067             out.destroy();
   1068         } catch (Exception e) {
   1069             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort3Ushort3: " + e.toString());
   1070         }
   1071         try {
   1072             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE);
   1073             scriptRelaxed.forEach_testClzUshort3Ushort3(inValue, out);
   1074             verifyResultsClzUshort3Ushort3(inValue, out, true);
   1075             out.destroy();
   1076         } catch (Exception e) {
   1077             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort3Ushort3: " + e.toString());
   1078         }
   1079         inValue.destroy();
   1080     }
   1081 
   1082     private void verifyResultsClzUshort3Ushort3(Allocation inValue, Allocation out, boolean relaxed) {
   1083         short[] arrayInValue = new short[INPUTSIZE * 4];
   1084         Arrays.fill(arrayInValue, (short) 42);
   1085         inValue.copyTo(arrayInValue);
   1086         short[] arrayOut = new short[INPUTSIZE * 4];
   1087         Arrays.fill(arrayOut, (short) 42);
   1088         out.copyTo(arrayOut);
   1089         StringBuilder message = new StringBuilder();
   1090         boolean errorFound = false;
   1091         for (int i = 0; i < INPUTSIZE; i++) {
   1092             for (int j = 0; j < 3 ; j++) {
   1093                 // Extract the inputs.
   1094                 ArgumentsUshortUshort args = new ArgumentsUshortUshort();
   1095                 args.inValue = arrayInValue[i * 4 + j];
   1096                 // Figure out what the outputs should have been.
   1097                 CoreMathVerifier.computeClz(args);
   1098                 // Validate the outputs.
   1099                 boolean valid = true;
   1100                 if (args.out != arrayOut[i * 4 + j]) {
   1101                     valid = false;
   1102                 }
   1103                 if (!valid) {
   1104                     if (!errorFound) {
   1105                         errorFound = true;
   1106                         message.append("Input inValue: ");
   1107                         appendVariableToMessage(message, args.inValue);
   1108                         message.append("\n");
   1109                         message.append("Expected output out: ");
   1110                         appendVariableToMessage(message, args.out);
   1111                         message.append("\n");
   1112                         message.append("Actual   output out: ");
   1113                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1114                         if (args.out != arrayOut[i * 4 + j]) {
   1115                             message.append(" FAIL");
   1116                         }
   1117                         message.append("\n");
   1118                         message.append("Errors at");
   1119                     }
   1120                     message.append(" [");
   1121                     message.append(Integer.toString(i));
   1122                     message.append(", ");
   1123                     message.append(Integer.toString(j));
   1124                     message.append("]");
   1125                 }
   1126             }
   1127         }
   1128         assertFalse("Incorrect output for checkClzUshort3Ushort3" +
   1129                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1130     }
   1131 
   1132     private void checkClzUshort4Ushort4() {
   1133         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_16, 4, 0x94706d322b2670fl, false);
   1134         try {
   1135             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE);
   1136             script.forEach_testClzUshort4Ushort4(inValue, out);
   1137             verifyResultsClzUshort4Ushort4(inValue, out, false);
   1138             out.destroy();
   1139         } catch (Exception e) {
   1140             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort4Ushort4: " + e.toString());
   1141         }
   1142         try {
   1143             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE);
   1144             scriptRelaxed.forEach_testClzUshort4Ushort4(inValue, out);
   1145             verifyResultsClzUshort4Ushort4(inValue, out, true);
   1146             out.destroy();
   1147         } catch (Exception e) {
   1148             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUshort4Ushort4: " + e.toString());
   1149         }
   1150         inValue.destroy();
   1151     }
   1152 
   1153     private void verifyResultsClzUshort4Ushort4(Allocation inValue, Allocation out, boolean relaxed) {
   1154         short[] arrayInValue = new short[INPUTSIZE * 4];
   1155         Arrays.fill(arrayInValue, (short) 42);
   1156         inValue.copyTo(arrayInValue);
   1157         short[] arrayOut = new short[INPUTSIZE * 4];
   1158         Arrays.fill(arrayOut, (short) 42);
   1159         out.copyTo(arrayOut);
   1160         StringBuilder message = new StringBuilder();
   1161         boolean errorFound = false;
   1162         for (int i = 0; i < INPUTSIZE; i++) {
   1163             for (int j = 0; j < 4 ; j++) {
   1164                 // Extract the inputs.
   1165                 ArgumentsUshortUshort args = new ArgumentsUshortUshort();
   1166                 args.inValue = arrayInValue[i * 4 + j];
   1167                 // Figure out what the outputs should have been.
   1168                 CoreMathVerifier.computeClz(args);
   1169                 // Validate the outputs.
   1170                 boolean valid = true;
   1171                 if (args.out != arrayOut[i * 4 + j]) {
   1172                     valid = false;
   1173                 }
   1174                 if (!valid) {
   1175                     if (!errorFound) {
   1176                         errorFound = true;
   1177                         message.append("Input inValue: ");
   1178                         appendVariableToMessage(message, args.inValue);
   1179                         message.append("\n");
   1180                         message.append("Expected output out: ");
   1181                         appendVariableToMessage(message, args.out);
   1182                         message.append("\n");
   1183                         message.append("Actual   output out: ");
   1184                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1185                         if (args.out != arrayOut[i * 4 + j]) {
   1186                             message.append(" FAIL");
   1187                         }
   1188                         message.append("\n");
   1189                         message.append("Errors at");
   1190                     }
   1191                     message.append(" [");
   1192                     message.append(Integer.toString(i));
   1193                     message.append(", ");
   1194                     message.append(Integer.toString(j));
   1195                     message.append("]");
   1196                 }
   1197             }
   1198         }
   1199         assertFalse("Incorrect output for checkClzUshort4Ushort4" +
   1200                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1201     }
   1202 
   1203     public class ArgumentsIntInt {
   1204         public int inValue;
   1205         public int out;
   1206     }
   1207 
   1208     private void checkClzIntInt() {
   1209         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 1, 0xb13809da3142eb97l, false);
   1210         try {
   1211             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 1), INPUTSIZE);
   1212             script.forEach_testClzIntInt(inValue, out);
   1213             verifyResultsClzIntInt(inValue, out, false);
   1214             out.destroy();
   1215         } catch (Exception e) {
   1216             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzIntInt: " + e.toString());
   1217         }
   1218         try {
   1219             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 1), INPUTSIZE);
   1220             scriptRelaxed.forEach_testClzIntInt(inValue, out);
   1221             verifyResultsClzIntInt(inValue, out, true);
   1222             out.destroy();
   1223         } catch (Exception e) {
   1224             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzIntInt: " + e.toString());
   1225         }
   1226         inValue.destroy();
   1227     }
   1228 
   1229     private void verifyResultsClzIntInt(Allocation inValue, Allocation out, boolean relaxed) {
   1230         int[] arrayInValue = new int[INPUTSIZE * 1];
   1231         Arrays.fill(arrayInValue, (int) 42);
   1232         inValue.copyTo(arrayInValue);
   1233         int[] arrayOut = new int[INPUTSIZE * 1];
   1234         Arrays.fill(arrayOut, (int) 42);
   1235         out.copyTo(arrayOut);
   1236         StringBuilder message = new StringBuilder();
   1237         boolean errorFound = false;
   1238         for (int i = 0; i < INPUTSIZE; i++) {
   1239             for (int j = 0; j < 1 ; j++) {
   1240                 // Extract the inputs.
   1241                 ArgumentsIntInt args = new ArgumentsIntInt();
   1242                 args.inValue = arrayInValue[i];
   1243                 // Figure out what the outputs should have been.
   1244                 CoreMathVerifier.computeClz(args);
   1245                 // Validate the outputs.
   1246                 boolean valid = true;
   1247                 if (args.out != arrayOut[i * 1 + j]) {
   1248                     valid = false;
   1249                 }
   1250                 if (!valid) {
   1251                     if (!errorFound) {
   1252                         errorFound = true;
   1253                         message.append("Input inValue: ");
   1254                         appendVariableToMessage(message, args.inValue);
   1255                         message.append("\n");
   1256                         message.append("Expected output out: ");
   1257                         appendVariableToMessage(message, args.out);
   1258                         message.append("\n");
   1259                         message.append("Actual   output out: ");
   1260                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
   1261                         if (args.out != arrayOut[i * 1 + j]) {
   1262                             message.append(" FAIL");
   1263                         }
   1264                         message.append("\n");
   1265                         message.append("Errors at");
   1266                     }
   1267                     message.append(" [");
   1268                     message.append(Integer.toString(i));
   1269                     message.append(", ");
   1270                     message.append(Integer.toString(j));
   1271                     message.append("]");
   1272                 }
   1273             }
   1274         }
   1275         assertFalse("Incorrect output for checkClzIntInt" +
   1276                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1277     }
   1278 
   1279     private void checkClzInt2Int2() {
   1280         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 2, 0xc9fd2c1a27fe3ad5l, false);
   1281         try {
   1282             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE);
   1283             script.forEach_testClzInt2Int2(inValue, out);
   1284             verifyResultsClzInt2Int2(inValue, out, false);
   1285             out.destroy();
   1286         } catch (Exception e) {
   1287             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt2Int2: " + e.toString());
   1288         }
   1289         try {
   1290             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 2), INPUTSIZE);
   1291             scriptRelaxed.forEach_testClzInt2Int2(inValue, out);
   1292             verifyResultsClzInt2Int2(inValue, out, true);
   1293             out.destroy();
   1294         } catch (Exception e) {
   1295             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt2Int2: " + e.toString());
   1296         }
   1297         inValue.destroy();
   1298     }
   1299 
   1300     private void verifyResultsClzInt2Int2(Allocation inValue, Allocation out, boolean relaxed) {
   1301         int[] arrayInValue = new int[INPUTSIZE * 2];
   1302         Arrays.fill(arrayInValue, (int) 42);
   1303         inValue.copyTo(arrayInValue);
   1304         int[] arrayOut = new int[INPUTSIZE * 2];
   1305         Arrays.fill(arrayOut, (int) 42);
   1306         out.copyTo(arrayOut);
   1307         StringBuilder message = new StringBuilder();
   1308         boolean errorFound = false;
   1309         for (int i = 0; i < INPUTSIZE; i++) {
   1310             for (int j = 0; j < 2 ; j++) {
   1311                 // Extract the inputs.
   1312                 ArgumentsIntInt args = new ArgumentsIntInt();
   1313                 args.inValue = arrayInValue[i * 2 + j];
   1314                 // Figure out what the outputs should have been.
   1315                 CoreMathVerifier.computeClz(args);
   1316                 // Validate the outputs.
   1317                 boolean valid = true;
   1318                 if (args.out != arrayOut[i * 2 + j]) {
   1319                     valid = false;
   1320                 }
   1321                 if (!valid) {
   1322                     if (!errorFound) {
   1323                         errorFound = true;
   1324                         message.append("Input inValue: ");
   1325                         appendVariableToMessage(message, args.inValue);
   1326                         message.append("\n");
   1327                         message.append("Expected output out: ");
   1328                         appendVariableToMessage(message, args.out);
   1329                         message.append("\n");
   1330                         message.append("Actual   output out: ");
   1331                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
   1332                         if (args.out != arrayOut[i * 2 + j]) {
   1333                             message.append(" FAIL");
   1334                         }
   1335                         message.append("\n");
   1336                         message.append("Errors at");
   1337                     }
   1338                     message.append(" [");
   1339                     message.append(Integer.toString(i));
   1340                     message.append(", ");
   1341                     message.append(Integer.toString(j));
   1342                     message.append("]");
   1343                 }
   1344             }
   1345         }
   1346         assertFalse("Incorrect output for checkClzInt2Int2" +
   1347                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1348     }
   1349 
   1350     private void checkClzInt3Int3() {
   1351         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 3, 0xd6e2b014f2d24c2bl, false);
   1352         try {
   1353             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE);
   1354             script.forEach_testClzInt3Int3(inValue, out);
   1355             verifyResultsClzInt3Int3(inValue, out, false);
   1356             out.destroy();
   1357         } catch (Exception e) {
   1358             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt3Int3: " + e.toString());
   1359         }
   1360         try {
   1361             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 3), INPUTSIZE);
   1362             scriptRelaxed.forEach_testClzInt3Int3(inValue, out);
   1363             verifyResultsClzInt3Int3(inValue, out, true);
   1364             out.destroy();
   1365         } catch (Exception e) {
   1366             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt3Int3: " + e.toString());
   1367         }
   1368         inValue.destroy();
   1369     }
   1370 
   1371     private void verifyResultsClzInt3Int3(Allocation inValue, Allocation out, boolean relaxed) {
   1372         int[] arrayInValue = new int[INPUTSIZE * 4];
   1373         Arrays.fill(arrayInValue, (int) 42);
   1374         inValue.copyTo(arrayInValue);
   1375         int[] arrayOut = new int[INPUTSIZE * 4];
   1376         Arrays.fill(arrayOut, (int) 42);
   1377         out.copyTo(arrayOut);
   1378         StringBuilder message = new StringBuilder();
   1379         boolean errorFound = false;
   1380         for (int i = 0; i < INPUTSIZE; i++) {
   1381             for (int j = 0; j < 3 ; j++) {
   1382                 // Extract the inputs.
   1383                 ArgumentsIntInt args = new ArgumentsIntInt();
   1384                 args.inValue = arrayInValue[i * 4 + j];
   1385                 // Figure out what the outputs should have been.
   1386                 CoreMathVerifier.computeClz(args);
   1387                 // Validate the outputs.
   1388                 boolean valid = true;
   1389                 if (args.out != arrayOut[i * 4 + j]) {
   1390                     valid = false;
   1391                 }
   1392                 if (!valid) {
   1393                     if (!errorFound) {
   1394                         errorFound = true;
   1395                         message.append("Input inValue: ");
   1396                         appendVariableToMessage(message, args.inValue);
   1397                         message.append("\n");
   1398                         message.append("Expected output out: ");
   1399                         appendVariableToMessage(message, args.out);
   1400                         message.append("\n");
   1401                         message.append("Actual   output out: ");
   1402                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1403                         if (args.out != arrayOut[i * 4 + j]) {
   1404                             message.append(" FAIL");
   1405                         }
   1406                         message.append("\n");
   1407                         message.append("Errors at");
   1408                     }
   1409                     message.append(" [");
   1410                     message.append(Integer.toString(i));
   1411                     message.append(", ");
   1412                     message.append(Integer.toString(j));
   1413                     message.append("]");
   1414                 }
   1415             }
   1416         }
   1417         assertFalse("Incorrect output for checkClzInt3Int3" +
   1418                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1419     }
   1420 
   1421     private void checkClzInt4Int4() {
   1422         Allocation inValue = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 4, 0xe3c8340fbda65d81l, false);
   1423         try {
   1424             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE);
   1425             script.forEach_testClzInt4Int4(inValue, out);
   1426             verifyResultsClzInt4Int4(inValue, out, false);
   1427             out.destroy();
   1428         } catch (Exception e) {
   1429             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt4Int4: " + e.toString());
   1430         }
   1431         try {
   1432             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.SIGNED_32, 4), INPUTSIZE);
   1433             scriptRelaxed.forEach_testClzInt4Int4(inValue, out);
   1434             verifyResultsClzInt4Int4(inValue, out, true);
   1435             out.destroy();
   1436         } catch (Exception e) {
   1437             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzInt4Int4: " + e.toString());
   1438         }
   1439         inValue.destroy();
   1440     }
   1441 
   1442     private void verifyResultsClzInt4Int4(Allocation inValue, Allocation out, boolean relaxed) {
   1443         int[] arrayInValue = new int[INPUTSIZE * 4];
   1444         Arrays.fill(arrayInValue, (int) 42);
   1445         inValue.copyTo(arrayInValue);
   1446         int[] arrayOut = new int[INPUTSIZE * 4];
   1447         Arrays.fill(arrayOut, (int) 42);
   1448         out.copyTo(arrayOut);
   1449         StringBuilder message = new StringBuilder();
   1450         boolean errorFound = false;
   1451         for (int i = 0; i < INPUTSIZE; i++) {
   1452             for (int j = 0; j < 4 ; j++) {
   1453                 // Extract the inputs.
   1454                 ArgumentsIntInt args = new ArgumentsIntInt();
   1455                 args.inValue = arrayInValue[i * 4 + j];
   1456                 // Figure out what the outputs should have been.
   1457                 CoreMathVerifier.computeClz(args);
   1458                 // Validate the outputs.
   1459                 boolean valid = true;
   1460                 if (args.out != arrayOut[i * 4 + j]) {
   1461                     valid = false;
   1462                 }
   1463                 if (!valid) {
   1464                     if (!errorFound) {
   1465                         errorFound = true;
   1466                         message.append("Input inValue: ");
   1467                         appendVariableToMessage(message, args.inValue);
   1468                         message.append("\n");
   1469                         message.append("Expected output out: ");
   1470                         appendVariableToMessage(message, args.out);
   1471                         message.append("\n");
   1472                         message.append("Actual   output out: ");
   1473                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1474                         if (args.out != arrayOut[i * 4 + j]) {
   1475                             message.append(" FAIL");
   1476                         }
   1477                         message.append("\n");
   1478                         message.append("Errors at");
   1479                     }
   1480                     message.append(" [");
   1481                     message.append(Integer.toString(i));
   1482                     message.append(", ");
   1483                     message.append(Integer.toString(j));
   1484                     message.append("]");
   1485                 }
   1486             }
   1487         }
   1488         assertFalse("Incorrect output for checkClzInt4Int4" +
   1489                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1490     }
   1491 
   1492     public class ArgumentsUintUint {
   1493         public int inValue;
   1494         public int out;
   1495     }
   1496 
   1497     private void checkClzUintUint() {
   1498         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_32, 1, 0x64a0b78a75ac502fl, false);
   1499         try {
   1500             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 1), INPUTSIZE);
   1501             script.forEach_testClzUintUint(inValue, out);
   1502             verifyResultsClzUintUint(inValue, out, false);
   1503             out.destroy();
   1504         } catch (Exception e) {
   1505             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUintUint: " + e.toString());
   1506         }
   1507         try {
   1508             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 1), INPUTSIZE);
   1509             scriptRelaxed.forEach_testClzUintUint(inValue, out);
   1510             verifyResultsClzUintUint(inValue, out, true);
   1511             out.destroy();
   1512         } catch (Exception e) {
   1513             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUintUint: " + e.toString());
   1514         }
   1515         inValue.destroy();
   1516     }
   1517 
   1518     private void verifyResultsClzUintUint(Allocation inValue, Allocation out, boolean relaxed) {
   1519         int[] arrayInValue = new int[INPUTSIZE * 1];
   1520         Arrays.fill(arrayInValue, (int) 42);
   1521         inValue.copyTo(arrayInValue);
   1522         int[] arrayOut = new int[INPUTSIZE * 1];
   1523         Arrays.fill(arrayOut, (int) 42);
   1524         out.copyTo(arrayOut);
   1525         StringBuilder message = new StringBuilder();
   1526         boolean errorFound = false;
   1527         for (int i = 0; i < INPUTSIZE; i++) {
   1528             for (int j = 0; j < 1 ; j++) {
   1529                 // Extract the inputs.
   1530                 ArgumentsUintUint args = new ArgumentsUintUint();
   1531                 args.inValue = arrayInValue[i];
   1532                 // Figure out what the outputs should have been.
   1533                 CoreMathVerifier.computeClz(args);
   1534                 // Validate the outputs.
   1535                 boolean valid = true;
   1536                 if (args.out != arrayOut[i * 1 + j]) {
   1537                     valid = false;
   1538                 }
   1539                 if (!valid) {
   1540                     if (!errorFound) {
   1541                         errorFound = true;
   1542                         message.append("Input inValue: ");
   1543                         appendVariableToMessage(message, args.inValue);
   1544                         message.append("\n");
   1545                         message.append("Expected output out: ");
   1546                         appendVariableToMessage(message, args.out);
   1547                         message.append("\n");
   1548                         message.append("Actual   output out: ");
   1549                         appendVariableToMessage(message, arrayOut[i * 1 + j]);
   1550                         if (args.out != arrayOut[i * 1 + j]) {
   1551                             message.append(" FAIL");
   1552                         }
   1553                         message.append("\n");
   1554                         message.append("Errors at");
   1555                     }
   1556                     message.append(" [");
   1557                     message.append(Integer.toString(i));
   1558                     message.append(", ");
   1559                     message.append(Integer.toString(j));
   1560                     message.append("]");
   1561                 }
   1562             }
   1563         }
   1564         assertFalse("Incorrect output for checkClzUintUint" +
   1565                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1566     }
   1567 
   1568     private void checkClzUint2Uint2() {
   1569         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_32, 2, 0xf809b50329344f93l, false);
   1570         try {
   1571             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE);
   1572             script.forEach_testClzUint2Uint2(inValue, out);
   1573             verifyResultsClzUint2Uint2(inValue, out, false);
   1574             out.destroy();
   1575         } catch (Exception e) {
   1576             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint2Uint2: " + e.toString());
   1577         }
   1578         try {
   1579             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE);
   1580             scriptRelaxed.forEach_testClzUint2Uint2(inValue, out);
   1581             verifyResultsClzUint2Uint2(inValue, out, true);
   1582             out.destroy();
   1583         } catch (Exception e) {
   1584             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint2Uint2: " + e.toString());
   1585         }
   1586         inValue.destroy();
   1587     }
   1588 
   1589     private void verifyResultsClzUint2Uint2(Allocation inValue, Allocation out, boolean relaxed) {
   1590         int[] arrayInValue = new int[INPUTSIZE * 2];
   1591         Arrays.fill(arrayInValue, (int) 42);
   1592         inValue.copyTo(arrayInValue);
   1593         int[] arrayOut = new int[INPUTSIZE * 2];
   1594         Arrays.fill(arrayOut, (int) 42);
   1595         out.copyTo(arrayOut);
   1596         StringBuilder message = new StringBuilder();
   1597         boolean errorFound = false;
   1598         for (int i = 0; i < INPUTSIZE; i++) {
   1599             for (int j = 0; j < 2 ; j++) {
   1600                 // Extract the inputs.
   1601                 ArgumentsUintUint args = new ArgumentsUintUint();
   1602                 args.inValue = arrayInValue[i * 2 + j];
   1603                 // Figure out what the outputs should have been.
   1604                 CoreMathVerifier.computeClz(args);
   1605                 // Validate the outputs.
   1606                 boolean valid = true;
   1607                 if (args.out != arrayOut[i * 2 + j]) {
   1608                     valid = false;
   1609                 }
   1610                 if (!valid) {
   1611                     if (!errorFound) {
   1612                         errorFound = true;
   1613                         message.append("Input inValue: ");
   1614                         appendVariableToMessage(message, args.inValue);
   1615                         message.append("\n");
   1616                         message.append("Expected output out: ");
   1617                         appendVariableToMessage(message, args.out);
   1618                         message.append("\n");
   1619                         message.append("Actual   output out: ");
   1620                         appendVariableToMessage(message, arrayOut[i * 2 + j]);
   1621                         if (args.out != arrayOut[i * 2 + j]) {
   1622                             message.append(" FAIL");
   1623                         }
   1624                         message.append("\n");
   1625                         message.append("Errors at");
   1626                     }
   1627                     message.append(" [");
   1628                     message.append(Integer.toString(i));
   1629                     message.append(", ");
   1630                     message.append(Integer.toString(j));
   1631                     message.append("]");
   1632                 }
   1633             }
   1634         }
   1635         assertFalse("Incorrect output for checkClzUint2Uint2" +
   1636                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1637     }
   1638 
   1639     private void checkClzUint3Uint3() {
   1640         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_32, 3, 0x2296d5c125738447l, false);
   1641         try {
   1642             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE);
   1643             script.forEach_testClzUint3Uint3(inValue, out);
   1644             verifyResultsClzUint3Uint3(inValue, out, false);
   1645             out.destroy();
   1646         } catch (Exception e) {
   1647             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint3Uint3: " + e.toString());
   1648         }
   1649         try {
   1650             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE);
   1651             scriptRelaxed.forEach_testClzUint3Uint3(inValue, out);
   1652             verifyResultsClzUint3Uint3(inValue, out, true);
   1653             out.destroy();
   1654         } catch (Exception e) {
   1655             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint3Uint3: " + e.toString());
   1656         }
   1657         inValue.destroy();
   1658     }
   1659 
   1660     private void verifyResultsClzUint3Uint3(Allocation inValue, Allocation out, boolean relaxed) {
   1661         int[] arrayInValue = new int[INPUTSIZE * 4];
   1662         Arrays.fill(arrayInValue, (int) 42);
   1663         inValue.copyTo(arrayInValue);
   1664         int[] arrayOut = new int[INPUTSIZE * 4];
   1665         Arrays.fill(arrayOut, (int) 42);
   1666         out.copyTo(arrayOut);
   1667         StringBuilder message = new StringBuilder();
   1668         boolean errorFound = false;
   1669         for (int i = 0; i < INPUTSIZE; i++) {
   1670             for (int j = 0; j < 3 ; j++) {
   1671                 // Extract the inputs.
   1672                 ArgumentsUintUint args = new ArgumentsUintUint();
   1673                 args.inValue = arrayInValue[i * 4 + j];
   1674                 // Figure out what the outputs should have been.
   1675                 CoreMathVerifier.computeClz(args);
   1676                 // Validate the outputs.
   1677                 boolean valid = true;
   1678                 if (args.out != arrayOut[i * 4 + j]) {
   1679                     valid = false;
   1680                 }
   1681                 if (!valid) {
   1682                     if (!errorFound) {
   1683                         errorFound = true;
   1684                         message.append("Input inValue: ");
   1685                         appendVariableToMessage(message, args.inValue);
   1686                         message.append("\n");
   1687                         message.append("Expected output out: ");
   1688                         appendVariableToMessage(message, args.out);
   1689                         message.append("\n");
   1690                         message.append("Actual   output out: ");
   1691                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1692                         if (args.out != arrayOut[i * 4 + j]) {
   1693                             message.append(" FAIL");
   1694                         }
   1695                         message.append("\n");
   1696                         message.append("Errors at");
   1697                     }
   1698                     message.append(" [");
   1699                     message.append(Integer.toString(i));
   1700                     message.append(", ");
   1701                     message.append(Integer.toString(j));
   1702                     message.append("]");
   1703                 }
   1704             }
   1705         }
   1706         assertFalse("Incorrect output for checkClzUint3Uint3" +
   1707                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1708     }
   1709 
   1710     private void checkClzUint4Uint4() {
   1711         Allocation inValue = createRandomAllocation(mRS, Element.DataType.UNSIGNED_32, 4, 0x4d23f67f21b2b8fbl, false);
   1712         try {
   1713             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE);
   1714             script.forEach_testClzUint4Uint4(inValue, out);
   1715             verifyResultsClzUint4Uint4(inValue, out, false);
   1716             out.destroy();
   1717         } catch (Exception e) {
   1718             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint4Uint4: " + e.toString());
   1719         }
   1720         try {
   1721             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE);
   1722             scriptRelaxed.forEach_testClzUint4Uint4(inValue, out);
   1723             verifyResultsClzUint4Uint4(inValue, out, true);
   1724             out.destroy();
   1725         } catch (Exception e) {
   1726             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testClzUint4Uint4: " + e.toString());
   1727         }
   1728         inValue.destroy();
   1729     }
   1730 
   1731     private void verifyResultsClzUint4Uint4(Allocation inValue, Allocation out, boolean relaxed) {
   1732         int[] arrayInValue = new int[INPUTSIZE * 4];
   1733         Arrays.fill(arrayInValue, (int) 42);
   1734         inValue.copyTo(arrayInValue);
   1735         int[] arrayOut = new int[INPUTSIZE * 4];
   1736         Arrays.fill(arrayOut, (int) 42);
   1737         out.copyTo(arrayOut);
   1738         StringBuilder message = new StringBuilder();
   1739         boolean errorFound = false;
   1740         for (int i = 0; i < INPUTSIZE; i++) {
   1741             for (int j = 0; j < 4 ; j++) {
   1742                 // Extract the inputs.
   1743                 ArgumentsUintUint args = new ArgumentsUintUint();
   1744                 args.inValue = arrayInValue[i * 4 + j];
   1745                 // Figure out what the outputs should have been.
   1746                 CoreMathVerifier.computeClz(args);
   1747                 // Validate the outputs.
   1748                 boolean valid = true;
   1749                 if (args.out != arrayOut[i * 4 + j]) {
   1750                     valid = false;
   1751                 }
   1752                 if (!valid) {
   1753                     if (!errorFound) {
   1754                         errorFound = true;
   1755                         message.append("Input inValue: ");
   1756                         appendVariableToMessage(message, args.inValue);
   1757                         message.append("\n");
   1758                         message.append("Expected output out: ");
   1759                         appendVariableToMessage(message, args.out);
   1760                         message.append("\n");
   1761                         message.append("Actual   output out: ");
   1762                         appendVariableToMessage(message, arrayOut[i * 4 + j]);
   1763                         if (args.out != arrayOut[i * 4 + j]) {
   1764                             message.append(" FAIL");
   1765                         }
   1766                         message.append("\n");
   1767                         message.append("Errors at");
   1768                     }
   1769                     message.append(" [");
   1770                     message.append(Integer.toString(i));
   1771                     message.append(", ");
   1772                     message.append(Integer.toString(j));
   1773                     message.append("]");
   1774                 }
   1775             }
   1776         }
   1777         assertFalse("Incorrect output for checkClzUint4Uint4" +
   1778                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
   1779     }
   1780 
   1781     public void testClz() {
   1782         checkClzCharChar();
   1783         checkClzChar2Char2();
   1784         checkClzChar3Char3();
   1785         checkClzChar4Char4();
   1786         checkClzUcharUchar();
   1787         checkClzUchar2Uchar2();
   1788         checkClzUchar3Uchar3();
   1789         checkClzUchar4Uchar4();
   1790         checkClzShortShort();
   1791         checkClzShort2Short2();
   1792         checkClzShort3Short3();
   1793         checkClzShort4Short4();
   1794         checkClzUshortUshort();
   1795         checkClzUshort2Ushort2();
   1796         checkClzUshort3Ushort3();
   1797         checkClzUshort4Ushort4();
   1798         checkClzIntInt();
   1799         checkClzInt2Int2();
   1800         checkClzInt3Int3();
   1801         checkClzInt4Int4();
   1802         checkClzUintUint();
   1803         checkClzUint2Uint2();
   1804         checkClzUint3Uint3();
   1805         checkClzUint4Uint4();
   1806     }
   1807 }
   1808