http://stxxl.sourceforge.net
<tb@panthema.net>
http://www.boost.org/LICENSE_1_0.txt
#include <stxxl/bits/common/uint_types.h>
#include <stxxl/bits/verbose.h>
template class stxxl::uint_pair<stxxl::uint8>;
template class stxxl::uint_pair<stxxl::uint16>;
template <typename uint>
void dotest(unsigned int nbytes)
{
uint a = 42;
STXXL_CHECK(sizeof(a) == nbytes);
uint b = 0xFFFFFF00;
uint b_save = b;
stxxl::uint64 b64 = b;
for (stxxl::uint32 i = 0; i < 1024; ++i)
{
STXXL_CHECK(b.u64() == b64);
STXXL_CHECK(b.ull() == b64);
STXXL_CHECK(b != a);
++b, ++b64;
}
STXXL_CHECK(b != b_save);
for (stxxl::uint32 i = 0; i < 1024; ++i)
{
STXXL_CHECK(b.u64() == b64);
STXXL_CHECK(b.ull() == b64);
STXXL_CHECK(b != a);
--b, --b64;
}
STXXL_CHECK(b.u64() == b64);
STXXL_CHECK(b.ull() == b64);
STXXL_CHECK(b == b_save);
STXXL_CHECK(uint::min() <= a);
STXXL_CHECK(uint::max() >= a);
STXXL_CHECK(std::numeric_limits<uint>::min() < a);
STXXL_CHECK(std::numeric_limits<uint>::max() > a);
a = 42;
a = a + a;
STXXL_CHECK(a == uint(84));
STXXL_CHECK(a.ull() == 84);
a += uint(0xFFFFFF00);
STXXL_CHECK(a.ull() == 84 + (unsigned long long)(0xFFFFFF00));
}
int main()
{
dotest<stxxl::uint40>(5);
dotest<stxxl::uint48>(6);
return 0;
}