11a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks/* 21a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Copyright (C) 2017 The Android Open Source Project 31a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * 41a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Licensed under the Apache License, Version 2.0 (the "License"); 51a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * you may not use this file except in compliance with the License. 61a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * You may obtain a copy of the License at 71a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * 81a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * http://www.apache.org/licenses/LICENSE-2.0 91a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * 101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * Unless required by applicable law or agreed to in writing, software 111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * distributed under the License is distributed on an "AS IS" BASIS, 121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * See the License for the specific language governing permissions and 141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks * limitations under the License. 151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks */ 161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubankspackage com.android.rs.unittest; 181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 191a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.content.Context; 201a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.Allocation; 211a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.Element; 221a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.renderscript.RenderScript; 231a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanksimport android.util.Log; 241a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 251a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubankspublic class UT_copy_test extends UnitTest { 261a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks boolean pass = true; 271a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 281a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks public UT_copy_test(Context ctx) { 291a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks super("Copy", ctx); 301a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 311a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 321a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks void testFloat2(RenderScript rs, ScriptC_copy_test s) { 331a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a1 = Allocation.createSized(rs, Element.F32_2(rs), 1024); 341a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a2 = Allocation.createSized(rs, Element.F32_2(rs), 1024); 351a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 361a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f1 = new float[1024 * 2]; 371a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f2 = new float[1024 * 2]; 381a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 391a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks f1[ct] = (float) ct; 401a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 411a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.copyFrom(f1); 421a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 431a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks s.forEach_copyFloat2(a1, a2); 441a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 451a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.copyTo(f2); 461a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 471a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks if (f1[ct] != f2[ct]) { 481a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks failTest(); 491a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 501a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 511a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 521a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.destroy(); 531a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.destroy(); 541a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 551a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 561a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks void testFloat3(RenderScript rs, ScriptC_copy_test s) { 571a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a1 = Allocation.createSized(rs, Element.F32_3(rs), 1024); 581a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a2 = Allocation.createSized(rs, Element.F32_3(rs), 1024); 591a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 601a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f1 = new float[1024 * 4]; 611a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f2 = new float[1024 * 4]; 621a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 631a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks f1[ct] = (float) ct; 641a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 651a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.copyFrom(f1); 661a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 671a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks s.forEach_copyFloat3(a1, a2); 681a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 691a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.copyTo(f2); 701a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 711a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks if ((f1[ct] != f2[ct]) && ((ct & 3) != 3)) { 721a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks failTest(); 731a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 741a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 751a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 761a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.destroy(); 771a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.destroy(); 781a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 791a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 801a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks void testFloat4(RenderScript rs, ScriptC_copy_test s) { 811a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a1 = Allocation.createSized(rs, Element.F32_4(rs), 1024); 821a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Allocation a2 = Allocation.createSized(rs, Element.F32_4(rs), 1024); 831a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 841a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f1 = new float[1024 * 4]; 851a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks float[] f2 = new float[1024 * 4]; 861a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 871a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks f1[ct] = (float) ct; 881a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 891a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.copyFrom(f1); 901a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 911a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks s.forEach_copyFloat4(a1, a2); 921a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 931a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.copyTo(f2); 941a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks for (int ct = 0; ct < f1.length; ct++) { 951a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks if (f1[ct] != f2[ct]) { 961a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks failTest(); 971a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks Log.v("RS Test", "Compare failed at " + ct + ", " + f1[ct] + ", " + f2[ct]); 981a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 991a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 1001a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a1.destroy(); 1011a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks a2.destroy(); 1021a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 1031a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 1041a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks public void run() { 1054cad330154b7df7c3adf126b9f4b2665191a23a4Arthur Eubanks RenderScript pRS = createRenderScript(true); 1061a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks ScriptC_copy_test s = new ScriptC_copy_test(pRS); 1071a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 1081a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks testFloat2(pRS, s); 1091a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks testFloat3(pRS, s); 1101a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks testFloat4(pRS, s); 1111a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks s.invoke_sendResult(true); 1121a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 1131a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks pRS.finish(); 1141a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks s.destroy(); 1151a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks pRS.destroy(); 1161a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks } 1171a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks} 1181a3e97c3ab51f602927a67d4abc50ffa6ce5ccbaArthur Eubanks 119