1799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===-- floatunditf_test.c - Test __floatunditf ---------------------------===//
2799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
3799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//                     The LLVM Compiler Infrastructure
4799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
5799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This file is dual licensed under the MIT and the University of Illinois Open
6799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// Source Licenses. See LICENSE.TXT for details.
7799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
8799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===----------------------------------------------------------------------===//
9799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
10799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// This file tests __floatunditf for the compiler_rt library.
11799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//
12799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar//===----------------------------------------------------------------------===//
13799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
14799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include "int_lib.h"
15799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <math.h>
16799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <complex.h>
17799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include <stdio.h>
18799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
19799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#if __LDBL_MANT_DIG__ == 113
20799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
21799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#include "fp_test.h"
22799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
23799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar// Returns: long integer converted to long double
24799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
25799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga NainarCOMPILER_RT_ABI long double __floatunditf(unsigned long long a);
26799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
27799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarint test__floatunditf(unsigned long long a, uint64_t expectedHi, uint64_t expectedLo)
28799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar{
29799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    long double x = __floatunditf(a);
30799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    int ret = compareResultLD(x, expectedHi, expectedLo);
31799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
32799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (ret)
33799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        printf("error in __floatunditf(%Lu) = %.20Lf, "
34799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar               "expected %.20Lf\n", a, x, fromRep128(expectedHi, expectedLo));
35799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    return ret;
36799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar}
37799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
38799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarchar assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
39799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
40799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#endif
41799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
42799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainarint main()
43799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar{
44799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#if __LDBL_MANT_DIG__ == 113
45799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0xffffffffffffffffULL, UINT64_C(0x403effffffffffff), UINT64_C(0xfffe000000000000)))
46799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
47799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0xfffffffffffffffeULL, UINT64_C(0x403effffffffffff), UINT64_C(0xfffc000000000000)))
48799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
49799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x8000000000000000ULL, UINT64_C(0x403e000000000000), UINT64_C(0x0)))
50799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
51799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x7fffffffffffffffULL, UINT64_C(0x403dffffffffffff), UINT64_C(0xfffc000000000000)))
52799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
53799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x123456789abcdef1ULL, UINT64_C(0x403b23456789abcd), UINT64_C(0xef10000000000000)))
54799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
55799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x2ULL, UINT64_C(0x4000000000000000), UINT64_C(0x0)))
56799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
57799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x1ULL, UINT64_C(0x3fff000000000000), UINT64_C(0x0)))
58799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
59799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    if (test__floatunditf(0x0ULL, UINT64_C(0x0), UINT64_C(0x0)))
60799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar        return 1;
61799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
62799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#else
63799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    printf("skipped\n");
64799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar
65799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar#endif
66799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar    return 0;
67799172d60d32feb1acba1a6867f3a9c39a999e5cPirama Arumuga Nainar}
68