1b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross/*
2b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * Copyright (C) 2016 The Android Open Source Project
3b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross *
4b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * Licensed under the Apache License, Version 2.0 (the "License");
5b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * you may not use this file except in compliance with the License.
6b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * You may obtain a copy of the License at
7b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross *
8b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross *      http://www.apache.org/licenses/LICENSE-2.0
9b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross *
10b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * Unless required by applicable law or agreed to in writing, software
11b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * distributed under the License is distributed on an "AS IS" BASIS,
12b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * See the License for the specific language governing permissions and
14b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross * limitations under the License.
15b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross */
16b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
17b24687864a68b416fc584a2af1a10af4f7d579bfDavid Grosspackage com.android.rs.test;
18b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
19b24687864a68b416fc584a2af1a10af4f7d579bfDavid Grossimport android.content.Context;
20b24687864a68b416fc584a2af1a10af4f7d579bfDavid Grossimport android.renderscript.RenderScript;
21b24687864a68b416fc584a2af1a10af4f7d579bfDavid Grossimport java.util.Random;
22b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
23b24687864a68b416fc584a2af1a10af4f7d579bfDavid Grosspublic class UT_struct_field extends UnitTest {
24b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
25b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    Random r;
26b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
27b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    protected UT_struct_field(RSTestCore rstc, Context ctx) {
28b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        super(rstc, "Structure-typed Fields", ctx);
29b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        r = new Random(0);
30b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    }
31b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
32b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    private ScriptField_InnerOne.Item makeInnerOne() {
33b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        ScriptField_InnerOne.Item innerOne = new ScriptField_InnerOne.Item();
34b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        innerOne.x = r.nextInt();
35b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        innerOne.y = r.nextInt();
36b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        innerOne.f = r.nextFloat();
37b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        return innerOne;
38b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    }
39b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
40b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    private ScriptField_InnerTwo.Item makeInnerTwo() {
41b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        ScriptField_InnerTwo.Item innerTwo = new ScriptField_InnerTwo.Item();
42b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        innerTwo.z = (byte)r.nextInt();
43b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        innerTwo.innerOne = makeInnerOne();
44b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        return innerTwo;
45b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    }
46b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
47b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    public void run() {
48b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        RenderScript pRS = RenderScript.create(mCtx);
49b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        ScriptC_struct_field s = new ScriptC_struct_field(pRS);
50b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        pRS.setMessageHandler(mRsMessage);
51b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
52b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        ScriptField_Outer.Item outer = new ScriptField_Outer.Item();
53b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        outer.innerOneA = makeInnerOne();
54b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        outer.l = r.nextLong();
55b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        outer.innerOneB = makeInnerOne();
56b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        for (int i = 0; i < 3; ++i)
57b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[i] = makeInnerTwo();
58b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        for (int i = 0; i < 2; ++i)
59b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo2[i] = makeInnerTwo();
60b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        for (int i = 0; i < 4; ++i)
61b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOne4[i] = makeInnerOne();
62b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        outer.innerOneC = makeInnerOne();
63b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        s.set_outer(outer);
64b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
65b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        s.invoke_checkOuter(
66b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOneA.x, outer.innerOneA.y, outer.innerOneA.f,
67b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.l,
68b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOneB.x, outer.innerOneB.y, outer.innerOneB.f,
69b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[0].z,
70b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[0].innerOne.x, outer.innerTwo3[0].innerOne.y, outer.innerTwo3[0].innerOne.f,
71b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[1].z,
72b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[1].innerOne.x, outer.innerTwo3[1].innerOne.y, outer.innerTwo3[1].innerOne.f,
73b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[2].z,
74b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo3[2].innerOne.x, outer.innerTwo3[2].innerOne.y, outer.innerTwo3[2].innerOne.f,
75b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo2[0].z,
76b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo2[0].innerOne.x, outer.innerTwo2[0].innerOne.y, outer.innerTwo2[0].innerOne.f,
77b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo2[1].z,
78b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerTwo2[1].innerOne.x, outer.innerTwo2[1].innerOne.y, outer.innerTwo2[1].innerOne.f,
79b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOne4[0].x, outer.innerOne4[0].y, outer.innerOne4[0].f,
80b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOne4[1].x, outer.innerOne4[1].y, outer.innerOne4[1].f,
81b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOne4[2].x, outer.innerOne4[2].y, outer.innerOne4[2].f,
82b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOne4[3].x, outer.innerOne4[3].y, outer.innerOne4[3].f,
83b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross            outer.innerOneC.x, outer.innerOneC.y, outer.innerOneC.f);
84b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross
85b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        pRS.finish();
86b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        waitForMessage();
87b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross        pRS.destroy();
88b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross    }
89b24687864a68b416fc584a2af1a10af4f7d579bfDavid Gross}
90