Livt packages

Eccelerators.BitTwiddling

Version 0.1.1

Readable 32-bit bit manipulation, counting, scanning, permutation, and arithmetic utilities for Livt.

Published files (26)

tests/counting/BitScanningTest.lvt

namespace Eccelerators.BitTwiddling.Tests.Counting

using Eccelerators.BitTwiddling.Counting

@Test
component BitScanningTest
{
    @Test
    fn TestLog2Floor()
    {
        assert BitScanning.Log2Floor(0) == -1
        assert BitScanning.Log2Floor(1) == 0
        assert BitScanning.Log2Floor(2) == 1
        assert BitScanning.Log2Floor(3) == 1
        assert BitScanning.Log2Floor(0x80000000) == 31
        assert BitScanning.Log2Floor(0xFFFFFFFF) == 31
    }

    @Test
    fn TestCountTrailingZeros()
    {
        assert BitScanning.CountTrailingZeros(0) == 32
        assert BitScanning.CountTrailingZeros(1) == 0
        assert BitScanning.CountTrailingZeros(8) == 3
        assert BitScanning.CountTrailingZeros(0x00010000) == 16
        assert BitScanning.CountTrailingZeros(0x80000000) == 31
    }

    @Test
    fn TestLeadingZerosAndBitPositions()
    {
        assert BitScanning.CountLeadingZeros(0) == 32
        assert BitScanning.CountLeadingZeros(1) == 31
        assert BitScanning.CountLeadingZeros(0x00010000) == 15
        assert BitScanning.CountLeadingZeros(0x80000000) == 0
        assert BitScanning.HighestSetBit(0) == -1
        assert BitScanning.HighestSetBit(0x00100800) == 20
        assert BitScanning.LowestSetBit(0) == -1
        assert BitScanning.LowestSetBit(0x00100800) == 11
    }
}