Added methods for counting the number of bits set in integers

git-svn-id: file:///srv/devel/repo-conversion/nusu@210 d2e56fa2-650e-0410-a79f-9358c0239efd
This commit is contained in:
Markus Ewald 2010-11-22 18:05:55 +00:00
parent 22cea75a7a
commit 645148a751
2 changed files with 73 additions and 2 deletions

View file

@ -97,6 +97,31 @@ namespace Nuclex.Support {
Assert.AreEqual(1073741824, IntegerHelper.NextPowerOf2(1073741824));
}
/// <summary>Verifies that the bit counting method for integers works</summary>
[Test]
public void TestCountBitsInInteger() {
Assert.AreEqual(0, IntegerHelper.CountBits(0));
Assert.AreEqual(32, IntegerHelper.CountBits(-1));
Assert.AreEqual(16, IntegerHelper.CountBits(0x55555555));
Assert.AreEqual(16, IntegerHelper.CountBits(0xAAAAAAAA));
for (int bitIndex = 0; bitIndex < 32; ++bitIndex) {
Assert.AreEqual(1, IntegerHelper.CountBits(1 << bitIndex));
}
}
/// <summary>Verifies that the bit counting method for long integers works</summary>
[Test]
public void TestCountBitsInLongInteger() {
Assert.AreEqual(0, IntegerHelper.CountBits(0L));
Assert.AreEqual(64, IntegerHelper.CountBits(-1L));
Assert.AreEqual(32, IntegerHelper.CountBits(0x5555555555555555));
Assert.AreEqual(32, IntegerHelper.CountBits(0xAAAAAAAAAAAAAAAA));
for (int bitIndex = 0; bitIndex < 64; ++bitIndex) {
Assert.AreEqual(1, IntegerHelper.CountBits(1 << bitIndex));
}
}
}