Added support for exact width integer type to int_t and uint_t

Updated docs to match.
Fixes #1225.

[SVN r57941]
This commit is contained in:
John Maddock
2009-11-26 11:08:27 +00:00
parent ca84baa55d
commit ac155d3843
9 changed files with 338 additions and 338 deletions

View File

@ -13,17 +13,10 @@
// 23 Sep 00 Added INTXX_C constant macro support + int64_t support (John Maddock).
// 28 Jun 00 Initial version
#define __STDC_CONSTANT_MACROS
#include <cassert>
#include <iostream>
#include <boost/cstdint.hpp>
#include <boost/test/minimal.hpp>
#ifdef NDEBUG
int main()
{
std::cout << "This test makes no sense with NDEBUG defined.\n";
return 0;
}
#else
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
//
@ -62,24 +55,24 @@ struct integral_constant_checker
void integral_constant_checker::check()
{
assert( int8 == -127 );
assert( int_least8 == -127 );
assert( int_fast8 == -127 );
assert( uint8 == 255u );
assert( uint_least8 == 255u );
assert( uint_fast8 == 255u );
assert( int16 == -32767 );
assert( int_least16 == -32767 );
assert( int_fast16 == -32767 );
assert( uint16 == 65535u );
assert( uint_least16 == 65535u );
assert( uint_fast16 == 65535u );
assert( int32 == -2147483647 );
assert( int_least32 == -2147483647 );
assert( int_fast32 == -2147483647 );
assert( uint32 == 4294967295u );
assert( uint_least32 == 4294967295u );
assert( uint_fast32 == 4294967295u );
BOOST_CHECK( int8 == -127 );
BOOST_CHECK( int_least8 == -127 );
BOOST_CHECK( int_fast8 == -127 );
BOOST_CHECK( uint8 == 255u );
BOOST_CHECK( uint_least8 == 255u );
BOOST_CHECK( uint_fast8 == 255u );
BOOST_CHECK( int16 == -32767 );
BOOST_CHECK( int_least16 == -32767 );
BOOST_CHECK( int_fast16 == -32767 );
BOOST_CHECK( uint16 == 65535u );
BOOST_CHECK( uint_least16 == 65535u );
BOOST_CHECK( uint_fast16 == 65535u );
BOOST_CHECK( int32 == -2147483647 );
BOOST_CHECK( int_least32 == -2147483647 );
BOOST_CHECK( int_fast32 == -2147483647 );
BOOST_CHECK( uint32 == 4294967295u );
BOOST_CHECK( uint_least32 == 4294967295u );
BOOST_CHECK( uint_fast32 == 4294967295u );
}
#endif // BOOST_NO_INCLASS_MEMBER_INITIALIZATION
@ -108,10 +101,10 @@ void integral_constant_type_check(T1, T2)
// if we have a native stdint.h
// then the INTXX_C macros may define
// a type that's wider than required:
assert(sizeof(T1) <= sizeof(T2));
BOOST_CHECK(sizeof(T1) <= sizeof(T2));
#else
assert(sizeof(T1) == sizeof(T2));
assert(t1 == t2);
BOOST_CHECK(sizeof(T1) == sizeof(T2));
BOOST_CHECK(t1 == t2);
#endif
#if defined(BOOST_HAS_STDINT_H)
// native headers are permitted to promote small
@ -119,22 +112,22 @@ void integral_constant_type_check(T1, T2)
if(sizeof(T1) >= sizeof(int))
{
if(t1 > 0)
assert(t2 > 0);
BOOST_CHECK(t2 > 0);
else
assert(!(t2 > 0));
BOOST_CHECK(!(t2 > 0));
}
else if(t1 < 0)
assert(!(t2 > 0));
BOOST_CHECK(!(t2 > 0));
#else
if(t1 > 0)
assert(t2 > 0);
BOOST_CHECK(t2 > 0);
else
assert(!(t2 > 0));
BOOST_CHECK(!(t2 > 0));
#endif
}
int main()
int test_main(int, char*[])
{
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
integral_constant_checker::check();
@ -193,41 +186,40 @@ int main()
boost::uintmax_t uintmax = UINTMAX_C(4294967295);
#endif
assert( int8 == -127 );
assert( int_least8 == -127 );
assert( int_fast8 == -127 );
assert( uint8 == 255u );
assert( uint_least8 == 255u );
assert( uint_fast8 == 255u );
assert( int16 == -32767 );
assert( int_least16 == -32767 );
assert( int_fast16 == -32767 );
assert( uint16 == 65535u );
assert( uint_least16 == 65535u );
assert( uint_fast16 == 65535u );
assert( int32 == -2147483647 );
assert( int_least32 == -2147483647 );
assert( int_fast32 == -2147483647 );
assert( uint32 == 4294967295u );
assert( uint_least32 == 4294967295u );
assert( uint_fast32 == 4294967295u );
BOOST_CHECK( int8 == -127 );
BOOST_CHECK( int_least8 == -127 );
BOOST_CHECK( int_fast8 == -127 );
BOOST_CHECK( uint8 == 255u );
BOOST_CHECK( uint_least8 == 255u );
BOOST_CHECK( uint_fast8 == 255u );
BOOST_CHECK( int16 == -32767 );
BOOST_CHECK( int_least16 == -32767 );
BOOST_CHECK( int_fast16 == -32767 );
BOOST_CHECK( uint16 == 65535u );
BOOST_CHECK( uint_least16 == 65535u );
BOOST_CHECK( uint_fast16 == 65535u );
BOOST_CHECK( int32 == -2147483647 );
BOOST_CHECK( int_least32 == -2147483647 );
BOOST_CHECK( int_fast32 == -2147483647 );
BOOST_CHECK( uint32 == 4294967295u );
BOOST_CHECK( uint_least32 == 4294967295u );
BOOST_CHECK( uint_fast32 == 4294967295u );
#ifndef BOOST_NO_INT64_T
assert( int64 == INT64_C(-9223372036854775807) );
assert( int_least64 == INT64_C(-9223372036854775807) );
assert( int_fast64 == INT64_C(-9223372036854775807) );
assert( uint64 == UINT64_C(18446744073709551615) );
assert( uint_least64 == UINT64_C(18446744073709551615) );
assert( uint_fast64 == UINT64_C(18446744073709551615) );
assert( intmax == INT64_C(-9223372036854775807) );
assert( uintmax == UINT64_C(18446744073709551615) );
BOOST_CHECK( int64 == INT64_C(-9223372036854775807) );
BOOST_CHECK( int_least64 == INT64_C(-9223372036854775807) );
BOOST_CHECK( int_fast64 == INT64_C(-9223372036854775807) );
BOOST_CHECK( uint64 == UINT64_C(18446744073709551615) );
BOOST_CHECK( uint_least64 == UINT64_C(18446744073709551615) );
BOOST_CHECK( uint_fast64 == UINT64_C(18446744073709551615) );
BOOST_CHECK( intmax == INT64_C(-9223372036854775807) );
BOOST_CHECK( uintmax == UINT64_C(18446744073709551615) );
#else
assert( intmax == -2147483647 );
assert( uintmax == 4294967295u );
BOOST_CHECK( intmax == -2147483647 );
BOOST_CHECK( uintmax == 4294967295u );
#endif
std::cout << "OK\n";
return 0;
}
#endif