1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/*
2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2011 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;
18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.res.Resources;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.*;
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element.*;
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element.DataKind.*;
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element.DataType.*;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class UT_element extends UnitTest {
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Resources mRes;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Element simpleElem;
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    Element complexElem;
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final String subElemNames[] = {
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem0",
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem1",
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem2",
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "arrayElem0",
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "arrayElem1",
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem3",
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem4",
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem5",
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem6",
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        "subElem_7",
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final int subElemArraySizes[] = {
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        2,
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        5,
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        1,
56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    final int subElemOffsets[] = {
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        0,
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        4,
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        8,
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        12,
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        20,
64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        40,
65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        44,
66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        48,
67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        64,
68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        80,
69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    };
70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    protected UT_element(RSTestCore rstc, Resources res, Context ctx) {
72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        super(rstc, "Element", ctx);
73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mRes = res;
74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void initializeGlobals(RenderScript RS, ScriptC_element s) {
77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        simpleElem = Element.F32_3(RS);
78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        complexElem = ScriptField_ComplexStruct.createElement(RS);
79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.set_simpleElem(simpleElem);
80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.set_complexElem(complexElem);
81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        ScriptField_ComplexStruct data = new ScriptField_ComplexStruct(RS, 1);
83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.bind_complexStruct(data);
84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void testScriptSide(RenderScript pRS) {
87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        ScriptC_element s = new ScriptC_element(pRS);
88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.setMessageHandler(mRsMessage);
89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        initializeGlobals(pRS, s);
90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.invoke_element_test();
91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.finish();
92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        waitForMessage();
93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private void testJavaSide(RenderScript RS) {
96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        int subElemCount = simpleElem.getSubElementCount();
98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("subElemCount == 0", subElemCount == 0);
99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("simpleElem.getDataKind() == USER",
100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                   simpleElem.getDataKind() == DataKind.USER);
101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("simpleElem.getDataType() == FLOAT_32",
102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                   simpleElem.getDataType() == DataType.FLOAT_32);
103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        subElemCount = complexElem.getSubElementCount();
105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("subElemCount == 10", subElemCount == 10);
106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("complexElem.getDataKind() == USER",
107572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                   complexElem.getDataKind() == DataKind.USER);
108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        _RS_ASSERT("complexElemsimpleElem.getDataType() == NONE",
109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                   complexElem.getDataType() == DataType.NONE);
110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        for (int i = 0; i < subElemCount; i ++) {
112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElement(i) != null",
113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElement(i) != null);
114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementName(i).equals(subElemNames[i])",
115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementName(i).equals(subElemNames[i]));
116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementArraySize(i) == subElemArraySizes[i]",
117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementArraySize(i) == subElemArraySizes[i]);
118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            _RS_ASSERT("complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]",
119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                       complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]);
120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void run() {
124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        RenderScript pRS = RenderScript.create(mCtx);
125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        testScriptSide(pRS);
126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        testJavaSide(pRS);
127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        passTest();
128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        pRS.destroy();
129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
131