/* { dg-additional-options "-fpermissive" } */

#include <limits.h>

#define F 140
#define T 13

feq(float x, float y) {
    if (x == y)
        return T;
    else
        return F;
}

fne(float x, float y) {
    if (x != y)
        return T;
    else
        return F;
}

flt(float x, float y) {
    if (x < y)
        return T;
    else
        return F;
}

fge(float x, float y) {
    if (x >= y)
        return T;
    else
        return F;
}

fgt(float x, float y) {
    if (x > y)
        return T;
    else
        return F;
}

fle(float x, float y) {
    if (x <= y)
        return T;
    else
        return F;
}

float args[] =
    {
        0.0F,
        1.0F,
        -1.0F,
        __FLT_MAX__,
        __FLT_MIN__,
        0.0000000000001F,
        123456789.0F,
        -987654321.0F};

int correct_results[] =
    {
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        T,
        F,
        F,
        T,
        F,
        T,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
        T,
        F,
        F,
        T,
        T,
        F,
        F,
        T,
        F,
        T,
};

int main(void) {
    int i, j, *res = correct_results;

    for (i = 0; i < 8; i++) {
        float arg0 = args[i];
        for (j = 0; j < 8; j++) {
            float arg1 = args[j];

            if (feq(arg0, arg1) != *res++)
                abort();
            if (fne(arg0, arg1) != *res++)
                abort();
            if (flt(arg0, arg1) != *res++)
                abort();
            if (fge(arg0, arg1) != *res++)
                abort();
            if (fgt(arg0, arg1) != *res++)
                abort();
            if (fle(arg0, arg1) != *res++)
                abort();
        }
    }
    exit(0);
}
