brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.3 KiB · 643c6be Raw
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