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