xref: /llvm-project/libc/test/src/fenv/rounding_mode_test.cpp (revision 837dab96d6f5bece79fd58d28ea2e6f7c0912493)
14fff2a7eSSiva Chandra Reddy //===-- Unittests for fegetround and fesetround ---------------------------===//
24fff2a7eSSiva Chandra Reddy //
34fff2a7eSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
44fff2a7eSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
54fff2a7eSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
64fff2a7eSSiva Chandra Reddy //
74fff2a7eSSiva Chandra Reddy //===----------------------------------------------------------------------===//
84fff2a7eSSiva Chandra Reddy 
94fff2a7eSSiva Chandra Reddy #include "src/fenv/fegetround.h"
104fff2a7eSSiva Chandra Reddy #include "src/fenv/fesetround.h"
114fff2a7eSSiva Chandra Reddy 
12*837dab96SRoland McGrath #include "test/UnitTest/FEnvSafeTest.h"
13af1315c2SSiva Chandra Reddy #include "test/UnitTest/Test.h"
144fff2a7eSSiva Chandra Reddy 
1549561181SJob Henandez Lara #include "hdr/fenv_macros.h"
164fff2a7eSSiva Chandra Reddy 
17*837dab96SRoland McGrath using LlvmLibcRoundingModeTest = LIBC_NAMESPACE::testing::FEnvSafeTest;
18*837dab96SRoland McGrath 
TEST_F(LlvmLibcRoundingModeTest,SetAndGet)19*837dab96SRoland McGrath TEST_F(LlvmLibcRoundingModeTest, SetAndGet) {
204f281fa2SAlex Brachet   struct ResetDefaultRoundingMode {
21*837dab96SRoland McGrath     int original = LIBC_NAMESPACE::fegetround();
22b6bc9d72SGuillaume Chatelet     ~ResetDefaultRoundingMode() { LIBC_NAMESPACE::fesetround(original); }
23*837dab96SRoland McGrath   } reset;
244f281fa2SAlex Brachet 
25b6bc9d72SGuillaume Chatelet   int s = LIBC_NAMESPACE::fesetround(FE_TONEAREST);
264fff2a7eSSiva Chandra Reddy   EXPECT_EQ(s, 0);
27b6bc9d72SGuillaume Chatelet   int rm = LIBC_NAMESPACE::fegetround();
284fff2a7eSSiva Chandra Reddy   EXPECT_EQ(rm, FE_TONEAREST);
294fff2a7eSSiva Chandra Reddy 
30b6bc9d72SGuillaume Chatelet   s = LIBC_NAMESPACE::fesetround(FE_UPWARD);
314fff2a7eSSiva Chandra Reddy   EXPECT_EQ(s, 0);
32b6bc9d72SGuillaume Chatelet   rm = LIBC_NAMESPACE::fegetround();
334fff2a7eSSiva Chandra Reddy   EXPECT_EQ(rm, FE_UPWARD);
344fff2a7eSSiva Chandra Reddy 
35b6bc9d72SGuillaume Chatelet   s = LIBC_NAMESPACE::fesetround(FE_DOWNWARD);
364fff2a7eSSiva Chandra Reddy   EXPECT_EQ(s, 0);
37b6bc9d72SGuillaume Chatelet   rm = LIBC_NAMESPACE::fegetround();
384fff2a7eSSiva Chandra Reddy   EXPECT_EQ(rm, FE_DOWNWARD);
394fff2a7eSSiva Chandra Reddy 
40b6bc9d72SGuillaume Chatelet   s = LIBC_NAMESPACE::fesetround(FE_TOWARDZERO);
414fff2a7eSSiva Chandra Reddy   EXPECT_EQ(s, 0);
42b6bc9d72SGuillaume Chatelet   rm = LIBC_NAMESPACE::fegetround();
434fff2a7eSSiva Chandra Reddy   EXPECT_EQ(rm, FE_TOWARDZERO);
444fff2a7eSSiva Chandra Reddy }
45