1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)//===----------------------------------------------------------------------===// 2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// 3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// The LLVM Compiler Infrastructure 4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// 8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)//===----------------------------------------------------------------------===// 9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// test unsigned long long to_ullong() const; 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <bitset> 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <algorithm> 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <climits> 15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include <cassert> 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)template <std::size_t N> 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)void test_to_ullong() 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles){ 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::size_t M = sizeof(unsigned long long) * CHAR_BIT < N ? sizeof(unsigned long long) * CHAR_BIT : N; 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::size_t X = M == 0 ? sizeof(unsigned long long) * CHAR_BIT - 1 : sizeof(unsigned long long) * CHAR_BIT - M; 22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const unsigned long long max = M == 0 ? 0 : (unsigned long long)(-1) >> X; 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) unsigned long long tests[] = {0, 24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min<unsigned long long>(1, max), 25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min<unsigned long long>(2, max), 26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min<unsigned long long>(3, max), 27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min(max, max-3), 28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min(max, max-2), 29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::min(max, max-1), 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) max}; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (std::size_t i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) { 33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) unsigned long long j = tests[i]; 34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) std::bitset<N> v(j); 35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) assert(j == v.to_ullong()); 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) } 37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)int main() 40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles){ 41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<0>(); 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<1>(); 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<31>(); 44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<32>(); 45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<33>(); 46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<63>(); 47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<64>(); 48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<65>(); 49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) test_to_ullong<1000>(); 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)