17d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines/* 27d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * Copyright (C) 2013 The Android Open Source Project 37d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * 47d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License"); 57d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * you may not use this file except in compliance with the License. 67d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * You may obtain a copy of the License at 77d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * 87d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * http://www.apache.org/licenses/LICENSE-2.0 97d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * 107d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * Unless required by applicable law or agreed to in writing, software 117d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS, 127d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * See the License for the specific language governing permissions and 147d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines * limitations under the License. 157d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines */ 167d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 177d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines#include "RenderScript.h" 187d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines#include "ScriptC_kernels.h" 197d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 207d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hinesusing namespace android; 217d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hinesusing namespace RSC; 227d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 237d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hinesconst static uint32_t x = 7; 247d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 257d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hinessp<Allocation> createAlloc(sp<RS> rs, sp<const Element> e) { 267d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines Type::Builder tb(rs, e); 277d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines tb.setX(x); 287d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines sp<const Type> t = tb.create(); 297d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines return Allocation::createTyped(rs, t); 307d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines} 317d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 327d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines#define TEST_ELEM(KERNELNAME, ENAME) \ 337d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hinesbool test_elem_##KERNELNAME##_##ENAME() { \ 347d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines printf("Verifying forEach_test_" #KERNELNAME "() with " #ENAME "\n"); \ 357d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines sp<RS> rs = new RS(); \ 3679dc3c9c918515a793b3fdcd188cb553feccca8bTim Murray bool r = rs->init("/system/bin"); \ 377d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines sp<Allocation> a = createAlloc(rs, Element::ENAME(rs)); \ 387d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines ScriptC_kernels sc(rs); \ 397d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines sc.forEach_test_##KERNELNAME(a); \ 407d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines rs->finish(); \ 417d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines bool shouldPass = !strcmp(#KERNELNAME, #ENAME); \ 427d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines if (shouldPass != (rs->getError() == RS_SUCCESS)) { \ 437d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines printf("Failed forEach_test_" #KERNELNAME "() with " #ENAME "\n"); \ 447d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines return true; \ 457d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines } \ 467d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines return false; \ 477d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines} 487d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 497d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines#define TEST_ELEM_ALL(ENAME) \ 507d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, BOOLEAN) \ 517d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, I8) \ 527d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, U8) \ 537d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, I16) \ 547d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, U16) \ 557d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, I32) \ 567d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, U32) \ 577d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, I64) \ 587d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, U64) \ 597d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, F32) \ 607d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM(ENAME, F64) 617d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 627d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(BOOLEAN) 637d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(I8) 647d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(U8) 657d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(I16) 667d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(U16) 677d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(I32) 687d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(U32) 697d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(I64) 707d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(U64) 717d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(F32) 727d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen HinesTEST_ELEM_ALL(F64) 737d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 7485e10b349bce53d9921dc38fd440fda9eb91259aStephen Hinesint main() 757d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines{ 767d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines bool failed = false; 777d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 787d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines#define EXECUTE_TEST_ELEM_ALL(ENAME) \ 797d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_BOOLEAN(); \ 807d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_I8(); \ 817d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_U8(); \ 827d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_I16(); \ 837d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_U16(); \ 847d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_I32(); \ 857d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_U32(); \ 867d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_I64(); \ 877d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_U64(); \ 887d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_F32(); \ 897d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines failed |= test_elem_##ENAME##_F64(); \ 907d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 917d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(BOOLEAN); 927d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(I8); 937d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(U8); 947d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(I16); 957d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(U16); 967d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(I32); 977d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(U32); 987d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(I64); 997d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(U64); 1007d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(F32); 1017d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines EXECUTE_TEST_ELEM_ALL(F64); 1027d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 1037d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines if (failed) { 1047d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines printf("TEST FAILED!\n"); 1057d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines } else { 1067d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines printf("TEST PASSED!\n"); 1077d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines } 1087d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines 1097d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines return failed; 1107d1b3c14dd3aeaefafcab6f4bb87cceb257122c9Stephen Hines} 111