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 TestAbs extends RSBaseCompute {
     29 
     30     private ScriptC_TestAbs script;
     31     private ScriptC_TestAbsRelaxed scriptRelaxed;
     32 
     33     @Override
     34     protected void setUp() throws Exception {
     35         super.setUp();
     36         script = new ScriptC_TestAbs(mRS);
     37         scriptRelaxed = new ScriptC_TestAbsRelaxed(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 ArgumentsCharUchar {
     48         public byte inV;
     49         public byte out;
     50     }
     51 
     52     private void checkAbsCharUchar() {
     53         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 1, 0x79257810f7393ea6l, false);
     54         try {
     55             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 1), INPUTSIZE);
     56             script.forEach_testAbsCharUchar(inV, out);
     57             verifyResultsAbsCharUchar(inV, out, false);
     58             out.destroy();
     59         } catch (Exception e) {
     60             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsCharUchar: " + e.toString());
     61         }
     62         try {
     63             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 1), INPUTSIZE);
     64             scriptRelaxed.forEach_testAbsCharUchar(inV, out);
     65             verifyResultsAbsCharUchar(inV, out, true);
     66             out.destroy();
     67         } catch (Exception e) {
     68             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsCharUchar: " + e.toString());
     69         }
     70         inV.destroy();
     71     }
     72 
     73     private void verifyResultsAbsCharUchar(Allocation inV, Allocation out, boolean relaxed) {
     74         byte[] arrayInV = new byte[INPUTSIZE * 1];
     75         Arrays.fill(arrayInV, (byte) 42);
     76         inV.copyTo(arrayInV);
     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                 ArgumentsCharUchar args = new ArgumentsCharUchar();
     86                 args.inV = arrayInV[i];
     87                 // Figure out what the outputs should have been.
     88                 CoreMathVerifier.computeAbs(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 inV: ");
     98                         appendVariableToMessage(message, args.inV);
     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 checkAbsCharUchar" +
    120                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    121     }
    122 
    123     private void checkAbsChar2Uchar2() {
    124         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 2, 0xff611dd40e5e407cl, false);
    125         try {
    126             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE);
    127             script.forEach_testAbsChar2Uchar2(inV, out);
    128             verifyResultsAbsChar2Uchar2(inV, out, false);
    129             out.destroy();
    130         } catch (Exception e) {
    131             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar2Uchar2: " + e.toString());
    132         }
    133         try {
    134             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 2), INPUTSIZE);
    135             scriptRelaxed.forEach_testAbsChar2Uchar2(inV, out);
    136             verifyResultsAbsChar2Uchar2(inV, out, true);
    137             out.destroy();
    138         } catch (Exception e) {
    139             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar2Uchar2: " + e.toString());
    140         }
    141         inV.destroy();
    142     }
    143 
    144     private void verifyResultsAbsChar2Uchar2(Allocation inV, Allocation out, boolean relaxed) {
    145         byte[] arrayInV = new byte[INPUTSIZE * 2];
    146         Arrays.fill(arrayInV, (byte) 42);
    147         inV.copyTo(arrayInV);
    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                 ArgumentsCharUchar args = new ArgumentsCharUchar();
    157                 args.inV = arrayInV[i * 2 + j];
    158                 // Figure out what the outputs should have been.
    159                 CoreMathVerifier.computeAbs(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 inV: ");
    169                         appendVariableToMessage(message, args.inV);
    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 checkAbsChar2Uchar2" +
    191                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    192     }
    193 
    194     private void checkAbsChar3Uchar3() {
    195         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 3, 0xff62e6ef0479615al, false);
    196         try {
    197             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE);
    198             script.forEach_testAbsChar3Uchar3(inV, out);
    199             verifyResultsAbsChar3Uchar3(inV, out, false);
    200             out.destroy();
    201         } catch (Exception e) {
    202             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar3Uchar3: " + e.toString());
    203         }
    204         try {
    205             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 3), INPUTSIZE);
    206             scriptRelaxed.forEach_testAbsChar3Uchar3(inV, out);
    207             verifyResultsAbsChar3Uchar3(inV, out, true);
    208             out.destroy();
    209         } catch (Exception e) {
    210             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar3Uchar3: " + e.toString());
    211         }
    212         inV.destroy();
    213     }
    214 
    215     private void verifyResultsAbsChar3Uchar3(Allocation inV, Allocation out, boolean relaxed) {
    216         byte[] arrayInV = new byte[INPUTSIZE * 4];
    217         Arrays.fill(arrayInV, (byte) 42);
    218         inV.copyTo(arrayInV);
    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                 ArgumentsCharUchar args = new ArgumentsCharUchar();
    228                 args.inV = arrayInV[i * 4 + j];
    229                 // Figure out what the outputs should have been.
    230                 CoreMathVerifier.computeAbs(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 inV: ");
    240                         appendVariableToMessage(message, args.inV);
    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 checkAbsChar3Uchar3" +
    262                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    263     }
    264 
    265     private void checkAbsChar4Uchar4() {
    266         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_8, 4, 0xff64b009fa948238l, false);
    267         try {
    268             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE);
    269             script.forEach_testAbsChar4Uchar4(inV, out);
    270             verifyResultsAbsChar4Uchar4(inV, out, false);
    271             out.destroy();
    272         } catch (Exception e) {
    273             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar4Uchar4: " + e.toString());
    274         }
    275         try {
    276             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_8, 4), INPUTSIZE);
    277             scriptRelaxed.forEach_testAbsChar4Uchar4(inV, out);
    278             verifyResultsAbsChar4Uchar4(inV, out, true);
    279             out.destroy();
    280         } catch (Exception e) {
    281             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsChar4Uchar4: " + e.toString());
    282         }
    283         inV.destroy();
    284     }
    285 
    286     private void verifyResultsAbsChar4Uchar4(Allocation inV, Allocation out, boolean relaxed) {
    287         byte[] arrayInV = new byte[INPUTSIZE * 4];
    288         Arrays.fill(arrayInV, (byte) 42);
    289         inV.copyTo(arrayInV);
    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                 ArgumentsCharUchar args = new ArgumentsCharUchar();
    299                 args.inV = arrayInV[i * 4 + j];
    300                 // Figure out what the outputs should have been.
    301                 CoreMathVerifier.computeAbs(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 inV: ");
    311                         appendVariableToMessage(message, args.inV);
    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 checkAbsChar4Uchar4" +
    333                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    334     }
    335 
    336     public class ArgumentsShortUshort {
    337         public short inV;
    338         public short out;
    339     }
    340 
    341     private void checkAbsShortUshort() {
    342         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 1, 0xfab837da064819cl, false);
    343         try {
    344             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 1), INPUTSIZE);
    345             script.forEach_testAbsShortUshort(inV, out);
    346             verifyResultsAbsShortUshort(inV, out, false);
    347             out.destroy();
    348         } catch (Exception e) {
    349             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShortUshort: " + e.toString());
    350         }
    351         try {
    352             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 1), INPUTSIZE);
    353             scriptRelaxed.forEach_testAbsShortUshort(inV, out);
    354             verifyResultsAbsShortUshort(inV, out, true);
    355             out.destroy();
    356         } catch (Exception e) {
    357             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShortUshort: " + e.toString());
    358         }
    359         inV.destroy();
    360     }
    361 
    362     private void verifyResultsAbsShortUshort(Allocation inV, Allocation out, boolean relaxed) {
    363         short[] arrayInV = new short[INPUTSIZE * 1];
    364         Arrays.fill(arrayInV, (short) 42);
    365         inV.copyTo(arrayInV);
    366         short[] arrayOut = new short[INPUTSIZE * 1];
    367         Arrays.fill(arrayOut, (short) 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                 ArgumentsShortUshort args = new ArgumentsShortUshort();
    375                 args.inV = arrayInV[i];
    376                 // Figure out what the outputs should have been.
    377                 CoreMathVerifier.computeAbs(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 inV: ");
    387                         appendVariableToMessage(message, args.inV);
    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 checkAbsShortUshort" +
    409                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    410     }
    411 
    412     private void checkAbsShort2Ushort2() {
    413         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 2, 0x231450e16856b93el, false);
    414         try {
    415             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE);
    416             script.forEach_testAbsShort2Ushort2(inV, out);
    417             verifyResultsAbsShort2Ushort2(inV, out, false);
    418             out.destroy();
    419         } catch (Exception e) {
    420             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort2Ushort2: " + e.toString());
    421         }
    422         try {
    423             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 2), INPUTSIZE);
    424             scriptRelaxed.forEach_testAbsShort2Ushort2(inV, out);
    425             verifyResultsAbsShort2Ushort2(inV, out, true);
    426             out.destroy();
    427         } catch (Exception e) {
    428             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort2Ushort2: " + e.toString());
    429         }
    430         inV.destroy();
    431     }
    432 
    433     private void verifyResultsAbsShort2Ushort2(Allocation inV, Allocation out, boolean relaxed) {
    434         short[] arrayInV = new short[INPUTSIZE * 2];
    435         Arrays.fill(arrayInV, (short) 42);
    436         inV.copyTo(arrayInV);
    437         short[] arrayOut = new short[INPUTSIZE * 2];
    438         Arrays.fill(arrayOut, (short) 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                 ArgumentsShortUshort args = new ArgumentsShortUshort();
    446                 args.inV = arrayInV[i * 2 + j];
    447                 // Figure out what the outputs should have been.
    448                 CoreMathVerifier.computeAbs(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 inV: ");
    458                         appendVariableToMessage(message, args.inV);
    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 checkAbsShort2Ushort2" +
    480                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    481     }
    482 
    483     private void checkAbsShort3Ushort3() {
    484         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 3, 0x23611868beb24a6al, false);
    485         try {
    486             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE);
    487             script.forEach_testAbsShort3Ushort3(inV, out);
    488             verifyResultsAbsShort3Ushort3(inV, out, false);
    489             out.destroy();
    490         } catch (Exception e) {
    491             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort3Ushort3: " + e.toString());
    492         }
    493         try {
    494             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 3), INPUTSIZE);
    495             scriptRelaxed.forEach_testAbsShort3Ushort3(inV, out);
    496             verifyResultsAbsShort3Ushort3(inV, out, true);
    497             out.destroy();
    498         } catch (Exception e) {
    499             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort3Ushort3: " + e.toString());
    500         }
    501         inV.destroy();
    502     }
    503 
    504     private void verifyResultsAbsShort3Ushort3(Allocation inV, Allocation out, boolean relaxed) {
    505         short[] arrayInV = new short[INPUTSIZE * 4];
    506         Arrays.fill(arrayInV, (short) 42);
    507         inV.copyTo(arrayInV);
    508         short[] arrayOut = new short[INPUTSIZE * 4];
    509         Arrays.fill(arrayOut, (short) 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                 ArgumentsShortUshort args = new ArgumentsShortUshort();
    517                 args.inV = arrayInV[i * 4 + j];
    518                 // Figure out what the outputs should have been.
    519                 CoreMathVerifier.computeAbs(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 inV: ");
    529                         appendVariableToMessage(message, args.inV);
    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 checkAbsShort3Ushort3" +
    551                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    552     }
    553 
    554     private void checkAbsShort4Ushort4() {
    555         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_16, 4, 0x23addff0150ddb96l, false);
    556         try {
    557             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE);
    558             script.forEach_testAbsShort4Ushort4(inV, out);
    559             verifyResultsAbsShort4Ushort4(inV, out, false);
    560             out.destroy();
    561         } catch (Exception e) {
    562             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort4Ushort4: " + e.toString());
    563         }
    564         try {
    565             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_16, 4), INPUTSIZE);
    566             scriptRelaxed.forEach_testAbsShort4Ushort4(inV, out);
    567             verifyResultsAbsShort4Ushort4(inV, out, true);
    568             out.destroy();
    569         } catch (Exception e) {
    570             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsShort4Ushort4: " + e.toString());
    571         }
    572         inV.destroy();
    573     }
    574 
    575     private void verifyResultsAbsShort4Ushort4(Allocation inV, Allocation out, boolean relaxed) {
    576         short[] arrayInV = new short[INPUTSIZE * 4];
    577         Arrays.fill(arrayInV, (short) 42);
    578         inV.copyTo(arrayInV);
    579         short[] arrayOut = new short[INPUTSIZE * 4];
    580         Arrays.fill(arrayOut, (short) 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                 ArgumentsShortUshort args = new ArgumentsShortUshort();
    588                 args.inV = arrayInV[i * 4 + j];
    589                 // Figure out what the outputs should have been.
    590                 CoreMathVerifier.computeAbs(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 inV: ");
    600                         appendVariableToMessage(message, args.inV);
    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 checkAbsShort4Ushort4" +
    622                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    623     }
    624 
    625     public class ArgumentsIntUint {
    626         public int inV;
    627         public int out;
    628     }
    629 
    630     private void checkAbsIntUint() {
    631         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 1, 0x6adb1880ac5b83e6l, false);
    632         try {
    633             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 1), INPUTSIZE);
    634             script.forEach_testAbsIntUint(inV, out);
    635             verifyResultsAbsIntUint(inV, out, false);
    636             out.destroy();
    637         } catch (Exception e) {
    638             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsIntUint: " + e.toString());
    639         }
    640         try {
    641             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 1), INPUTSIZE);
    642             scriptRelaxed.forEach_testAbsIntUint(inV, out);
    643             verifyResultsAbsIntUint(inV, out, true);
    644             out.destroy();
    645         } catch (Exception e) {
    646             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsIntUint: " + e.toString());
    647         }
    648         inV.destroy();
    649     }
    650 
    651     private void verifyResultsAbsIntUint(Allocation inV, Allocation out, boolean relaxed) {
    652         int[] arrayInV = new int[INPUTSIZE * 1];
    653         Arrays.fill(arrayInV, (int) 42);
    654         inV.copyTo(arrayInV);
    655         int[] arrayOut = new int[INPUTSIZE * 1];
    656         Arrays.fill(arrayOut, (int) 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                 ArgumentsIntUint args = new ArgumentsIntUint();
    664                 args.inV = arrayInV[i];
    665                 // Figure out what the outputs should have been.
    666                 CoreMathVerifier.computeAbs(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 inV: ");
    676                         appendVariableToMessage(message, args.inV);
    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 checkAbsIntUint" +
    698                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    699     }
    700 
    701     private void checkAbsInt2Uint2() {
    702         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 2, 0xc8728053938616fal, false);
    703         try {
    704             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE);
    705             script.forEach_testAbsInt2Uint2(inV, out);
    706             verifyResultsAbsInt2Uint2(inV, out, false);
    707             out.destroy();
    708         } catch (Exception e) {
    709             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt2Uint2: " + e.toString());
    710         }
    711         try {
    712             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 2), INPUTSIZE);
    713             scriptRelaxed.forEach_testAbsInt2Uint2(inV, out);
    714             verifyResultsAbsInt2Uint2(inV, out, true);
    715             out.destroy();
    716         } catch (Exception e) {
    717             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt2Uint2: " + e.toString());
    718         }
    719         inV.destroy();
    720     }
    721 
    722     private void verifyResultsAbsInt2Uint2(Allocation inV, Allocation out, boolean relaxed) {
    723         int[] arrayInV = new int[INPUTSIZE * 2];
    724         Arrays.fill(arrayInV, (int) 42);
    725         inV.copyTo(arrayInV);
    726         int[] arrayOut = new int[INPUTSIZE * 2];
    727         Arrays.fill(arrayOut, (int) 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                 ArgumentsIntUint args = new ArgumentsIntUint();
    735                 args.inV = arrayInV[i * 2 + j];
    736                 // Figure out what the outputs should have been.
    737                 CoreMathVerifier.computeAbs(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 inV: ");
    747                         appendVariableToMessage(message, args.inV);
    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 checkAbsInt2Uint2" +
    769                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    770     }
    771 
    772     private void checkAbsInt3Uint3() {
    773         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 3, 0xc8728af4f28ddbeel, false);
    774         try {
    775             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE);
    776             script.forEach_testAbsInt3Uint3(inV, out);
    777             verifyResultsAbsInt3Uint3(inV, out, false);
    778             out.destroy();
    779         } catch (Exception e) {
    780             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt3Uint3: " + e.toString());
    781         }
    782         try {
    783             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 3), INPUTSIZE);
    784             scriptRelaxed.forEach_testAbsInt3Uint3(inV, out);
    785             verifyResultsAbsInt3Uint3(inV, out, true);
    786             out.destroy();
    787         } catch (Exception e) {
    788             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt3Uint3: " + e.toString());
    789         }
    790         inV.destroy();
    791     }
    792 
    793     private void verifyResultsAbsInt3Uint3(Allocation inV, Allocation out, boolean relaxed) {
    794         int[] arrayInV = new int[INPUTSIZE * 4];
    795         Arrays.fill(arrayInV, (int) 42);
    796         inV.copyTo(arrayInV);
    797         int[] arrayOut = new int[INPUTSIZE * 4];
    798         Arrays.fill(arrayOut, (int) 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                 ArgumentsIntUint args = new ArgumentsIntUint();
    806                 args.inV = arrayInV[i * 4 + j];
    807                 // Figure out what the outputs should have been.
    808                 CoreMathVerifier.computeAbs(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 inV: ");
    818                         appendVariableToMessage(message, args.inV);
    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 checkAbsInt3Uint3" +
    840                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    841     }
    842 
    843     private void checkAbsInt4Uint4() {
    844         Allocation inV = createRandomAllocation(mRS, Element.DataType.SIGNED_32, 4, 0xc87295965195a0e2l, false);
    845         try {
    846             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE);
    847             script.forEach_testAbsInt4Uint4(inV, out);
    848             verifyResultsAbsInt4Uint4(inV, out, false);
    849             out.destroy();
    850         } catch (Exception e) {
    851             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt4Uint4: " + e.toString());
    852         }
    853         try {
    854             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.UNSIGNED_32, 4), INPUTSIZE);
    855             scriptRelaxed.forEach_testAbsInt4Uint4(inV, out);
    856             verifyResultsAbsInt4Uint4(inV, out, true);
    857             out.destroy();
    858         } catch (Exception e) {
    859             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testAbsInt4Uint4: " + e.toString());
    860         }
    861         inV.destroy();
    862     }
    863 
    864     private void verifyResultsAbsInt4Uint4(Allocation inV, Allocation out, boolean relaxed) {
    865         int[] arrayInV = new int[INPUTSIZE * 4];
    866         Arrays.fill(arrayInV, (int) 42);
    867         inV.copyTo(arrayInV);
    868         int[] arrayOut = new int[INPUTSIZE * 4];
    869         Arrays.fill(arrayOut, (int) 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                 ArgumentsIntUint args = new ArgumentsIntUint();
    877                 args.inV = arrayInV[i * 4 + j];
    878                 // Figure out what the outputs should have been.
    879                 CoreMathVerifier.computeAbs(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 inV: ");
    889                         appendVariableToMessage(message, args.inV);
    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 checkAbsInt4Uint4" +
    911                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    912     }
    913 
    914     public void testAbs() {
    915         checkAbsCharUchar();
    916         checkAbsChar2Uchar2();
    917         checkAbsChar3Uchar3();
    918         checkAbsChar4Uchar4();
    919         checkAbsShortUshort();
    920         checkAbsShort2Ushort2();
    921         checkAbsShort3Ushort3();
    922         checkAbsShort4Ushort4();
    923         checkAbsIntUint();
    924         checkAbsInt2Uint2();
    925         checkAbsInt3Uint3();
    926         checkAbsInt4Uint4();
    927     }
    928 }
    929