| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 1 | //===----------------------------------------------------------------------===// |
| 2 | // |
| Chandler Carruth | 57b08b0 | 2019-01-19 10:56:40 +0000 | [diff] [blame^] | 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | // test constexpr bool test(size_t pos) const; |
| 10 | |
| 11 | #include <bitset> |
| 12 | #include <cstdlib> |
| 13 | #include <cassert> |
| Billy Robert O'Neal III | ed2f9a6 | 2018-08-08 00:40:32 +0000 | [diff] [blame] | 14 | #include <stdexcept> |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 15 | |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 16 | #include "test_macros.h" |
| 17 | |
| Stephan T. Lavavej | e803cc5 | 2017-05-05 23:51:39 +0000 | [diff] [blame] | 18 | #if defined(TEST_COMPILER_C1XX) |
| 19 | #pragma warning(disable: 6294) // Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed. |
| 20 | #endif |
| 21 | |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 22 | template <std::size_t N> |
| 23 | std::bitset<N> |
| 24 | make_bitset() |
| 25 | { |
| 26 | std::bitset<N> v; |
| 27 | for (std::size_t i = 0; i < N; ++i) |
| 28 | v[i] = static_cast<bool>(std::rand() & 1); |
| 29 | return v; |
| 30 | } |
| 31 | |
| 32 | template <std::size_t N> |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 33 | void test_test(bool test_throws) |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 34 | { |
| 35 | const std::bitset<N> v1 = make_bitset<N>(); |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 36 | #ifdef TEST_HAS_NO_EXCEPTIONS |
| 37 | if (test_throws) return; |
| 38 | #else |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 39 | try |
| 40 | { |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 41 | #endif |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 42 | bool b = v1.test(50); |
| 43 | if (50 >= v1.size()) |
| 44 | assert(false); |
| 45 | assert(b == v1[50]); |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 46 | assert(!test_throws); |
| 47 | #ifndef TEST_HAS_NO_EXCEPTIONS |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 48 | } |
| 49 | catch (std::out_of_range&) |
| 50 | { |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 51 | assert(test_throws); |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 52 | } |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 53 | #endif |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 54 | } |
| 55 | |
| 56 | int main() |
| 57 | { |
| Roger Ferrer Ibanez | aee391b | 2016-11-10 16:54:55 +0000 | [diff] [blame] | 58 | test_test<0>(true); |
| 59 | test_test<1>(true); |
| 60 | test_test<31>(true); |
| 61 | test_test<32>(true); |
| 62 | test_test<33>(true); |
| 63 | test_test<63>(false); |
| 64 | test_test<64>(false); |
| 65 | test_test<65>(false); |
| 66 | test_test<1000>(false); |
| Howard Hinnant | 94b2dd0 | 2010-08-22 00:59:46 +0000 | [diff] [blame] | 67 | } |