1648a1c137663ef7207684d0d7009dd5518942111Stephen Hines/*
2648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Copyright (C) 2013 The Android Open Source Project
3648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *
4648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
5648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * you may not use this file except in compliance with the License.
6648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * You may obtain a copy of the License at
7648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *
8648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *      http://www.apache.org/licenses/LICENSE-2.0
9648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *
10648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * Unless required by applicable law or agreed to in writing, software
11648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
12648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * See the License for the specific language governing permissions and
14648a1c137663ef7207684d0d7009dd5518942111Stephen Hines * limitations under the License.
15648a1c137663ef7207684d0d7009dd5518942111Stephen Hines */
16648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
17648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespackage com.android.rs.test_compatlegacy;
18648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
19648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.Context;
20648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.content.res.Resources;
21648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.support.v8.renderscript.*;
22648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport android.util.Log;
23648a1c137663ef7207684d0d7009dd5518942111Stephen Hinesimport java.util.Arrays;
24648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
25648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class UT_bug_char extends UnitTest {
26648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private Resources mRes;
27648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
28648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    protected UT_bug_char(RSTestCore rstc, Resources res, Context ctx) {
29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        super(rstc, "Bug Char", ctx);
30648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        mRes = res;
31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    // packing functions
34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private Byte2 pack_b2(byte[] val) {
35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        assert val.length == 2;
36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Log.i("bug_char", "pack_b2 " + val[0] + " " + val[1]);
37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        return new Byte2(val[0], val[1]);
38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private byte min(byte v1, byte v2) {
41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        return v1 < v2 ? v1 : v2;
42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private byte[] min(byte[] v1, byte[] v2) {
44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        assert v1.length == v2.length;
45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte[] rv = new byte[v1.length];
46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int i = 0; i < v1.length; ++i)
47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            rv[i] = min(v1[i], v2[i]);
48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        return rv;
49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private void initializeValues(ScriptC_bug_char s) {
52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte rand_sc1_0 = (byte)7;
53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte[] rand_sc2_0 = new byte[2];
54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        rand_sc2_0[0] = 11;
55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        rand_sc2_0[1] = 21;
56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Log.i("bug_char", "Generated sc2_0 to " + Arrays.toString(rand_sc2_0));
57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte rand_sc1_1 = (byte)10;
58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte[] rand_sc2_1 = new byte[2];
59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        rand_sc2_1[0] = 13;
60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        rand_sc2_1[1] = 15;
61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Log.i("bug_char", "Generated sc2_1 to " + Arrays.toString(rand_sc2_1));
62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_rand_sc1_0(rand_sc1_0);
64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_rand_sc2_0(pack_b2(rand_sc2_0));
65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_rand_sc1_1(rand_sc1_1);
66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_rand_sc2_1(pack_b2(rand_sc2_1));
67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        // Set results for min
68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_min_rand_sc1_sc1(min(rand_sc1_0, rand_sc1_1));
69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        byte[] min_rand_sc2_raw = min(rand_sc2_0, rand_sc2_1);
70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Log.i("bug_char", "Generating min_rand_sc2_sc2 to " +
71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines              Arrays.toString(min_rand_sc2_raw));
72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Byte2 min_rand_sc2 = pack_b2(min_rand_sc2_raw);
73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Log.i("bug_char", "Setting min_rand_sc2_sc2 to [" + min_rand_sc2.x +
74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines              ", " + min_rand_sc2.y + "]");
75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_min_rand_sc2_sc2(min_rand_sc2);
76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    public void run() {
79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        RenderScript pRS = RenderScript.create(mCtx);
80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ScriptC_bug_char s = new ScriptC_bug_char(pRS);
81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.setMessageHandler(mRsMessage);
82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        initializeValues(s);
83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.invoke_bug_char_test();
84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.finish();
85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        waitForMessage();
86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.destroy();
87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines}
89