16a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===-------------- trunctfdf2_test.c - Test __trunctfdf2 -----------------===//
26a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//
36a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//                     The LLVM Compiler Infrastructure
46a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//
56a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// This file is dual licensed under the MIT and the University of Illinois Open
66a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// Source Licenses. See LICENSE.TXT for details.
76a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//
86a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===----------------------------------------------------------------------===//
96a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//
106a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// This file tests __trunctfdf2 for the compiler_rt library.
116a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//
126a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===----------------------------------------------------------------------===//
136a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
14cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga Nainar#include "int_lib.h"
156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include <stdio.h>
166a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
176a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if __LDBL_MANT_DIG__ == 113
186a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include "fp_test.h"
206a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
21cdce50bda3603770cc4ef80cbb613c78b8e47a17Pirama Arumuga NainarCOMPILER_RT_ABI double __trunctfdf2(long double a);
226a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
236a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesint test__trunctfdf2(long double a, uint64_t expected)
246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines{
256a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    double x = __trunctfdf2(a);
266a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    int ret = compareResultD(x, expected);
276a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
286a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (ret)
296a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    {
306a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        printf("error in test__trunctfdf2(%.20Lf) = %lf, "
316a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines               "expected %lf\n", a, x, fromRep64(expected));
326a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    }
336a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    return ret;
346a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines}
356a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
366a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hineschar assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
376a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
386a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
406a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesint main()
416a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines{
426a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#if __LDBL_MANT_DIG__ == 113
436a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    // qNaN
446a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(makeQNaN128(),
456a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x7ff8000000000000)))
466a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
476a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    // NaN
486a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(makeNaN128(UINT64_C(0x810000000000)),
496a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x7ff8100000000000)))
506a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
516a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    // inf
526a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(makeInf128(),
536a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x7ff0000000000000)))
546a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
556a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    // zero
566a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(0.0L, UINT64_C(0x0)))
576a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
586a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
596a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(0x1.af23456789bbaaab347645365cdep+5L,
606a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x404af23456789bbb)))
616a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
626a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(0x1.dedafcff354b6ae9758763545432p-9L,
636a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x3f6dedafcff354b7)))
646a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
656a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(0x1.2f34dd5f437e849b4baab754cdefp+4534L,
666a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x7ff0000000000000)))
676a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
686a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    if (test__trunctfdf2(0x1.edcbff8ad76ab5bf46463233214fp-435L,
696a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                         UINT64_C(0x24cedcbff8ad76ab)))
706a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines        return 1;
716a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
726a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#else
736a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    printf("skipped\n");
746a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
756a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif
766a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    return 0;
776a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines}
78