to_ulong.pass.cpp revision 9d00ed5d8749f472e63ca7e5a510da2ee58f9dbd
1bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com//===----------------------------------------------------------------------===// 2bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com// 3bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com// The LLVM Compiler Infrastructure 4bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com// 5bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com// This file is dual licensed under the MIT and the University of Illinois Open 6e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com// Source Licenses. See LICENSE.TXT for details. 7f523e25da069e3e1af2cb73d37073a34f3bb9ea2reed@android.com// 8bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com//===----------------------------------------------------------------------===// 9bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 104bc1983e01d756ae9c91fd380758457f579d26eareed@android.com// test unsigned long to_ulong() const; 11bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com 124e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com#include <bitset> 134e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com#include <algorithm> 144e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com#include <limits> 154e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com#include <climits> 164e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com#include <cassert> 174e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com 184e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.comtemplate <std::size_t N> 194e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.comvoid test_to_ulong() 204e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com{ 21bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com const std::size_t M = sizeof(unsigned long) * CHAR_BIT < N ? sizeof(unsigned long) * CHAR_BIT : N; 22bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com const std::size_t X = M == 0 ? sizeof(unsigned long) * CHAR_BIT - 1 : sizeof(unsigned long) * CHAR_BIT - M; 23e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com const std::size_t max = M == 0 ? 0 : std::size_t(std::numeric_limits<unsigned long>::max()) >> X; 244bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::size_t tests[] = {0, 25bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com std::min<std::size_t>(1, max), 26bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com std::min<std::size_t>(2, max), 27bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com std::min<std::size_t>(3, max), 284bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::min(max, max-3), 294bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::min(max, max-2), 304bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::min(max, max-1), 314bc1983e01d756ae9c91fd380758457f579d26eareed@android.com max}; 324bc1983e01d756ae9c91fd380758457f579d26eareed@android.com for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) 334bc1983e01d756ae9c91fd380758457f579d26eareed@android.com { 344bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::size_t j = tests[i]; 354bc1983e01d756ae9c91fd380758457f579d26eareed@android.com std::bitset<N> v(j); 3629348cb0612e19030d979156860946241e2ff4bdreed@android.com assert(j == v.to_ulong()); 3729348cb0612e19030d979156860946241e2ff4bdreed@android.com } 3829348cb0612e19030d979156860946241e2ff4bdreed@android.com} 3929348cb0612e19030d979156860946241e2ff4bdreed@android.com 404e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.comint main() 414e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com{ 424e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com test_to_ulong<0>(); 434e635f9eb218b15f656a02e71c60d4f787fe9306reed@android.com test_to_ulong<1>(); 44e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com test_to_ulong<31>(); 45e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com test_to_ulong<32>(); 46e9d0060f4d7b5a07a220182d83aae3a140784c4breed@android.com test_to_ulong<33>(); 47bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com test_to_ulong<63>(); 484bc1983e01d756ae9c91fd380758457f579d26eareed@android.com test_to_ulong<64>(); 494bc1983e01d756ae9c91fd380758457f579d26eareed@android.com test_to_ulong<65>(); 50bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com test_to_ulong<1000>(); 51bd700c391dd45acd8ea1a40321789c9d92a14bb8reed@android.com} 52f523e25da069e3e1af2cb73d37073a34f3bb9ea2reed@android.com