175f0d3110b04346b901771f96ce15cdbe907278fYang Ni/* 275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Copyright (C) 2016 The Android Open Source Project 375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 575f0d3110b04346b901771f96ce15cdbe907278fYang Ni * you may not use this file except in compliance with the License. 675f0d3110b04346b901771f96ce15cdbe907278fYang Ni * You may obtain a copy of the License at 775f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 875f0d3110b04346b901771f96ce15cdbe907278fYang Ni * http://www.apache.org/licenses/LICENSE-2.0 975f0d3110b04346b901771f96ce15cdbe907278fYang Ni * 1075f0d3110b04346b901771f96ce15cdbe907278fYang Ni * Unless required by applicable law or agreed to in writing, software 1175f0d3110b04346b901771f96ce15cdbe907278fYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 1275f0d3110b04346b901771f96ce15cdbe907278fYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1375f0d3110b04346b901771f96ce15cdbe907278fYang Ni * See the License for the specific language governing permissions and 1475f0d3110b04346b901771f96ce15cdbe907278fYang Ni * limitations under the License. 1575f0d3110b04346b901771f96ce15cdbe907278fYang Ni */ 1675f0d3110b04346b901771f96ce15cdbe907278fYang Ni 1775f0d3110b04346b901771f96ce15cdbe907278fYang Nipackage com.android.rs.rsov.test; 1875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 1975f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.content.Context; 2075f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.renderscript.Allocation; 2175f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.renderscript.Element; 2275f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.renderscript.RenderScript; 2375f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.renderscript.Type; 2475f0d3110b04346b901771f96ce15cdbe907278fYang Niimport android.util.Log; 2575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 2675f0d3110b04346b901771f96ce15cdbe907278fYang Nipublic class UT_invert extends UnitTest { 2775f0d3110b04346b901771f96ce15cdbe907278fYang Ni protected UT_invert(RSoVTestCore rstc, Context ctx) { 2875f0d3110b04346b901771f96ce15cdbe907278fYang Ni super(rstc, "invert", ctx); 2975f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 3075f0d3110b04346b901771f96ce15cdbe907278fYang Ni 3175f0d3110b04346b901771f96ce15cdbe907278fYang Ni private boolean Test(int width, int height, int depth) { 3275f0d3110b04346b901771f96ce15cdbe907278fYang Ni RenderScript pRS = RenderScript.create(mCtx); 3375f0d3110b04346b901771f96ce15cdbe907278fYang Ni ScriptC_invert s = new ScriptC_invert(pRS); 3475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 3575f0d3110b04346b901771f96ce15cdbe907278fYang Ni Type.Builder typeBuilder = new Type.Builder(pRS, Element.F32_4(pRS)); 3675f0d3110b04346b901771f96ce15cdbe907278fYang Ni typeBuilder.setX(width); 3775f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (height > 0) { 3875f0d3110b04346b901771f96ce15cdbe907278fYang Ni typeBuilder.setY(height); 3975f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (depth > 0) { 4075f0d3110b04346b901771f96ce15cdbe907278fYang Ni typeBuilder.setZ(depth); 4175f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 4275f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 4375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 4475f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (depth < 1) { 4575f0d3110b04346b901771f96ce15cdbe907278fYang Ni depth = 1; 4675f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 4775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 4875f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (height < 1) { 4975f0d3110b04346b901771f96ce15cdbe907278fYang Ni height = 1; 5075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 5175f0d3110b04346b901771f96ce15cdbe907278fYang Ni 5275f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation A = Allocation.createTyped(pRS, typeBuilder.create()); 5375f0d3110b04346b901771f96ce15cdbe907278fYang Ni Allocation B = Allocation.createTyped(pRS, typeBuilder.create()); 5475f0d3110b04346b901771f96ce15cdbe907278fYang Ni 5575f0d3110b04346b901771f96ce15cdbe907278fYang Ni float a[] = new float[width * height * depth * 4]; 5675f0d3110b04346b901771f96ce15cdbe907278fYang Ni float b[] = new float[width * height * depth * 4]; 5775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 5875f0d3110b04346b901771f96ce15cdbe907278fYang Ni java.util.Random rand = new java.util.Random(); 5975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 6075f0d3110b04346b901771f96ce15cdbe907278fYang Ni for (int i = 0; i < width * height * depth * 4; i++) { 6175f0d3110b04346b901771f96ce15cdbe907278fYang Ni a[i] = rand.nextFloat(); 6275f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 6375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 6475f0d3110b04346b901771f96ce15cdbe907278fYang Ni A.copyFrom(a); 6575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 6675f0d3110b04346b901771f96ce15cdbe907278fYang Ni s.forEach_invert(A, B); 6775f0d3110b04346b901771f96ce15cdbe907278fYang Ni 6875f0d3110b04346b901771f96ce15cdbe907278fYang Ni B.copyTo(b); 6975f0d3110b04346b901771f96ce15cdbe907278fYang Ni 7075f0d3110b04346b901771f96ce15cdbe907278fYang Ni B.destroy(); 7175f0d3110b04346b901771f96ce15cdbe907278fYang Ni A.destroy(); 7275f0d3110b04346b901771f96ce15cdbe907278fYang Ni 7375f0d3110b04346b901771f96ce15cdbe907278fYang Ni pRS.finish(); 7475f0d3110b04346b901771f96ce15cdbe907278fYang Ni pRS.destroy(); 7575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 7675f0d3110b04346b901771f96ce15cdbe907278fYang Ni boolean failed = false; 7775f0d3110b04346b901771f96ce15cdbe907278fYang Ni for (int i = 0; i < width * height * depth * 4; i++) { 7875f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (b[i] != 1.0f - a[i]) { 7975f0d3110b04346b901771f96ce15cdbe907278fYang Ni Log.e(name, "expects " + (1.0f - a[i]) + " for element " + i + 8075f0d3110b04346b901771f96ce15cdbe907278fYang Ni ". got " + b[i]); 8175f0d3110b04346b901771f96ce15cdbe907278fYang Ni failed = true; 8275f0d3110b04346b901771f96ce15cdbe907278fYang Ni break; 8375f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 8475f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 8575f0d3110b04346b901771f96ce15cdbe907278fYang Ni 8675f0d3110b04346b901771f96ce15cdbe907278fYang Ni return !failed; 8775f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 8875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 8975f0d3110b04346b901771f96ce15cdbe907278fYang Ni public void run() { 9075f0d3110b04346b901771f96ce15cdbe907278fYang Ni final int X = 96; 9175f0d3110b04346b901771f96ce15cdbe907278fYang Ni final int Y = 64; 9275f0d3110b04346b901771f96ce15cdbe907278fYang Ni final int Z = 32; 9375f0d3110b04346b901771f96ce15cdbe907278fYang Ni 9475f0d3110b04346b901771f96ce15cdbe907278fYang Ni if (Test(X, 0, 0) && Test(X, Y, 0)) { 9575f0d3110b04346b901771f96ce15cdbe907278fYang Ni passTest(); 9675f0d3110b04346b901771f96ce15cdbe907278fYang Ni return; 9775f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 9875f0d3110b04346b901771f96ce15cdbe907278fYang Ni 9975f0d3110b04346b901771f96ce15cdbe907278fYang Ni failTest(); 10075f0d3110b04346b901771f96ce15cdbe907278fYang Ni } 10175f0d3110b04346b901771f96ce15cdbe907278fYang Ni} 102