11a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks/*
21a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Copyright (C) 2017 The Android Open Source Project
31a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
41a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License");
51a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * you may not use this file except in compliance with the License.
61a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * You may obtain a copy of the License at
71a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
81a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *      http://www.apache.org/licenses/LICENSE-2.0
91a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks *
101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Unless required by applicable law or agreed to in writing, software
111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS,
121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * See the License for the specific language governing permissions and
141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * limitations under the License.
151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks */
161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubankspackage com.android.rs.unittest;
181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.content.Context;
201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.Allocation;
211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.Element;
221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.RenderScript;
231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.util.Log;
241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubankspublic class UT_copy_test extends UnitTest {
261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    boolean pass = true;
271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    public UT_copy_test(Context ctx) {
291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        super("Copy", ctx);
301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    void testFloat2(RenderScript rs, ScriptC_copy_test s) {
331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024);
351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f1 = new float[1024 * 2];
371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f2 = new float[1024 * 2];
381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            f1[ct] = (float) ct;
401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.copyFrom(f1);
421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        s.forEach_copyFloat2(a1, a2);
441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.copyTo(f2);
461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            if (f1[ct] != f2[ct]) {
481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                failTest();
491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            }
511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.destroy();
531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.destroy();
541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    void testFloat3(RenderScript rs, ScriptC_copy_test s) {
571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024);
591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f1 = new float[1024 * 4];
611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f2 = new float[1024 * 4];
621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            f1[ct] = (float) ct;
641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.copyFrom(f1);
661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        s.forEach_copyFloat3(a1, a2);
681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.copyTo(f2);
701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            if ((f1[ct] != f2[ct]) && ((ct & 3) != 3)) {
721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                failTest();
731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            }
751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.destroy();
771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.destroy();
781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    void testFloat4(RenderScript rs, ScriptC_copy_test s) {
811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024);
831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f1 = new float[1024 * 4];
851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        float[] f2 = new float[1024 * 4];
861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            f1[ct] = (float) ct;
881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.copyFrom(f1);
901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        s.forEach_copyFloat4(a1, a2);
921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.copyTo(f2);
941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        for (int ct = 0; ct < f1.length; ct++) {
951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            if (f1[ct] != f2[ct]) {
961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                failTest();
971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks                Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]);
981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks            }
991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        }
1001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a1.destroy();
1011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        a2.destroy();
1021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
1031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    public void run() {
1054cad330154b7df7c3adf126b9f4b2665191a23a4Arthur Eubanks        RenderScript pRS = createRenderScript(true);
1061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        ScriptC_copy_test s = new ScriptC_copy_test(pRS);
1071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        testFloat2(pRS, s);
1091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        testFloat3(pRS, s);
1101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        testFloat4(pRS, s);
1111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        s.invoke_sendResult(true);
1121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
1131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        pRS.finish();
1141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        s.destroy();
1151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks        pRS.destroy();
1161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks    }
1171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks}
1181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks
119