| 1 | //===----------------------------------------------------------------------===// |
| 2 | // |
| 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 |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | #ifndef LIBCPP_TEST_BITSET_TEST_CASES_H |
| 10 | #define LIBCPP_TEST_BITSET_TEST_CASES_H |
| 11 | |
| 12 | #include <bitset> |
| 13 | #include <string> |
| 14 | #include <vector> |
| 15 | |
| 16 | #include "test_macros.h" |
| 17 | |
| 18 | template <int N> |
| 19 | TEST_CONSTEXPR_CXX23 std::vector<std::bitset<N> > get_test_cases(); |
| 20 | |
| 21 | template <> |
| 22 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<0> > get_test_cases<0>() { |
| 23 | std::vector<std::bitset<0> > cases; |
| 24 | cases.push_back(std::bitset<0>()); |
| 25 | return cases; |
| 26 | } |
| 27 | |
| 28 | template <> |
| 29 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<1> > get_test_cases<1>() { |
| 30 | std::vector<std::bitset<1> > cases; |
| 31 | cases.push_back(std::bitset<1>("0" )); |
| 32 | cases.push_back(std::bitset<1>("1" )); |
| 33 | return cases; |
| 34 | } |
| 35 | |
| 36 | template <> |
| 37 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<2> > get_test_cases<2>() { |
| 38 | std::vector<std::bitset<2> > cases; |
| 39 | cases.push_back(std::bitset<2>("00" )); |
| 40 | cases.push_back(std::bitset<2>("01" )); |
| 41 | cases.push_back(std::bitset<2>("10" )); |
| 42 | cases.push_back(std::bitset<2>("11" )); |
| 43 | return cases; |
| 44 | } |
| 45 | |
| 46 | template <> |
| 47 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<5> > get_test_cases<5>() { |
| 48 | std::vector<std::bitset<5> > cases; |
| 49 | cases.push_back(std::bitset<5>("00000" )); |
| 50 | cases.push_back(std::bitset<5>("00001" )); |
| 51 | cases.push_back(std::bitset<5>("10000" )); |
| 52 | cases.push_back(std::bitset<5>("00010" )); |
| 53 | cases.push_back(std::bitset<5>("01000" )); |
| 54 | cases.push_back(std::bitset<5>("00011" )); |
| 55 | cases.push_back(std::bitset<5>("11000" )); |
| 56 | cases.push_back(std::bitset<5>("00100" )); |
| 57 | cases.push_back(std::bitset<5>("11011" )); |
| 58 | cases.push_back(std::bitset<5>("00101" )); |
| 59 | cases.push_back(std::bitset<5>("10100" )); |
| 60 | cases.push_back(std::bitset<5>("00110" )); |
| 61 | cases.push_back(std::bitset<5>("01100" )); |
| 62 | cases.push_back(std::bitset<5>("00111" )); |
| 63 | cases.push_back(std::bitset<5>("11100" )); |
| 64 | cases.push_back(std::bitset<5>("11111" )); |
| 65 | return cases; |
| 66 | } |
| 67 | |
| 68 | template <> |
| 69 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<31> > get_test_cases<31>() { |
| 70 | std::vector<std::bitset<31> > cases; |
| 71 | cases.push_back(std::bitset<31>("0000000000000000000000000000000" )); |
| 72 | cases.push_back(std::bitset<31>("0000000000000000000000000000001" )); |
| 73 | cases.push_back(std::bitset<31>("1000000000000000000000000000000" )); |
| 74 | cases.push_back(std::bitset<31>("1000000000000000000000000000001" )); |
| 75 | cases.push_back(std::bitset<31>("1000000000000000000001000000001" )); |
| 76 | cases.push_back(std::bitset<31>("0000000000000000111111111111111" )); |
| 77 | cases.push_back(std::bitset<31>("1000000000000000111111111111111" )); |
| 78 | cases.push_back(std::bitset<31>("1111111111111111000000000000000" )); |
| 79 | cases.push_back(std::bitset<31>("1111111111111111000000000000001" )); |
| 80 | cases.push_back(std::bitset<31>("1010101010101010101010101010101" )); |
| 81 | cases.push_back(std::bitset<31>("0101010101010101010101010101010" )); |
| 82 | cases.push_back(std::bitset<31>("1111111111111111111111111111111" )); |
| 83 | return cases; |
| 84 | } |
| 85 | |
| 86 | template <> |
| 87 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<32> > get_test_cases<32>() { |
| 88 | std::vector<std::bitset<32> > cases; |
| 89 | cases.push_back(std::bitset<32>("00000000000000000000000000000000" )); |
| 90 | cases.push_back(std::bitset<32>("00000000000000000000000000000001" )); |
| 91 | cases.push_back(std::bitset<32>("10000000000000000000000000000000" )); |
| 92 | cases.push_back(std::bitset<32>("10000000000000000000000000000001" )); |
| 93 | cases.push_back(std::bitset<32>("10000000000000000000111000000001" )); |
| 94 | cases.push_back(std::bitset<32>("00000000000000001111111111111111" )); |
| 95 | cases.push_back(std::bitset<32>("10000000000000001111111111111111" )); |
| 96 | cases.push_back(std::bitset<32>("11111111111111110000000000000000" )); |
| 97 | cases.push_back(std::bitset<32>("11111111111111110000000000000001" )); |
| 98 | cases.push_back(std::bitset<32>("10101010101010101010101010101010" )); |
| 99 | cases.push_back(std::bitset<32>("01010101010101010101010101010101" )); |
| 100 | cases.push_back(std::bitset<32>("11111111111111111111111111111111" )); |
| 101 | return cases; |
| 102 | } |
| 103 | |
| 104 | template <> |
| 105 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<33> > get_test_cases<33>() { |
| 106 | std::vector<std::bitset<33> > cases; |
| 107 | cases.push_back(std::bitset<33>("000000000000000000000000000000000" )); |
| 108 | cases.push_back(std::bitset<33>("000000000000000000000000000000001" )); |
| 109 | cases.push_back(std::bitset<33>("100000000000000000000000000000000" )); |
| 110 | cases.push_back(std::bitset<33>("100000000000000000000000000000001" )); |
| 111 | cases.push_back(std::bitset<33>("100000000000000000001110000000001" )); |
| 112 | cases.push_back(std::bitset<33>("000000000000000011111111111111111" )); |
| 113 | cases.push_back(std::bitset<33>("100000000000000011111111111111111" )); |
| 114 | cases.push_back(std::bitset<33>("111111111111111100000000000000000" )); |
| 115 | cases.push_back(std::bitset<33>("111111111111111100000000000000001" )); |
| 116 | cases.push_back(std::bitset<33>("101010101010101010101010101010101" )); |
| 117 | cases.push_back(std::bitset<33>("010101010101010101010101010101010" )); |
| 118 | cases.push_back(std::bitset<33>("111111111111111111111111111111111" )); |
| 119 | return cases; |
| 120 | } |
| 121 | |
| 122 | template <> |
| 123 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<63> > get_test_cases<63>() { |
| 124 | std::vector<std::bitset<63> > cases; |
| 125 | cases.push_back(std::bitset<63>("000000000000000000000000000000000000000000000000000000000000000" )); |
| 126 | cases.push_back(std::bitset<63>("000000000000000000000000000000000000000000000000000000000000001" )); |
| 127 | cases.push_back(std::bitset<63>("100000000000000000000000000000000000000000000000000000000000000" )); |
| 128 | cases.push_back(std::bitset<63>("100000000000000000000000000000000000000000000000000000000000001" )); |
| 129 | cases.push_back(std::bitset<63>("100000000000000000000000001111100000000000000000000000000000001" )); |
| 130 | cases.push_back(std::bitset<63>("000000000000000000000000000000001111111111111111111111111111111" )); |
| 131 | cases.push_back(std::bitset<63>("100000000000000000000000000000001111111111111111111111111111111" )); |
| 132 | cases.push_back(std::bitset<63>("111111111111111111111111111111110000000000000000000000000000000" )); |
| 133 | cases.push_back(std::bitset<63>("111111111111111111111111111111110000000000000000000000000000001" )); |
| 134 | cases.push_back(std::bitset<63>("101010101010101010101010101010101010101010101010101010101010101" )); |
| 135 | cases.push_back(std::bitset<63>("010101010101010101010101010101010101010101010101010101010101010" )); |
| 136 | cases.push_back(std::bitset<63>("111111111111111111111111111111111111111111111111111111111111111" )); |
| 137 | return cases; |
| 138 | } |
| 139 | |
| 140 | template <> |
| 141 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<64> > get_test_cases<64>() { |
| 142 | std::vector<std::bitset<64> > cases; |
| 143 | cases.push_back(std::bitset<64>("0000000000000000000000000000000000000000000000000000000000000000" )); |
| 144 | cases.push_back(std::bitset<64>("0000000000000000000000000000000000000000000000000000000000000001" )); |
| 145 | cases.push_back(std::bitset<64>("1000000000000000000000000000000000000000000000000000000000000000" )); |
| 146 | cases.push_back(std::bitset<64>("1000000000000000000000000000000000000000000000000000000000000001" )); |
| 147 | cases.push_back(std::bitset<64>("1000000000000000000000000011111000000000000000000000000000000001" )); |
| 148 | cases.push_back(std::bitset<64>("0000000000000000000000000000000011111111111111111111111111111111" )); |
| 149 | cases.push_back(std::bitset<64>("1000000000000000000000000000000011111111111111111111111111111111" )); |
| 150 | cases.push_back(std::bitset<64>("1111111111111111111111111111111100000000000000000000000000000000" )); |
| 151 | cases.push_back(std::bitset<64>("1111111111111111111111111111111100000000000000000000000000000001" )); |
| 152 | cases.push_back(std::bitset<64>("1010101010101010101010101010101010101010101010101010101010101010" )); |
| 153 | cases.push_back(std::bitset<64>("0101010101010101010101010101010101010101010101010101010101010101" )); |
| 154 | cases.push_back(std::bitset<64>("1111111111111111111111111111111111111111111111111111111111111111" )); |
| 155 | return cases; |
| 156 | } |
| 157 | |
| 158 | template <> |
| 159 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<65> > get_test_cases<65>() { |
| 160 | std::vector<std::bitset<65> > cases; |
| 161 | cases.push_back(std::bitset<65>("00000000000000000000000000000000000000000000000000000000000000000" )); |
| 162 | cases.push_back(std::bitset<65>("00000000000000000000000000000000000000000000000000000000000000001" )); |
| 163 | cases.push_back(std::bitset<65>("10000000000000000000000000000000000000000000000000000000000000000" )); |
| 164 | cases.push_back(std::bitset<65>("10000000000000000000000000000000000000000000000000000000000000001" )); |
| 165 | cases.push_back(std::bitset<65>("10000000000000000000000000011111000000000000000000000000000000001" )); |
| 166 | cases.push_back(std::bitset<65>("00000000000000000000000000000000011111111111111111111111111111111" )); |
| 167 | cases.push_back(std::bitset<65>("10000000000000000000000000000000011111111111111111111111111111111" )); |
| 168 | cases.push_back(std::bitset<65>("11111111111111111111111111111111000000000000000000000000000000000" )); |
| 169 | cases.push_back(std::bitset<65>("11111111111111111111111111111111000000000000000000000000000000001" )); |
| 170 | cases.push_back(std::bitset<65>("10101010101010101010101010101010101010101010101010101010101010101" )); |
| 171 | cases.push_back(std::bitset<65>("01010101010101010101010101010101010101010101010101010101010101010" )); |
| 172 | cases.push_back(std::bitset<65>("11111111111111111111111111111111111111111111111111111111111111111" )); |
| 173 | return cases; |
| 174 | } |
| 175 | |
| 176 | TEST_CONSTEXPR_CXX23 inline std::string str_repeat(std::string s, unsigned int n) { |
| 177 | std::string res = s; |
| 178 | for (; n != 0; --n) |
| 179 | res += s; |
| 180 | return res; |
| 181 | } |
| 182 | |
| 183 | template <> |
| 184 | TEST_CONSTEXPR_CXX23 inline std::vector<std::bitset<1000> > get_test_cases<1000>() { |
| 185 | std::vector<std::bitset<1000> > cases; |
| 186 | cases.push_back(std::bitset<1000>(std::string(1000, '0'))); |
| 187 | cases.push_back(std::bitset<1000>(std::string(999, '0') + std::string(1, '1'))); |
| 188 | cases.push_back(std::bitset<1000>(std::string(1, '1') + std::string(999, '0'))); |
| 189 | cases.push_back(std::bitset<1000>(std::string(1, '1') + std::string(998, '0') + std::string(1, '1'))); |
| 190 | cases.push_back(std::bitset<1000>(std::string(1, '1') + std::string(400, '0') + std::string(99, '1') + |
| 191 | std::string(499, '0') + std::string(1, '1'))); |
| 192 | cases.push_back(std::bitset<1000>(std::string(500, '0') + std::string(500, '1'))); |
| 193 | cases.push_back(std::bitset<1000>(std::string(1, '1') + std::string(499, '0') + std::string(500, '1'))); |
| 194 | cases.push_back(std::bitset<1000>(std::string(500, '1') + std::string(500, '0'))); |
| 195 | cases.push_back(std::bitset<1000>(std::string(500, '1') + std::string(499, '0') + std::string(1, '1'))); |
| 196 | cases.push_back(std::bitset<1000>(str_repeat("10" , 500))); |
| 197 | cases.push_back(std::bitset<1000>(str_repeat("01" , 500))); |
| 198 | cases.push_back(std::bitset<1000>(std::string(1000, '1'))); |
| 199 | |
| 200 | return cases; |
| 201 | } |
| 202 | |
| 203 | #endif // !LIBCPP_TEST_BITSET_TEST_CASES_H |
| 204 | |