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 // <locale>
11 
12 // template <class charT> class collate;
13 
14 // int compare(const charT* low1, const charT* high1,
15 //             const charT* low2, const charT* high2) const;
16 
17 #include <locale>
18 #include <cassert>
19 
20 int main()
21 {
22     std::locale l = std::locale::classic();
23     {
24         const char ia[] = "1234";
25         const unsigned sa = sizeof(ia)/sizeof(ia[0]);
26         const char ib[] = "123";
27         const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
28         assert(f.compare(ia, ia+sa, ib, ib+2) == 1);
29         assert(f.compare(ib, ib+2, ia, ia+sa) == -1);
30         assert(f.compare(ia, ia+sa, ib, ib+3) == 1);
31         assert(f.compare(ib, ib+3, ia, ia+sa) == -1);
32         assert(f.compare(ia, ia+sa, ib+1, ib+3) == -1);
33         assert(f.compare(ib+1, ib+3, ia, ia+sa) == 1);
34         assert(f.compare(ia, ia+3, ib, ib+3) == 0);
35     }
36     {
37         const wchar_t ia[] = L"1234";
38         const unsigned sa = sizeof(ia)/sizeof(ia[0]);
39         const wchar_t ib[] = L"123";
40         const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
41         assert(f.compare(ia, ia+sa, ib, ib+2) == 1);
42         assert(f.compare(ib, ib+2, ia, ia+sa) == -1);
43         assert(f.compare(ia, ia+sa, ib, ib+3) == 1);
44         assert(f.compare(ib, ib+3, ia, ia+sa) == -1);
45         assert(f.compare(ia, ia+sa, ib+1, ib+3) == -1);
46         assert(f.compare(ib+1, ib+3, ia, ia+sa) == 1);
47         assert(f.compare(ia, ia+3, ib, ib+3) == 0);
48     }
49 }
50