164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow// -*- C++ -*-
264befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//===----------------------------------------------------------------------===//
364befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//
464befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//                     The LLVM Compiler Infrastructure
564befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//
664befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow// This file is dual licensed under the MIT and the University of Illinois Open
764befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow// Source Licenses. See LICENSE.TXT for details.
864befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//
964befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//===----------------------------------------------------------------------===//
1064befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
1164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow// <regex>
1264befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
1364befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow// match_not_eol:
1484acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier//     The last character in the sequence [first,last) shall be treated as
1584acb1ec3f7d5e0f37d7176697c2fa876c413407Eric Fiselier//     though it is not at the end of a line, so the character "$" in
1664befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow//     the regular expression shall not match [last,last).
1764befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
1864befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow#include <regex>
1964befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow#include <cassert>
206dfff1c9b9147641601574c953e208ece17f27d8Marshall Clow#include "test_macros.h"
2164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
2264befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clowint main()
2364befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow{
2464befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    {
2564befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::string target = "foo";
2664befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::regex re("foo$");
2764befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_match(target, re));
2864befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert(!std::regex_match(target, re, std::regex_constants::match_not_eol));
2964befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    }
3064befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
3164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    {
3264befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::string target = "foo";
3364befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::regex re("foo");
3464befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_match(target, re));
3564befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_match(target, re, std::regex_constants::match_not_eol));
3664befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    }
3764befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
3864befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    {
3964befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::string target = "refoo";
4064befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::regex re("foo$");
4164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_search(target, re));
4264befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert(!std::regex_search(target, re, std::regex_constants::match_not_eol));
4364befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    }
4464befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow
4564befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    {
4664befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::string target = "refoo";
4764befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    std::regex re("foo");
4864befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_search(target, re));
4964befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    assert( std::regex_search(target, re, std::regex_constants::match_not_eol));
5064befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow    }
5164befb5bc5b5aaec6717c931396990eb58ecd626Marshall Clow}
52