450 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9// UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)10 11// <string_view>12 13// constexpr int compare(size_type pos1, size_type n1, const charT* s) const;14 15#include <string_view>16#include <cassert>17#include <stdexcept>18 19#include "test_macros.h"20#include "constexpr_char_traits.h"21 22int sign(int x) { return x > 0 ? 1 : (x < 0 ? -1 : 0); }23 24template <typename CharT>25void test1(std::basic_string_view<CharT> sv1, std::size_t pos1, size_t n1, const CharT* s, int expected) {26#ifdef TEST_HAS_NO_EXCEPTIONS27 if (pos1 <= sv1.size())28 assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));29#else30 try {31 assert(sign(sv1.compare(pos1, n1, s)) == sign(expected));32 assert(pos1 <= sv1.size());33 } catch (const std::out_of_range&) {34 assert(pos1 > sv1.size());35 }36#endif37}38 39template <typename CharT>40void test(const CharT* s1, std::size_t pos1, size_t n1, const CharT* s2, int expected) {41 typedef std::basic_string_view<CharT> string_view_t;42 string_view_t sv1(s1);43 test1(sv1, pos1, n1, s2, expected);44}45 46void test0() {47 test("", 0, 0, "", 0);48 test("", 0, 0, "abcde", -5);49 test("", 0, 0, "abcdefghij", -10);50 test("", 0, 0, "abcdefghijklmnopqrst", -20);51 test("", 0, 1, "", 0);52 test("", 0, 1, "abcde", -5);53 test("", 0, 1, "abcdefghij", -10);54 test("", 0, 1, "abcdefghijklmnopqrst", -20);55 test("", 1, 0, "", 0);56 test("", 1, 0, "abcde", 0);57 test("", 1, 0, "abcdefghij", 0);58 test("", 1, 0, "abcdefghijklmnopqrst", 0);59 test("abcde", 0, 0, "", 0);60 test("abcde", 0, 0, "abcde", -5);61 test("abcde", 0, 0, "abcdefghij", -10);62 test("abcde", 0, 0, "abcdefghijklmnopqrst", -20);63 test("abcde", 0, 1, "", 1);64 test("abcde", 0, 1, "abcde", -4);65 test("abcde", 0, 1, "abcdefghij", -9);66 test("abcde", 0, 1, "abcdefghijklmnopqrst", -19);67 test("abcde", 0, 2, "", 2);68 test("abcde", 0, 2, "abcde", -3);69 test("abcde", 0, 2, "abcdefghij", -8);70 test("abcde", 0, 2, "abcdefghijklmnopqrst", -18);71 test("abcde", 0, 4, "", 4);72 test("abcde", 0, 4, "abcde", -1);73 test("abcde", 0, 4, "abcdefghij", -6);74 test("abcde", 0, 4, "abcdefghijklmnopqrst", -16);75 test("abcde", 0, 5, "", 5);76 test("abcde", 0, 5, "abcde", 0);77 test("abcde", 0, 5, "abcdefghij", -5);78 test("abcde", 0, 5, "abcdefghijklmnopqrst", -15);79 test("abcde", 0, 6, "", 5);80 test("abcde", 0, 6, "abcde", 0);81 test("abcde", 0, 6, "abcdefghij", -5);82 test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);83 test("abcde", 1, 0, "", 0);84 test("abcde", 1, 0, "abcde", -5);85 test("abcde", 1, 0, "abcdefghij", -10);86 test("abcde", 1, 0, "abcdefghijklmnopqrst", -20);87 test("abcde", 1, 1, "", 1);88 test("abcde", 1, 1, "abcde", 1);89 test("abcde", 1, 1, "abcdefghij", 1);90 test("abcde", 1, 1, "abcdefghijklmnopqrst", 1);91 test("abcde", 1, 2, "", 2);92 test("abcde", 1, 2, "abcde", 1);93 test("abcde", 1, 2, "abcdefghij", 1);94 test("abcde", 1, 2, "abcdefghijklmnopqrst", 1);95 test("abcde", 1, 3, "", 3);96 test("abcde", 1, 3, "abcde", 1);97 test("abcde", 1, 3, "abcdefghij", 1);98 test("abcde", 1, 3, "abcdefghijklmnopqrst", 1);99 test("abcde", 1, 4, "", 4);100 test("abcde", 1, 4, "abcde", 1);101 test("abcde", 1, 4, "abcdefghij", 1);102 test("abcde", 1, 4, "abcdefghijklmnopqrst", 1);103 test("abcde", 1, 5, "", 4);104 test("abcde", 1, 5, "abcde", 1);105 test("abcde", 1, 5, "abcdefghij", 1);106 test("abcde", 1, 5, "abcdefghijklmnopqrst", 1);107 test("abcde", 2, 0, "", 0);108 test("abcde", 2, 0, "abcde", -5);109 test("abcde", 2, 0, "abcdefghij", -10);110 test("abcde", 2, 0, "abcdefghijklmnopqrst", -20);111 test("abcde", 2, 1, "", 1);112 test("abcde", 2, 1, "abcde", 2);113 test("abcde", 2, 1, "abcdefghij", 2);114 test("abcde", 2, 1, "abcdefghijklmnopqrst", 2);115 test("abcde", 2, 2, "", 2);116 test("abcde", 2, 2, "abcde", 2);117 test("abcde", 2, 2, "abcdefghij", 2);118 test("abcde", 2, 2, "abcdefghijklmnopqrst", 2);119 test("abcde", 2, 3, "", 3);120 test("abcde", 2, 3, "abcde", 2);121 test("abcde", 2, 3, "abcdefghij", 2);122 test("abcde", 2, 3, "abcdefghijklmnopqrst", 2);123 test("abcde", 2, 4, "", 3);124 test("abcde", 2, 4, "abcde", 2);125 test("abcde", 2, 4, "abcdefghij", 2);126 test("abcde", 2, 4, "abcdefghijklmnopqrst", 2);127 test("abcde", 4, 0, "", 0);128 test("abcde", 4, 0, "abcde", -5);129 test("abcde", 4, 0, "abcdefghij", -10);130 test("abcde", 4, 0, "abcdefghijklmnopqrst", -20);131 test("abcde", 4, 1, "", 1);132 test("abcde", 4, 1, "abcde", 4);133 test("abcde", 4, 1, "abcdefghij", 4);134 test("abcde", 4, 1, "abcdefghijklmnopqrst", 4);135 test("abcde", 4, 2, "", 1);136 test("abcde", 4, 2, "abcde", 4);137 test("abcde", 4, 2, "abcdefghij", 4);138 test("abcde", 4, 2, "abcdefghijklmnopqrst", 4);139 test("abcde", 5, 0, "", 0);140 test("abcde", 5, 0, "abcde", -5);141 test("abcde", 5, 0, "abcdefghij", -10);142 test("abcde", 5, 0, "abcdefghijklmnopqrst", -20);143 test("abcde", 5, 1, "", 0);144 test("abcde", 5, 1, "abcde", -5);145 test("abcde", 5, 1, "abcdefghij", -10);146 test("abcde", 5, 1, "abcdefghijklmnopqrst", -20);147}148 149void test1() {150 test("abcde", 6, 0, "", 0);151 test("abcde", 6, 0, "abcde", 0);152 test("abcde", 6, 0, "abcdefghij", 0);153 test("abcde", 6, 0, "abcdefghijklmnopqrst", 0);154 test("abcdefghij", 0, 0, "", 0);155 test("abcdefghij", 0, 0, "abcde", -5);156 test("abcdefghij", 0, 0, "abcdefghij", -10);157 test("abcdefghij", 0, 0, "abcdefghijklmnopqrst", -20);158 test("abcdefghij", 0, 1, "", 1);159 test("abcdefghij", 0, 1, "abcde", -4);160 test("abcdefghij", 0, 1, "abcdefghij", -9);161 test("abcdefghij", 0, 1, "abcdefghijklmnopqrst", -19);162 test("abcdefghij", 0, 5, "", 5);163 test("abcdefghij", 0, 5, "abcde", 0);164 test("abcdefghij", 0, 5, "abcdefghij", -5);165 test("abcdefghij", 0, 5, "abcdefghijklmnopqrst", -15);166 test("abcdefghij", 0, 9, "", 9);167 test("abcdefghij", 0, 9, "abcde", 4);168 test("abcdefghij", 0, 9, "abcdefghij", -1);169 test("abcdefghij", 0, 9, "abcdefghijklmnopqrst", -11);170 test("abcdefghij", 0, 10, "", 10);171 test("abcdefghij", 0, 10, "abcde", 5);172 test("abcdefghij", 0, 10, "abcdefghij", 0);173 test("abcdefghij", 0, 10, "abcdefghijklmnopqrst", -10);174 test("abcdefghij", 0, 11, "", 10);175 test("abcdefghij", 0, 11, "abcde", 5);176 test("abcdefghij", 0, 11, "abcdefghij", 0);177 test("abcdefghij", 0, 11, "abcdefghijklmnopqrst", -10);178 test("abcdefghij", 1, 0, "", 0);179 test("abcdefghij", 1, 0, "abcde", -5);180 test("abcdefghij", 1, 0, "abcdefghij", -10);181 test("abcdefghij", 1, 0, "abcdefghijklmnopqrst", -20);182 test("abcdefghij", 1, 1, "", 1);183 test("abcdefghij", 1, 1, "abcde", 1);184 test("abcdefghij", 1, 1, "abcdefghij", 1);185 test("abcdefghij", 1, 1, "abcdefghijklmnopqrst", 1);186 test("abcdefghij", 1, 4, "", 4);187 test("abcdefghij", 1, 4, "abcde", 1);188 test("abcdefghij", 1, 4, "abcdefghij", 1);189 test("abcdefghij", 1, 4, "abcdefghijklmnopqrst", 1);190 test("abcdefghij", 1, 8, "", 8);191 test("abcdefghij", 1, 8, "abcde", 1);192 test("abcdefghij", 1, 8, "abcdefghij", 1);193 test("abcdefghij", 1, 8, "abcdefghijklmnopqrst", 1);194 test("abcdefghij", 1, 9, "", 9);195 test("abcdefghij", 1, 9, "abcde", 1);196 test("abcdefghij", 1, 9, "abcdefghij", 1);197 test("abcdefghij", 1, 9, "abcdefghijklmnopqrst", 1);198 test("abcdefghij", 1, 10, "", 9);199 test("abcdefghij", 1, 10, "abcde", 1);200 test("abcdefghij", 1, 10, "abcdefghij", 1);201 test("abcdefghij", 1, 10, "abcdefghijklmnopqrst", 1);202 test("abcdefghij", 5, 0, "", 0);203 test("abcdefghij", 5, 0, "abcde", -5);204 test("abcdefghij", 5, 0, "abcdefghij", -10);205 test("abcdefghij", 5, 0, "abcdefghijklmnopqrst", -20);206 test("abcdefghij", 5, 1, "", 1);207 test("abcdefghij", 5, 1, "abcde", 5);208 test("abcdefghij", 5, 1, "abcdefghij", 5);209 test("abcdefghij", 5, 1, "abcdefghijklmnopqrst", 5);210 test("abcdefghij", 5, 2, "", 2);211 test("abcdefghij", 5, 2, "abcde", 5);212 test("abcdefghij", 5, 2, "abcdefghij", 5);213 test("abcdefghij", 5, 2, "abcdefghijklmnopqrst", 5);214 test("abcdefghij", 5, 4, "", 4);215 test("abcdefghij", 5, 4, "abcde", 5);216 test("abcdefghij", 5, 4, "abcdefghij", 5);217 test("abcdefghij", 5, 4, "abcdefghijklmnopqrst", 5);218 test("abcdefghij", 5, 5, "", 5);219 test("abcdefghij", 5, 5, "abcde", 5);220 test("abcdefghij", 5, 5, "abcdefghij", 5);221 test("abcdefghij", 5, 5, "abcdefghijklmnopqrst", 5);222 test("abcdefghij", 5, 6, "", 5);223 test("abcdefghij", 5, 6, "abcde", 5);224 test("abcdefghij", 5, 6, "abcdefghij", 5);225 test("abcdefghij", 5, 6, "abcdefghijklmnopqrst", 5);226 test("abcdefghij", 9, 0, "", 0);227 test("abcdefghij", 9, 0, "abcde", -5);228 test("abcdefghij", 9, 0, "abcdefghij", -10);229 test("abcdefghij", 9, 0, "abcdefghijklmnopqrst", -20);230 test("abcdefghij", 9, 1, "", 1);231 test("abcdefghij", 9, 1, "abcde", 9);232 test("abcdefghij", 9, 1, "abcdefghij", 9);233 test("abcdefghij", 9, 1, "abcdefghijklmnopqrst", 9);234 test("abcdefghij", 9, 2, "", 1);235 test("abcdefghij", 9, 2, "abcde", 9);236 test("abcdefghij", 9, 2, "abcdefghij", 9);237 test("abcdefghij", 9, 2, "abcdefghijklmnopqrst", 9);238 test("abcdefghij", 10, 0, "", 0);239 test("abcdefghij", 10, 0, "abcde", -5);240 test("abcdefghij", 10, 0, "abcdefghij", -10);241 test("abcdefghij", 10, 0, "abcdefghijklmnopqrst", -20);242 test("abcdefghij", 10, 1, "", 0);243 test("abcdefghij", 10, 1, "abcde", -5);244 test("abcdefghij", 10, 1, "abcdefghij", -10);245 test("abcdefghij", 10, 1, "abcdefghijklmnopqrst", -20);246 test("abcdefghij", 11, 0, "", 0);247 test("abcdefghij", 11, 0, "abcde", 0);248 test("abcdefghij", 11, 0, "abcdefghij", 0);249 test("abcdefghij", 11, 0, "abcdefghijklmnopqrst", 0);250}251 252void test2() {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 351int main(int, char**) {352 test0();353 test1();354 test2();355 356 {357 test("", 0, 0, "", 0);358 test("", 0, 0, "abcde", -5);359 test("", 0, 0, "abcdefghij", -10);360 test("", 0, 0, "abcdefghijklmnopqrst", -20);361 test("abcde", 0, 2, "", 5);362 test("abcde", 0, 6, "abcde", 0);363 test("abcde", 0, 6, "abcdefghij", -5);364 test("abcde", 0, 6, "abcdefghijklmnopqrst", -15);365 test("abcdefghij", 3, 3, "", 10);366 test("abcdefghij", 3, 3, "abcde", 5);367 test("abcdefghij", 3, 3, "def", 0);368 test("abcdefghij", 0, 4, "abcdefghijklmnopqrst", -10);369 test("abcdefghijklmnopqrst", 5, 5, "", 20);370 test("abcdefghijklmnopqrst", 0, 8, "abcde", 15);371 test("abcdefghijklmnopqrst", 0, 12, "abcdefghij", 10);372 test("abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), "abcdefghijklmnopqrst", 0);373 }374 375#ifndef TEST_HAS_NO_WIDE_CHARACTERS376 {377 test(L"", 0, 0, L"", 0);378 test(L"", 0, 0, L"abcde", -5);379 test(L"", 0, 0, L"abcdefghij", -10);380 test(L"", 0, 0, L"abcdefghijklmnopqrst", -20);381 test(L"abcde", 0, 2, L"", 5);382 test(L"abcde", 0, 6, L"abcde", 0);383 test(L"abcde", 0, 6, L"abcdefghij", -5);384 test(L"abcde", 0, 6, L"abcdefghijklmnopqrst", -15);385 test(L"abcdefghij", 3, 3, L"", 10);386 test(L"abcdefghij", 3, 3, L"abcde", 5);387 test(L"abcdefghij", 3, 3, L"def", 0);388 test(L"abcdefghij", 0, 4, L"abcdefghijklmnopqrst", -10);389 test(L"abcdefghijklmnopqrst", 5, 5, L"", 20);390 test(L"abcdefghijklmnopqrst", 0, 8, L"abcde", 15);391 test(L"abcdefghijklmnopqrst", 0, 12, L"abcdefghij", 10);392 test(L"abcdefghijklmnopqrst", 0, static_cast<std::size_t>(-1), L"abcdefghijklmnopqrst", 0);393 }394#endif395 396#if TEST_STD_VER >= 11397 {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, static_cast<std::size_t>(-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, static_cast<std::size_t>(-1), u"abcdefghijklmnopqrst", 0);433 }434#endif435 436#if TEST_STD_VER > 11437 {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") < 0, "");443 static_assert(sv2.compare(0, 2, "") > 0, "");444 static_assert(sv2.compare(0, 6, "abcde") == 0, "");445 }446#endif447 448 return 0;449}450