130 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// <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 19int 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_CHARACTERS74 {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#endif127 128 return 0;129}130