1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // <string_view> 11 12 // constexpr int compare(size_type pos1, size_type n1, const charT* s) const; 13 14 #include <string_view> 15 #include <cassert> 16 17 #include "test_macros.h" 18 #include "constexpr_char_traits.hpp" 19 20 int sign ( int x ) { return x > 0 ? 1 : ( x < 0 ? -1 : 0 ); } 21 22 template<typename CharT> 23 void test1 ( std::basic_string_view<CharT> sv1, 24 size_t pos1, size_t n1, const CharT *s, int expected ) { 25 try { 26 assert(sign(sv1.compare(pos1, n1, s)) == sign(expected)); 27 assert(pos1 <= sv1.size()); 28 } 29 catch (const std::out_of_range&) { 30 assert(pos1 > sv1.size()); 31 } 32 } 33 34 template<typename CharT> 35 void 36 test( const CharT *s1, size_t pos1, size_t n1, const CharT *s2, int expected) 37 { 38 typedef std::basic_string_view<CharT> string_view_t; 39 string_view_t sv1 ( s1 ); 40 test1 ( sv1, pos1, n1, s2, expected ); 41 } 42 43 void test0() 44 { 45 test("", 0, 0, "", 0); 46 test("", 0, 0, "abcde", -5); 47 test("", 0, 0, "abcdefghij", -10); 48 test("", 0, 0, "abcdefghijklmnopqrst", -20); 49 test("", 0, 1, "", 0); 50 test("", 0, 1, "abcde", -5); 51 test("", 0, 1, "abcdefghij", -10); 52 test("", 0, 1, "abcdefghijklmnopqrst", -20); 53 test("", 1, 0, "", 0); 54 test("", 1, 0, "abcde", 0); 55 test("", 1, 0, "abcdefghij", 0); 56 test("", 1, 0, "abcdefghijklmnopqrst", 0); 57 test("abcde", 0, 0, "", 0); 58 test("abcde", 0, 0, "abcde", -5); 59 test("abcde", 0, 0, "abcdefghij", -10); 60 test("abcde", 0, 0, "abcdefghijklmnopqrst", -20); 61 test("abcde", 0, 1, "", 1); 62 test("abcde", 0, 1, "abcde", -4); 63 test("abcde", 0, 1, "abcdefghij", -9); 64 test("abcde", 0, 1, "abcdefghijklmnopqrst", -19); 65 test("abcde", 0, 2, "", 2); 66 test("abcde", 0, 2, "abcde", -3); 67 test("abcde", 0, 2, "abcdefghij", -8); 68 test("abcde", 0, 2, "abcdefghijklmnopqrst", -18); 69 test("abcde", 0, 4, "", 4); 70 test("abcde", 0, 4, "abcde", -1); 71 test("abcde", 0, 4, "abcdefghij", -6); 72 test("abcde", 0, 4, "abcdefghijklmnopqrst", -16); 73 test("abcde", 0, 5, "", 5); 74 test("abcde", 0, 5, "abcde", 0); 75 test("abcde", 0, 5, "abcdefghij", -5); 76 test("abcde", 0, 5, "abcdefghijklmnopqrst", -15); 77 test("abcde", 0, 6, "", 5); 78 test("abcde", 0, 6, "abcde", 0); 79 test("abcde", 0, 6, "abcdefghij", -5); 80 test("abcde", 0, 6, "abcdefghijklmnopqrst", -15); 81 test("abcde", 1, 0, "", 0); 82 test("abcde", 1, 0, "abcde", -5); 83 test("abcde", 1, 0, "abcdefghij", -10); 84 test("abcde", 1, 0, "abcdefghijklmnopqrst", -20); 85 test("abcde", 1, 1, "", 1); 86 test("abcde", 1, 1, "abcde", 1); 87 test("abcde", 1, 1, "abcdefghij", 1); 88 test("abcde", 1, 1, "abcdefghijklmnopqrst", 1); 89 test("abcde", 1, 2, "", 2); 90 test("abcde", 1, 2, "abcde", 1); 91 test("abcde", 1, 2, "abcdefghij", 1); 92 test("abcde", 1, 2, "abcdefghijklmnopqrst", 1); 93 test("abcde", 1, 3, "", 3); 94 test("abcde", 1, 3, "abcde", 1); 95 test("abcde", 1, 3, "abcdefghij", 1); 96 test("abcde", 1, 3, "abcdefghijklmnopqrst", 1); 97 test("abcde", 1, 4, "", 4); 98 test("abcde", 1, 4, "abcde", 1); 99 test("abcde", 1, 4, "abcdefghij", 1); 100 test("abcde", 1, 4, "abcdefghijklmnopqrst", 1); 101 test("abcde", 1, 5, "", 4); 102 test("abcde", 1, 5, "abcde", 1); 103 test("abcde", 1, 5, "abcdefghij", 1); 104 test("abcde", 1, 5, "abcdefghijklmnopqrst", 1); 105 test("abcde", 2, 0, "", 0); 106 test("abcde", 2, 0, "abcde", -5); 107 test("abcde", 2, 0, "abcdefghij", -10); 108 test("abcde", 2, 0, "abcdefghijklmnopqrst", -20); 109 test("abcde", 2, 1, "", 1); 110 test("abcde", 2, 1, "abcde", 2); 111 test("abcde", 2, 1, "abcdefghij", 2); 112 test("abcde", 2, 1, "abcdefghijklmnopqrst", 2); 113 test("abcde", 2, 2, "", 2); 114 test("abcde", 2, 2, "abcde", 2); 115 test("abcde", 2, 2, "abcdefghij", 2); 116 test("abcde", 2, 2, "abcdefghijklmnopqrst", 2); 117 test("abcde", 2, 3, "", 3); 118 test("abcde", 2, 3, "abcde", 2); 119 test("abcde", 2, 3, "abcdefghij", 2); 120 test("abcde", 2, 3, "abcdefghijklmnopqrst", 2); 121 test("abcde", 2, 4, "", 3); 122 test("abcde", 2, 4, "abcde", 2); 123 test("abcde", 2, 4, "abcdefghij", 2); 124 test("abcde", 2, 4, "abcdefghijklmnopqrst", 2); 125 test("abcde", 4, 0, "", 0); 126 test("abcde", 4, 0, "abcde", -5); 127 test("abcde", 4, 0, "abcdefghij", -10); 128 test("abcde", 4, 0, "abcdefghijklmnopqrst", -20); 129 test("abcde", 4, 1, "", 1); 130 test("abcde", 4, 1, "abcde", 4); 131 test("abcde", 4, 1, "abcdefghij", 4); 132 test("abcde", 4, 1, "abcdefghijklmnopqrst", 4); 133 test("abcde", 4, 2, "", 1); 134 test("abcde", 4, 2, "abcde", 4); 135 test("abcde", 4, 2, "abcdefghij", 4); 136 test("abcde", 4, 2, "abcdefghijklmnopqrst", 4); 137 test("abcde", 5, 0, "", 0); 138 test("abcde", 5, 0, "abcde", -5); 139 test("abcde", 5, 0, "abcdefghij", -10); 140 test("abcde", 5, 0, "abcdefghijklmnopqrst", -20); 141 test("abcde", 5, 1, "", 0); 142 test("abcde", 5, 1, "abcde", -5); 143 test("abcde", 5, 1, "abcdefghij", -10); 144 test("abcde", 5, 1, "abcdefghijklmnopqrst", -20); 145 } 146 147 void test1() 148 { 149 test("abcde", 6, 0, "", 0); 150 test("abcde", 6, 0, "abcde", 0); 151 test("abcde", 6, 0, "abcdefghij", 0); 152 test("abcde", 6, 0, "abcdefghijklmnopqrst", 0); 153 test("abcdefghij", 0, 0, "", 0); 154 test("abcdefghij", 0, 0, "abcde", -5); 155 test("abcdefghij", 0, 0, "abcdefghij", -10); 156 test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20); 157 test("abcdefghij", 0, 1, "", 1); 158 test("abcdefghij", 0, 1, "abcde", -4); 159 test("abcdefghij", 0, 1, "abcdefghij", -9); 160 test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19); 161 test("abcdefghij", 0, 5, "", 5); 162 test("abcdefghij", 0, 5, "abcde", 0); 163 test("abcdefghij", 0, 5, "abcdefghij", -5); 164 test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15); 165 test("abcdefghij", 0, 9, "", 9); 166 test("abcdefghij", 0, 9, "abcde", 4); 167 test("abcdefghij", 0, 9, "abcdefghij", -1); 168 test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11); 169 test("abcdefghij", 0, 10, "", 10); 170 test("abcdefghij", 0, 10, "abcde", 5); 171 test("abcdefghij", 0, 10, "abcdefghij", 0); 172 test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10); 173 test("abcdefghij", 0, 11, "", 10); 174 test("abcdefghij", 0, 11, "abcde", 5); 175 test("abcdefghij", 0, 11, "abcdefghij", 0); 176 test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10); 177 test("abcdefghij", 1, 0, "", 0); 178 test("abcdefghij", 1, 0, "abcde", -5); 179 test("abcdefghij", 1, 0, "abcdefghij", -10); 180 test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20); 181 test("abcdefghij", 1, 1, "", 1); 182 test("abcdefghij", 1, 1, "abcde", 1); 183 test("abcdefghij", 1, 1, "abcdefghij", 1); 184 test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1); 185 test("abcdefghij", 1, 4, "", 4); 186 test("abcdefghij", 1, 4, "abcde", 1); 187 test("abcdefghij", 1, 4, "abcdefghij", 1); 188 test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1); 189 test("abcdefghij", 1, 8, "", 8); 190 test("abcdefghij", 1, 8, "abcde", 1); 191 test("abcdefghij", 1, 8, "abcdefghij", 1); 192 test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1); 193 test("abcdefghij", 1, 9, "", 9); 194 test("abcdefghij", 1, 9, "abcde", 1); 195 test("abcdefghij", 1, 9, "abcdefghij", 1); 196 test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1); 197 test("abcdefghij", 1, 10, "", 9); 198 test("abcdefghij", 1, 10, "abcde", 1); 199 test("abcdefghij", 1, 10, "abcdefghij", 1); 200 test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1); 201 test("abcdefghij", 5, 0, "", 0); 202 test("abcdefghij", 5, 0, "abcde", -5); 203 test("abcdefghij", 5, 0, "abcdefghij", -10); 204 test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20); 205 test("abcdefghij", 5, 1, "", 1); 206 test("abcdefghij", 5, 1, "abcde", 5); 207 test("abcdefghij", 5, 1, "abcdefghij", 5); 208 test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5); 209 test("abcdefghij", 5, 2, "", 2); 210 test("abcdefghij", 5, 2, "abcde", 5); 211 test("abcdefghij", 5, 2, "abcdefghij", 5); 212 test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5); 213 test("abcdefghij", 5, 4, "", 4); 214 test("abcdefghij", 5, 4, "abcde", 5); 215 test("abcdefghij", 5, 4, "abcdefghij", 5); 216 test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5); 217 test("abcdefghij", 5, 5, "", 5); 218 test("abcdefghij", 5, 5, "abcde", 5); 219 test("abcdefghij", 5, 5, "abcdefghij", 5); 220 test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5); 221 test("abcdefghij", 5, 6, "", 5); 222 test("abcdefghij", 5, 6, "abcde", 5); 223 test("abcdefghij", 5, 6, "abcdefghij", 5); 224 test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5); 225 test("abcdefghij", 9, 0, "", 0); 226 test("abcdefghij", 9, 0, "abcde", -5); 227 test("abcdefghij", 9, 0, "abcdefghij", -10); 228 test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20); 229 test("abcdefghij", 9, 1, "", 1); 230 test("abcdefghij", 9, 1, "abcde", 9); 231 test("abcdefghij", 9, 1, "abcdefghij", 9); 232 test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9); 233 test("abcdefghij", 9, 2, "", 1); 234 test("abcdefghij", 9, 2, "abcde", 9); 235 test("abcdefghij", 9, 2, "abcdefghij", 9); 236 test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9); 237 test("abcdefghij", 10, 0, "", 0); 238 test("abcdefghij", 10, 0, "abcde", -5); 239 test("abcdefghij", 10, 0, "abcdefghij", -10); 240 test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20); 241 test("abcdefghij", 10, 1, "", 0); 242 test("abcdefghij", 10, 1, "abcde", -5); 243 test("abcdefghij", 10, 1, "abcdefghij", -10); 244 test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20); 245 test("abcdefghij", 11, 0, "", 0); 246 test("abcdefghij", 11, 0, "abcde", 0); 247 test("abcdefghij", 11, 0, "abcdefghij", 0); 248 test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0); 249 } 250 251 void test2() 252 { 253 test("abcdefghijklmnopqrst", 0, 0, "", 0); 254 test("abcdefghijklmnopqrst", 0, 0, "abcde", -5); 255 test("abcdefghijklmnopqrst", 0, 0, "abcdefghij", -10); 256 test("abcdefghijklmnopqrst", 0, 0, "abcdefghijklmnopqrst", -20); 257 test("abcdefghijklmnopqrst", 0, 1, "", 1); 258 test("abcdefghijklmnopqrst", 0, 1, "abcde", -4); 259 test("abcdefghijklmnopqrst", 0, 1, "abcdefghij", -9); 260 test("abcdefghijklmnopqrst", 0, 1, "abcdefghijklmnopqrst", -19); 261 test("abcdefghijklmnopqrst", 0, 10, "", 10); 262 test("abcdefghijklmnopqrst", 0, 10, "abcde", 5); 263 test("abcdefghijklmnopqrst", 0, 10, "abcdefghij", 0); 264 test("abcdefghijklmnopqrst", 0, 10, "abcdefghijklmnopqrst", -10); 265 test("abcdefghijklmnopqrst", 0, 19, "", 19); 266 test("abcdefghijklmnopqrst", 0, 19, "abcde", 14); 267 test("abcdefghijklmnopqrst", 0, 19, "abcdefghij", 9); 268 test("abcdefghijklmnopqrst", 0, 19, "abcdefghijklmnopqrst", -1); 269 test("abcdefghijklmnopqrst", 0, 20, "", 20); 270 test("abcdefghijklmnopqrst", 0, 20, "abcde", 15); 271 test("abcdefghijklmnopqrst", 0, 20, "abcdefghij", 10); 272 test("abcdefghijklmnopqrst", 0, 20, "abcdefghijklmnopqrst", 0); 273 test("abcdefghijklmnopqrst", 0, 21, "", 20); 274 test("abcdefghijklmnopqrst", 0, 21, "abcde", 15); 275 test("abcdefghijklmnopqrst", 0, 21, "abcdefghij", 10); 276 test("abcdefghijklmnopqrst", 0, 21, "abcdefghijklmnopqrst", 0); 277 test("abcdefghijklmnopqrst", 1, 0, "", 0); 278 test("abcdefghijklmnopqrst", 1, 0, "abcde", -5); 279 test("abcdefghijklmnopqrst", 1, 0, "abcdefghij", -10); 280 test("abcdefghijklmnopqrst", 1, 0, "abcdefghijklmnopqrst", -20); 281 test("abcdefghijklmnopqrst", 1, 1, "", 1); 282 test("abcdefghijklmnopqrst", 1, 1, "abcde", 1); 283 test("abcdefghijklmnopqrst", 1, 1, "abcdefghij", 1); 284 test("abcdefghijklmnopqrst", 1, 1, "abcdefghijklmnopqrst", 1); 285 test("abcdefghijklmnopqrst", 1, 9, "", 9); 286 test("abcdefghijklmnopqrst", 1, 9, "abcde", 1); 287 test("abcdefghijklmnopqrst", 1, 9, "abcdefghij", 1); 288 test("abcdefghijklmnopqrst", 1, 9, "abcdefghijklmnopqrst", 1); 289 test("abcdefghijklmnopqrst", 1, 18, "", 18); 290 test("abcdefghijklmnopqrst", 1, 18, "abcde", 1); 291 test("abcdefghijklmnopqrst", 1, 18, "abcdefghij", 1); 292 test("abcdefghijklmnopqrst", 1, 18, "abcdefghijklmnopqrst", 1); 293 test("abcdefghijklmnopqrst", 1, 19, "", 19); 294 test("abcdefghijklmnopqrst", 1, 19, "abcde", 1); 295 test("abcdefghijklmnopqrst", 1, 19, "abcdefghij", 1); 296 test("abcdefghijklmnopqrst", 1, 19, "abcdefghijklmnopqrst", 1); 297 test("abcdefghijklmnopqrst", 1, 20, "", 19); 298 test("abcdefghijklmnopqrst", 1, 20, "abcde", 1); 299 test("abcdefghijklmnopqrst", 1, 20, "abcdefghij", 1); 300 test("abcdefghijklmnopqrst", 1, 20, "abcdefghijklmnopqrst", 1); 301 test("abcdefghijklmnopqrst", 10, 0, "", 0); 302 test("abcdefghijklmnopqrst", 10, 0, "abcde", -5); 303 test("abcdefghijklmnopqrst", 10, 0, "abcdefghij", -10); 304 test("abcdefghijklmnopqrst", 10, 0, "abcdefghijklmnopqrst", -20); 305 test("abcdefghijklmnopqrst", 10, 1, "", 1); 306 test("abcdefghijklmnopqrst", 10, 1, "abcde", 10); 307 test("abcdefghijklmnopqrst", 10, 1, "abcdefghij", 10); 308 test("abcdefghijklmnopqrst", 10, 1, "abcdefghijklmnopqrst", 10); 309 test("abcdefghijklmnopqrst", 10, 5, "", 5); 310 test("abcdefghijklmnopqrst", 10, 5, "abcde", 10); 311 test("abcdefghijklmnopqrst", 10, 5, "abcdefghij", 10); 312 test("abcdefghijklmnopqrst", 10, 5, "abcdefghijklmnopqrst", 10); 313 test("abcdefghijklmnopqrst", 10, 9, "", 9); 314 test("abcdefghijklmnopqrst", 10, 9, "abcde", 10); 315 test("abcdefghijklmnopqrst", 10, 9, "abcdefghij", 10); 316 test("abcdefghijklmnopqrst", 10, 9, "abcdefghijklmnopqrst", 10); 317 test("abcdefghijklmnopqrst", 10, 10, "", 10); 318 test("abcdefghijklmnopqrst", 10, 10, "abcde", 10); 319 test("abcdefghijklmnopqrst", 10, 10, "abcdefghij", 10); 320 test("abcdefghijklmnopqrst", 10, 10, "abcdefghijklmnopqrst", 10); 321 test("abcdefghijklmnopqrst", 10, 11, "", 10); 322 test("abcdefghijklmnopqrst", 10, 11, "abcde", 10); 323 test("abcdefghijklmnopqrst", 10, 11, "abcdefghij", 10); 324 test("abcdefghijklmnopqrst", 10, 11, "abcdefghijklmnopqrst", 10); 325 test("abcdefghijklmnopqrst", 19, 0, "", 0); 326 test("abcdefghijklmnopqrst", 19, 0, "abcde", -5); 327 test("abcdefghijklmnopqrst", 19, 0, "abcdefghij", -10); 328 test("abcdefghijklmnopqrst", 19, 0, "abcdefghijklmnopqrst", -20); 329 test("abcdefghijklmnopqrst", 19, 1, "", 1); 330 test("abcdefghijklmnopqrst", 19, 1, "abcde", 19); 331 test("abcdefghijklmnopqrst", 19, 1, "abcdefghij", 19); 332 test("abcdefghijklmnopqrst", 19, 1, "abcdefghijklmnopqrst", 19); 333 test("abcdefghijklmnopqrst", 19, 2, "", 1); 334 test("abcdefghijklmnopqrst", 19, 2, "abcde", 19); 335 test("abcdefghijklmnopqrst", 19, 2, "abcdefghij", 19); 336 test("abcdefghijklmnopqrst", 19, 2, "abcdefghijklmnopqrst", 19); 337 test("abcdefghijklmnopqrst", 20, 0, "", 0); 338 test("abcdefghijklmnopqrst", 20, 0, "abcde", -5); 339 test("abcdefghijklmnopqrst", 20, 0, "abcdefghij", -10); 340 test("abcdefghijklmnopqrst", 20, 0, "abcdefghijklmnopqrst", -20); 341 test("abcdefghijklmnopqrst", 20, 1, "", 0); 342 test("abcdefghijklmnopqrst", 20, 1, "abcde", -5); 343 test("abcdefghijklmnopqrst", 20, 1, "abcdefghij", -10); 344 test("abcdefghijklmnopqrst", 20, 1, "abcdefghijklmnopqrst", -20); 345 test("abcdefghijklmnopqrst", 21, 0, "", 0); 346 test("abcdefghijklmnopqrst", 21, 0, "abcde", 0); 347 test("abcdefghijklmnopqrst", 21, 0, "abcdefghij", 0); 348 test("abcdefghijklmnopqrst", 21, 0, "abcdefghijklmnopqrst", 0); 349 } 350 351 352 int main() 353 { 354 test0(); 355 test1(); 356 test2(); 357 358 { 359 test("", 0, 0, "", 0); 360 test("", 0, 0, "abcde", -5); 361 test("", 0, 0, "abcdefghij", -10); 362 test("", 0, 0, "abcdefghijklmnopqrst", -20); 363 test("abcde", 0, 2, "", 5); 364 test("abcde", 0, 6,"abcde", 0); 365 test("abcde", 0, 6, "abcdefghij", -5); 366 test("abcde", 0, 6, "abcdefghijklmnopqrst", -15); 367 test("abcdefghij", 3, 3, "", 10); 368 test("abcdefghij", 3, 3,"abcde", 5); 369 test("abcdefghij", 3, 3, "def", 0); 370 test("abcdefghij", 0, 4, "abcdefghijklmnopqrst", -10); 371 test("abcdefghijklmnopqrst", 5, 5, "", 20); 372 test("abcdefghijklmnopqrst", 0, 8, "abcde", 15); 373 test("abcdefghijklmnopqrst", 0, 12, "abcdefghij", 10); 374 test("abcdefghijklmnopqrst", 0, -1, "abcdefghijklmnopqrst", 0); 375 } 376 377 { 378 test(L"", 0, 0, L"", 0); 379 test(L"", 0, 0, L"abcde", -5); 380 test(L"", 0, 0, L"abcdefghij", -10); 381 test(L"", 0, 0, L"abcdefghijklmnopqrst", -20); 382 test(L"abcde", 0, 2, L"", 5); 383 test(L"abcde", 0, 6, L"abcde", 0); 384 test(L"abcde", 0, 6, L"abcdefghij", -5); 385 test(L"abcde", 0, 6, L"abcdefghijklmnopqrst", -15); 386 test(L"abcdefghij", 3, 3, L"", 10); 387 test(L"abcdefghij", 3, 3, L"abcde", 5); 388 test(L"abcdefghij", 3, 3, L"def", 0); 389 test(L"abcdefghij", 0, 4, L"abcdefghijklmnopqrst", -10); 390 test(L"abcdefghijklmnopqrst", 5, 5, L"", 20); 391 test(L"abcdefghijklmnopqrst", 0, 8, L"abcde", 15); 392 test(L"abcdefghijklmnopqrst", 0, 12, L"abcdefghij", 10); 393 test(L"abcdefghijklmnopqrst", 0, -1, L"abcdefghijklmnopqrst", 0); 394 } 395 396 #if TEST_STD_VER >= 11 397 { 398 test(U"", 0, 0, U"", 0); 399 test(U"", 0, 0, U"abcde", -5); 400 test(U"", 0, 0, U"abcdefghij", -10); 401 test(U"", 0, 0, U"abcdefghijklmnopqrst", -20); 402 test(U"abcde", 0, 2, U"", 5); 403 test(U"abcde", 0, 6, U"abcde", 0); 404 test(U"abcde", 0, 6, U"abcdefghij", -5); 405 test(U"abcde", 0, 6, U"abcdefghijklmnopqrst", -15); 406 test(U"abcdefghij", 3, 3, U"", 10); 407 test(U"abcdefghij", 3, 3, U"abcde", 5); 408 test(U"abcdefghij", 3, 3, U"def", 0); 409 test(U"abcdefghij", 0, 4, U"abcdefghijklmnopqrst", -10); 410 test(U"abcdefghijklmnopqrst", 5, 5, U"", 20); 411 test(U"abcdefghijklmnopqrst", 0, 8, U"abcde", 15); 412 test(U"abcdefghijklmnopqrst", 0, 12, U"abcdefghij", 10); 413 test(U"abcdefghijklmnopqrst", 0, -1, U"abcdefghijklmnopqrst", 0); 414 } 415 416 { 417 test(u"", 0, 0, u"", 0); 418 test(u"", 0, 0, u"abcde", -5); 419 test(u"", 0, 0, u"abcdefghij", -10); 420 test(u"", 0, 0, u"abcdefghijklmnopqrst", -20); 421 test(u"abcde", 0, 2, u"", 5); 422 test(u"abcde", 0, 6, u"abcde", 0); 423 test(u"abcde", 0, 6, u"abcdefghij", -5); 424 test(u"abcde", 0, 6, u"abcdefghijklmnopqrst", -15); 425 test(u"abcdefghij", 3, 3, u"", 10); 426 test(u"abcdefghij", 3, 3, u"abcde", 5); 427 test(u"abcdefghij", 3, 3, u"def", 0); 428 test(u"abcdefghij", 0, 4, u"abcdefghijklmnopqrst", -10); 429 test(u"abcdefghijklmnopqrst", 5, 5, u"", 20); 430 test(u"abcdefghijklmnopqrst", 0, 8, u"abcde", 15); 431 test(u"abcdefghijklmnopqrst", 0, 12, u"abcdefghij", 10); 432 test(u"abcdefghijklmnopqrst", 0, -1, u"abcdefghijklmnopqrst", 0); 433 } 434 #endif 435 436 #if TEST_STD_VER > 11 437 { 438 typedef std::basic_string_view<char, constexpr_char_traits<char>> SV; 439 constexpr SV sv1; 440 constexpr SV sv2 { "abcde", 5 }; 441 static_assert ( sv1.compare(0, 0, "") == 0, "" ); 442 static_assert ( sv1.compare(0, 0, "abcde") == -1, "" ); 443 static_assert ( sv2.compare(0, 2, "") == 1, "" ); 444 static_assert ( sv2.compare(0, 6, "abcde") == 0, "" ); 445 } 446 #endif 447 } 448