// Description: Testing for lowest bit.
// DocumentationOf: lowest_bit.h
#include "test/test_init.h"
#include <pastel/sys/integer/multi_integer.h>
#include <pastel/sys/bit/lowest_bit.h>
#include <pastel/sys/bit/highest_bit.h>
#include <pastel/sys/concept.h>
namespace
{
template <typename Finite_Integer>
void testCase()
{
REQUIRE(lowestBit(Finite_Integer(0)) == -1);
REQUIRE(highestBit(Finite_Integer(0)) == -1);
Finite_Integer a = 1;
for (integer i = 0;i < bits(a);++i)
{
REQUIRE(lowestBit(a) == i);
REQUIRE(highestBit(a) == i);
a <<= 1;
}
}
}
TEST_CASE("lowest_bit (lowest_bit)")
{
testCase<uint8>();
testCase<uint16>();
testCase<uint32>();
testCase<uint64>();
testCase<Signed_Integer<113, uint8>>();
testCase<Unsigned_Integer<113, uint8>>();
}