Implement full support for non-pointer pointers in custom allocators for string. This completes the custom pointer support for the entire library.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@185167 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant
2013-06-28 16:59:19 +00:00
parent 2c39cbe020
commit 9dcdcdee25
151 changed files with 5125 additions and 645 deletions

View File

@@ -14,6 +14,8 @@
#include <string>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -30,10 +32,10 @@ test(const S& s, const typename S::value_type* str, int x)
assert(sign(s.compare(str)) == sign(x));
}
typedef std::string S;
int main()
{
{
typedef std::string S;
test(S(""), "", 0);
test(S(""), "abcde", -5);
test(S(""), "abcdefghij", -10);
@@ -50,4 +52,26 @@ int main()
test(S("abcdefghijklmnopqrst"), "abcde", 15);
test(S("abcdefghijklmnopqrst"), "abcdefghij", 10);
test(S("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", 0);
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test(S(""), "", 0);
test(S(""), "abcde", -5);
test(S(""), "abcdefghij", -10);
test(S(""), "abcdefghijklmnopqrst", -20);
test(S("abcde"), "", 5);
test(S("abcde"), "abcde", 0);
test(S("abcde"), "abcdefghij", -5);
test(S("abcde"), "abcdefghijklmnopqrst", -15);
test(S("abcdefghij"), "", 10);
test(S("abcdefghij"), "abcde", 5);
test(S("abcdefghij"), "abcdefghij", 0);
test(S("abcdefghij"), "abcdefghijklmnopqrst", -10);
test(S("abcdefghijklmnopqrst"), "", 20);
test(S("abcdefghijklmnopqrst"), "abcde", 15);
test(S("abcdefghijklmnopqrst"), "abcdefghij", 10);
test(S("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", 0);
}
#endif
}

View File

@@ -15,6 +15,8 @@
#include <stdexcept>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -40,8 +42,7 @@ test(const S& s, typename S::size_type pos1, typename S::size_type n1,
}
}
typedef std::string S;
template <class S>
void test0()
{
test(S(""), 0, 0, "", 0);
@@ -146,6 +147,7 @@ void test0()
test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", -20);
}
template <class S>
void test1()
{
test(S("abcde"), 6, 0, "", 0);
@@ -250,6 +252,7 @@ void test1()
test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 0);
}
template <class S>
void test2()
{
test(S("abcdefghijklmnopqrst"), 0, 0, "", 0);
@@ -352,7 +355,18 @@ void test2()
int main()
{
test0();
test1();
test2();
{
typedef std::string S;
test0<S>();
test1<S>();
test2<S>();
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test0<S>();
test1<S>();
test2<S>();
}
#endif
}

View File

@@ -15,6 +15,8 @@
#include <stdexcept>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -40,8 +42,7 @@ test(const S& s, typename S::size_type pos, typename S::size_type n1,
}
}
typedef std::string S;
template <class S>
void test0()
{
test(S(""), 0, 0, "", 0, 0);
@@ -146,6 +147,7 @@ void test0()
test(S("abcde"), 0, 4, "abcde", 2, 2);
}
template <class S>
void test1()
{
test(S("abcde"), 0, 4, "abcde", 4, 0);
@@ -250,6 +252,7 @@ void test1()
test(S("abcde"), 1, 3, "abcdefghij", 1, 1);
}
template <class S>
void test2()
{
test(S("abcde"), 1, 3, "abcdefghij", 5, 1);
@@ -354,6 +357,7 @@ void test2()
test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 0, 3);
}
template <class S>
void test3()
{
test(S("abcde"), 2, 3, "abcdefghijklmnopqrst", 1, 2);
@@ -458,6 +462,7 @@ void test3()
test(S("abcde"), 5, 1, "abcdefghijklmnopqrst", 20, -20);
}
template <class S>
void test4()
{
test(S("abcde"), 6, 0, "", 0, 0);
@@ -562,6 +567,7 @@ void test4()
test(S("abcdefghij"), 0, 11, "abcde", 2, 8);
}
template <class S>
void test5()
{
test(S("abcdefghij"), 0, 11, "abcde", 4, 6);
@@ -666,6 +672,7 @@ void test5()
test(S("abcdefghij"), 1, 10, "abcdefghij", 1, 1);
}
template <class S>
void test6()
{
test(S("abcdefghij"), 1, 10, "abcdefghij", 5, 1);
@@ -770,6 +777,7 @@ void test6()
test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 0, 5);
}
template <class S>
void test7()
{
test(S("abcdefghij"), 5, 6, "abcdefghijklmnopqrst", 1, 5);
@@ -874,6 +882,7 @@ void test7()
test(S("abcdefghij"), 11, 0, "abcdefghijklmnopqrst", 20, 0);
}
template <class S>
void test8()
{
test(S("abcdefghijklmnopqrst"), 0, 0, "", 0, 0);
@@ -978,6 +987,7 @@ void test8()
test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 2, -2);
}
template <class S>
void test9()
{
test(S("abcdefghijklmnopqrst"), 1, 0, "abcde", 4, -4);
@@ -1082,6 +1092,7 @@ void test9()
test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 1, -1);
}
template <class S>
void test10()
{
test(S("abcdefghijklmnopqrst"), 10, 0, "abcdefghij", 5, -5);
@@ -1186,6 +1197,7 @@ void test10()
test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 0, 0);
}
template <class S>
void test11()
{
test(S("abcdefghijklmnopqrst"), 19, 0, "abcdefghijklmnopqrst", 1, -1);
@@ -1276,16 +1288,36 @@ void test11()
int main()
{
test0();
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
test10();
test11();
{
typedef std::string S;
test0<S>();
test1<S>();
test2<S>();
test3<S>();
test4<S>();
test5<S>();
test6<S>();
test7<S>();
test8<S>();
test9<S>();
test10<S>();
test11<S>();
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test0<S>();
test1<S>();
test2<S>();
test3<S>();
test4<S>();
test5<S>();
test6<S>();
test7<S>();
test8<S>();
test9<S>();
test10<S>();
test11<S>();
}
#endif
}

View File

@@ -15,6 +15,8 @@
#include <stdexcept>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -40,8 +42,7 @@ test(const S& s, typename S::size_type pos1, typename S::size_type n1,
}
}
typedef std::string S;
template <class S>
void test0()
{
test(S(""), 0, 0, S(""), 0);
@@ -146,6 +147,7 @@ void test0()
test(S("abcde"), 5, 1, S("abcdefghijklmnopqrst"), -20);
}
template <class S>
void test1()
{
test(S("abcde"), 6, 0, S(""), 0);
@@ -250,6 +252,7 @@ void test1()
test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 0);
}
template <class S>
void test2()
{
test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0);
@@ -352,7 +355,18 @@ void test2()
int main()
{
test0();
test1();
test2();
{
typedef std::string S;
test0<S>();
test1<S>();
test2<S>();
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test0<S>();
test1<S>();
test2<S>();
}
#endif
}

