1 // RUN: %clang_builtins %s %librt -o %t && %run %t
2 //===--------------- trunctfsf2_test.c - Test __trunctfsf2 ----------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10 //
11 // This file tests __trunctfsf2 for the compiler_rt library.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "int_lib.h"
16 #include <stdio.h>
17 
18 #if __LDBL_MANT_DIG__ == 113
19 
20 #include "fp_test.h"
21 
22 COMPILER_RT_ABI float __trunctfsf2(long double a);
23 
24 int test__trunctfsf2(long double a, uint32_t expected)
25 {
26     float x = __trunctfsf2(a);
27     int ret = compareResultF(x, expected);
28 
29     if (ret){
30         printf("error in test__trunctfsf2(%.20Lf) = %f, "
31                "expected %f\n", a, x, fromRep32(expected));
32     }
33     return ret;
34 }
35 
36 char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0};
37 
38 #endif
39 
40 int main()
41 {
42 #if __LDBL_MANT_DIG__ == 113
43     // qNaN
44     if (test__trunctfsf2(makeQNaN128(),
45                          UINT32_C(0x7fc00000)))
46         return 1;
47     // NaN
48     if (test__trunctfsf2(makeNaN128(UINT64_C(0x810000000000)),
49                          UINT32_C(0x7fc08000)))
50         return 1;
51     // inf
52     if (test__trunctfsf2(makeInf128(),
53                          UINT32_C(0x7f800000)))
54         return 1;
55     // zero
56     if (test__trunctfsf2(0.0L, UINT32_C(0x0)))
57         return 1;
58 
59     if (test__trunctfsf2(0x1.23a2abb4a2ddee355f36789abcdep+5L,
60                          UINT32_C(0x4211d156)))
61         return 1;
62     if (test__trunctfsf2(0x1.e3d3c45bd3abfd98b76a54cc321fp-9L,
63                          UINT32_C(0x3b71e9e2)))
64         return 1;
65     if (test__trunctfsf2(0x1.234eebb5faa678f4488693abcdefp+4534L,
66                          UINT32_C(0x7f800000)))
67         return 1;
68     if (test__trunctfsf2(0x1.edcba9bb8c76a5a43dd21f334634p-435L,
69                          UINT32_C(0x0)))
70         return 1;
71 
72 #else
73     printf("skipped\n");
74 
75 #endif
76     return 0;
77 }
78