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