1/* 2 * Copyright (C) 2013 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 17#include "RenderScript.h" 18#include "ScriptC_kernels.h" 19 20using namespace android; 21using namespace RSC; 22 23const static uint32_t x = 7; 24 25sp<Allocation> createAlloc(sp<RS> rs, sp<const Element> e) { 26 Type::Builder tb(rs, e); 27 tb.setX(x); 28 sp<const Type> t = tb.create(); 29 return Allocation::createTyped(rs, t); 30} 31 32#define TEST_ELEM(KERNELNAME, ENAME) \ 33bool test_elem_##KERNELNAME##_##ENAME() { \ 34 printf("Verifying forEach_test_" #KERNELNAME "() with " #ENAME "\n"); \ 35 sp<RS> rs = new RS(); \ 36 bool r = rs->init("/system/bin"); \ 37 sp<Allocation> a = createAlloc(rs, Element::ENAME(rs)); \ 38 ScriptC_kernels sc(rs); \ 39 sc.forEach_test_##KERNELNAME(a); \ 40 rs->finish(); \ 41 bool shouldPass = !strcmp(#KERNELNAME, #ENAME); \ 42 if (shouldPass != (rs->getError() == RS_SUCCESS)) { \ 43 printf("Failed forEach_test_" #KERNELNAME "() with " #ENAME "\n"); \ 44 return true; \ 45 } \ 46 return false; \ 47} 48 49#define TEST_ELEM_ALL(ENAME) \ 50TEST_ELEM(ENAME, BOOLEAN) \ 51TEST_ELEM(ENAME, I8) \ 52TEST_ELEM(ENAME, U8) \ 53TEST_ELEM(ENAME, I16) \ 54TEST_ELEM(ENAME, U16) \ 55TEST_ELEM(ENAME, I32) \ 56TEST_ELEM(ENAME, U32) \ 57TEST_ELEM(ENAME, I64) \ 58TEST_ELEM(ENAME, U64) \ 59TEST_ELEM(ENAME, F32) \ 60TEST_ELEM(ENAME, F64) 61 62TEST_ELEM_ALL(BOOLEAN) 63TEST_ELEM_ALL(I8) 64TEST_ELEM_ALL(U8) 65TEST_ELEM_ALL(I16) 66TEST_ELEM_ALL(U16) 67TEST_ELEM_ALL(I32) 68TEST_ELEM_ALL(U32) 69TEST_ELEM_ALL(I64) 70TEST_ELEM_ALL(U64) 71TEST_ELEM_ALL(F32) 72TEST_ELEM_ALL(F64) 73 74int main() 75{ 76 bool failed = false; 77 78#define EXECUTE_TEST_ELEM_ALL(ENAME) \ 79 failed |= test_elem_##ENAME##_BOOLEAN(); \ 80 failed |= test_elem_##ENAME##_I8(); \ 81 failed |= test_elem_##ENAME##_U8(); \ 82 failed |= test_elem_##ENAME##_I16(); \ 83 failed |= test_elem_##ENAME##_U16(); \ 84 failed |= test_elem_##ENAME##_I32(); \ 85 failed |= test_elem_##ENAME##_U32(); \ 86 failed |= test_elem_##ENAME##_I64(); \ 87 failed |= test_elem_##ENAME##_U64(); \ 88 failed |= test_elem_##ENAME##_F32(); \ 89 failed |= test_elem_##ENAME##_F64(); \ 90 91 EXECUTE_TEST_ELEM_ALL(BOOLEAN); 92 EXECUTE_TEST_ELEM_ALL(I8); 93 EXECUTE_TEST_ELEM_ALL(U8); 94 EXECUTE_TEST_ELEM_ALL(I16); 95 EXECUTE_TEST_ELEM_ALL(U16); 96 EXECUTE_TEST_ELEM_ALL(I32); 97 EXECUTE_TEST_ELEM_ALL(U32); 98 EXECUTE_TEST_ELEM_ALL(I64); 99 EXECUTE_TEST_ELEM_ALL(U64); 100 EXECUTE_TEST_ELEM_ALL(F32); 101 EXECUTE_TEST_ELEM_ALL(F64); 102 103 if (failed) { 104 printf("TEST FAILED!\n"); 105 } else { 106 printf("TEST PASSED!\n"); 107 } 108 109 return failed; 110} 111