APIntTest.cpp revision 8be1ac213b20c5f4f6126d6ef955a9997f150ead
1//===- llvm/unittest/ADT/APInt.cpp - APInt unit tests ---------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "gtest/gtest.h" 11#include "llvm/ADT/APInt.h" 12 13using namespace llvm; 14 15namespace { 16 17// Test that APInt shift left works when bitwidth > 64 and shiftamt == 0 18TEST(APIntTest, ShiftLeftByZero) { 19 APInt One = APInt::getNullValue(65) + 1; 20 APInt Shl = One.shl(0); 21 EXPECT_EQ(true, Shl[0]); 22 EXPECT_EQ(false, Shl[1]); 23} 24 25TEST(APIntTest, I128NegativeCount) { 26 APInt Minus3(128, (uint64_t)-3, true); 27 EXPECT_EQ(126u, Minus3.countLeadingOnes()); 28 EXPECT_EQ(-3, Minus3.getSExtValue()); 29 30 APInt Minus1(128, (uint64_t)-1, true); 31 EXPECT_EQ(0u, Minus1.countLeadingZeros()); 32 EXPECT_EQ(128u, Minus1.countLeadingOnes()); 33 EXPECT_EQ(128u, Minus1.getActiveBits()); 34 EXPECT_EQ(0u, Minus1.countTrailingZeros()); 35 EXPECT_EQ(128u, Minus1.countTrailingOnes()); 36 EXPECT_EQ(128u, Minus1.countPopulation()); 37 EXPECT_EQ(-1, Minus1.getSExtValue()); 38} 39 40TEST(APIntTest, I33Count) { 41 APInt i33minus2(33, -2, true); 42 EXPECT_EQ(0u, i33minus2.countLeadingZeros()); 43 EXPECT_EQ(32u, i33minus2.countLeadingOnes()); 44 EXPECT_EQ(33u, i33minus2.getActiveBits()); 45 EXPECT_EQ(1u, i33minus2.countTrailingZeros()); 46 EXPECT_EQ(32u, i33minus2.countPopulation()); 47 EXPECT_EQ(-2, i33minus2.getSExtValue()); 48 EXPECT_EQ(((uint64_t)-2)&((1ull<<33) -1), i33minus2.getZExtValue()); 49} 50 51TEST(APIntTest, I65Count) { 52 APInt i65minus(65, 0, true); 53 i65minus.set(64); 54 EXPECT_EQ(0u, i65minus.countLeadingZeros()); 55 EXPECT_EQ(1u, i65minus.countLeadingOnes()); 56 EXPECT_EQ(65u, i65minus.getActiveBits()); 57 EXPECT_EQ(64u, i65minus.countTrailingZeros()); 58 EXPECT_EQ(1u, i65minus.countPopulation()); 59} 60 61TEST(APIntTest, I128PositiveCount) { 62 APInt u128max = APInt::getAllOnesValue(128); 63 EXPECT_EQ(128u, u128max.countLeadingOnes()); 64 EXPECT_EQ(0u, u128max.countLeadingZeros()); 65 EXPECT_EQ(128u, u128max.getActiveBits()); 66 EXPECT_EQ(0u, u128max.countTrailingZeros()); 67 EXPECT_EQ(128u, u128max.countTrailingOnes()); 68 EXPECT_EQ(128u, u128max.countPopulation()); 69 70 APInt u64max(128, (uint64_t)-1, false); 71 EXPECT_EQ(64u, u64max.countLeadingZeros()); 72 EXPECT_EQ(0u, u64max.countLeadingOnes()); 73 EXPECT_EQ(64u, u64max.getActiveBits()); 74 EXPECT_EQ(0u, u64max.countTrailingZeros()); 75 EXPECT_EQ(64u, u64max.countTrailingOnes()); 76 EXPECT_EQ(64u, u64max.countPopulation()); 77 EXPECT_EQ((uint64_t)~0ull, u64max.getZExtValue()); 78 79 APInt zero(128, 0, true); 80 EXPECT_EQ(128u, zero.countLeadingZeros()); 81 EXPECT_EQ(0u, zero.countLeadingOnes()); 82 EXPECT_EQ(0u, zero.getActiveBits()); 83 EXPECT_EQ(128u, zero.countTrailingZeros()); 84 EXPECT_EQ(0u, zero.countTrailingOnes()); 85 EXPECT_EQ(0u, zero.countPopulation()); 86 EXPECT_EQ(0u, zero.getSExtValue()); 87 EXPECT_EQ(0u, zero.getZExtValue()); 88 89 APInt one(128, 1, true); 90 EXPECT_EQ(127u, one.countLeadingZeros()); 91 EXPECT_EQ(0u, one.countLeadingOnes()); 92 EXPECT_EQ(1u, one.getActiveBits()); 93 EXPECT_EQ(0u, one.countTrailingZeros()); 94 EXPECT_EQ(1u, one.countTrailingOnes()); 95 EXPECT_EQ(1u, one.countPopulation()); 96 EXPECT_EQ(1, one.getSExtValue()); 97 EXPECT_EQ(1u, one.getZExtValue()); 98} 99 100} 101