1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <string>
11
12// int compare(const charT *s) const;
13
14#include <string>
15#include <cassert>
16
17#include "min_allocator.h"
18
19int sign(int x)
20{
21    if (x == 0)
22        return 0;
23    if (x < 0)
24        return -1;
25    return 1;
26}
27
28template <class S>
29void
30test(const S& s, const typename S::value_type* str, int x)
31{
32    assert(sign(s.compare(str)) == sign(x));
33}
34
35int main()
36{
37    {
38    typedef std::string S;
39    test(S(""), "", 0);
40    test(S(""), "abcde", -5);
41    test(S(""), "abcdefghij", -10);
42    test(S(""), "abcdefghijklmnopqrst", -20);
43    test(S("abcde"), "", 5);
44    test(S("abcde"), "abcde", 0);
45    test(S("abcde"), "abcdefghij", -5);
46    test(S("abcde"), "abcdefghijklmnopqrst", -15);
47    test(S("abcdefghij"), "", 10);
48    test(S("abcdefghij"), "abcde", 5);
49    test(S("abcdefghij"), "abcdefghij", 0);
50    test(S("abcdefghij"), "abcdefghijklmnopqrst", -10);
51    test(S("abcdefghijklmnopqrst"), "", 20);
52    test(S("abcdefghijklmnopqrst"), "abcde", 15);
53    test(S("abcdefghijklmnopqrst"), "abcdefghij", 10);
54    test(S("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", 0);
55    }
56#if TEST_STD_VER >= 11
57    {
58    typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
59    test(S(""), "", 0);
60    test(S(""), "abcde", -5);
61    test(S(""), "abcdefghij", -10);
62    test(S(""), "abcdefghijklmnopqrst", -20);
63    test(S("abcde"), "", 5);
64    test(S("abcde"), "abcde", 0);
65    test(S("abcde"), "abcdefghij", -5);
66    test(S("abcde"), "abcdefghijklmnopqrst", -15);
67    test(S("abcdefghij"), "", 10);
68    test(S("abcdefghij"), "abcde", 5);
69    test(S("abcdefghij"), "abcdefghij", 0);
70    test(S("abcdefghij"), "abcdefghijklmnopqrst", -10);
71    test(S("abcdefghijklmnopqrst"), "", 20);
72    test(S("abcdefghijklmnopqrst"), "abcde", 15);
73    test(S("abcdefghijklmnopqrst"), "abcdefghij", 10);
74    test(S("abcdefghijklmnopqrst"), "abcdefghijklmnopqrst", 0);
75    }
76#endif
77}
78