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 Hines
23648a1c137663ef7207684d0d7009dd5518942111Stephen Hinespublic class UT_element extends UnitTest {
24648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private Resources mRes;
25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
26648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    Element simpleElem;
27648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    Element complexElem;
28648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
29648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    final String subElemNames[] = {
30648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem0",
31648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem1",
32648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem2",
33648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "arrayElem0",
34648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "arrayElem1",
35648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem3",
36648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem4",
37648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem5",
38648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem6",
39648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        "subElem_7",
40648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    };
41648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
42648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    final int subElemArraySizes[] = {
43648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
44648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
45648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
46648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        2,
47648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        5,
48648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
49648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
50648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
51648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
52648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        1,
53648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    };
54648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
55648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    final int subElemOffsets[] = {
56648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        0,
57648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        4,
58648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        8,
59648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        12,
60648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        20,
61648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        40,
62648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        44,
63648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        48,
64648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        64,
65648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        80,
66648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    };
67648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
68648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    protected UT_element(RSTestCore rstc, Resources res, Context ctx) {
69648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        super(rstc, "Element", ctx);
70648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        mRes = res;
71648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
72648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
73648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private void initializeGlobals(RenderScript RS, ScriptC_element s) {
74648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        simpleElem = Element.F32_3(RS);
75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        complexElem = ScriptField_ComplexStruct.createElement(RS);
76648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_simpleElem(simpleElem);
77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.set_complexElem(complexElem);
78648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
79648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ScriptField_ComplexStruct data = new ScriptField_ComplexStruct(RS, 1);
80648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.bind_complexStruct(data);
81648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
82648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
83648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private void testScriptSide(RenderScript pRS) {
84648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ScriptC_element s = new ScriptC_element(pRS);
85648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.setMessageHandler(mRsMessage);
86648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        initializeGlobals(pRS, s);
87648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        s.invoke_element_test();
88648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.finish();
89648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        waitForMessage();
90648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
91648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
92648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    private void testJavaSide(RenderScript RS) {
93648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
94648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        int subElemCount = simpleElem.getSubElementCount();
95648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        _RS_ASSERT("subElemCount == 0", subElemCount == 0);
96648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
97648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        subElemCount = complexElem.getSubElementCount();
98648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        _RS_ASSERT("subElemCount == 10", subElemCount == 10);
99648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        _RS_ASSERT("complexElem.getSizeBytes() == ScriptField_ComplexStruct.Item.sizeof",
100648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                   complexElem.getBytesSize() == ScriptField_ComplexStruct.Item.sizeof);
101648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
102648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        for (int i = 0; i < subElemCount; i ++) {
103648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            _RS_ASSERT("complexElem.getSubElement(i) != null",
104648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                       complexElem.getSubElement(i) != null);
105648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            _RS_ASSERT("complexElem.getSubElementName(i).equals(subElemNames[i])",
106648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                       complexElem.getSubElementName(i).equals(subElemNames[i]));
107648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            _RS_ASSERT("complexElem.getSubElementArraySize(i) == subElemArraySizes[i]",
108648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                       complexElem.getSubElementArraySize(i) == subElemArraySizes[i]);
109648a1c137663ef7207684d0d7009dd5518942111Stephen Hines            _RS_ASSERT("complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]",
110648a1c137663ef7207684d0d7009dd5518942111Stephen Hines                       complexElem.getSubElementOffsetBytes(i) == subElemOffsets[i]);
111648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        }
112648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
113648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
114648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    public void run() {
115648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        RenderScript pRS = RenderScript.create(mCtx);
116648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        testScriptSide(pRS);
117648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        testJavaSide(pRS);
118648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        passTest();
119648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        pRS.destroy();
120648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    }
121648a1c137663ef7207684d0d7009dd5518942111Stephen Hines}
122