string_size.pass.cpp revision 4bd6cc9f30fb15f61d1e3f2df0bf11d633c04ebe
1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <string> 11 12// size_type rfind(const basic_string& str, size_type pos = npos) const; 13 14#include <string> 15#include <cassert> 16 17template <class S> 18void 19test(const S& s, const S& str, typename S::size_type pos, typename S::size_type x) 20{ 21 assert(s.rfind(str, pos) == x); 22 if (x != S::npos) 23 assert(x <= pos && x + str.size() <= s.size()); 24} 25 26template <class S> 27void 28test(const S& s, const S& str, typename S::size_type x) 29{ 30 assert(s.rfind(str) == x); 31 if (x != S::npos) 32 assert(0 <= x && x + str.size() <= s.size()); 33} 34 35typedef std::string S; 36 37void test0() 38{ 39 test(S(""), S(""), 0, 0); 40 test(S(""), S("abcde"), 0, S::npos); 41 test(S(""), S("abcdeabcde"), 0, S::npos); 42 test(S(""), S("abcdeabcdeabcdeabcde"), 0, S::npos); 43 test(S(""), S(""), 1, 0); 44 test(S(""), S("abcde"), 1, S::npos); 45 test(S(""), S("abcdeabcde"), 1, S::npos); 46 test(S(""), S("abcdeabcdeabcdeabcde"), 1, S::npos); 47 test(S("abcde"), S(""), 0, 0); 48 test(S("abcde"), S("abcde"), 0, 0); 49 test(S("abcde"), S("abcdeabcde"), 0, S::npos); 50 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos); 51 test(S("abcde"), S(""), 1, 1); 52 test(S("abcde"), S("abcde"), 1, 0); 53 test(S("abcde"), S("abcdeabcde"), 1, S::npos); 54 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos); 55 test(S("abcde"), S(""), 2, 2); 56 test(S("abcde"), S("abcde"), 2, 0); 57 test(S("abcde"), S("abcdeabcde"), 2, S::npos); 58 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 2, S::npos); 59 test(S("abcde"), S(""), 4, 4); 60 test(S("abcde"), S("abcde"), 4, 0); 61 test(S("abcde"), S("abcdeabcde"), 4, S::npos); 62 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 4, S::npos); 63 test(S("abcde"), S(""), 5, 5); 64 test(S("abcde"), S("abcde"), 5, 0); 65 test(S("abcde"), S("abcdeabcde"), 5, S::npos); 66 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos); 67 test(S("abcde"), S(""), 6, 5); 68 test(S("abcde"), S("abcde"), 6, 0); 69 test(S("abcde"), S("abcdeabcde"), 6, S::npos); 70 test(S("abcde"), S("abcdeabcdeabcdeabcde"), 6, S::npos); 71 test(S("abcdeabcde"), S(""), 0, 0); 72 test(S("abcdeabcde"), S("abcde"), 0, 0); 73 test(S("abcdeabcde"), S("abcdeabcde"), 0, 0); 74 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, S::npos); 75 test(S("abcdeabcde"), S(""), 1, 1); 76 test(S("abcdeabcde"), S("abcde"), 1, 0); 77 test(S("abcdeabcde"), S("abcdeabcde"), 1, 0); 78 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, S::npos); 79 test(S("abcdeabcde"), S(""), 5, 5); 80 test(S("abcdeabcde"), S("abcde"), 5, 5); 81 test(S("abcdeabcde"), S("abcdeabcde"), 5, 0); 82 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 5, S::npos); 83 test(S("abcdeabcde"), S(""), 9, 9); 84 test(S("abcdeabcde"), S("abcde"), 9, 5); 85 test(S("abcdeabcde"), S("abcdeabcde"), 9, 0); 86 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 9, S::npos); 87 test(S("abcdeabcde"), S(""), 10, 10); 88 test(S("abcdeabcde"), S("abcde"), 10, 5); 89 test(S("abcdeabcde"), S("abcdeabcde"), 10, 0); 90 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, S::npos); 91 test(S("abcdeabcde"), S(""), 11, 10); 92 test(S("abcdeabcde"), S("abcde"), 11, 5); 93 test(S("abcdeabcde"), S("abcdeabcde"), 11, 0); 94 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), 11, S::npos); 95 test(S("abcdeabcdeabcdeabcde"), S(""), 0, 0); 96 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 0, 0); 97 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 0, 0); 98 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0, 0); 99 test(S("abcdeabcdeabcdeabcde"), S(""), 1, 1); 100 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 1, 0); 101 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 1, 0); 102 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 1, 0); 103 test(S("abcdeabcdeabcdeabcde"), S(""), 10, 10); 104 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 10, 10); 105 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10, 10); 106 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 10, 0); 107 test(S("abcdeabcdeabcdeabcde"), S(""), 19, 19); 108 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 19, 15); 109 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 19, 10); 110 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 19, 0); 111 test(S("abcdeabcdeabcdeabcde"), S(""), 20, 20); 112 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 20, 15); 113 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 20, 10); 114 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 20, 0); 115 test(S("abcdeabcdeabcdeabcde"), S(""), 21, 20); 116 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 21, 15); 117 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 21, 10); 118 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 21, 0); 119} 120 121void test1() 122{ 123 test(S(""), S(""), 0); 124 test(S(""), S("abcde"), S::npos); 125 test(S(""), S("abcdeabcde"), S::npos); 126 test(S(""), S("abcdeabcdeabcdeabcde"), S::npos); 127 test(S("abcde"), S(""), 5); 128 test(S("abcde"), S("abcde"), 0); 129 test(S("abcde"), S("abcdeabcde"), S::npos); 130 test(S("abcde"), S("abcdeabcdeabcdeabcde"), S::npos); 131 test(S("abcdeabcde"), S(""), 10); 132 test(S("abcdeabcde"), S("abcde"), 5); 133 test(S("abcdeabcde"), S("abcdeabcde"), 0); 134 test(S("abcdeabcde"), S("abcdeabcdeabcdeabcde"), S::npos); 135 test(S("abcdeabcdeabcdeabcde"), S(""), 20); 136 test(S("abcdeabcdeabcdeabcde"), S("abcde"), 15); 137 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcde"), 10); 138 test(S("abcdeabcdeabcdeabcde"), S("abcdeabcdeabcdeabcde"), 0); 139} 140 141int main() 142{ 143 test0(); 144 test1(); 145} 146