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 TestFastDistance extends RSBaseCompute {
     29 
     30     private ScriptC_TestFastDistance script;
     31     private ScriptC_TestFastDistanceRelaxed scriptRelaxed;
     32 
     33     @Override
     34     protected void setUp() throws Exception {
     35         super.setUp();
     36         script = new ScriptC_TestFastDistance(mRS);
     37         scriptRelaxed = new ScriptC_TestFastDistanceRelaxed(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 ArgumentsFloatFloatFloat {
     48         public float inLeftVector;
     49         public float inRightVector;
     50         public Target.Floaty out;
     51     }
     52 
     53     private void checkFastDistanceFloatFloatFloat() {
     54         Allocation inLeftVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 1, 0xeb32e5abb9b28b1al, false);
     55         Allocation inRightVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 1, 0x83606d459f1626e3l, false);
     56         try {
     57             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
     58             script.set_gAllocInRightVector(inRightVector);
     59             script.forEach_testFastDistanceFloatFloatFloat(inLeftVector, out);
     60             verifyResultsFastDistanceFloatFloatFloat(inLeftVector, inRightVector, out, false);
     61             out.destroy();
     62         } catch (Exception e) {
     63             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloatFloatFloat: " + e.toString());
     64         }
     65         try {
     66             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
     67             scriptRelaxed.set_gAllocInRightVector(inRightVector);
     68             scriptRelaxed.forEach_testFastDistanceFloatFloatFloat(inLeftVector, out);
     69             verifyResultsFastDistanceFloatFloatFloat(inLeftVector, inRightVector, out, true);
     70             out.destroy();
     71         } catch (Exception e) {
     72             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloatFloatFloat: " + e.toString());
     73         }
     74         inLeftVector.destroy();
     75         inRightVector.destroy();
     76     }
     77 
     78     private void verifyResultsFastDistanceFloatFloatFloat(Allocation inLeftVector, Allocation inRightVector, Allocation out, boolean relaxed) {
     79         float[] arrayInLeftVector = new float[INPUTSIZE * 1];
     80         Arrays.fill(arrayInLeftVector, (float) 42);
     81         inLeftVector.copyTo(arrayInLeftVector);
     82         float[] arrayInRightVector = new float[INPUTSIZE * 1];
     83         Arrays.fill(arrayInRightVector, (float) 42);
     84         inRightVector.copyTo(arrayInRightVector);
     85         float[] arrayOut = new float[INPUTSIZE * 1];
     86         Arrays.fill(arrayOut, (float) 42);
     87         out.copyTo(arrayOut);
     88         StringBuilder message = new StringBuilder();
     89         boolean errorFound = false;
     90         for (int i = 0; i < INPUTSIZE; i++) {
     91             ArgumentsFloatFloatFloat args = new ArgumentsFloatFloatFloat();
     92             // Create the appropriate sized arrays in args
     93             // Fill args with the input values
     94             args.inLeftVector = arrayInLeftVector[i];
     95             args.inRightVector = arrayInRightVector[i];
     96             Target target = new Target(Target.FunctionType.FAST, Target.ReturnType.FLOAT, relaxed);
     97             CoreMathVerifier.computeFastDistance(args, target);
     98 
     99             // Compare the expected outputs to the actual values returned by RS.
    100             boolean valid = true;
    101             if (!args.out.couldBe(arrayOut[i])) {
    102                 valid = false;
    103             }
    104             if (!valid) {
    105                 if (!errorFound) {
    106                     errorFound = true;
    107                     message.append("Input inLeftVector: ");
    108                     appendVariableToMessage(message, arrayInLeftVector[i]);
    109                     message.append("\n");
    110                     message.append("Input inRightVector: ");
    111                     appendVariableToMessage(message, arrayInRightVector[i]);
    112                     message.append("\n");
    113                     message.append("Expected output out: ");
    114                     appendVariableToMessage(message, args.out);
    115                     message.append("\n");
    116                     message.append("Actual   output out: ");
    117                     appendVariableToMessage(message, arrayOut[i]);
    118                     if (!args.out.couldBe(arrayOut[i])) {
    119                         message.append(" FAIL");
    120                     }
    121                     message.append("\n");
    122                     message.append("Errors at");
    123                 }
    124                 message.append(" [");
    125                 message.append(Integer.toString(i));
    126                 message.append("]");
    127             }
    128         }
    129         assertFalse("Incorrect output for checkFastDistanceFloatFloatFloat" +
    130                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    131     }
    132 
    133     public class ArgumentsFloatNFloatNFloat {
    134         public float[] inLeftVector;
    135         public float[] inRightVector;
    136         public Target.Floaty out;
    137     }
    138 
    139     private void checkFastDistanceFloat2Float2Float() {
    140         Allocation inLeftVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 2, 0x580238eac7fabd9el, false);
    141         Allocation inRightVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 2, 0xca3368dd0536a30fl, false);
    142         try {
    143             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    144             script.set_gAllocInRightVector(inRightVector);
    145             script.forEach_testFastDistanceFloat2Float2Float(inLeftVector, out);
    146             verifyResultsFastDistanceFloat2Float2Float(inLeftVector, inRightVector, out, false);
    147             out.destroy();
    148         } catch (Exception e) {
    149             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat2Float2Float: " + e.toString());
    150         }
    151         try {
    152             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    153             scriptRelaxed.set_gAllocInRightVector(inRightVector);
    154             scriptRelaxed.forEach_testFastDistanceFloat2Float2Float(inLeftVector, out);
    155             verifyResultsFastDistanceFloat2Float2Float(inLeftVector, inRightVector, out, true);
    156             out.destroy();
    157         } catch (Exception e) {
    158             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat2Float2Float: " + e.toString());
    159         }
    160         inLeftVector.destroy();
    161         inRightVector.destroy();
    162     }
    163 
    164     private void verifyResultsFastDistanceFloat2Float2Float(Allocation inLeftVector, Allocation inRightVector, Allocation out, boolean relaxed) {
    165         float[] arrayInLeftVector = new float[INPUTSIZE * 2];
    166         Arrays.fill(arrayInLeftVector, (float) 42);
    167         inLeftVector.copyTo(arrayInLeftVector);
    168         float[] arrayInRightVector = new float[INPUTSIZE * 2];
    169         Arrays.fill(arrayInRightVector, (float) 42);
    170         inRightVector.copyTo(arrayInRightVector);
    171         float[] arrayOut = new float[INPUTSIZE * 1];
    172         Arrays.fill(arrayOut, (float) 42);
    173         out.copyTo(arrayOut);
    174         StringBuilder message = new StringBuilder();
    175         boolean errorFound = false;
    176         for (int i = 0; i < INPUTSIZE; i++) {
    177             ArgumentsFloatNFloatNFloat args = new ArgumentsFloatNFloatNFloat();
    178             // Create the appropriate sized arrays in args
    179             args.inLeftVector = new float[2];
    180             args.inRightVector = new float[2];
    181             // Fill args with the input values
    182             for (int j = 0; j < 2 ; j++) {
    183                 args.inLeftVector[j] = arrayInLeftVector[i * 2 + j];
    184             }
    185             for (int j = 0; j < 2 ; j++) {
    186                 args.inRightVector[j] = arrayInRightVector[i * 2 + j];
    187             }
    188             Target target = new Target(Target.FunctionType.FAST, Target.ReturnType.FLOAT, relaxed);
    189             CoreMathVerifier.computeFastDistance(args, target);
    190 
    191             // Compare the expected outputs to the actual values returned by RS.
    192             boolean valid = true;
    193             if (!args.out.couldBe(arrayOut[i])) {
    194                 valid = false;
    195             }
    196             if (!valid) {
    197                 if (!errorFound) {
    198                     errorFound = true;
    199                     for (int j = 0; j < 2 ; j++) {
    200                         message.append("Input inLeftVector: ");
    201                         appendVariableToMessage(message, arrayInLeftVector[i * 2 + j]);
    202                         message.append("\n");
    203                     }
    204                     for (int j = 0; j < 2 ; j++) {
    205                         message.append("Input inRightVector: ");
    206                         appendVariableToMessage(message, arrayInRightVector[i * 2 + j]);
    207                         message.append("\n");
    208                     }
    209                     message.append("Expected output out: ");
    210                     appendVariableToMessage(message, args.out);
    211                     message.append("\n");
    212                     message.append("Actual   output out: ");
    213                     appendVariableToMessage(message, arrayOut[i]);
    214                     if (!args.out.couldBe(arrayOut[i])) {
    215                         message.append(" FAIL");
    216                     }
    217                     message.append("\n");
    218                     message.append("Errors at");
    219                 }
    220                 message.append(" [");
    221                 message.append(Integer.toString(i));
    222                 message.append("]");
    223             }
    224         }
    225         assertFalse("Incorrect output for checkFastDistanceFloat2Float2Float" +
    226                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    227     }
    228 
    229     private void checkFastDistanceFloat3Float3Float() {
    230         Allocation inLeftVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x26ab5e68e99971ecl, false);
    231         Allocation inRightVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 3, 0x809cb50caadeec29l, false);
    232         try {
    233             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    234             script.set_gAllocInRightVector(inRightVector);
    235             script.forEach_testFastDistanceFloat3Float3Float(inLeftVector, out);
    236             verifyResultsFastDistanceFloat3Float3Float(inLeftVector, inRightVector, out, false);
    237             out.destroy();
    238         } catch (Exception e) {
    239             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat3Float3Float: " + e.toString());
    240         }
    241         try {
    242             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    243             scriptRelaxed.set_gAllocInRightVector(inRightVector);
    244             scriptRelaxed.forEach_testFastDistanceFloat3Float3Float(inLeftVector, out);
    245             verifyResultsFastDistanceFloat3Float3Float(inLeftVector, inRightVector, out, true);
    246             out.destroy();
    247         } catch (Exception e) {
    248             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat3Float3Float: " + e.toString());
    249         }
    250         inLeftVector.destroy();
    251         inRightVector.destroy();
    252     }
    253 
    254     private void verifyResultsFastDistanceFloat3Float3Float(Allocation inLeftVector, Allocation inRightVector, Allocation out, boolean relaxed) {
    255         float[] arrayInLeftVector = new float[INPUTSIZE * 4];
    256         Arrays.fill(arrayInLeftVector, (float) 42);
    257         inLeftVector.copyTo(arrayInLeftVector);
    258         float[] arrayInRightVector = new float[INPUTSIZE * 4];
    259         Arrays.fill(arrayInRightVector, (float) 42);
    260         inRightVector.copyTo(arrayInRightVector);
    261         float[] arrayOut = new float[INPUTSIZE * 1];
    262         Arrays.fill(arrayOut, (float) 42);
    263         out.copyTo(arrayOut);
    264         StringBuilder message = new StringBuilder();
    265         boolean errorFound = false;
    266         for (int i = 0; i < INPUTSIZE; i++) {
    267             ArgumentsFloatNFloatNFloat args = new ArgumentsFloatNFloatNFloat();
    268             // Create the appropriate sized arrays in args
    269             args.inLeftVector = new float[3];
    270             args.inRightVector = new float[3];
    271             // Fill args with the input values
    272             for (int j = 0; j < 3 ; j++) {
    273                 args.inLeftVector[j] = arrayInLeftVector[i * 4 + j];
    274             }
    275             for (int j = 0; j < 3 ; j++) {
    276                 args.inRightVector[j] = arrayInRightVector[i * 4 + j];
    277             }
    278             Target target = new Target(Target.FunctionType.FAST, Target.ReturnType.FLOAT, relaxed);
    279             CoreMathVerifier.computeFastDistance(args, target);
    280 
    281             // Compare the expected outputs to the actual values returned by RS.
    282             boolean valid = true;
    283             if (!args.out.couldBe(arrayOut[i])) {
    284                 valid = false;
    285             }
    286             if (!valid) {
    287                 if (!errorFound) {
    288                     errorFound = true;
    289                     for (int j = 0; j < 3 ; j++) {
    290                         message.append("Input inLeftVector: ");
    291                         appendVariableToMessage(message, arrayInLeftVector[i * 4 + j]);
    292                         message.append("\n");
    293                     }
    294                     for (int j = 0; j < 3 ; j++) {
    295                         message.append("Input inRightVector: ");
    296                         appendVariableToMessage(message, arrayInRightVector[i * 4 + j]);
    297                         message.append("\n");
    298                     }
    299                     message.append("Expected output out: ");
    300                     appendVariableToMessage(message, args.out);
    301                     message.append("\n");
    302                     message.append("Actual   output out: ");
    303                     appendVariableToMessage(message, arrayOut[i]);
    304                     if (!args.out.couldBe(arrayOut[i])) {
    305                         message.append(" FAIL");
    306                     }
    307                     message.append("\n");
    308                     message.append("Errors at");
    309                 }
    310                 message.append(" [");
    311                 message.append(Integer.toString(i));
    312                 message.append("]");
    313             }
    314         }
    315         assertFalse("Incorrect output for checkFastDistanceFloat3Float3Float" +
    316                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    317     }
    318 
    319     private void checkFastDistanceFloat4Float4Float() {
    320         Allocation inLeftVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 4, 0xf55483e70b38263al, false);
    321         Allocation inRightVector = createRandomAllocation(mRS, Element.DataType.FLOAT_32, 4, 0x3706013c50873543l, false);
    322         try {
    323             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    324             script.set_gAllocInRightVector(inRightVector);
    325             script.forEach_testFastDistanceFloat4Float4Float(inLeftVector, out);
    326             verifyResultsFastDistanceFloat4Float4Float(inLeftVector, inRightVector, out, false);
    327             out.destroy();
    328         } catch (Exception e) {
    329             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat4Float4Float: " + e.toString());
    330         }
    331         try {
    332             Allocation out = Allocation.createSized(mRS, getElement(mRS, Element.DataType.FLOAT_32, 1), INPUTSIZE);
    333             scriptRelaxed.set_gAllocInRightVector(inRightVector);
    334             scriptRelaxed.forEach_testFastDistanceFloat4Float4Float(inLeftVector, out);
    335             verifyResultsFastDistanceFloat4Float4Float(inLeftVector, inRightVector, out, true);
    336             out.destroy();
    337         } catch (Exception e) {
    338             throw new RSRuntimeException("RenderScript. Can't invoke forEach_testFastDistanceFloat4Float4Float: " + e.toString());
    339         }
    340         inLeftVector.destroy();
    341         inRightVector.destroy();
    342     }
    343 
    344     private void verifyResultsFastDistanceFloat4Float4Float(Allocation inLeftVector, Allocation inRightVector, Allocation out, boolean relaxed) {
    345         float[] arrayInLeftVector = new float[INPUTSIZE * 4];
    346         Arrays.fill(arrayInLeftVector, (float) 42);
    347         inLeftVector.copyTo(arrayInLeftVector);
    348         float[] arrayInRightVector = new float[INPUTSIZE * 4];
    349         Arrays.fill(arrayInRightVector, (float) 42);
    350         inRightVector.copyTo(arrayInRightVector);
    351         float[] arrayOut = new float[INPUTSIZE * 1];
    352         Arrays.fill(arrayOut, (float) 42);
    353         out.copyTo(arrayOut);
    354         StringBuilder message = new StringBuilder();
    355         boolean errorFound = false;
    356         for (int i = 0; i < INPUTSIZE; i++) {
    357             ArgumentsFloatNFloatNFloat args = new ArgumentsFloatNFloatNFloat();
    358             // Create the appropriate sized arrays in args
    359             args.inLeftVector = new float[4];
    360             args.inRightVector = new float[4];
    361             // Fill args with the input values
    362             for (int j = 0; j < 4 ; j++) {
    363                 args.inLeftVector[j] = arrayInLeftVector[i * 4 + j];
    364             }
    365             for (int j = 0; j < 4 ; j++) {
    366                 args.inRightVector[j] = arrayInRightVector[i * 4 + j];
    367             }
    368             Target target = new Target(Target.FunctionType.FAST, Target.ReturnType.FLOAT, relaxed);
    369             CoreMathVerifier.computeFastDistance(args, target);
    370 
    371             // Compare the expected outputs to the actual values returned by RS.
    372             boolean valid = true;
    373             if (!args.out.couldBe(arrayOut[i])) {
    374                 valid = false;
    375             }
    376             if (!valid) {
    377                 if (!errorFound) {
    378                     errorFound = true;
    379                     for (int j = 0; j < 4 ; j++) {
    380                         message.append("Input inLeftVector: ");
    381                         appendVariableToMessage(message, arrayInLeftVector[i * 4 + j]);
    382                         message.append("\n");
    383                     }
    384                     for (int j = 0; j < 4 ; j++) {
    385                         message.append("Input inRightVector: ");
    386                         appendVariableToMessage(message, arrayInRightVector[i * 4 + j]);
    387                         message.append("\n");
    388                     }
    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]);
    394                     if (!args.out.couldBe(arrayOut[i])) {
    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             }
    404         }
    405         assertFalse("Incorrect output for checkFastDistanceFloat4Float4Float" +
    406                 (relaxed ? "_relaxed" : "") + ":\n" + message.toString(), errorFound);
    407     }
    408 
    409     public void testFastDistance() {
    410         checkFastDistanceFloatFloatFloat();
    411         checkFastDistanceFloat2Float2Float();
    412         checkFastDistanceFloat3Float3Float();
    413         checkFastDistanceFloat4Float4Float();
    414     }
    415 }
    416