View File

@@ -16,6 +16,8 @@
#include <stdexcept>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -42,8 +44,7 @@ test(const S& s, typename S::size_type pos1, typename S::size_type n1,
}
}
typedef std::string S;
template <class S>
void test0()
{
test(S(""), 0, 0, S(""), 0, 0, 0);
@@ -148,6 +149,7 @@ void test0()
test(S(""), 0, 1, S("abcde"), 6, 0, 0);
}
template <class S>
void test1()
{
test(S(""), 0, 1, S("abcdefghij"), 0, 0, 0);
@@ -252,6 +254,7 @@ void test1()
test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 1, 0);
}
template <class S>
void test2()
{
test(S(""), 1, 0, S("abcdefghijklmnopqrst"), 0, 10, 0);
@@ -356,6 +359,7 @@ void test2()
test(S("abcde"), 0, 1, S("abcde"), 0, 0, 1);
}
template <class S>
void test3()
{
test(S("abcde"), 0, 1, S("abcde"), 0, 1, 0);
@@ -460,6 +464,7 @@ void test3()
test(S("abcde"), 0, 2, S("abcdefghij"), 0, 9, -7);
}
template <class S>
void test4()
{
test(S("abcde"), 0, 2, S("abcdefghij"), 0, 10, -8);
@@ -564,6 +569,7 @@ void test4()
test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 0, 21, -16);
}
template <class S>
void test5()
{
test(S("abcde"), 0, 4, S("abcdefghijklmnopqrst"), 1, 0, 4);
@@ -668,6 +674,7 @@ void test5()
test(S("abcde"), 0, 6, S("abcde"), 0, 5, 0);
}
template <class S>
void test6()
{
test(S("abcde"), 0, 6, S("abcde"), 0, 6, 0);
@@ -772,6 +779,7 @@ void test6()
test(S("abcde"), 1, 0, S("abcdefghij"), 1, 1, -1);
}
template <class S>
void test7()
{
test(S("abcde"), 1, 0, S("abcdefghij"), 1, 4, -4);
@@ -876,6 +884,7 @@ void test7()
test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 18, -17);
}
template <class S>
void test8()
{
test(S("abcde"), 1, 1, S("abcdefghijklmnopqrst"), 1, 19, -18);
@@ -980,6 +989,7 @@ void test8()
test(S("abcde"), 1, 3, S("abcde"), 1, 2, 1);
}
template <class S>
void test9()
{
test(S("abcde"), 1, 3, S("abcde"), 1, 3, 0);
@@ -1084,6 +1094,7 @@ void test9()
test(S("abcde"), 1, 4, S("abcdefghij"), 1, 10, -5);
}
template <class S>
void test10()
{
test(S("abcde"), 1, 4, S("abcdefghij"), 5, 0, 4);
@@ -1188,6 +1199,7 @@ void test10()
test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 1, -9);
}
template <class S>
void test11()
{
test(S("abcde"), 1, 5, S("abcdefghijklmnopqrst"), 10, 5, -9);
@@ -1292,6 +1304,7 @@ void test11()
test(S("abcde"), 2, 1, S("abcde"), 2, 0, 1);
}
template <class S>
void test12()
{
test(S("abcde"), 2, 1, S("abcde"), 2, 1, 0);
@@ -1396,6 +1409,7 @@ void test12()
test(S("abcde"), 2, 2, S("abcdefghij"), 5, 4, -3);
}
template <class S>
void test13()
{
test(S("abcde"), 2, 2, S("abcdefghij"), 5, 5, -3);
@@ -1500,6 +1514,7 @@ void test13()
test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 10, 11, -8);
}
template <class S>
void test14()
{
test(S("abcde"), 2, 3, S("abcdefghijklmnopqrst"), 19, 0, 3);
@@ -1604,6 +1619,7 @@ void test14()
test(S("abcde"), 4, 0, S("abcde"), 2, 4, -3);
}
template <class S>
void test15()
{
test(S("abcde"), 4, 0, S("abcde"), 4, 0, 0);
@@ -1708,6 +1724,7 @@ void test15()
test(S("abcde"), 4, 1, S("abcdefghij"), 9, 1, -5);
}
template <class S>
void test16()
{
test(S("abcde"), 4, 1, S("abcdefghij"), 9, 2, -5);
@@ -1812,6 +1829,7 @@ void test16()
test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 0, 1);
}
template <class S>
void test17()
{
test(S("abcde"), 4, 2, S("abcdefghijklmnopqrst"), 20, 1, 1);
@@ -1916,6 +1934,7 @@ void test17()
test(S("abcde"), 5, 1, S("abcde"), 5, 0, 0);
}
template <class S>
void test18()
{
test(S("abcde"), 5, 1, S("abcde"), 5, 1, 0);
@@ -2020,6 +2039,7 @@ void test18()
test(S("abcde"), 6, 0, S("abcdefghij"), 11, 0, 0);
}
template <class S>
void test19()
{
test(S("abcde"), 6, 0, S("abcdefghijklmnopqrst"), 0, 0, 0);
@@ -2124,6 +2144,7 @@ void test19()
test(S("abcdefghij"), 0, 1, S(""), 0, 1, 1);
}
template <class S>
void test20()
{
test(S("abcdefghij"), 0, 1, S(""), 1, 0, 0);
@@ -2228,6 +2249,7 @@ void test20()
test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 1, 4);
}
template <class S>
void test21()
{
test(S("abcdefghij"), 0, 5, S("abcdefghij"), 0, 5, 0);
@@ -2332,6 +2354,7 @@ void test21()
test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 19, -10);
}
template <class S>
void test22()
{
test(S("abcdefghij"), 0, 9, S("abcdefghijklmnopqrst"), 0, 20, -11);
@@ -2436,6 +2459,7 @@ void test22()
test(S("abcdefghij"), 0, 11, S("abcde"), 0, 2, 8);
}
template <class S>
void test23()
{
test(S("abcdefghij"), 0, 11, S("abcde"), 0, 4, 6);
@@ -2540,6 +2564,7 @@ void test23()
test(S("abcdefghij"), 1, 0, S("abcdefghij"), 0, 11, -10);
}
template <class S>
void test24()
{
test(S("abcdefghij"), 1, 0, S("abcdefghij"), 1, 0, 0);
@@ -2644,6 +2669,7 @@ void test24()
test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 1, 0);
}
template <class S>
void test25()
{
test(S("abcdefghij"), 1, 1, S("abcdefghijklmnopqrst"), 1, 9, -8);
@@ -2748,6 +2774,7 @@ void test25()
test(S("abcdefghij"), 1, 8, S("abcde"), 1, 0, 8);
}
template <class S>
void test26()
{
test(S("abcdefghij"), 1, 8, S("abcde"), 1, 1, 7);
@@ -2852,6 +2879,7 @@ void test26()
test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 8, 1);
}
template <class S>
void test27()
{
test(S("abcdefghij"), 1, 9, S("abcdefghij"), 1, 9, 0);
@@ -2956,6 +2984,7 @@ void test27()
test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 1, 20, -10);
}
template <class S>
void test28()
{
test(S("abcdefghij"), 1, 10, S("abcdefghijklmnopqrst"), 10, 0, 9);
@@ -3060,6 +3089,7 @@ void test28()
test(S("abcdefghij"), 5, 1, S("abcde"), 1, 4, 4);
}
template <class S>
void test29()
{
test(S("abcdefghij"), 5, 1, S("abcde"), 1, 5, 4);
@@ -3164,6 +3194,7 @@ void test29()
test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 1, 1);
}
template <class S>
void test30()
{
test(S("abcdefghij"), 5, 2, S("abcdefghij"), 5, 2, 0);
@@ -3268,6 +3299,7 @@ void test30()
test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 9, -5);
}
template <class S>
void test31()
{
test(S("abcdefghij"), 5, 4, S("abcdefghijklmnopqrst"), 10, 10, -5);
@@ -3372,6 +3404,7 @@ void test31()
test(S("abcdefghij"), 5, 6, S("abcde"), 2, 2, 3);
}
template <class S>
void test32()
{
test(S("abcdefghij"), 5, 6, S("abcde"), 2, 3, 3);
@@ -3476,6 +3509,7 @@ void test32()
test(S("abcdefghij"), 9, 0, S("abcdefghij"), 5, 6, -5);
}
template <class S>
void test33()
{
test(S("abcdefghij"), 9, 0, S("abcdefghij"), 9, 0, 0);
@@ -3580,6 +3614,7 @@ void test33()
test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 1, -10);
}
template <class S>
void test34()
{
test(S("abcdefghij"), 9, 1, S("abcdefghijklmnopqrst"), 19, 2, -10);
@@ -3684,6 +3719,7 @@ void test34()
test(S("abcdefghij"), 10, 0, S("abcde"), 4, 1, -1);
}
template <class S>
void test35()
{
test(S("abcdefghij"), 10, 0, S("abcde"), 4, 2, -1);
@@ -3788,6 +3824,7 @@ void test35()
test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 0, 0);
}
template <class S>
void test36()
{
test(S("abcdefghij"), 10, 1, S("abcdefghij"), 10, 1, 0);
@@ -3892,6 +3929,7 @@ void test36()
test(S("abcdefghij"), 11, 0, S("abcdefghijklmnopqrst"), 21, 0, 0);
}
template <class S>
void test37()
{
test(S("abcdefghijklmnopqrst"), 0, 0, S(""), 0, 0, 0);
@@ -3996,6 +4034,7 @@ void test37()
test(S("abcdefghijklmnopqrst"), 0, 1, S("abcde"), 6, 0, 0);
}
template <class S>
void test38()
{
test(S("abcdefghijklmnopqrst"), 0, 1, S("abcdefghij"), 0, 0, 1);
@@ -4100,6 +4139,7 @@ void test38()
test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 1, 9);
}
template <class S>
void test39()
{
test(S("abcdefghijklmnopqrst"), 0, 10, S("abcdefghijklmnopqrst"), 0, 10, 0);
@@ -4204,6 +4244,7 @@ void test39()
test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 0, 20);
}
template <class S>
void test40()
{
test(S("abcdefghijklmnopqrst"), 0, 20, S("abcde"), 0, 1, 19);
@@ -4308,6 +4349,7 @@ void test40()
test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 9, 11);
}
template <class S>
void test41()
{
test(S("abcdefghijklmnopqrst"), 0, 21, S("abcdefghij"), 0, 10, 10);
@@ -4412,6 +4454,7 @@ void test41()
test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 0, 21, -20);
}
template <class S>
void test42()
{
test(S("abcdefghijklmnopqrst"), 1, 0, S("abcdefghijklmnopqrst"), 1, 0, 0);
@@ -4516,6 +4559,7 @@ void test42()
test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 5, 1);
}
template <class S>
void test43()
{
test(S("abcdefghijklmnopqrst"), 1, 9, S("abcde"), 0, 6, 1);
@@ -4620,6 +4664,7 @@ void test43()
test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 1, 17);
}
template <class S>
void test44()
{
test(S("abcdefghijklmnopqrst"), 1, 18, S("abcdefghij"), 1, 4, 14);
@@ -4724,6 +4769,7 @@ void test44()
test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 18, 1);
}
template <class S>
void test45()
{
test(S("abcdefghijklmnopqrst"), 1, 19, S("abcdefghijklmnopqrst"), 1, 19, 0);
@@ -4828,6 +4874,7 @@ void test45()
test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 2, -2);
}
template <class S>
void test46()
{
test(S("abcdefghijklmnopqrst"), 10, 0, S("abcde"), 1, 3, -3);
@@ -4932,6 +4979,7 @@ void test46()
test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 1, 10, 9);
}
template <class S>
void test47()
{
test(S("abcdefghijklmnopqrst"), 10, 1, S("abcdefghij"), 5, 0, 1);
@@ -5036,6 +5084,7 @@ void test47()
test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 1, 4);
}
template <class S>
void test48()
{
test(S("abcdefghijklmnopqrst"), 10, 5, S("abcdefghijklmnopqrst"), 10, 5, 0);
@@ -5140,6 +5189,7 @@ void test48()
test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 0, 10);
}
template <class S>
void test49()
{
test(S("abcdefghijklmnopqrst"), 10, 10, S("abcde"), 2, 1, 8);
@@ -5244,6 +5294,7 @@ void test49()
test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 4, 5);
}
template <class S>
void test50()
{
test(S("abcdefghijklmnopqrst"), 10, 11, S("abcdefghij"), 5, 5, 5);
@@ -5348,6 +5399,7 @@ void test50()
test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 10, 11, -10);
}
template <class S>
void test51()
{
test(S("abcdefghijklmnopqrst"), 19, 0, S("abcdefghijklmnopqrst"), 19, 0, 0);
@@ -5452,6 +5504,7 @@ void test51()
test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 2, 4, 17);
}
template <class S>
void test52()
{
test(S("abcdefghijklmnopqrst"), 19, 2, S("abcde"), 4, 0, 1);
@@ -5556,6 +5609,7 @@ void test52()
test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 1, -1);
}
template <class S>
void test53()
{
test(S("abcdefghijklmnopqrst"), 20, 0, S("abcdefghij"), 9, 2, -1);
@@ -5660,6 +5714,7 @@ void test53()
test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 0, 0);
}
template <class S>
void test54()
{
test(S("abcdefghijklmnopqrst"), 20, 1, S("abcdefghijklmnopqrst"), 20, 1, 0);
@@ -5742,59 +5797,122 @@ void test54()
int main()
{
test0();
test1();
test2();
test3();
test4();
test5();
test6();
test7();
test8();
test9();
test10();
test11();
test12();
test13();
test14();
test15();
test16();
test17();
test18();
test19();
test20();
test21();
test22();
test23();
test24();
test25();
test26();
test27();
test28();
test29();
test30();
test31();
test32();
test33();
test34();
test35();
test36();
test37();
test38();
test39();
test40();
test41();
test42();
test43();
test44();
test45();
test46();
test47();
test48();
test49();
test50();
test51();
test52();
test53();
test54();
{
typedef std::string S;
test0<S>();
test1<S>();
test2<S>();
test3<S>();
test4<S>();
test5<S>();
test6<S>();
test7<S>();
test8<S>();
test9<S>();
test10<S>();
test11<S>();
test12<S>();
test13<S>();
test14<S>();
test15<S>();
test16<S>();
test17<S>();
test18<S>();
test19<S>();
test20<S>();
test21<S>();
test22<S>();
test23<S>();
test24<S>();
test25<S>();
test26<S>();
test27<S>();
test28<S>();
test29<S>();
test30<S>();
test31<S>();
test32<S>();
test33<S>();
test34<S>();
test35<S>();
test36<S>();
test37<S>();
test38<S>();
test39<S>();
test40<S>();
test41<S>();
test42<S>();
test43<S>();
test44<S>();
test45<S>();
test46<S>();
test47<S>();
test48<S>();
test49<S>();
test50<S>();
test51<S>();
test52<S>();
test53<S>();
test54<S>();
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test0<S>();
test1<S>();
test2<S>();
test3<S>();
test4<S>();
test5<S>();
test6<S>();
test7<S>();
test8<S>();
test9<S>();
test10<S>();
test11<S>();
test12<S>();
test13<S>();
test14<S>();
test15<S>();
test16<S>();
test17<S>();
test18<S>();
test19<S>();
test20<S>();
test21<S>();
test22<S>();
test23<S>();
test24<S>();
test25<S>();
test26<S>();
test27<S>();
test28<S>();
test29<S>();
test30<S>();
test31<S>();
test32<S>();
test33<S>();
test34<S>();
test35<S>();
test36<S>();
test37<S>();
test38<S>();
test39<S>();
test40<S>();
test41<S>();
test42<S>();
test43<S>();
test44<S>();
test45<S>();
test46<S>();
test47<S>();
test48<S>();
test49<S>();
test50<S>();
test51<S>();
test52<S>();
test53<S>();
test54<S>();
}
#endif
}

View File

@@ -14,6 +14,8 @@
#include <string>
#include <cassert>
#include "../../min_allocator.h"
int sign(int x)
{
if (x == 0)
@@ -30,10 +32,10 @@ test(const S& s, const S& str, int x)
assert(sign(s.compare(str)) == sign(x));
}
typedef std::string S;
int main()
{
{
typedef std::string S;
test(S(""), S(""), 0);
test(S(""), S("abcde"), -5);
test(S(""), S("abcdefghij"), -10);
@@ -50,4 +52,26 @@ int main()
test(S("abcdefghijklmnopqrst"), S("abcde"), 15);
test(S("abcdefghijklmnopqrst"), S("abcdefghij"), 10);
test(S("abcdefghijklmnopqrst"), S("abcdefghijklmnopqrst"), 0);
}
#if __cplusplus >= 201103L
{
typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
test(S(""), S(""), 0);
test(S(""), S("abcde"), -5);
test(S(""), S("abcdefghij"), -10);
test(S(""), S("abcdefghijklmnopqrst"), -20);
test(S("abcde"), S(""), 5);
test(S("abcde"), S("abcde"), 0);
test(S("abcde"), S("abcdefghij"), -5);
test(S("abcde"), S("abcdefghijklmnopqrst"), -15);
test(S("abcdefghij"), S(""), 10);
test(S("abcdefghij"), S("abcde"), 5);
test(S("abcdefghij"), S("abcdefghij"), 0);
test(S("abcdefghij"), S("abcdefghijklmnopqrst"), -10);
test(S("abcdefghijklmnopqrst"), S(""), 20);
test(S("abcdefghijklmnopqrst"), S("abcde"), 15);
test(S("abcdefghijklmnopqrst"), S("abcdefghij"), 10);
test(S("abcdefghijklmnopqrst"), S("abcdefghijklmnopqrst"), 0);
}
#endif
}