Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 688de88b authored by Stephen Hines's avatar Stephen Hines
Browse files

Fix bug in modf library function (plus typos).

Change-Id: I643c905e2e3e2dcf7a61f1d027b749d9a0d6e542
parent d63d3358
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ public class RSTestCore {
        unitTests.add(new UT_rsdebug(this, mRes, mCtx));
        unitTests.add(new UT_rstime(this, mRes, mCtx));
        unitTests.add(new UT_rstypes(this, mRes, mCtx));
        unitTests.add(new UT_math(this, mRes, mCtx));
        unitTests.add(new UT_fp_mad(this, mRes, mCtx));
        /*
        unitTests.add(new UnitTest(null, "<Pass>", 1));
+40 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.rs.test;

import android.content.Context;
import android.content.res.Resources;
import android.renderscript.*;

public class UT_math extends UnitTest {
    private Resources mRes;

    protected UT_math(RSTestCore rstc, Resources res, Context ctx) {
        super(rstc, "Math", ctx);
        mRes = res;
    }

    public void run() {
        RenderScript pRS = RenderScript.create(mCtx);
        ScriptC_math s = new ScriptC_math(pRS, mRes, R.raw.math);
        pRS.setMessageHandler(mRsMessage);
        s.invoke_math_test(0, 0);
        pRS.finish();
        waitForMessage();
        pRS.destroy();
    }
}
+65 −0
Original line number Diff line number Diff line
#include "shared.rsh"

// Testing math library

volatile float f1;
volatile float2 f2;
volatile float3 f3;
volatile float4 f4;

#define TEST_F(fnc, var)            \
    rsDebug("Testing " #fnc, 0);    \
    var##1 = fnc(var##1);           \
    var##2 = fnc(var##2);           \
    var##3 = fnc(var##3);           \
    var##4 = fnc(var##4);

#define TEST_FP(fnc, var)           \
    rsDebug("Testing " #fnc, 0);    \
    var##1 = fnc(var##1, (float*) &f1);  \
    var##2 = fnc(var##2, (float2*) &f2);  \
    var##3 = fnc(var##3, (float3*) &f3);  \
    var##4 = fnc(var##4, (float4*) &f4);

#define TEST_F2(fnc, var)           \
    rsDebug("Testing " #fnc, 0);    \
    var##1 = fnc(var##1, var##1);   \
    var##2 = fnc(var##2, var##2);   \
    var##3 = fnc(var##3, var##3);   \
    var##4 = fnc(var##4, var##4);

static bool test_math(uint32_t index) {
    bool failed = false;
    start();

    TEST_F(cos, f);
    TEST_FP(modf, f);
    TEST_F2(pow, f);
    TEST_F(sin, f);
    TEST_F(sqrt, f);


    float time = end(index);

    if (failed) {
        rsDebug("test_math FAILED", time);
    }
    else {
        rsDebug("test_math PASSED", time);
    }

    return failed;
}

void math_test(uint32_t index, int test_num) {
    bool failed = false;
    failed |= test_math(index);

    if (failed) {
        rsSendToClientBlocking(RS_MSG_TEST_FAILED);
    }
    else {
        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -221,7 +221,7 @@ static ScriptCState::SymbolTable_t gSyms[] = {
    { "_Z5log1pf", (void *)&log1pf, true },
    //{ "logb", (void *)&, true },
    //{ "mad", (void *)&, true },
    { "modf", (void *)&modff, true },
    { "_Z4modffPf", (void *)&modff, true },
    //{ "nan", (void *)&, true },
    { "_Z9nextafterff", (void *)&nextafterf, true },
    { "_Z3powff", (void *)&powf, true },
+36 −4
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ _RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float4 v2) { \
    r.x = fnc(v1.x, v2.x); \
    r.y = fnc(v1.y, v2.y); \
    r.z = fnc(v1.z, v2.z); \
    r.w = fnc(v1.w, v2.z); \
    r.w = fnc(v1.w, v2.w); \
    return r; \
}

@@ -136,6 +136,40 @@ _RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float v2) { \
    return r; \
}

#define DEF_FUNC_2P(fnc) \
_RS_STATIC float2 __attribute__((overloadable)) fnc(float2 v1, float2 *v2) { \
    float2 r; \
    float q; \
    r.x = fnc(v1.x, &q); \
    v2->x = q; \
    r.y = fnc(v1.y, &q); \
    v2->y = q; \
    return r; \
} \
_RS_STATIC float3 __attribute__((overloadable)) fnc(float3 v1, float3 *v2) { \
    float3 r; \
    float q; \
    r.x = fnc(v1.x, &q); \
    v2->x = q; \
    r.y = fnc(v1.y, &q); \
    v2->y = q; \
    r.z = fnc(v1.z, &q); \
    v2->z = q; \
    return r; \
} \
_RS_STATIC float4 __attribute__((overloadable)) fnc(float4 v1, float4 *v2) { \
    float4 r; \
    float q; \
    r.x = fnc(v1.x, &q); \
    v2->x = q; \
    r.y = fnc(v1.y, &q); \
    v2->y = q; \
    r.z = fnc(v1.z, &q); \
    v2->z = q; \
    r.w = fnc(v1.w, &q); \
    v2->w = q; \
    return r; \
}

extern float __attribute__((overloadable)) acos(float);
DEF_FUNC_1(acos)
@@ -333,9 +367,7 @@ extern float3 __attribute__((overloadable)) mad(float3, float3, float3);
extern float4 __attribute__((overloadable)) mad(float4, float4, float4);

extern float __attribute__((overloadable)) modf(float, float *);
extern float2 __attribute__((overloadable)) modf(float2, float2 *);
extern float3 __attribute__((overloadable)) modf(float3, float3 *);
extern float4 __attribute__((overloadable)) modf(float4, float4 *);
DEF_FUNC_2P(modf);

//extern float __attribute__((overloadable)) nan(uint);