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 Hines
24648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class UT_copy_test extends UnitTest {
25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private Resources mRes;
26648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    boolean pass = true;
27648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
28648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    protected UT_copy_test(RSTestCore rstc, Resources res, Context ctx) {
29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        super(rstc, "Copy", ctx);
30648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        mRes = res;
31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    void testFloat2(RenderScript rs, ScriptC_copy_test s) {
34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f1 = new float[1024 * 2];
38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f2 = new float[1024 * 2];
39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            f1[ct] = (float)ct;
41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.copyFrom(f1);
43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.forEach_copyFloat2(a1, a2);
45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.copyTo(f2);
47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            if (f1[ct] != f2[ct]) {
49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                failTest();
50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            }
52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.destroy();
54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.destroy();
55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    void testFloat3(RenderScript rs, ScriptC_copy_test s) {
58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f1 = new float[1024 * 4];
62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f2 = new float[1024 * 4];
63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            f1[ct] = (float)ct;
65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.copyFrom(f1);
67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.forEach_copyFloat3(a1, a2);
69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.copyTo(f2);
71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            if ((f1[ct] != f2[ct]) && ((ct&3) != 3)) {
73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                failTest();
74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            }
76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.destroy();
78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.destroy();
79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    void testFloat4(RenderScript rs, ScriptC_copy_test s) {
82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f1 = new float[1024 * 4];
86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        float[] f2 = new float[1024 * 4];
87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            f1[ct] = (float)ct;
89648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
90648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.copyFrom(f1);
91648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
92648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.forEach_copyFloat4(a1, a2);
93648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
94648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.copyTo(f2);
95648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int ct=0; ct < f1.length; ct++) {
96648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            if (f1[ct] != f2[ct]) {
97648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                failTest();
98648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
99648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            }
100648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
101648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a1.destroy();
102648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        a2.destroy();
103648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
104648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
105648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    public void run() {
106648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        RenderScript pRS = RenderScript.create(mCtx);
107648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ScriptC_copy_test s = new ScriptC_copy_test(pRS);
108648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.setMessageHandler(mRsMessage);
109648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
110648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        testFloat2(pRS, s);
111648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        testFloat3(pRS, s);
112648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        testFloat4(pRS, s);
113648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.invoke_sendResult(true);
114648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
115648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.finish();
116648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        waitForMessage();
117648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.destroy();
118648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
119648a1c137663ef7207684d0d7009dd5518942111Stephen Hines}
120648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
121