Skip to content

Commit ebb5385

Browse files
authored
MathExtras/test: increase coverage (#95425)
Increase test coverage, and cover possible overflow cases in preparation for another patch optimizing for bitwidth.
1 parent ae71609 commit ebb5385

File tree

1 file changed

+44
-2
lines changed

1 file changed

+44
-2
lines changed

llvm/unittests/Support/MathExtrasTest.cpp

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
#include "llvm/Support/MathExtras.h"
1010
#include "gtest/gtest.h"
11+
#include <limits>
1112

1213
using namespace llvm;
1314

@@ -175,6 +176,7 @@ TEST(MathExtras, MinAlign) {
175176
EXPECT_EQ(2u, MinAlign(2, 4));
176177
EXPECT_EQ(1u, MinAlign(17, 64));
177178
EXPECT_EQ(256u, MinAlign(256, 512));
179+
EXPECT_EQ(2u, MinAlign(0, 2));
178180
}
179181

180182
TEST(MathExtras, NextPowerOf2) {
@@ -183,15 +185,34 @@ TEST(MathExtras, NextPowerOf2) {
183185
EXPECT_EQ(256u, NextPowerOf2(128));
184186
}
185187

186-
TEST(MathExtras, alignTo) {
188+
TEST(MathExtras, AlignTo) {
187189
EXPECT_EQ(8u, alignTo(5, 8));
188190
EXPECT_EQ(24u, alignTo(17, 8));
189191
EXPECT_EQ(0u, alignTo(~0LL, 8));
192+
EXPECT_EQ(static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1,
193+
alignTo(std::numeric_limits<uint32_t>::max(), 2));
190194

191195
EXPECT_EQ(7u, alignTo(5, 8, 7));
192196
EXPECT_EQ(17u, alignTo(17, 8, 1));
193197
EXPECT_EQ(3u, alignTo(~0LL, 8, 3));
194198
EXPECT_EQ(552u, alignTo(321, 255, 42));
199+
EXPECT_EQ(std::numeric_limits<uint32_t>::max(),
200+
alignTo(std::numeric_limits<uint32_t>::max(), 2, 1));
201+
}
202+
203+
TEST(MathExtras, AlignToPowerOf2) {
204+
EXPECT_EQ(8u, alignToPowerOf2(5, 8));
205+
EXPECT_EQ(24u, alignToPowerOf2(17, 8));
206+
EXPECT_EQ(0u, alignToPowerOf2(~0LL, 8));
207+
EXPECT_EQ(static_cast<uint64_t>(std::numeric_limits<uint32_t>::max()) + 1,
208+
alignToPowerOf2(std::numeric_limits<uint32_t>::max(), 2));
209+
}
210+
211+
TEST(MathExtras, AlignDown) {
212+
EXPECT_EQ(0u, alignDown(5, 8));
213+
EXPECT_EQ(16u, alignDown(17, 8));
214+
EXPECT_EQ(std::numeric_limits<uint32_t>::max() - 1,
215+
alignDown(std::numeric_limits<uint32_t>::max(), 2));
195216
}
196217

197218
template <typename T> void SaturatingAddTestHelper() {
@@ -434,7 +455,20 @@ TEST(MathExtras, IsShiftedInt) {
434455
EXPECT_FALSE((isShiftedInt<6, 10>(int64_t(1) << 15)));
435456
}
436457

437-
TEST(MathExtras, DivideCeilSigned) {
458+
TEST(MathExtras, DivideNearest) {
459+
EXPECT_EQ(divideNearest(14, 3), 5u);
460+
EXPECT_EQ(divideNearest(15, 3), 5u);
461+
EXPECT_EQ(divideNearest(0, 3), 0u);
462+
EXPECT_EQ(divideNearest(std::numeric_limits<uint32_t>::max(), 2),
463+
2147483648u);
464+
}
465+
466+
TEST(MathExtras, DivideCeil) {
467+
EXPECT_EQ(divideCeil(14, 3), 5u);
468+
EXPECT_EQ(divideCeil(15, 3), 5u);
469+
EXPECT_EQ(divideCeil(0, 3), 0u);
470+
EXPECT_EQ(divideCeil(std::numeric_limits<uint32_t>::max(), 2), 2147483648u);
471+
438472
EXPECT_EQ(divideCeilSigned(14, 3), 5);
439473
EXPECT_EQ(divideCeilSigned(15, 3), 5);
440474
EXPECT_EQ(divideCeilSigned(14, -3), -4);
@@ -443,6 +477,10 @@ TEST(MathExtras, DivideCeilSigned) {
443477
EXPECT_EQ(divideCeilSigned(-15, 3), -5);
444478
EXPECT_EQ(divideCeilSigned(0, 3), 0);
445479
EXPECT_EQ(divideCeilSigned(0, -3), 0);
480+
EXPECT_EQ(divideCeilSigned(std::numeric_limits<int32_t>::max(), 2),
481+
std::numeric_limits<int32_t>::max() / 2 + 1);
482+
EXPECT_EQ(divideCeilSigned(std::numeric_limits<int32_t>::max(), -2),
483+
std::numeric_limits<int32_t>::min() / 2 + 1);
446484
}
447485

448486
TEST(MathExtras, DivideFloorSigned) {
@@ -454,6 +492,10 @@ TEST(MathExtras, DivideFloorSigned) {
454492
EXPECT_EQ(divideFloorSigned(-15, 3), -5);
455493
EXPECT_EQ(divideFloorSigned(0, 3), 0);
456494
EXPECT_EQ(divideFloorSigned(0, -3), 0);
495+
EXPECT_EQ(divideFloorSigned(std::numeric_limits<int32_t>::max(), 2),
496+
std::numeric_limits<int32_t>::max() / 2);
497+
EXPECT_EQ(divideFloorSigned(std::numeric_limits<int32_t>::max(), -2),
498+
std::numeric_limits<int32_t>::min() / 2);
457499
}
458500

459501
TEST(MathExtras, Mod) {

0 commit comments

Comments
 (0)