xref: /aosp_15_r20/external/llvm-libc/test/src/stdlib/DivTest.h (revision 71db0c75aadcf003ffe3238005f61d7618a3fead)
1*71db0c75SAndroid Build Coastguard Worker //===-- A template class for testing div functions --------------*- C++ -*-===//
2*71db0c75SAndroid Build Coastguard Worker //
3*71db0c75SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*71db0c75SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*71db0c75SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*71db0c75SAndroid Build Coastguard Worker //
7*71db0c75SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*71db0c75SAndroid Build Coastguard Worker 
9*71db0c75SAndroid Build Coastguard Worker #include "test/UnitTest/Test.h"
10*71db0c75SAndroid Build Coastguard Worker 
11*71db0c75SAndroid Build Coastguard Worker template <typename IntType, typename ReturnType>
12*71db0c75SAndroid Build Coastguard Worker class DivTest : public LIBC_NAMESPACE::testing::Test {
13*71db0c75SAndroid Build Coastguard Worker public:
14*71db0c75SAndroid Build Coastguard Worker   using DivFunc = ReturnType(IntType, IntType);
15*71db0c75SAndroid Build Coastguard Worker 
simpleTest(DivFunc func)16*71db0c75SAndroid Build Coastguard Worker   void simpleTest(DivFunc func) {
17*71db0c75SAndroid Build Coastguard Worker     auto result = func(10, 3);
18*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.quot, IntType(3));
19*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.rem, IntType(1));
20*71db0c75SAndroid Build Coastguard Worker 
21*71db0c75SAndroid Build Coastguard Worker     result = func(-10, 3);
22*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.quot, IntType(-3));
23*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.rem, IntType(-1));
24*71db0c75SAndroid Build Coastguard Worker 
25*71db0c75SAndroid Build Coastguard Worker     result = func(-10, -3);
26*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.quot, IntType(3));
27*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.rem, IntType(-1));
28*71db0c75SAndroid Build Coastguard Worker 
29*71db0c75SAndroid Build Coastguard Worker     result = func(10, -3);
30*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.quot, IntType(-3));
31*71db0c75SAndroid Build Coastguard Worker     EXPECT_EQ(result.rem, IntType(1));
32*71db0c75SAndroid Build Coastguard Worker   }
33*71db0c75SAndroid Build Coastguard Worker };
34*71db0c75SAndroid Build Coastguard Worker 
35*71db0c75SAndroid Build Coastguard Worker #define LIST_DIV_TESTS(IntType, ReturnType, func)                              \
36*71db0c75SAndroid Build Coastguard Worker   using LlvmLibcDivTest = DivTest<IntType, ReturnType>;                        \
37*71db0c75SAndroid Build Coastguard Worker   TEST_F(LlvmLibcDivTest, SimpleTest##ReturnType) { simpleTest(func); }
38