62 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// <string>10 11// template<class charT, class traits, class Allocator>12// bool operator<(const basic_string<charT,traits,Allocator>& lhs, const charT* rhs); // constexpr since C++2013 14#include <string>15#include <cassert>16 17#include "test_macros.h"18#include "min_allocator.h"19 20template <class S>21TEST_CONSTEXPR_CXX20 void test(const S& lhs, const typename S::value_type* rhs, bool x) {22 assert((lhs < rhs) == x);23}24 25template <class S>26TEST_CONSTEXPR_CXX20 void test_string() {27 test(S(""), "", false);28 test(S(""), "abcde", true);29 test(S(""), "abcdefghij", true);30 test(S(""), "abcdefghijklmnopqrst", true);31 test(S("abcde"), "", false);32 test(S("abcde"), "abcde", false);33 test(S("abcde"), "abcdefghij", true);34 test(S("abcde"), "abcdefghijklmnopqrst", true);35 test(S("abcdefghij"), "", false);36 test(S("abcdefghij"), "abcde", false);37 test(S("abcdefghij"), "abcdefghij", false);38 test(S("abcdefghij"), "abcdefghijklmnopqrst", true);39 test(S("abcdefghijklmnopqrst"), "", false);40 test(S("abcdefghijklmnopqrst"), "abcde", false);41 test(S("abcdefghijklmnopqrst"), "abcdefghij", false);42 test(S("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", false);43}44 45TEST_CONSTEXPR_CXX20 bool test() {46 test_string<std::string>();47#if TEST_STD_VER >= 1148 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >();49#endif50 51 return true;52}53 54int main(int, char**) {55 test();56#if TEST_STD_VER > 1757 static_assert(test());58#endif59 60 return 0;61}62