8
8
9
9
#include " llvm/Support/MathExtras.h"
10
10
#include " gtest/gtest.h"
11
+ #include < limits>
11
12
12
13
using namespace llvm ;
13
14
@@ -175,6 +176,7 @@ TEST(MathExtras, MinAlign) {
175
176
EXPECT_EQ (2u , MinAlign (2 , 4 ));
176
177
EXPECT_EQ (1u , MinAlign (17 , 64 ));
177
178
EXPECT_EQ (256u , MinAlign (256 , 512 ));
179
+ EXPECT_EQ (2u , MinAlign (0 , 2 ));
178
180
}
179
181
180
182
TEST (MathExtras, NextPowerOf2) {
@@ -183,15 +185,34 @@ TEST(MathExtras, NextPowerOf2) {
183
185
EXPECT_EQ (256u , NextPowerOf2 (128 ));
184
186
}
185
187
186
- TEST (MathExtras, alignTo ) {
188
+ TEST (MathExtras, AlignTo ) {
187
189
EXPECT_EQ (8u , alignTo (5 , 8 ));
188
190
EXPECT_EQ (24u , alignTo (17 , 8 ));
189
191
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 ));
190
194
191
195
EXPECT_EQ (7u , alignTo (5 , 8 , 7 ));
192
196
EXPECT_EQ (17u , alignTo (17 , 8 , 1 ));
193
197
EXPECT_EQ (3u , alignTo (~0LL , 8 , 3 ));
194
198
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 ));
195
216
}
196
217
197
218
template <typename T> void SaturatingAddTestHelper () {
@@ -434,7 +455,20 @@ TEST(MathExtras, IsShiftedInt) {
434
455
EXPECT_FALSE ((isShiftedInt<6 , 10 >(int64_t (1 ) << 15 )));
435
456
}
436
457
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
+
438
472
EXPECT_EQ (divideCeilSigned (14 , 3 ), 5 );
439
473
EXPECT_EQ (divideCeilSigned (15 , 3 ), 5 );
440
474
EXPECT_EQ (divideCeilSigned (14 , -3 ), -4 );
@@ -443,6 +477,10 @@ TEST(MathExtras, DivideCeilSigned) {
443
477
EXPECT_EQ (divideCeilSigned (-15 , 3 ), -5 );
444
478
EXPECT_EQ (divideCeilSigned (0 , 3 ), 0 );
445
479
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 );
446
484
}
447
485
448
486
TEST (MathExtras, DivideFloorSigned) {
@@ -454,6 +492,10 @@ TEST(MathExtras, DivideFloorSigned) {
454
492
EXPECT_EQ (divideFloorSigned (-15 , 3 ), -5 );
455
493
EXPECT_EQ (divideFloorSigned (0 , 3 ), 0 );
456
494
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 );
457
499
}
458
500
459
501
TEST (MathExtras, Mod) {
0 commit comments