brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · 3ea0362 Raw
160 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// class match_results<BidirectionalIterator, Allocator>12 13// template <class OutputIter>14//   OutputIter15//   format(OutputIter out, const char_type* fmt_first, const char_type* fmt_last,16//          regex_constants::match_flag_type flags = regex_constants::format_default) const;17 18#include <regex>19#include <cassert>20 21#include "test_macros.h"22#include "test_iterators.h"23 24int main(int, char**)25{26    {27        std::match_results<const char*> m;28        const char s[] = "abcdefghijk";29        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi")));30 31        char out[100] = {0};32        const char fmt[] = "prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";33        auto r = m.format(cpp17_output_iterator<char*>(out),34                    fmt, fmt + std::char_traits<char>::length(fmt));35        assert(base(r) == out + 58);36        assert(std::string(out) == "prefix: ab, match: cdefghi, suffix: jk, m[1]: efg, m[2]: e");37    }38    {39        std::match_results<const char*> m;40        const char s[] = "abcdefghijk";41        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi",42                                                  std::regex_constants::nosubs)));43 44        char out[100] = {0};45        const char fmt[] = "prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";46        auto r = m.format(cpp17_output_iterator<char*>(out),47                    fmt, fmt + std::char_traits<char>::length(fmt));48        assert(base(r) == out + 54);49        assert(std::string(out) == "prefix: ab, match: cdefghi, suffix: jk, m[1]: , m[2]: ");50    }51    {52        std::match_results<const char*> m;53        const char s[] = "abcdefghijk";54        assert(std::regex_search(s, m, std::regex("cdefghi")));55 56        char out[100] = {0};57        const char fmt[] = "prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";58        auto r = m.format(cpp17_output_iterator<char*>(out),59                    fmt, fmt + std::char_traits<char>::length(fmt));60        assert(base(r) == out + 54);61        assert(std::string(out) == "prefix: ab, match: cdefghi, suffix: jk, m[1]: , m[2]: ");62    }63    {64        std::match_results<const char*> m;65        const char s[] = "abcdefghijk";66        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi")));67 68        char out[100] = {0};69        const char fmt[] = "prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";70        auto r = m.format(cpp17_output_iterator<char*>(out),71                    fmt, fmt + std::char_traits<char>::length(fmt),72                    std::regex_constants::format_sed);73        assert(base(r) == out + 59);74        assert(std::string(out) == "prefix: $`, match: $cdefghi, suffix: $', m[1]: $1, m[2]: $2");75    }76    {77        std::match_results<const char*> m;78        const char s[] = "abcdefghijk";79        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi")));80 81        char out[100] = {0};82        const char fmt[] = "match: &, m[1]: \\1, m[2]: \\2";83        auto r = m.format(cpp17_output_iterator<char*>(out),84                    fmt, fmt + std::char_traits<char>::length(fmt),85                    std::regex_constants::format_sed);86        assert(base(r) == out + 34);87        assert(std::string(out) == "match: cdefghi, m[1]: efg, m[2]: e");88    }89    {90        std::match_results<const char*> m;91        const char s[] = "abcdefghijk";92        assert(std::regex_search(s, m, std::regex("cd((e)fg)hi",93                                                  std::regex_constants::nosubs)));94 95        char out[100] = {0};96        const char fmt[] = "match: &, m[1]: \\1, m[2]: \\2";97        auto r = m.format(cpp17_output_iterator<char*>(out),98                    fmt, fmt + std::char_traits<char>::length(fmt),99                    std::regex_constants::format_sed);100        assert(base(r) == out + 30);101        assert(std::string(out) == "match: cdefghi, m[1]: , m[2]: ");102    }103    {104        std::match_results<const char*> m;105        const char s[] = "abcdefghijk";106        assert(std::regex_search(s, m, std::regex("cdefghi")));107 108        char out[100] = {0};109        const char fmt[] = "match: &, m[1]: \\1, m[2]: \\2";110        auto r = m.format(cpp17_output_iterator<char*>(out),111                    fmt, fmt + std::char_traits<char>::length(fmt),112                    std::regex_constants::format_sed);113        assert(base(r) == out + 30);114        assert(std::string(out) == "match: cdefghi, m[1]: , m[2]: ");115    }116 117#ifndef TEST_HAS_NO_WIDE_CHARACTERS118    {119        std::match_results<const wchar_t*> m;120        const wchar_t s[] = L"abcdefghijk";121        assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi")));122 123        wchar_t out[100] = {0};124        const wchar_t fmt[] = L"prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";125        auto r = m.format(cpp17_output_iterator<wchar_t*>(out),126                    fmt, fmt + std::char_traits<wchar_t>::length(fmt));127        assert(base(r) == out + 58);128        assert(std::wstring(out) == L"prefix: ab, match: cdefghi, suffix: jk, m[1]: efg, m[2]: e");129    }130    {131        std::match_results<const wchar_t*> m;132        const wchar_t s[] = L"abcdefghijk";133        assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi")));134 135        wchar_t out[100] = {0};136        const wchar_t fmt[] = L"prefix: $`, match: $&, suffix: $', m[1]: $1, m[2]: $2";137        auto r = m.format(cpp17_output_iterator<wchar_t*>(out),138                    fmt, fmt + std::char_traits<wchar_t>::length(fmt),139                    std::regex_constants::format_sed);140        assert(base(r) == out + 59);141        assert(std::wstring(out) == L"prefix: $`, match: $cdefghi, suffix: $', m[1]: $1, m[2]: $2");142    }143    {144        std::match_results<const wchar_t*> m;145        const wchar_t s[] = L"abcdefghijk";146        assert(std::regex_search(s, m, std::wregex(L"cd((e)fg)hi")));147 148        wchar_t out[100] = {0};149        const wchar_t fmt[] = L"match: &, m[1]: \\1, m[2]: \\2";150        auto r = m.format(cpp17_output_iterator<wchar_t*>(out),151                    fmt, fmt + std::char_traits<wchar_t>::length(fmt),152                    std::regex_constants::format_sed);153        assert(base(r) == out + 34);154        assert(std::wstring(out) == L"match: cdefghi, m[1]: efg, m[2]: e");155    }156#endif // TEST_HAS_NO_WIDE_CHARACTERS157 158  return 0;159}160