diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2021-10-18 14:58:55 +0100 | 
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2021-10-18 15:01:28 +0100 | 
| commit | ac1c0dd3175aaf139b81762d7b06fa38ca55b9aa (patch) | |
| tree | f726f955df3f260ba3b5c146df2d916de7d2a8c4 /llvm/unittests/ADT/APIntTest.cpp | |
| parent | d5429a13da2b61b356f996a41ea314a1a1ce9076 (diff) | |
| download | llvm-ac1c0dd3175aaf139b81762d7b06fa38ca55b9aa.zip llvm-ac1c0dd3175aaf139b81762d7b06fa38ca55b9aa.tar.gz llvm-ac1c0dd3175aaf139b81762d7b06fa38ca55b9aa.tar.bz2 | |
[ADT] Add some basic APInt::isPowerOf2() unit test coverage
Diffstat (limited to 'llvm/unittests/ADT/APIntTest.cpp')
| -rw-r--r-- | llvm/unittests/ADT/APIntTest.cpp | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/llvm/unittests/ADT/APIntTest.cpp b/llvm/unittests/ADT/APIntTest.cpp index 58c17b4..3631c12 100644 --- a/llvm/unittests/ADT/APIntTest.cpp +++ b/llvm/unittests/ADT/APIntTest.cpp @@ -1765,6 +1765,26 @@ TEST(APIntTest, isShiftedMask) {    }  } +TEST(APIntTest, isPowerOf2) { +  EXPECT_FALSE(APInt(5, 0x00).isPowerOf2()); +  EXPECT_FALSE(APInt(32, 0x11).isPowerOf2()); +  EXPECT_TRUE(APInt(17, 0x01).isPowerOf2()); +  EXPECT_TRUE(APInt(32, 0xff << 31).isPowerOf2()); + +  for (int N : {1, 2, 3, 4, 7, 8, 16, 32, 64, 127, 128, 129, 256}) { +    EXPECT_FALSE(APInt(N, 0).isPowerOf2()); +    EXPECT_TRUE(APInt::getSignedMinValue(N).isPowerOf2()); + +    APInt One(N, 1); +    for (int I = 1; I < N - 1; ++I) { +      EXPECT_TRUE(APInt::getOneBitSet(N, I).isPowerOf2()); + +      APInt MaskVal = One.shl(I); +      EXPECT_TRUE(MaskVal.isPowerOf2()); +    } +  } +} +  // Test that self-move works with EXPENSIVE_CHECKS. It calls std::shuffle which  // does self-move on some platforms.  #ifdef EXPENSIVE_CHECKS | 
