OSDN Git Service

[unittests] Change std::sort to llvm::sort in response to r327219
[android-x86/external-llvm.git] / unittests / Support / CheckedArithmeticTest.cpp
1 #include "llvm/Support/CheckedArithmetic.h"
2 #include "gtest/gtest.h"
3
4 using namespace llvm;
5
6 namespace {
7
8 TEST(CheckedArithmetic, CheckedAdd) {
9   int64_t Out;
10   const int64_t Max = std::numeric_limits<int64_t>::max();
11   const int64_t Min = std::numeric_limits<int64_t>::min();
12   EXPECT_EQ(checkedAdd<int64_t>(Max, Max, &Out), true);
13   EXPECT_EQ(checkedAdd<int64_t>(Min, -1, &Out), true);
14   EXPECT_EQ(checkedAdd<int64_t>(Max, 1, &Out), true);
15   EXPECT_EQ(checkedAdd<int64_t>(10, 1, &Out), false);
16   EXPECT_EQ(Out, 11);
17 }
18
19 TEST(CheckedArithmetic, CheckedAddSmall) {
20   int16_t Out;
21   const int16_t Max = std::numeric_limits<int16_t>::max();
22   const int16_t Min = std::numeric_limits<int16_t>::min();
23   EXPECT_EQ(checkedAdd<int16_t>(Max, Max, &Out), true);
24   EXPECT_EQ(checkedAdd<int16_t>(Min, -1, &Out), true);
25   EXPECT_EQ(checkedAdd<int16_t>(Max, 1, &Out), true);
26   EXPECT_EQ(checkedAdd<int16_t>(10, 1, &Out), false);
27   EXPECT_EQ(Out, 11);
28 }
29
30 TEST(CheckedArithmetic, CheckedMul) {
31   int64_t Out;
32   const int64_t Max = std::numeric_limits<int64_t>::max();
33   const int64_t Min = std::numeric_limits<int64_t>::min();
34   EXPECT_EQ(checkedMul<int64_t>(Max, 2, &Out), true);
35   EXPECT_EQ(checkedMul<int64_t>(Max, Max, &Out), true);
36   EXPECT_EQ(checkedMul<int64_t>(Min, 2, &Out), true);
37   EXPECT_EQ(checkedMul<int64_t>(10, 2, &Out), false);
38   EXPECT_EQ(Out, 20);
39 }
40
41 TEST(CheckedArithmetic, CheckedMulSmall) {
42   int16_t Out;
43   const int16_t Max = std::numeric_limits<int16_t>::max();
44   const int16_t Min = std::numeric_limits<int16_t>::min();
45   EXPECT_EQ(checkedMul<int16_t>(Max, 2, &Out), true);
46   EXPECT_EQ(checkedMul<int16_t>(Max, Max, &Out), true);
47   EXPECT_EQ(checkedMul<int16_t>(Min, 2, &Out), true);
48   EXPECT_EQ(checkedMul<int16_t>(10, 2, &Out), false);
49   EXPECT_EQ(Out, 20);
50 }
51
52 TEST(CheckedArithmetic, CheckedAddUnsigned) {
53   uint64_t Out;
54   const uint64_t Max = std::numeric_limits<uint64_t>::max();
55   EXPECT_EQ(checkedAddUnsigned<uint64_t>(Max, Max, &Out), true);
56   EXPECT_EQ(checkedAddUnsigned<uint64_t>(Max, 1, &Out), true);
57   EXPECT_EQ(checkedAddUnsigned<uint64_t>(10, 1, &Out), false);
58   EXPECT_EQ(Out, uint64_t(11));
59 }
60
61 TEST(CheckedArithmetic, CheckedMulUnsigned) {
62   uint64_t Out;
63   const uint64_t Max = std::numeric_limits<uint64_t>::max();
64   EXPECT_EQ(checkedMulUnsigned<uint64_t>(Max, 2, &Out), true);
65   EXPECT_EQ(checkedMulUnsigned<uint64_t>(Max, Max, &Out), true);
66   EXPECT_EQ(checkedMulUnsigned<uint64_t>(10, 2, &Out), false);
67   EXPECT_EQ(Out, uint64_t(20));
68 }
69
70
71 } // namespace