15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <locale>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// template <class charT> class collate;
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// int compare(const charT* low1, const charT* high1,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//             const charT* low2, const charT* high2) const;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <locale>
18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <cassert>
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)int main()
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::locale l = std::locale::classic();
237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        const char ia[] = "1234";
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        const unsigned sa = sizeof(ia)/sizeof(ia[0]);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const char ib[] = "123";
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ia, ia+sa, ib, ib+2) == 1);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ib, ib+2, ia, ia+sa) == -1);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ia, ia+sa, ib, ib+3) == 1);
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        assert(f.compare(ib, ib+3, ia, ia+sa) == -1);
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        assert(f.compare(ia, ia+sa, ib+1, ib+3) == -1);
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert(f.compare(ib+1, ib+3, ia, ia+sa) == 1);
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        assert(f.compare(ia, ia+3, ib, ib+3) == 0);
359ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch    }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const wchar_t ia[] = L"1234";
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        const unsigned sa = sizeof(ia)/sizeof(ia[0]);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        const wchar_t ib[] = L"123";
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ia, ia+sa, ib, ib+2) == 1);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ib, ib+2, ia, ia+sa) == -1);
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        assert(f.compare(ia, ia+sa, ib, ib+3) == 1);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ib, ib+3, ia, ia+sa) == -1);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ia, ia+sa, ib+1, ib+3) == -1);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        assert(f.compare(ib+1, ib+3, ia, ia+sa) == 1);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(f.compare(ia, ia+3, ib, ib+3) == 0);
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)