1954d4a22SLouis Dionne //===----------------------------------------------------------------------===//
2954d4a22SLouis Dionne //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6954d4a22SLouis Dionne //
7954d4a22SLouis Dionne //===----------------------------------------------------------------------===//
8954d4a22SLouis Dionne
9954d4a22SLouis Dionne // <regex>
10*31cbe0f2SLouis Dionne // UNSUPPORTED: c++03
11954d4a22SLouis Dionne
12954d4a22SLouis Dionne // Make sure that we correctly match inverted character classes.
13954d4a22SLouis Dionne
14954d4a22SLouis Dionne #include <cassert>
15954d4a22SLouis Dionne #include <regex>
16954d4a22SLouis Dionne
177fc6a556SMarshall Clow #include "test_macros.h"
187fc6a556SMarshall Clow
19954d4a22SLouis Dionne
main(int,char **)202df59c50SJF Bastien int main(int, char**) {
21954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[X]")));
22954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[XY]")));
23954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[^X]")));
24954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[^XY]")));
25954d4a22SLouis Dionne
26954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[\\S]")));
27954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[^\\S]")));
28954d4a22SLouis Dionne
29954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[\\s]")));
30954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[^\\s]")));
31954d4a22SLouis Dionne
32954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[\\s\\S]")));
33954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[^Y\\s]")));
34954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[^X\\s]")));
35954d4a22SLouis Dionne
36954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[\\w]")));
37954d4a22SLouis Dionne assert(std::regex_match("_", std::regex("[\\w]")));
38954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[^\\w]")));
39954d4a22SLouis Dionne assert(!std::regex_match("_", std::regex("[^\\w]")));
40954d4a22SLouis Dionne
41954d4a22SLouis Dionne assert(!std::regex_match("X", std::regex("[\\W]")));
42954d4a22SLouis Dionne assert(!std::regex_match("_", std::regex("[\\W]")));
43954d4a22SLouis Dionne assert(std::regex_match("X", std::regex("[^\\W]")));
44954d4a22SLouis Dionne assert(std::regex_match("_", std::regex("[^\\W]")));
452df59c50SJF Bastien
46ee319034SLouis Dionne // Those test cases are taken from PR40904
47ee319034SLouis Dionne assert(std::regex_match("abZcd", std::regex("^ab[\\d\\D]cd")));
48ee319034SLouis Dionne assert(std::regex_match("ab5cd", std::regex("^ab[\\d\\D]cd")));
49ee319034SLouis Dionne assert(std::regex_match("abZcd", std::regex("^ab[\\D]cd")));
50ee319034SLouis Dionne assert(std::regex_match("abZcd", std::regex("^ab\\Dcd")));
51ee319034SLouis Dionne assert(std::regex_match("ab5cd", std::regex("^ab[\\d]cd")));
52ee319034SLouis Dionne assert(std::regex_match("ab5cd", std::regex("^ab\\dcd")));
53ee319034SLouis Dionne assert(!std::regex_match("abZcd", std::regex("^ab\\dcd")));
54ee319034SLouis Dionne assert(!std::regex_match("ab5cd", std::regex("^ab\\Dcd")));
55ee319034SLouis Dionne
56b5aefed4SLouis Dionne assert(std::regex_match("_xyz_", std::regex("_(\\s|\\S)+_")));
57b5aefed4SLouis Dionne assert(std::regex_match("_xyz_", std::regex("_[\\s\\S]+_")));
58b5aefed4SLouis Dionne
592df59c50SJF Bastien return 0;
60954d4a22SLouis Dionne }
61