1/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.rs.unittest;
18
19import android.content.Context;
20import android.renderscript.Byte2;
21import android.renderscript.Byte3;
22import android.renderscript.Byte4;
23import android.renderscript.Double2;
24import android.renderscript.Double3;
25import android.renderscript.Double4;
26import android.renderscript.Float2;
27import android.renderscript.Float3;
28import android.renderscript.Float4;
29import android.renderscript.Int2;
30import android.renderscript.Int3;
31import android.renderscript.Int4;
32import android.renderscript.Long2;
33import android.renderscript.Long3;
34import android.renderscript.Long4;
35import android.renderscript.RenderScript;
36import android.renderscript.Short2;
37import android.renderscript.Short3;
38import android.renderscript.Short4;
39
40public class UT_vector extends UnitTest {
41
42    public UT_vector(Context ctx) {
43        super("Vector", ctx);
44    }
45
46    private boolean initializeGlobals(ScriptC_vector s) {
47        Float2 F2 = s.get_f2();
48        if (F2.x != 1.0f || F2.y != 2.0f) {
49            return false;
50        }
51        F2.x = 2.99f;
52        F2.y = 3.99f;
53        s.set_f2(F2);
54
55        Float3 F3 = s.get_f3();
56        if (F3.x != 1.0f || F3.y != 2.0f || F3.z != 3.0f) {
57            return false;
58        }
59        F3.x = 2.99f;
60        F3.y = 3.99f;
61        F3.z = 4.99f;
62        s.set_f3(F3);
63
64        Float4 F4 = s.get_f4();
65        if (F4.x != 1.0f || F4.y != 2.0f || F4.z != 3.0f || F4.w != 4.0f) {
66            return false;
67        }
68        F4.x = 2.99f;
69        F4.y = 3.99f;
70        F4.z = 4.99f;
71        F4.w = 5.99f;
72        s.set_f4(F4);
73
74        Double2 D2 = s.get_d2();
75        if (D2.x != 1.0 || D2.y != 2.0) {
76            return false;
77        }
78        D2.x = 2.99;
79        D2.y = 3.99;
80        s.set_d2(D2);
81
82        Double3 D3 = s.get_d3();
83        if (D3.x != 1.0 || D3.y != 2.0 || D3.z != 3.0) {
84            return false;
85        }
86        D3.x = 2.99;
87        D3.y = 3.99;
88        D3.z = 4.99;
89        s.set_d3(D3);
90
91        Double4 D4 = s.get_d4();
92        if (D4.x != 1.0 || D4.y != 2.0 || D4.z != 3.0 || D4.w != 4.0) {
93            return false;
94        }
95        D4.x = 2.99;
96        D4.y = 3.99;
97        D4.z = 4.99;
98        D4.w = 5.99;
99        s.set_d4(D4);
100
101        Byte2 B2 = s.get_i8_2();
102        if (B2.x != 1 || B2.y != 2) {
103            return false;
104        }
105        B2.x = 2;
106        B2.y = 3;
107        s.set_i8_2(B2);
108
109        Byte3 B3 = s.get_i8_3();
110        if (B3.x != 1 || B3.y != 2 || B3.z != 3) {
111            return false;
112        }
113        B3.x = 2;
114        B3.y = 3;
115        B3.z = 4;
116        s.set_i8_3(B3);
117
118        Byte4 B4 = s.get_i8_4();
119        if (B4.x != 1 || B4.y != 2 || B4.z != 3 || B4.w != 4) {
120            return false;
121        }
122        B4.x = 2;
123        B4.y = 3;
124        B4.z = 4;
125        B4.w = 5;
126        s.set_i8_4(B4);
127
128        Short2 S2 = s.get_u8_2();
129        if (S2.x != 1 || S2.y != 2) {
130            return false;
131        }
132        S2.x = 2;
133        S2.y = 3;
134        s.set_u8_2(S2);
135
136        Short3 S3 = s.get_u8_3();
137        if (S3.x != 1 || S3.y != 2 || S3.z != 3) {
138            return false;
139        }
140        S3.x = 2;
141        S3.y = 3;
142        S3.z = 4;
143        s.set_u8_3(S3);
144
145        Short4 S4 = s.get_u8_4();
146        if (S4.x != 1 || S4.y != 2 || S4.z != 3 || S4.w != 4) {
147            return false;
148        }
149        S4.x = 2;
150        S4.y = 3;
151        S4.z = 4;
152        S4.w = 5;
153        s.set_u8_4(S4);
154
155        S2 = s.get_i16_2();
156        if (S2.x != 1 || S2.y != 2) {
157            return false;
158        }
159        S2.x = 2;
160        S2.y = 3;
161        s.set_i16_2(S2);
162
163        S3 = s.get_i16_3();
164        if (S3.x != 1 || S3.y != 2 || S3.z != 3) {
165            return false;
166        }
167        S3.x = 2;
168        S3.y = 3;
169        S3.z = 4;
170        s.set_i16_3(S3);
171
172        S4 = s.get_i16_4();
173        if (S4.x != 1 || S4.y != 2 || S4.z != 3 || S4.w != 4) {
174            return false;
175        }
176        S4.x = 2;
177        S4.y = 3;
178        S4.z = 4;
179        S4.w = 5;
180        s.set_i16_4(S4);
181
182        Int2 I2 = s.get_u16_2();
183        if (I2.x != 1 || I2.y != 2) {
184            return false;
185        }
186        I2.x = 2;
187        I2.y = 3;
188        s.set_u16_2(I2);
189
190        Int3 I3 = s.get_u16_3();
191        if (I3.x != 1 || I3.y != 2 || I3.z != 3) {
192            return false;
193        }
194        I3.x = 2;
195        I3.y = 3;
196        I3.z = 4;
197        s.set_u16_3(I3);
198
199        Int4 I4 = s.get_u16_4();
200        if (I4.x != 1 || I4.y != 2 || I4.z != 3 || I4.w != 4) {
201            return false;
202        }
203        I4.x = 2;
204        I4.y = 3;
205        I4.z = 4;
206        I4.w = 5;
207        s.set_u16_4(I4);
208
209        I2 = s.get_i32_2();
210        if (I2.x != 1 || I2.y != 2) {
211            return false;
212        }
213        I2.x = 2;
214        I2.y = 3;
215        s.set_i32_2(I2);
216
217        I3 = s.get_i32_3();
218        if (I3.x != 1 || I3.y != 2 || I3.z != 3) {
219            return false;
220        }
221        I3.x = 2;
222        I3.y = 3;
223        I3.z = 4;
224        s.set_i32_3(I3);
225
226        I4 = s.get_i32_4();
227        if (I4.x != 1 || I4.y != 2 || I4.z != 3 || I4.w != 4) {
228            return false;
229        }
230        I4.x = 2;
231        I4.y = 3;
232        I4.z = 4;
233        I4.w = 5;
234        s.set_i32_4(I4);
235
236        Long2 L2 = s.get_u32_2();
237        if (L2.x != 1 || L2.y != 2) {
238            return false;
239        }
240        L2.x = 2;
241        L2.y = 3;
242        s.set_u32_2(L2);
243
244        Long3 L3 = s.get_u32_3();
245        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
246            return false;
247        }
248        L3.x = 2;
249        L3.y = 3;
250        L3.z = 4;
251        s.set_u32_3(L3);
252
253        Long4 L4 = s.get_u32_4();
254        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
255            return false;
256        }
257        L4.x = 2;
258        L4.y = 3;
259        L4.z = 4;
260        L4.w = 5;
261        s.set_u32_4(L4);
262
263        L2 = s.get_i64_2();
264        if (L2.x != 1 || L2.y != 2) {
265            return false;
266        }
267        L2.x = 2;
268        L2.y = 3;
269        s.set_i64_2(L2);
270
271        L3 = s.get_i64_3();
272        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
273            return false;
274        }
275        L3.x = 2;
276        L3.y = 3;
277        L3.z = 4;
278        s.set_i64_3(L3);
279
280        L4 = s.get_i64_4();
281        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
282            return false;
283        }
284        L4.x = 2;
285        L4.y = 3;
286        L4.z = 4;
287        L4.w = 5;
288        s.set_i64_4(L4);
289
290        L2 = s.get_u64_2();
291        if (L2.x != 1 || L2.y != 2) {
292            return false;
293        }
294        L2.x = 2;
295        L2.y = 3;
296        s.set_u64_2(L2);
297
298        L3 = s.get_u64_3();
299        if (L3.x != 1 || L3.y != 2 || L3.z != 3) {
300            return false;
301        }
302        L3.x = 2;
303        L3.y = 3;
304        L3.z = 4;
305        s.set_u64_3(L3);
306
307        L4 = s.get_u64_4();
308        if (L4.x != 1 || L4.y != 2 || L4.z != 3 || L4.w != 4) {
309            return false;
310        }
311        L4.x = 2;
312        L4.y = 3;
313        L4.z = 4;
314        L4.w = 5;
315        s.set_u64_4(L4);
316
317        return true;
318    }
319
320    public void run() {
321        RenderScript pRS = createRenderScript(true);
322        ScriptC_vector s = new ScriptC_vector(pRS);
323        if (!initializeGlobals(s)) {
324            failTest();
325        } else {
326            s.invoke_vector_test();
327            pRS.finish();
328        }
329        s.destroy();
330        pRS.destroy();
331    }
332}
333