185d4955a13339054ffbd350874b1646125a6a130Jason Sams/*
285d4955a13339054ffbd350874b1646125a6a130Jason Sams * Copyright (C) 2012 The Android Open Source Project
385d4955a13339054ffbd350874b1646125a6a130Jason Sams *
485d4955a13339054ffbd350874b1646125a6a130Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
585d4955a13339054ffbd350874b1646125a6a130Jason Sams * you may not use this file except in compliance with the License.
685d4955a13339054ffbd350874b1646125a6a130Jason Sams * You may obtain a copy of the License at
785d4955a13339054ffbd350874b1646125a6a130Jason Sams *
885d4955a13339054ffbd350874b1646125a6a130Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
985d4955a13339054ffbd350874b1646125a6a130Jason Sams *
1085d4955a13339054ffbd350874b1646125a6a130Jason Sams * Unless required by applicable law or agreed to in writing, software
1185d4955a13339054ffbd350874b1646125a6a130Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1285d4955a13339054ffbd350874b1646125a6a130Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1385d4955a13339054ffbd350874b1646125a6a130Jason Sams * See the License for the specific language governing permissions and
1485d4955a13339054ffbd350874b1646125a6a130Jason Sams * limitations under the License.
1585d4955a13339054ffbd350874b1646125a6a130Jason Sams */
1685d4955a13339054ffbd350874b1646125a6a130Jason Sams
1785d4955a13339054ffbd350874b1646125a6a130Jason Samspackage com.android.rs.test;
1885d4955a13339054ffbd350874b1646125a6a130Jason Sams
1985d4955a13339054ffbd350874b1646125a6a130Jason Samsimport android.content.Context;
2085d4955a13339054ffbd350874b1646125a6a130Jason Samsimport android.content.res.Resources;
2185d4955a13339054ffbd350874b1646125a6a130Jason Samsimport android.renderscript.*;
2285d4955a13339054ffbd350874b1646125a6a130Jason Samsimport android.util.Log;
2385d4955a13339054ffbd350874b1646125a6a130Jason Sams
2485d4955a13339054ffbd350874b1646125a6a130Jason Samspublic class UT_copy_test extends UnitTest {
2585d4955a13339054ffbd350874b1646125a6a130Jason Sams    private Resources mRes;
2685d4955a13339054ffbd350874b1646125a6a130Jason Sams    boolean pass = true;
2785d4955a13339054ffbd350874b1646125a6a130Jason Sams
2885d4955a13339054ffbd350874b1646125a6a130Jason Sams    protected UT_copy_test(RSTestCore rstc, Resources res, Context ctx) {
2985d4955a13339054ffbd350874b1646125a6a130Jason Sams        super(rstc, "Copy", ctx);
3085d4955a13339054ffbd350874b1646125a6a130Jason Sams        mRes = res;
3185d4955a13339054ffbd350874b1646125a6a130Jason Sams    }
3285d4955a13339054ffbd350874b1646125a6a130Jason Sams
3385d4955a13339054ffbd350874b1646125a6a130Jason Sams    void testFloat2(RenderScript rs, ScriptC_copy_test s) {
3485d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
3585d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
3685d4955a13339054ffbd350874b1646125a6a130Jason Sams
3785d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f1 = new float[1024 * 2];
3885d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f2 = new float[1024 * 2];
3985d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
4085d4955a13339054ffbd350874b1646125a6a130Jason Sams            f1[ct] = (float)ct;
4185d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
4285d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.copyFrom(f1);
4385d4955a13339054ffbd350874b1646125a6a130Jason Sams
4485d4955a13339054ffbd350874b1646125a6a130Jason Sams        s.forEach_copyFloat2(a1, a2);
4585d4955a13339054ffbd350874b1646125a6a130Jason Sams
4685d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.copyTo(f2);
4785d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
4885d4955a13339054ffbd350874b1646125a6a130Jason Sams            if (f1[ct] != f2[ct]) {
4985d4955a13339054ffbd350874b1646125a6a130Jason Sams                failTest();
5085d4955a13339054ffbd350874b1646125a6a130Jason Sams                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
5185d4955a13339054ffbd350874b1646125a6a130Jason Sams            }
5285d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
5385d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.destroy();
5485d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.destroy();
5585d4955a13339054ffbd350874b1646125a6a130Jason Sams    }
5685d4955a13339054ffbd350874b1646125a6a130Jason Sams
5785d4955a13339054ffbd350874b1646125a6a130Jason Sams    void testFloat3(RenderScript rs, ScriptC_copy_test s) {
5885d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
5985d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
6085d4955a13339054ffbd350874b1646125a6a130Jason Sams
6185d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f1 = new float[1024 * 4];
6285d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f2 = new float[1024 * 4];
6385d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
6485d4955a13339054ffbd350874b1646125a6a130Jason Sams            f1[ct] = (float)ct;
6585d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
6685d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.copyFrom(f1);
6785d4955a13339054ffbd350874b1646125a6a130Jason Sams
6885d4955a13339054ffbd350874b1646125a6a130Jason Sams        s.forEach_copyFloat3(a1, a2);
6985d4955a13339054ffbd350874b1646125a6a130Jason Sams
7085d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.copyTo(f2);
7185d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
7285d4955a13339054ffbd350874b1646125a6a130Jason Sams            if ((f1[ct] != f2[ct]) && ((ct&3) != 3)) {
7385d4955a13339054ffbd350874b1646125a6a130Jason Sams                failTest();
7485d4955a13339054ffbd350874b1646125a6a130Jason Sams                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
7585d4955a13339054ffbd350874b1646125a6a130Jason Sams            }
7685d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
7785d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.destroy();
7885d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.destroy();
7985d4955a13339054ffbd350874b1646125a6a130Jason Sams    }
8085d4955a13339054ffbd350874b1646125a6a130Jason Sams
8185d4955a13339054ffbd350874b1646125a6a130Jason Sams    void testFloat4(RenderScript rs, ScriptC_copy_test s) {
8285d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
8385d4955a13339054ffbd350874b1646125a6a130Jason Sams        Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
8485d4955a13339054ffbd350874b1646125a6a130Jason Sams
8585d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f1 = new float[1024 * 4];
8685d4955a13339054ffbd350874b1646125a6a130Jason Sams        float[] f2 = new float[1024 * 4];
8785d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
8885d4955a13339054ffbd350874b1646125a6a130Jason Sams            f1[ct] = (float)ct;
8985d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
9085d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.copyFrom(f1);
9185d4955a13339054ffbd350874b1646125a6a130Jason Sams
9285d4955a13339054ffbd350874b1646125a6a130Jason Sams        s.forEach_copyFloat4(a1, a2);
9385d4955a13339054ffbd350874b1646125a6a130Jason Sams
9485d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.copyTo(f2);
9585d4955a13339054ffbd350874b1646125a6a130Jason Sams        for (int ct=0; ct < f1.length; ct++) {
9685d4955a13339054ffbd350874b1646125a6a130Jason Sams            if (f1[ct] != f2[ct]) {
9785d4955a13339054ffbd350874b1646125a6a130Jason Sams                failTest();
9885d4955a13339054ffbd350874b1646125a6a130Jason Sams                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
9985d4955a13339054ffbd350874b1646125a6a130Jason Sams            }
10085d4955a13339054ffbd350874b1646125a6a130Jason Sams        }
10185d4955a13339054ffbd350874b1646125a6a130Jason Sams        a1.destroy();
10285d4955a13339054ffbd350874b1646125a6a130Jason Sams        a2.destroy();
10385d4955a13339054ffbd350874b1646125a6a130Jason Sams    }
10485d4955a13339054ffbd350874b1646125a6a130Jason Sams
10585d4955a13339054ffbd350874b1646125a6a130Jason Sams    public void run() {
10685d4955a13339054ffbd350874b1646125a6a130Jason Sams        RenderScript pRS = RenderScript.create(mCtx);
10785d4955a13339054ffbd350874b1646125a6a130Jason Sams        ScriptC_copy_test s = new ScriptC_copy_test(pRS);
10885d4955a13339054ffbd350874b1646125a6a130Jason Sams        pRS.setMessageHandler(mRsMessage);
10985d4955a13339054ffbd350874b1646125a6a130Jason Sams
11085d4955a13339054ffbd350874b1646125a6a130Jason Sams        testFloat2(pRS, s);
11185d4955a13339054ffbd350874b1646125a6a130Jason Sams        testFloat3(pRS, s);
11285d4955a13339054ffbd350874b1646125a6a130Jason Sams        testFloat4(pRS, s);
11385d4955a13339054ffbd350874b1646125a6a130Jason Sams        s.invoke_sendResult(true);
11485d4955a13339054ffbd350874b1646125a6a130Jason Sams
11585d4955a13339054ffbd350874b1646125a6a130Jason Sams        pRS.finish();
11685d4955a13339054ffbd350874b1646125a6a130Jason Sams        waitForMessage();
11785d4955a13339054ffbd350874b1646125a6a130Jason Sams        pRS.destroy();
11885d4955a13339054ffbd350874b1646125a6a130Jason Sams    }
11985d4955a13339054ffbd350874b1646125a6a130Jason Sams}
12085d4955a13339054ffbd350874b1646125a6a130Jason Sams
121