Home | History | Annotate | Download | only in unittest
      1 /*
      2  * Copyright (C) 2017 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 package com.android.rs.unittest;
     18 
     19 import android.content.Context;
     20 import android.renderscript.Byte2;
     21 import android.renderscript.Byte3;
     22 import android.renderscript.Byte4;
     23 import android.renderscript.Float2;
     24 import android.renderscript.Float3;
     25 import android.renderscript.Float4;
     26 import android.renderscript.Int2;
     27 import android.renderscript.Int3;
     28 import android.renderscript.Int4;
     29 import android.renderscript.Long2;
     30 import android.renderscript.Long3;
     31 import android.renderscript.Long4;
     32 import android.renderscript.RenderScript;
     33 import android.renderscript.Short2;
     34 import android.renderscript.Short3;
     35 import android.renderscript.Short4;
     36 
     37 import java.util.Random;
     38 
     39 public class UT_math_agree extends UnitTest {
     40     private Random rand;
     41 
     42     public UT_math_agree(Context ctx) {
     43         super("Math Agreement", ctx);
     44         rand = new Random();
     45     }
     46 
     47     // packing functions
     48     private Float2 pack_f2(float[] val) {
     49         assert val.length == 2;
     50         return new Float2(val[0], val[1]);
     51     }
     52 
     53     private Float3 pack_f3(float[] val) {
     54         assert val.length == 3;
     55         return new Float3(val[0], val[1], val[2]);
     56     }
     57 
     58     private Float4 pack_f4(float[] val) {
     59         assert val.length == 4;
     60         return new Float4(val[0], val[1], val[2], val[3]);
     61     }
     62 
     63     private Byte2 pack_b2(byte[] val) {
     64         assert val.length == 2;
     65         return new Byte2(val[0], val[1]);
     66     }
     67 
     68     private Byte3 pack_b3(byte[] val) {
     69         assert val.length == 3;
     70         return new Byte3(val[0], val[1], val[2]);
     71     }
     72 
     73     private Byte4 pack_b4(byte[] val) {
     74         assert val.length == 4;
     75         return new Byte4(val[0], val[1], val[2], val[3]);
     76     }
     77 
     78     private Short2 pack_s2(short[] val) {
     79         assert val.length == 2;
     80         return new Short2(val[0], val[1]);
     81     }
     82 
     83     private Short3 pack_s3(short[] val) {
     84         assert val.length == 3;
     85         return new Short3(val[0], val[1], val[2]);
     86     }
     87 
     88     private Short4 pack_s4(short[] val) {
     89         assert val.length == 4;
     90         return new Short4(val[0], val[1], val[2], val[3]);
     91     }
     92 
     93     private Int2 pack_i2(int[] val) {
     94         assert val.length == 2;
     95         return new Int2(val[0], val[1]);
     96     }
     97 
     98     private Int3 pack_i3(int[] val) {
     99         assert val.length == 3;
    100         return new Int3(val[0], val[1], val[2]);
    101     }
    102 
    103     private Int4 pack_i4(int[] val) {
    104         assert val.length == 4;
    105         return new Int4(val[0], val[1], val[2], val[3]);
    106     }
    107 
    108     private Long2 pack_l2(long[] val) {
    109         assert val.length == 2;
    110         return new Long2(val[0], val[1]);
    111     }
    112 
    113     private Long3 pack_l3(long[] val) {
    114         assert val.length == 3;
    115         return new Long3(val[0], val[1], val[2]);
    116     }
    117 
    118     private Long4 pack_l4(long[] val) {
    119         assert val.length == 4;
    120         return new Long4(val[0], val[1], val[2], val[3]);
    121     }
    122 
    123     // random vector generation functions
    124     private float[] randvec_float(int dim) {
    125         float[] fv = new float[dim];
    126         for (int i = 0; i < dim; ++i)
    127             fv[i] = rand.nextFloat();
    128         return fv;
    129     }
    130 
    131     private byte[] randvec_char(int dim) {
    132         byte[] cv = new byte[dim];
    133         rand.nextBytes(cv);
    134         return cv;
    135     }
    136 
    137     private short[] randvec_uchar(int dim) {
    138         short[] ucv = new short[dim];
    139         for (int i = 0; i < dim; ++i)
    140             ucv[i] = (short) rand.nextInt(0x1 << 8);
    141         return ucv;
    142     }
    143 
    144     private short[] randvec_short(int dim) {
    145         short[] sv = new short[dim];
    146         for (int i = 0; i < dim; ++i)
    147             sv[i] = (short) rand.nextInt(0x1 << 16);
    148         return sv;
    149     }
    150 
    151     private int[] randvec_ushort(int dim) {
    152         int[] usv = new int[dim];
    153         for (int i = 0; i < dim; ++i)
    154             usv[i] = rand.nextInt(0x1 << 16);
    155         return usv;
    156     }
    157 
    158     private int[] randvec_int(int dim) {
    159         int[] iv = new int[dim];
    160         for (int i = 0; i < dim; ++i)
    161             iv[i] = rand.nextInt();
    162         return iv;
    163     }
    164 
    165     private long[] randvec_uint(int dim) {
    166         long[] uiv = new long[dim];
    167         for (int i = 0; i < dim; ++i)
    168             uiv[i] = (long) rand.nextInt() - (long) Integer.MIN_VALUE;
    169         return uiv;
    170     }
    171 
    172     private long[] randvec_long(int dim) {
    173         long[] lv = new long[dim];
    174         for (int i = 0; i < dim; ++i)
    175             lv[i] = rand.nextLong();
    176         return lv;
    177     }
    178     // TODO:  unsigned long generator
    179 
    180     // min reference functions
    181     private float min(float v1, float v2) {
    182         return v1 < v2 ? v1 : v2;
    183     }
    184 
    185     private float[] min(float[] v1, float[] v2) {
    186         assert v1.length == v2.length;
    187         float[] rv = new float[v1.length];
    188         for (int i = 0; i < v1.length; ++i)
    189             rv[i] = min(v1[i], v2[i]);
    190         return rv;
    191     }
    192 
    193     private byte min(byte v1, byte v2) {
    194         return v1 < v2 ? v1 : v2;
    195     }
    196 
    197     private byte[] min(byte[] v1, byte[] v2) {
    198         assert v1.length == v2.length;
    199         byte[] rv = new byte[v1.length];
    200         for (int i = 0; i < v1.length; ++i)
    201             rv[i] = min(v1[i], v2[i]);
    202         return rv;
    203     }
    204 
    205     private short min(short v1, short v2) {
    206         return v1 < v2 ? v1 : v2;
    207     }
    208 
    209     private short[] min(short[] v1, short[] v2) {
    210         assert v1.length == v2.length;
    211         short[] rv = new short[v1.length];
    212         for (int i = 0; i < v1.length; ++i)
    213             rv[i] = min(v1[i], v2[i]);
    214         return rv;
    215     }
    216 
    217     private int min(int v1, int v2) {
    218         return v1 < v2 ? v1 : v2;
    219     }
    220 
    221     private int[] min(int[] v1, int[] v2) {
    222         assert v1.length == v2.length;
    223         int[] rv = new int[v1.length];
    224         for (int i = 0; i < v1.length; ++i)
    225             rv[i] = min(v1[i], v2[i]);
    226         return rv;
    227     }
    228 
    229     private long min(long v1, long v2) {
    230         return v1 < v2 ? v1 : v2;
    231     }
    232 
    233     private long[] min(long[] v1, long[] v2) {
    234         assert v1.length == v2.length;
    235         long[] rv = new long[v1.length];
    236         for (int i = 0; i < v1.length; ++i)
    237             rv[i] = min(v1[i], v2[i]);
    238         return rv;
    239     }
    240     // TODO:  unsigned long version of min
    241 
    242     // max reference functions
    243     private float max(float v1, float v2) {
    244         return v1 > v2 ? v1 : v2;
    245     }
    246 
    247     private float[] max(float[] v1, float[] v2) {
    248         assert v1.length == v2.length;
    249         float[] rv = new float[v1.length];
    250         for (int i = 0; i < v1.length; ++i)
    251             rv[i] = max(v1[i], v2[i]);
    252         return rv;
    253     }
    254 
    255     private byte max(byte v1, byte v2) {
    256         return v1 > v2 ? v1 : v2;
    257     }
    258 
    259     private byte[] max(byte[] v1, byte[] v2) {
    260         assert v1.length == v2.length;
    261         byte[] rv = new byte[v1.length];
    262         for (int i = 0; i < v1.length; ++i)
    263             rv[i] = max(v1[i], v2[i]);
    264         return rv;
    265     }
    266 
    267     private short max(short v1, short v2) {
    268         return v1 > v2 ? v1 : v2;
    269     }
    270 
    271     private short[] max(short[] v1, short[] v2) {
    272         assert v1.length == v2.length;
    273         short[] rv = new short[v1.length];
    274         for (int i = 0; i < v1.length; ++i)
    275             rv[i] = max(v1[i], v2[i]);
    276         return rv;
    277     }
    278 
    279     private int max(int v1, int v2) {
    280         return v1 > v2 ? v1 : v2;
    281     }
    282 
    283     private int[] max(int[] v1, int[] v2) {
    284         assert v1.length == v2.length;
    285         int[] rv = new int[v1.length];
    286         for (int i = 0; i < v1.length; ++i)
    287             rv[i] = max(v1[i], v2[i]);
    288         return rv;
    289     }
    290 
    291     private long max(long v1, long v2) {
    292         return v1 > v2 ? v1 : v2;
    293     }
    294 
    295     private long[] max(long[] v1, long[] v2) {
    296         assert v1.length == v2.length;
    297         long[] rv = new long[v1.length];
    298         for (int i = 0; i < v1.length; ++i)
    299             rv[i] = max(v1[i], v2[i]);
    300         return rv;
    301     }
    302     // TODO:  unsigned long version of max
    303 
    304     // fmin reference functions
    305     private float fmin(float v1, float v2) {
    306         return min(v1, v2);
    307     }
    308 
    309     private float[] fmin(float[] v1, float[] v2) {
    310         return min(v1, v2);
    311     }
    312 
    313     private float[] fmin(float[] v1, float v2) {
    314         float[] rv = new float[v1.length];
    315         for (int i = 0; i < v1.length; ++i)
    316             rv[i] = min(v1[i], v2);
    317         return rv;
    318     }
    319 
    320     // fmax reference functions
    321     private float fmax(float v1, float v2) {
    322         return max(v1, v2);
    323     }
    324 
    325     private float[] fmax(float[] v1, float[] v2) {
    326         return max(v1, v2);
    327     }
    328 
    329     private float[] fmax(float[] v1, float v2) {
    330         float[] rv = new float[v1.length];
    331         for (int i = 0; i < v1.length; ++i)
    332             rv[i] = max(v1[i], v2);
    333         return rv;
    334     }
    335 
    336     private void initializeValues(ScriptC_math_agree s) {
    337         float x = rand.nextFloat();
    338         float y = rand.nextFloat();
    339 
    340         s.set_x(x);
    341         s.set_y(y);
    342         s.set_result_add(x + y);
    343         s.set_result_sub(x - y);
    344         s.set_result_mul(x * y);
    345         s.set_result_div(x / y);
    346 
    347         // Generate random vectors of all types
    348         float rand_f1_0 = rand.nextFloat();
    349         float[] rand_f2_0 = randvec_float(2);
    350         float[] rand_f3_0 = randvec_float(3);
    351         float[] rand_f4_0 = randvec_float(4);
    352         float rand_f1_1 = rand.nextFloat();
    353         float[] rand_f2_1 = randvec_float(2);
    354         float[] rand_f3_1 = randvec_float(3);
    355         float[] rand_f4_1 = randvec_float(4);
    356         short rand_uc1_0 = (short) rand.nextInt(0x1 << 8);
    357         short[] rand_uc2_0 = randvec_uchar(2);
    358         short[] rand_uc3_0 = randvec_uchar(3);
    359         short[] rand_uc4_0 = randvec_uchar(4);
    360         short rand_uc1_1 = (short) rand.nextInt(0x1 << 8);
    361         short[] rand_uc2_1 = randvec_uchar(2);
    362         short[] rand_uc3_1 = randvec_uchar(3);
    363         short[] rand_uc4_1 = randvec_uchar(4);
    364         short rand_ss1_0 = (short) rand.nextInt(0x1 << 16);
    365         short[] rand_ss2_0 = randvec_short(2);
    366         short[] rand_ss3_0 = randvec_short(3);
    367         short[] rand_ss4_0 = randvec_short(4);
    368         short rand_ss1_1 = (short) rand.nextInt(0x1 << 16);
    369         short[] rand_ss2_1 = randvec_short(2);
    370         short[] rand_ss3_1 = randvec_short(3);
    371         short[] rand_ss4_1 = randvec_short(4);
    372         int rand_us1_0 = rand.nextInt(0x1 << 16);
    373         int[] rand_us2_0 = randvec_ushort(2);
    374         int[] rand_us3_0 = randvec_ushort(3);
    375         int[] rand_us4_0 = randvec_ushort(4);
    376         int rand_us1_1 = rand.nextInt(0x1 << 16);
    377         int[] rand_us2_1 = randvec_ushort(2);
    378         int[] rand_us3_1 = randvec_ushort(3);
    379         int[] rand_us4_1 = randvec_ushort(4);
    380         int rand_si1_0 = rand.nextInt();
    381         int[] rand_si2_0 = randvec_int(2);
    382         int[] rand_si3_0 = randvec_int(3);
    383         int[] rand_si4_0 = randvec_int(4);
    384         int rand_si1_1 = rand.nextInt();
    385         int[] rand_si2_1 = randvec_int(2);
    386         int[] rand_si3_1 = randvec_int(3);
    387         int[] rand_si4_1 = randvec_int(4);
    388         long rand_ui1_0 = (long) rand.nextInt() - (long) Integer.MIN_VALUE;
    389         long[] rand_ui2_0 = randvec_uint(2);
    390         long[] rand_ui3_0 = randvec_uint(3);
    391         long[] rand_ui4_0 = randvec_uint(4);
    392         long rand_ui1_1 = (long) rand.nextInt() - (long) Integer.MIN_VALUE;
    393         long[] rand_ui2_1 = randvec_uint(2);
    394         long[] rand_ui3_1 = randvec_uint(3);
    395         long[] rand_ui4_1 = randvec_uint(4);
    396         long rand_sl1_0 = rand.nextLong();
    397         long[] rand_sl2_0 = randvec_long(2);
    398         long[] rand_sl3_0 = randvec_long(3);
    399         long[] rand_sl4_0 = randvec_long(4);
    400         long rand_sl1_1 = rand.nextLong();
    401         long[] rand_sl2_1 = randvec_long(2);
    402         long[] rand_sl3_1 = randvec_long(3);
    403         long[] rand_sl4_1 = randvec_long(4);
    404         byte rand_sc1_0 = (byte) rand.nextInt(0x1 << 8);
    405         byte[] rand_sc2_0 = randvec_char(2);
    406         byte[] rand_sc3_0 = randvec_char(3);
    407         byte[] rand_sc4_0 = randvec_char(4);
    408         byte rand_sc1_1 = (byte) rand.nextInt(0x1 << 8);
    409         byte[] rand_sc2_1 = randvec_char(2);
    410         byte[] rand_sc3_1 = randvec_char(3);
    411         byte[] rand_sc4_1 = randvec_char(4);
    412         // TODO:  generate unsigned long vectors
    413 
    414         // Set random vectors in renderscript code
    415         s.set_rand_f1_0(rand_f1_0);
    416         s.set_rand_f2_0(pack_f2(rand_f2_0));
    417         s.set_rand_f3_0(pack_f3(rand_f3_0));
    418         s.set_rand_f4_0(pack_f4(rand_f4_0));
    419         s.set_rand_f1_1(rand_f1_1);
    420         s.set_rand_f2_1(pack_f2(rand_f2_1));
    421         s.set_rand_f3_1(pack_f3(rand_f3_1));
    422         s.set_rand_f4_1(pack_f4(rand_f4_1));
    423         s.set_rand_uc1_1(rand_uc1_1);
    424         s.set_rand_uc2_1(pack_s2(rand_uc2_1));
    425         s.set_rand_uc3_1(pack_s3(rand_uc3_1));
    426         s.set_rand_uc4_1(pack_s4(rand_uc4_1));
    427         s.set_rand_ss1_0(rand_ss1_0);
    428         s.set_rand_ss2_0(pack_s2(rand_ss2_0));
    429         s.set_rand_ss3_0(pack_s3(rand_ss3_0));
    430         s.set_rand_ss4_0(pack_s4(rand_ss4_0));
    431         s.set_rand_ss1_1(rand_ss1_1);
    432         s.set_rand_ss2_1(pack_s2(rand_ss2_1));
    433         s.set_rand_ss3_1(pack_s3(rand_ss3_1));
    434         s.set_rand_ss4_1(pack_s4(rand_ss4_1));
    435         s.set_rand_us1_0(rand_us1_0);
    436         s.set_rand_us2_0(pack_i2(rand_us2_0));
    437         s.set_rand_us3_0(pack_i3(rand_us3_0));
    438         s.set_rand_us4_0(pack_i4(rand_us4_0));
    439         s.set_rand_us1_1(rand_us1_1);
    440         s.set_rand_us2_1(pack_i2(rand_us2_1));
    441         s.set_rand_us3_1(pack_i3(rand_us3_1));
    442         s.set_rand_us4_1(pack_i4(rand_us4_1));
    443         s.set_rand_si1_0(rand_si1_0);
    444         s.set_rand_si2_0(pack_i2(rand_si2_0));
    445         s.set_rand_si3_0(pack_i3(rand_si3_0));
    446         s.set_rand_si4_0(pack_i4(rand_si4_0));
    447         s.set_rand_si1_1(rand_si1_1);
    448         s.set_rand_si2_1(pack_i2(rand_si2_1));
    449         s.set_rand_si3_1(pack_i3(rand_si3_1));
    450         s.set_rand_si4_1(pack_i4(rand_si4_1));
    451         s.set_rand_ui1_0(rand_ui1_0);
    452         s.set_rand_ui2_0(pack_l2(rand_ui2_0));
    453         s.set_rand_ui3_0(pack_l3(rand_ui3_0));
    454         s.set_rand_ui4_0(pack_l4(rand_ui4_0));
    455         s.set_rand_ui1_1(rand_ui1_1);
    456         s.set_rand_ui2_1(pack_l2(rand_ui2_1));
    457         s.set_rand_ui3_1(pack_l3(rand_ui3_1));
    458         s.set_rand_ui4_1(pack_l4(rand_ui4_1));
    459         s.set_rand_sl1_0(rand_sl1_0);
    460         s.set_rand_sl2_0(pack_l2(rand_sl2_0));
    461         s.set_rand_sl3_0(pack_l3(rand_sl3_0));
    462         s.set_rand_sl4_0(pack_l4(rand_sl4_0));
    463         s.set_rand_sl1_1(rand_sl1_1);
    464         s.set_rand_sl2_1(pack_l2(rand_sl2_1));
    465         s.set_rand_sl3_1(pack_l3(rand_sl3_1));
    466         s.set_rand_sl4_1(pack_l4(rand_sl4_1));
    467         s.set_rand_uc1_0(rand_uc1_0);
    468         s.set_rand_uc2_0(pack_s2(rand_uc2_0));
    469         s.set_rand_uc3_0(pack_s3(rand_uc3_0));
    470         s.set_rand_uc4_0(pack_s4(rand_uc4_0));
    471         s.set_rand_sc1_0(rand_sc1_0);
    472         s.set_rand_sc2_0(pack_b2(rand_sc2_0));
    473         s.set_rand_sc3_0(pack_b3(rand_sc3_0));
    474         s.set_rand_sc4_0(pack_b4(rand_sc4_0));
    475         s.set_rand_sc1_1(rand_sc1_1);
    476         s.set_rand_sc2_1(pack_b2(rand_sc2_1));
    477         s.set_rand_sc3_1(pack_b3(rand_sc3_1));
    478         s.set_rand_sc4_1(pack_b4(rand_sc4_1));
    479         // TODO:  set unsigned long vectors
    480 
    481         // Set results for min
    482         s.set_min_rand_f1_f1(min(rand_f1_0, rand_f1_1));
    483         s.set_min_rand_f2_f2(pack_f2(min(rand_f2_0, rand_f2_1)));
    484         s.set_min_rand_f3_f3(pack_f3(min(rand_f3_0, rand_f3_1)));
    485         s.set_min_rand_f4_f4(pack_f4(min(rand_f4_0, rand_f4_1)));
    486         s.set_min_rand_uc1_uc1(min(rand_uc1_0, rand_uc1_1));
    487         s.set_min_rand_uc2_uc2(pack_s2(min(rand_uc2_0, rand_uc2_1)));
    488         s.set_min_rand_uc3_uc3(pack_s3(min(rand_uc3_0, rand_uc3_1)));
    489         s.set_min_rand_uc4_uc4(pack_s4(min(rand_uc4_0, rand_uc4_1)));
    490         s.set_min_rand_ss1_ss1(min(rand_ss1_0, rand_ss1_1));
    491         s.set_min_rand_ss2_ss2(pack_s2(min(rand_ss2_0, rand_ss2_1)));
    492         s.set_min_rand_ss3_ss3(pack_s3(min(rand_ss3_0, rand_ss3_1)));
    493         s.set_min_rand_ss4_ss4(pack_s4(min(rand_ss4_0, rand_ss4_1)));
    494         s.set_min_rand_us1_us1(min(rand_us1_0, rand_us1_1));
    495         s.set_min_rand_us2_us2(pack_i2(min(rand_us2_0, rand_us2_1)));
    496         s.set_min_rand_us3_us3(pack_i3(min(rand_us3_0, rand_us3_1)));
    497         s.set_min_rand_us4_us4(pack_i4(min(rand_us4_0, rand_us4_1)));
    498         s.set_min_rand_si1_si1(min(rand_si1_0, rand_si1_1));
    499         s.set_min_rand_si2_si2(pack_i2(min(rand_si2_0, rand_si2_1)));
    500         s.set_min_rand_si3_si3(pack_i3(min(rand_si3_0, rand_si3_1)));
    501         s.set_min_rand_si4_si4(pack_i4(min(rand_si4_0, rand_si4_1)));
    502         s.set_min_rand_ui1_ui1(min(rand_ui1_0, rand_ui1_1));
    503         s.set_min_rand_ui2_ui2(pack_l2(min(rand_ui2_0, rand_ui2_1)));
    504         s.set_min_rand_ui3_ui3(pack_l3(min(rand_ui3_0, rand_ui3_1)));
    505         s.set_min_rand_ui4_ui4(pack_l4(min(rand_ui4_0, rand_ui4_1)));
    506         s.set_min_rand_sl1_sl1(min(rand_sl1_0, rand_sl1_1));
    507         s.set_min_rand_sl2_sl2(pack_l2(min(rand_sl2_0, rand_sl2_1)));
    508         s.set_min_rand_sl3_sl3(pack_l3(min(rand_sl3_0, rand_sl3_1)));
    509         s.set_min_rand_sl4_sl4(pack_l4(min(rand_sl4_0, rand_sl4_1)));
    510         s.set_min_rand_sc1_sc1(min(rand_sc1_0, rand_sc1_1));
    511         s.set_min_rand_sc2_sc2(pack_b2(min(rand_sc2_0, rand_sc2_1)));
    512         s.set_min_rand_sc3_sc3(pack_b3(min(rand_sc3_0, rand_sc3_1)));
    513         s.set_min_rand_sc4_sc4(pack_b4(min(rand_sc4_0, rand_sc4_1)));
    514         // TODO:  set results for unsigned long min
    515 
    516         // Set results for max
    517         s.set_max_rand_f1_f1(max(rand_f1_0, rand_f1_1));
    518         s.set_max_rand_f2_f2(pack_f2(max(rand_f2_0, rand_f2_1)));
    519         s.set_max_rand_f3_f3(pack_f3(max(rand_f3_0, rand_f3_1)));
    520         s.set_max_rand_f4_f4(pack_f4(max(rand_f4_0, rand_f4_1)));
    521         s.set_max_rand_uc1_uc1(max(rand_uc1_0, rand_uc1_1));
    522         s.set_max_rand_uc2_uc2(pack_s2(max(rand_uc2_0, rand_uc2_1)));
    523         s.set_max_rand_uc3_uc3(pack_s3(max(rand_uc3_0, rand_uc3_1)));
    524         s.set_max_rand_uc4_uc4(pack_s4(max(rand_uc4_0, rand_uc4_1)));
    525         s.set_max_rand_ss1_ss1(max(rand_ss1_0, rand_ss1_1));
    526         s.set_max_rand_ss2_ss2(pack_s2(max(rand_ss2_0, rand_ss2_1)));
    527         s.set_max_rand_ss3_ss3(pack_s3(max(rand_ss3_0, rand_ss3_1)));
    528         s.set_max_rand_ss4_ss4(pack_s4(max(rand_ss4_0, rand_ss4_1)));
    529         s.set_max_rand_us1_us1(max(rand_us1_0, rand_us1_1));
    530         s.set_max_rand_us2_us2(pack_i2(max(rand_us2_0, rand_us2_1)));
    531         s.set_max_rand_us3_us3(pack_i3(max(rand_us3_0, rand_us3_1)));
    532         s.set_max_rand_us4_us4(pack_i4(max(rand_us4_0, rand_us4_1)));
    533         s.set_max_rand_si1_si1(max(rand_si1_0, rand_si1_1));
    534         s.set_max_rand_si2_si2(pack_i2(max(rand_si2_0, rand_si2_1)));
    535         s.set_max_rand_si3_si3(pack_i3(max(rand_si3_0, rand_si3_1)));
    536         s.set_max_rand_si4_si4(pack_i4(max(rand_si4_0, rand_si4_1)));
    537         s.set_max_rand_ui1_ui1(max(rand_ui1_0, rand_ui1_1));
    538         s.set_max_rand_ui2_ui2(pack_l2(max(rand_ui2_0, rand_ui2_1)));
    539         s.set_max_rand_ui3_ui3(pack_l3(max(rand_ui3_0, rand_ui3_1)));
    540         s.set_max_rand_ui4_ui4(pack_l4(max(rand_ui4_0, rand_ui4_1)));
    541         s.set_max_rand_sl1_sl1(max(rand_sl1_0, rand_sl1_1));
    542         s.set_max_rand_sl2_sl2(pack_l2(max(rand_sl2_0, rand_sl2_1)));
    543         s.set_max_rand_sl3_sl3(pack_l3(max(rand_sl3_0, rand_sl3_1)));
    544         s.set_max_rand_sl4_sl4(pack_l4(max(rand_sl4_0, rand_sl4_1)));
    545         s.set_max_rand_sc1_sc1(max(rand_sc1_0, rand_sc1_1));
    546         s.set_max_rand_sc2_sc2(pack_b2(max(rand_sc2_0, rand_sc2_1)));
    547         s.set_max_rand_sc3_sc3(pack_b3(max(rand_sc3_0, rand_sc3_1)));
    548         s.set_max_rand_sc4_sc4(pack_b4(max(rand_sc4_0, rand_sc4_1)));
    549 
    550         // TODO:  set results for unsigned long max
    551 
    552         // Set results for fmin
    553         s.set_fmin_rand_f1_f1(fmin(rand_f1_0, rand_f1_1));
    554         s.set_fmin_rand_f2_f2(pack_f2(fmin(rand_f2_0, rand_f2_1)));
    555         s.set_fmin_rand_f3_f3(pack_f3(fmin(rand_f3_0, rand_f3_1)));
    556         s.set_fmin_rand_f4_f4(pack_f4(fmin(rand_f4_0, rand_f4_1)));
    557         s.set_fmin_rand_f2_f1(pack_f2(fmin(rand_f2_0, rand_f1_1)));
    558         s.set_fmin_rand_f3_f1(pack_f3(fmin(rand_f3_0, rand_f1_1)));
    559         s.set_fmin_rand_f4_f1(pack_f4(fmin(rand_f4_0, rand_f1_1)));
    560 
    561         // Set results for fmax
    562         s.set_fmax_rand_f1_f1(fmax(rand_f1_0, rand_f1_1));
    563         s.set_fmax_rand_f2_f2(pack_f2(fmax(rand_f2_0, rand_f2_1)));
    564         s.set_fmax_rand_f3_f3(pack_f3(fmax(rand_f3_0, rand_f3_1)));
    565         s.set_fmax_rand_f4_f4(pack_f4(fmax(rand_f4_0, rand_f4_1)));
    566         s.set_fmax_rand_f2_f1(pack_f2(fmax(rand_f2_0, rand_f1_1)));
    567         s.set_fmax_rand_f3_f1(pack_f3(fmax(rand_f3_0, rand_f1_1)));
    568         s.set_fmax_rand_f4_f1(pack_f4(fmax(rand_f4_0, rand_f1_1)));
    569     }
    570 
    571     public void run() {
    572         RenderScript pRS = createRenderScript(true);
    573         ScriptC_math_agree s = new ScriptC_math_agree(pRS);
    574         initializeValues(s);
    575         s.invoke_math_agree_test();
    576         pRS.finish();
    577         s.destroy();
    578         pRS.destroy();
    579     }
    580 }
    581