12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===------------ lttf2_test.c - Test __lttf2------------------------------===//
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//                     The LLVM Compiler Infrastructure
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file is dual licensed under the MIT and the University of Illinois Open
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// Source Licenses. See LICENSE.TXT for details.
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// This file tests __lttf2 for the compiler_rt library.
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines//===----------------------------------------------------------------------===//
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdio.h>
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __LP64__ && __LDBL_MANT_DIG__ == 113
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include "fp_test.h"
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint __lttf2(long double a, long double b);
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint test__lttf2(long double a, long double b, enum EXPECTED_RESULT expected)
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int x = __lttf2(a, b);
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    int ret = compareResultCMP(x, expected);
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (ret){
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        printf("error in test__lttf2(%.20Lf, %.20Lf) = %d, "
292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines               "expected %s\n", a, b, x, expectedStr(expected));
302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    }
312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    return ret;
322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
332d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hineschar assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main()
392d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines{
402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if __LP64__ && __LDBL_MANT_DIG__ == 113
412d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // NaN
422d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(makeQNaN128(),
432d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp+3L,
442d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    GREATER_EQUAL_0))
452d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
462d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // <
472d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // exp
482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.234567890abcdef1234567890abcp-3L,
492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp+3L,
502d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    LESS_0))
512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // mantissa
532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.234567890abcdef1234567890abcp+3L,
542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.334567890abcdef1234567890abcp+3L,
552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    LESS_0))
562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // sign
582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(-0x1.234567890abcdef1234567890abcp+3L,
592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp+3L,
602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    LESS_0))
612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // ==
632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.234567890abcdef1234567890abcp+3L,
642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp+3L,
652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    GREATER_EQUAL_0))
662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // >
682d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // exp
692d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.234567890abcdef1234567890abcp+3L,
702d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp-3L,
712d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    GREATER_EQUAL_0))
722d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
732d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // mantissa
742d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.334567890abcdef1234567890abcp+3L,
752d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    0x1.234567890abcdef1234567890abcp+3L,
762d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    GREATER_EQUAL_0))
772d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
782d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    // sign
792d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    if (test__lttf2(0x1.234567890abcdef1234567890abcp+3L,
802d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    -0x1.234567890abcdef1234567890abcp+3L,
812d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines                    GREATER_EQUAL_0))
822d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        return 1;
832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#else
852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    printf("skipped\n");
862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    return 0;
892d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
90