72 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: c++0310 11// <string>12 13// Test that <string> provides all of the arithmetic, enum, and pointer14// hash specializations.15 16#include <string>17 18#include "constexpr_char_traits.h"19#include "poisoned_hash_helper.h"20#include "test_allocator.h"21#include "test_macros.h"22 23struct MyChar {24 char c;25};26 27template <>28struct std::char_traits<MyChar> {29 using char_type = MyChar;30 using int_type = std::char_traits<char>::int_type;31 using off_type = std::char_traits<char>::off_type;32 using pos_type = std::char_traits<char>::pos_type;33 using state_type = std::char_traits<char>::state_type;34 35 static void assign(char_type&, const char_type&);36 static bool eq(char_type, char_type);37 static bool lt(char_type, char_type);38 39 static int compare(const char_type*, const char_type*, std::size_t);40 static std::size_t length(const char_type*);41 static const char_type* find(const char_type*, std::size_t, const char_type&);42 static char_type* move(char_type*, const char_type*, std::size_t);43 static char_type* copy(char_type*, const char_type*, std::size_t);44 static char_type* assign(char_type*, std::size_t, char_type);45 46 static int_type not_eof(int_type);47 static char_type to_char_type(int_type);48 static int_type to_int_type(char_type);49 static bool eq_int_type(int_type, int_type);50 static int_type eof();51};52 53int main(int, char**) {54 test_library_hash_specializations_available();55 {56 test_hash_enabled<std::string>();57#ifndef TEST_HAS_NO_WIDE_CHARACTERS58 test_hash_enabled<std::wstring>();59#endif60#ifndef TEST_HAS_NO_CHAR8_T61 test_hash_enabled<std::u8string>();62#endif63 test_hash_enabled<std::u16string>();64 test_hash_enabled<std::u32string>();65 test_hash_enabled<std::basic_string<char, std::char_traits<char>, test_allocator<char>>>();66 test_hash_disabled<std::basic_string<MyChar, std::char_traits<MyChar>, std::allocator<MyChar>>>();67 test_hash_disabled<std::basic_string<char, constexpr_char_traits<char>, std::allocator<char>>>();68 }69 70 return 0;71}72