diff --git a/tests/RenderScriptTests/tests/src/com/android/rs/test/math.rs b/tests/RenderScriptTests/tests/src/com/android/rs/test/math.rs index 8cad82bfd5697..aae29a4c7e216 100644 --- a/tests/RenderScriptTests/tests/src/com/android/rs/test/math.rs +++ b/tests/RenderScriptTests/tests/src/com/android/rs/test/math.rs @@ -37,162 +37,6 @@ volatile uchar2 uc2; volatile uchar3 uc3; volatile uchar4 uc4; -#define TEST_FN_FUNC_FN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1); \ - f2 = fnc(f2); \ - f3 = fnc(f3); \ - f4 = fnc(f4); - -#define TEST_FN_FUNC_FN_PFN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, (float*) &f1); \ - f2 = fnc(f2, (float2*) &f2); \ - f3 = fnc(f3, (float3*) &f3); \ - f4 = fnc(f4, (float4*) &f4); - -#define TEST_FN_FUNC_FN_FN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, f1); \ - f2 = fnc(f2, f2); \ - f3 = fnc(f3, f3); \ - f4 = fnc(f4, f4); - -#define TEST_FN_FUNC_FN_F(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, f1); \ - f2 = fnc(f2, f1); \ - f3 = fnc(f3, f1); \ - f4 = fnc(f4, f1); - -#define TEST_FN_FUNC_FN_IN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, i1); \ - f2 = fnc(f2, i2); \ - f3 = fnc(f3, i3); \ - f4 = fnc(f4, i4); - -#define TEST_FN_FUNC_FN_I(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, i1); \ - f2 = fnc(f2, i1); \ - f3 = fnc(f3, i1); \ - f4 = fnc(f4, i1); - -#define TEST_FN_FUNC_FN_FN_FN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, f1, f1); \ - f2 = fnc(f2, f2, f2); \ - f3 = fnc(f3, f3, f3); \ - f4 = fnc(f4, f4, f4); - -#define TEST_FN_FUNC_FN_PIN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, (int*) &i1); \ - f2 = fnc(f2, (int2*) &i2); \ - f3 = fnc(f3, (int3*) &i3); \ - f4 = fnc(f4, (int4*) &i4); - -#define TEST_FN_FUNC_FN_FN_PIN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - f1 = fnc(f1, f1, (int*) &i1); \ - f2 = fnc(f2, f2, (int2*) &i2); \ - f3 = fnc(f3, f3, (int3*) &i3); \ - f4 = fnc(f4, f4, (int4*) &i4); - -#define TEST_IN_FUNC_FN(fnc) \ - rsDebug("Testing " #fnc, 0); \ - i1 = fnc(f1); \ - i2 = fnc(f2); \ - i3 = fnc(f3); \ - i4 = fnc(f4); - - -static bool test_fp_math(uint32_t index) { - bool failed = false; - start(); - - TEST_FN_FUNC_FN(acos); - TEST_FN_FUNC_FN(acosh); - TEST_FN_FUNC_FN(acospi); - TEST_FN_FUNC_FN(asin); - TEST_FN_FUNC_FN(asinh); - TEST_FN_FUNC_FN(asinpi); - TEST_FN_FUNC_FN(atan); - TEST_FN_FUNC_FN_FN(atan2); - TEST_FN_FUNC_FN(atanh); - TEST_FN_FUNC_FN(atanpi); - TEST_FN_FUNC_FN_FN(atan2pi); - TEST_FN_FUNC_FN(cbrt); - TEST_FN_FUNC_FN(ceil); - TEST_FN_FUNC_FN_FN(copysign); - TEST_FN_FUNC_FN(cos); - TEST_FN_FUNC_FN(cosh); - TEST_FN_FUNC_FN(cospi); - TEST_FN_FUNC_FN(erfc); - TEST_FN_FUNC_FN(erf); - TEST_FN_FUNC_FN(exp); - TEST_FN_FUNC_FN(exp2); - TEST_FN_FUNC_FN(exp10); - TEST_FN_FUNC_FN(expm1); - TEST_FN_FUNC_FN(fabs); - TEST_FN_FUNC_FN_FN(fdim); - TEST_FN_FUNC_FN(floor); - TEST_FN_FUNC_FN_FN_FN(fma); - TEST_FN_FUNC_FN_FN(fmax); - TEST_FN_FUNC_FN_F(fmax); - TEST_FN_FUNC_FN_FN(fmin); - TEST_FN_FUNC_FN_F(fmin); - TEST_FN_FUNC_FN_FN(fmod); - TEST_FN_FUNC_FN_PFN(fract); - TEST_FN_FUNC_FN_PIN(frexp); - TEST_FN_FUNC_FN_FN(hypot); - TEST_IN_FUNC_FN(ilogb); - TEST_FN_FUNC_FN_IN(ldexp); - TEST_FN_FUNC_FN_I(ldexp); - TEST_FN_FUNC_FN(lgamma); - TEST_FN_FUNC_FN_PIN(lgamma); - TEST_FN_FUNC_FN(log); - TEST_FN_FUNC_FN(log2); - TEST_FN_FUNC_FN(log10); - TEST_FN_FUNC_FN(log1p); - TEST_FN_FUNC_FN(logb); - TEST_FN_FUNC_FN_FN_FN(mad); - TEST_FN_FUNC_FN_PFN(modf); - // nan - TEST_FN_FUNC_FN_FN(nextafter); - TEST_FN_FUNC_FN_FN(pow); - TEST_FN_FUNC_FN_IN(pown); - TEST_FN_FUNC_FN_FN(powr); - TEST_FN_FUNC_FN_FN(remainder); - TEST_FN_FUNC_FN_FN_PIN(remquo); - TEST_FN_FUNC_FN(rint); - TEST_FN_FUNC_FN_IN(rootn); - TEST_FN_FUNC_FN(round); - TEST_FN_FUNC_FN(rsqrt); - TEST_FN_FUNC_FN(sin); - TEST_FN_FUNC_FN_PFN(sincos); - TEST_FN_FUNC_FN(sinh); - TEST_FN_FUNC_FN(sinpi); - TEST_FN_FUNC_FN(sqrt); - TEST_FN_FUNC_FN(tan); - TEST_FN_FUNC_FN(tanh); - TEST_FN_FUNC_FN(tanpi); - TEST_FN_FUNC_FN(tgamma); - TEST_FN_FUNC_FN(trunc); - - float time = end(index); - - if (failed) { - rsDebug("test_fp_math FAILED", time); - } - else { - rsDebug("test_fp_math PASSED", time); - } - - return failed; -} - #define DECL_INT(prefix) \ volatile char prefix##_c_1 = 1; \ volatile char2 prefix##_c_2 = 1; \ @@ -221,6 +65,10 @@ volatile uint4 prefix##_ui_4 = 1; \ volatile long prefix##_l_1 = 1; \ volatile ulong prefix##_ul_1 = 1; +DECL_INT(res) +DECL_INT(src1) +DECL_INT(src2) + #define TEST_INT_OP_TYPE(op, type) \ rsDebug("Testing " #op " for " #type "1", i++); \ res_##type##_1 = src1_##type##_1 op src2_##type##_1; \ @@ -243,9 +91,274 @@ res_l_1 = src1_l_1 op src2_l_1; \ rsDebug("Testing " #op " for ul1", i++); \ res_ul_1 = src1_ul_1 op src2_ul_1; -DECL_INT(res) -DECL_INT(src1) -DECL_INT(src2) +#define TEST_XN_FUNC_YN(typeout, fnc, typein) \ + res_##typeout##_1 = fnc(src1_##typein##_1); \ + res_##typeout##_2 = fnc(src1_##typein##_2); \ + res_##typeout##_3 = fnc(src1_##typein##_3); \ + res_##typeout##_4 = fnc(src1_##typein##_4); + +#define TEST_XN_FUNC_XN_XN(type, fnc) \ + res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1); \ + res_##type##_2 = fnc(src1_##type##_2, src2_##type##_2); \ + res_##type##_3 = fnc(src1_##type##_3, src2_##type##_3); \ + res_##type##_4 = fnc(src1_##type##_4, src2_##type##_4); + +#define TEST_X_FUNC_X_X_X(type, fnc) \ + res_##type##_1 = fnc(src1_##type##_1, src2_##type##_1, src2_##type##_1); + +#define TEST_IN_FUNC_IN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + TEST_XN_FUNC_YN(uc, fnc, uc) \ + TEST_XN_FUNC_YN(c, fnc, c) \ + TEST_XN_FUNC_YN(us, fnc, us) \ + TEST_XN_FUNC_YN(s, fnc, s) \ + TEST_XN_FUNC_YN(ui, fnc, ui) \ + TEST_XN_FUNC_YN(i, fnc, i) + +#define TEST_UIN_FUNC_IN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + TEST_XN_FUNC_YN(uc, fnc, c) \ + TEST_XN_FUNC_YN(us, fnc, s) \ + TEST_XN_FUNC_YN(ui, fnc, i) \ + +#define TEST_IN_FUNC_IN_IN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + TEST_XN_FUNC_XN_XN(uc, fnc) \ + TEST_XN_FUNC_XN_XN(c, fnc) \ + TEST_XN_FUNC_XN_XN(us, fnc) \ + TEST_XN_FUNC_XN_XN(s, fnc) \ + TEST_XN_FUNC_XN_XN(ui, fnc) \ + TEST_XN_FUNC_XN_XN(i, fnc) + +#define TEST_I_FUNC_I_I_I(fnc) \ + rsDebug("Testing " #fnc, 0); \ + TEST_X_FUNC_X_X_X(uc, fnc) \ + TEST_X_FUNC_X_X_X(c, fnc) \ + TEST_X_FUNC_X_X_X(us, fnc) \ + TEST_X_FUNC_X_X_X(s, fnc) \ + TEST_X_FUNC_X_X_X(ui, fnc) \ + TEST_X_FUNC_X_X_X(i, fnc) + +#define TEST_FN_FUNC_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1); \ + f2 = fnc(f2); \ + f3 = fnc(f3); \ + f4 = fnc(f4); + +#define TEST_FN_FUNC_FN_PFN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, (float*) &f1); \ + f2 = fnc(f2, (float2*) &f2); \ + f3 = fnc(f3, (float3*) &f3); \ + f4 = fnc(f4, (float4*) &f4); + +#define TEST_FN_FUNC_FN_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1); \ + f2 = fnc(f2, f2); \ + f3 = fnc(f3, f3); \ + f4 = fnc(f4, f4); + +#define TEST_F34_FUNC_F34_F34(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f3 = fnc(f3, f3); \ + f4 = fnc(f4, f4); + +#define TEST_FN_FUNC_FN_F(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1); \ + f2 = fnc(f2, f1); \ + f3 = fnc(f3, f1); \ + f4 = fnc(f4, f1); + +#define TEST_F_FUNC_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1); \ + f1 = fnc(f2); \ + f1 = fnc(f3); \ + f1 = fnc(f4); + +#define TEST_F_FUNC_FN_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1); \ + f1 = fnc(f2, f2); \ + f1 = fnc(f3, f3); \ + f1 = fnc(f4, f4); + +#define TEST_FN_FUNC_FN_IN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, i1); \ + f2 = fnc(f2, i2); \ + f3 = fnc(f3, i3); \ + f4 = fnc(f4, i4); + +#define TEST_FN_FUNC_FN_I(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, i1); \ + f2 = fnc(f2, i1); \ + f3 = fnc(f3, i1); \ + f4 = fnc(f4, i1); + +#define TEST_FN_FUNC_FN_FN_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1, f1); \ + f2 = fnc(f2, f2, f2); \ + f3 = fnc(f3, f3, f3); \ + f4 = fnc(f4, f4, f4); + +#define TEST_FN_FUNC_FN_FN_F(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1, f1); \ + f2 = fnc(f2, f1, f1); \ + f3 = fnc(f3, f1, f1); \ + f4 = fnc(f4, f1, f1); + +#define TEST_FN_FUNC_FN_PIN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, (int*) &i1); \ + f2 = fnc(f2, (int2*) &i2); \ + f3 = fnc(f3, (int3*) &i3); \ + f4 = fnc(f4, (int4*) &i4); + +#define TEST_FN_FUNC_FN_FN_PIN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + f1 = fnc(f1, f1, (int*) &i1); \ + f2 = fnc(f2, f2, (int2*) &i2); \ + f3 = fnc(f3, f3, (int3*) &i3); \ + f4 = fnc(f4, f4, (int4*) &i4); + +#define TEST_IN_FUNC_FN(fnc) \ + rsDebug("Testing " #fnc, 0); \ + i1 = fnc(f1); \ + i2 = fnc(f2); \ + i3 = fnc(f3); \ + i4 = fnc(f4); + +static bool test_fp_math(uint32_t index) { + bool failed = false; + start(); + + TEST_FN_FUNC_FN(acos); + TEST_FN_FUNC_FN(acosh); + TEST_FN_FUNC_FN(acospi); + TEST_FN_FUNC_FN(asin); + TEST_FN_FUNC_FN(asinh); + TEST_FN_FUNC_FN(asinpi); + TEST_FN_FUNC_FN(atan); + TEST_FN_FUNC_FN_FN(atan2); + TEST_FN_FUNC_FN(atanh); + TEST_FN_FUNC_FN(atanpi); + TEST_FN_FUNC_FN_FN(atan2pi); + TEST_FN_FUNC_FN(cbrt); + TEST_FN_FUNC_FN(ceil); + TEST_FN_FUNC_FN_FN_FN(clamp); + TEST_FN_FUNC_FN_FN_F(clamp); + TEST_FN_FUNC_FN_FN(copysign); + TEST_FN_FUNC_FN(cos); + TEST_FN_FUNC_FN(cosh); + TEST_FN_FUNC_FN(cospi); + TEST_F34_FUNC_F34_F34(cross); + TEST_FN_FUNC_FN(degrees); + TEST_F_FUNC_FN_FN(distance); + TEST_F_FUNC_FN_FN(dot); + TEST_FN_FUNC_FN(erfc); + TEST_FN_FUNC_FN(erf); + TEST_FN_FUNC_FN(exp); + TEST_FN_FUNC_FN(exp2); + TEST_FN_FUNC_FN(exp10); + TEST_FN_FUNC_FN(expm1); + TEST_FN_FUNC_FN(fabs); + TEST_FN_FUNC_FN_FN(fdim); + TEST_FN_FUNC_FN(floor); + TEST_FN_FUNC_FN_FN_FN(fma); + TEST_FN_FUNC_FN_FN(fmax); + TEST_FN_FUNC_FN_F(fmax); + TEST_FN_FUNC_FN_FN(fmin); + TEST_FN_FUNC_FN_F(fmin); + TEST_FN_FUNC_FN_FN(fmod); + TEST_FN_FUNC_FN_PFN(fract); + TEST_FN_FUNC_FN_PIN(frexp); + TEST_FN_FUNC_FN_FN(hypot); + TEST_IN_FUNC_FN(ilogb); + TEST_FN_FUNC_FN_IN(ldexp); + TEST_FN_FUNC_FN_I(ldexp); + TEST_F_FUNC_FN(length); + TEST_FN_FUNC_FN(lgamma); + TEST_FN_FUNC_FN_PIN(lgamma); + TEST_FN_FUNC_FN(log); + TEST_FN_FUNC_FN(log2); + TEST_FN_FUNC_FN(log10); + TEST_FN_FUNC_FN(log1p); + TEST_FN_FUNC_FN(logb); + TEST_FN_FUNC_FN_FN_FN(mad); + TEST_FN_FUNC_FN_FN(max); + TEST_FN_FUNC_FN_F(max); + TEST_FN_FUNC_FN_FN(min); + TEST_FN_FUNC_FN_F(min); + TEST_FN_FUNC_FN_FN_FN(mix); + TEST_FN_FUNC_FN_FN_F(mix); + TEST_FN_FUNC_FN_PFN(modf); + // nan + TEST_FN_FUNC_FN_FN(nextafter); + TEST_FN_FUNC_FN(normalize); + TEST_FN_FUNC_FN_FN(pow); + TEST_FN_FUNC_FN_IN(pown); + TEST_FN_FUNC_FN_FN(powr); + TEST_FN_FUNC_FN(radians); + TEST_FN_FUNC_FN_FN(remainder); + TEST_FN_FUNC_FN_FN_PIN(remquo); + TEST_FN_FUNC_FN(rint); + TEST_FN_FUNC_FN_IN(rootn); + TEST_FN_FUNC_FN(round); + TEST_FN_FUNC_FN(rsqrt); + TEST_FN_FUNC_FN(sign); + TEST_FN_FUNC_FN(sin); + TEST_FN_FUNC_FN_PFN(sincos); + TEST_FN_FUNC_FN(sinh); + TEST_FN_FUNC_FN(sinpi); + TEST_FN_FUNC_FN(sqrt); + TEST_FN_FUNC_FN_FN(step); + TEST_FN_FUNC_FN_F(step); + TEST_FN_FUNC_FN(tan); + TEST_FN_FUNC_FN(tanh); + TEST_FN_FUNC_FN(tanpi); + TEST_FN_FUNC_FN(tgamma); + TEST_FN_FUNC_FN(trunc); + + float time = end(index); + + if (failed) { + rsDebug("test_fp_math FAILED", time); + } + else { + rsDebug("test_fp_math PASSED", time); + } + + return failed; +} + +static bool test_int_math(uint32_t index) { + bool failed = false; + start(); + + TEST_UIN_FUNC_IN(abs); + TEST_IN_FUNC_IN(clz); + TEST_IN_FUNC_IN_IN(min); + TEST_IN_FUNC_IN_IN(max); + TEST_I_FUNC_I_I_I(rsClamp); + + float time = end(index); + + if (failed) { + rsDebug("test_int_math FAILED", time); + } + else { + rsDebug("test_int_math PASSED", time); + } + + return failed; +} static bool test_basic_operators() { bool failed = false; @@ -310,6 +423,7 @@ void math_test(uint32_t index, int test_num) { bool failed = false; failed |= test_convert(); failed |= test_fp_math(index); + failed |= test_int_math(index); failed |= test_basic_operators(); if (failed) {