1 // RUN: %clang_builtins %s %librt -o %t && %run %t 2 // REQUIRES: librt_has_trunctfdf2 3 //===-------------- trunctfdf2_test.c - Test __trunctfdf2 -----------------===// 4 // 5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 6 // See https://llvm.org/LICENSE.txt for license information. 7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 8 // 9 //===----------------------------------------------------------------------===// 10 // 11 // This file tests __trunctfdf2 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 double __trunctfdf2(long double a); 23 24 int test__trunctfdf2(long double a, uint64_t expected) 25 { 26 double x = __trunctfdf2(a); 27 int ret = compareResultD(x, expected); 28 29 if (ret) 30 { 31 printf("error in test__trunctfdf2(%.20Lf) = %lf, " 32 "expected %lf\n", a, x, fromRep64(expected)); 33 } 34 return ret; 35 } 36 37 char assumption_1[sizeof(long double) * CHAR_BIT == 128] = {0}; 38 39 #endif 40 41 int main() 42 { 43 #if __LDBL_MANT_DIG__ == 113 44 // qNaN 45 if (test__trunctfdf2(makeQNaN128(), 46 UINT64_C(0x7ff8000000000000))) 47 return 1; 48 // NaN 49 if (test__trunctfdf2(makeNaN128(UINT64_C(0x810000000000)), 50 UINT64_C(0x7ff8100000000000))) 51 return 1; 52 // inf 53 if (test__trunctfdf2(makeInf128(), 54 UINT64_C(0x7ff0000000000000))) 55 return 1; 56 // zero 57 if (test__trunctfdf2(0.0L, UINT64_C(0x0))) 58 return 1; 59 60 if (test__trunctfdf2(0x1.af23456789bbaaab347645365cdep+5L, 61 UINT64_C(0x404af23456789bbb))) 62 return 1; 63 if (test__trunctfdf2(0x1.dedafcff354b6ae9758763545432p-9L, 64 UINT64_C(0x3f6dedafcff354b7))) 65 return 1; 66 if (test__trunctfdf2(0x1.2f34dd5f437e849b4baab754cdefp+4534L, 67 UINT64_C(0x7ff0000000000000))) 68 return 1; 69 if (test__trunctfdf2(0x1.edcbff8ad76ab5bf46463233214fp-435L, 70 UINT64_C(0x24cedcbff8ad76ab))) 71 return 1; 72 73 #else 74 printf("skipped\n"); 75 76 #endif 77 return 0; 78 } 79