1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/*
2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2013 The Android Open Source Project
3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License.
6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at
7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software
11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and
14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License.
15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */
16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.test_compat;
18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.res.Resources;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.support.v8.renderscript.*;
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class UT_element extends UnitTest {
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Resources mRes;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Element simpleElem;
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Element complexElem;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final String subElemNames[] = {
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem0",
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem1",
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem2",
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "arrayElem0",
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "arrayElem1",
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem3",
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem4",
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem5",
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem6",
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem_7",
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final int subElemArraySizes[] = {
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        2,
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        5,
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final int subElemOffsets[] = {
56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        0,
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        4,
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        8,
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        12,
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        20,
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        40,
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        44,
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        48,
64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        64,
65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        80,
66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UT_element(RSTestCore rstc, Resources res, Context ctx) {
69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        super(rstc, "Element", ctx);
70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mRes = res;
71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void initializeGlobals(RenderScript RS, ScriptC_element s) {
74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        simpleElem = Element.F32_3(RS);
75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        complexElem = ScriptField_ComplexStruct.createElement(RS);
76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.set_simpleElem(simpleElem);
77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.set_complexElem(complexElem);
78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        ScriptField_ComplexStruct data = new ScriptField_ComplexStruct(RS, 1);
80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.bind_complexStruct(data);
81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void testScriptSide(RenderScript pRS) {
84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        ScriptC_element s = new ScriptC_element(pRS);
85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.setMessageHandler(mRsMessage);
86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        initializeGlobals(pRS, s);
87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.invoke_element_test();
88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.finish();
89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        waitForMessage();
90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void testJavaSide(RenderScript RS) {
93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        int subElemCount = simpleElem.getSubElementCount();
95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("subElemCount == 0", subElemCount == 0);
96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        subElemCount = complexElem.getSubElementCount();
98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("subElemCount == 10", subElemCount == 10);
99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("complexElem.getSizeBytes() == ScriptField_ComplexStruct.Item.sizeof",
100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                   complexElem.getBytesSize() == ScriptField_ComplexStruct.Item.sizeof);
101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        for (int i = 0; i < subElemCount; i ++) {
103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElement(i) != null",
104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElement(i) != null);
105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementName(i).equals(subElemNames[i])",
106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementName(i).equals(subElemNames[i]));
107572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementArraySize(i) == subElemArraySizes[i]",
108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementArraySize(i) == subElemArraySizes[i]);
109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]",
110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]);
111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void run() {
115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        RenderScript pRS = RenderScript.create(mCtx);
116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        testScriptSide(pRS);
117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        testJavaSide(pRS);
118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        passTest();
119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.destroy();
120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
122