//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// <string>

// basic_string substr(size_type pos = 0, size_type n = npos) const;

#include <string>
#include <stdexcept>
#include <algorithm>
#include <cassert>

template <class S>
void
test(const S& s, typename S::size_type pos, typename S::size_type n)
{
    try
    {
        S str = s.substr(pos, n);
        assert(str.__invariants());
        assert(pos <= s.size());
        typename S::size_type rlen = std::min(n, s.size() - pos);
        assert(str.size() == rlen);
        assert(S::traits_type::compare(s.data()+pos, str.data(), rlen) == 0);
    }
    catch (std::out_of_range&)
    {
        assert(pos > s.size());
    }
}

typedef std::string S;

int main()
{
    test(S(""), 0, 0);
    test(S(""), 1, 0);
    test(S("pniot"), 0, 0);
    test(S("htaob"), 0, 1);
    test(S("fodgq"), 0, 2);
    test(S("hpqia"), 0, 4);
    test(S("qanej"), 0, 5);
    test(S("dfkap"), 1, 0);
    test(S("clbao"), 1, 1);
    test(S("ihqrf"), 1, 2);
    test(S("mekdn"), 1, 3);
    test(S("ngtjf"), 1, 4);
    test(S("srdfq"), 2, 0);
    test(S("qkdrs"), 2, 1);
    test(S("ikcrq"), 2, 2);
    test(S("cdaih"), 2, 3);
    test(S("dmajb"), 4, 0);
    test(S("karth"), 4, 1);
    test(S("lhcdo"), 5, 0);
    test(S("acbsj"), 6, 0);
    test(S("pbsjikaole"), 0, 0);
    test(S("pcbahntsje"), 0, 1);
    test(S("mprdjbeiak"), 0, 5);
    test(S("fhepcrntko"), 0, 9);
    test(S("eqmpaidtls"), 0, 10);
    test(S("joidhalcmq"), 1, 0);
    test(S("omigsphflj"), 1, 1);
    test(S("kocgbphfji"), 1, 4);
    test(S("onmjekafbi"), 1, 8);
    test(S("fbslrjiqkm"), 1, 9);
    test(S("oqmrjahnkg"), 5, 0);
    test(S("jeidpcmalh"), 5, 1);
    test(S("schfalibje"), 5, 2);
    test(S("crliponbqe"), 5, 4);
    test(S("igdscopqtm"), 5, 5);
    test(S("qngpdkimlc"), 9, 0);
    test(S("thdjgafrlb"), 9, 1);
    test(S("hcjitbfapl"), 10, 0);
    test(S("mgojkldsqh"), 11, 0);
    test(S("gfshlcmdjreqipbontak"), 0, 0);
    test(S("nadkhpfemgclosibtjrq"), 0, 1);
    test(S("nkodajteqplrbifhmcgs"), 0, 10);
    test(S("ofdrqmkeblthacpgijsn"), 0, 19);
    test(S("gbmetiprqdoasckjfhln"), 0, 20);
    test(S("bdfjqgatlksriohemnpc"), 1, 0);
    test(S("crnklpmegdqfiashtojb"), 1, 1);
    test(S("ejqcnahdrkfsmptilgbo"), 1, 9);
    test(S("jsbtafedocnirgpmkhql"), 1, 18);
    test(S("prqgnlbaejsmkhdctoif"), 1, 19);
    test(S("qnmodrtkebhpasifgcjl"), 10, 0);
    test(S("pejafmnokrqhtisbcdgl"), 10, 1);
    test(S("cpebqsfmnjdolhkratgi"), 10, 5);
    test(S("odnqkgijrhabfmcestlp"), 10, 9);
    test(S("lmofqdhpkibagnrcjste"), 10, 10);
    test(S("lgjqketopbfahrmnsicd"), 19, 0);
    test(S("ktsrmnqagdecfhijpobl"), 19, 1);
    test(S("lsaijeqhtrbgcdmpfkno"), 20, 0);
    test(S("dplqartnfgejichmoskb"), 21, 0);
}
