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