brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.3 KiB · bcdae97 Raw
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