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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <regex> 10 11 // template <class charT> struct regex_traits; 12 13 // int value(charT ch, int radix) const; 14 15 #include <regex> 16 #include <cassert> 17 #include "test_macros.h" 18 19 int main(int, char**) 20 { 21 { 22 std::regex_traits<char> t; 23 24 for (char c = 0; c < '0'; ++c) 25 { 26 assert(t.value(c, 8) == -1); 27 assert(t.value(c, 10) == -1); 28 assert(t.value(c, 16) == -1); 29 } 30 for (char c = '0'; c < '8'; ++c) 31 { 32 assert(t.value(c, 8) == c - '0'); 33 assert(t.value(c, 10) == c - '0'); 34 assert(t.value(c, 16) == c - '0'); 35 } 36 for (char c = '8'; c < ':'; ++c) 37 { 38 assert(t.value(c, 8) == -1); 39 assert(t.value(c, 10) == c - '0'); 40 assert(t.value(c, 16) == c - '0'); 41 } 42 for (char c = ':'; c < 'A'; ++c) 43 { 44 assert(t.value(c, 8) == -1); 45 assert(t.value(c, 10) == -1); 46 assert(t.value(c, 16) == -1); 47 } 48 for (char c = 'A'; c < 'G'; ++c) 49 { 50 assert(t.value(c, 8) == -1); 51 assert(t.value(c, 10) == -1); 52 assert(t.value(c, 16) == c - 'A' +10); 53 } 54 for (char c = 'G'; c < 'a'; ++c) 55 { 56 assert(t.value(c, 8) == -1); 57 assert(t.value(c, 10) == -1); 58 assert(t.value(c, 16) == -1); 59 } 60 for (char c = 'a'; c < 'g'; ++c) 61 { 62 assert(t.value(c, 8) == -1); 63 assert(t.value(c, 10) == -1); 64 assert(t.value(c, 16) == c - 'a' +10); 65 } 66 for (int c = 'g'; c < 256; ++c) 67 { 68 assert(t.value(char(c), 8) == -1); 69 assert(t.value(char(c), 10) == -1); 70 assert(t.value(char(c), 16) == -1); 71 } 72 } 73 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 74 { 75 std::regex_traits<wchar_t> t; 76 77 for (wchar_t c = 0; c < '0'; ++c) 78 { 79 assert(t.value(c, 8) == -1); 80 assert(t.value(c, 10) == -1); 81 assert(t.value(c, 16) == -1); 82 } 83 for (wchar_t c = '0'; c < '8'; ++c) 84 { 85 assert(t.value(c, 8) == static_cast<int>(c - '0')); 86 assert(t.value(c, 10) == static_cast<int>(c - '0')); 87 assert(t.value(c, 16) == static_cast<int>(c - '0')); 88 } 89 for (wchar_t c = '8'; c < ':'; ++c) 90 { 91 assert(t.value(c, 8) == -1); 92 assert(t.value(c, 10) == static_cast<int>(c - '0')); 93 assert(t.value(c, 16) == static_cast<int>(c - '0')); 94 } 95 for (wchar_t c = ':'; c < 'A'; ++c) 96 { 97 assert(t.value(c, 8) == -1); 98 assert(t.value(c, 10) == -1); 99 assert(t.value(c, 16) == -1); 100 } 101 for (wchar_t c = 'A'; c < 'G'; ++c) 102 { 103 assert(t.value(c, 8) == -1); 104 assert(t.value(c, 10) == -1); 105 assert(t.value(c, 16) == static_cast<int>(c - 'A' +10)); 106 } 107 for (wchar_t c = 'G'; c < 'a'; ++c) 108 { 109 assert(t.value(c, 8) == -1); 110 assert(t.value(c, 10) == -1); 111 assert(t.value(c, 16) == -1); 112 } 113 for (wchar_t c = 'a'; c < 'g'; ++c) 114 { 115 assert(t.value(c, 8) == -1); 116 assert(t.value(c, 10) == -1); 117 assert(t.value(c, 16) == static_cast<int>(c - 'a' +10)); 118 } 119 for (wchar_t c = 'g'; c < 0xFFFF; ++c) 120 { 121 assert(t.value(c, 8) == -1); 122 assert(t.value(c, 10) == -1); 123 assert(t.value(c, 16) == -1); 124 } 125 } 126 #endif 127 128 return 0; 129 } 130