Home | History | Annotate | Download | only in locale.collate.byname
      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_byname
     13 
     14 // int compare(const charT* low1, const charT* high1,
     15 //             const charT* low2, const charT* high2) const;
     16 
     17 //  I'm currently unable to confirm that collation based on named locales
     18 //     has any difference from "C" collation.  But I do believe I'm picking
     19 //     up the OS's collation files.
     20 
     21 #include <locale>
     22 #include <string>
     23 #include <cassert>
     24 
     25 #include <stdio.h>
     26 
     27 #include "platform_support.h" // locale name macros
     28 
     29 int main()
     30 {
     31     {
     32         std::locale l(LOCALE_en_US_UTF_8);
     33         {
     34             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
     35             std::string s2("aaaaaaA");
     36             std::string s3("BaaaaaA");
     37             assert(f.compare(s2.data(), s2.data() + s2.size(),
     38                              s3.data(), s3.data() + s3.size()) == 1);
     39         }
     40         {
     41             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
     42             std::wstring s2(L"aaaaaaA");
     43             std::wstring s3(L"BaaaaaA");
     44             assert(f.compare(s2.data(), s2.data() + s2.size(),
     45                              s3.data(), s3.data() + s3.size()) == 1);
     46         }
     47     }
     48     {
     49         std::locale l("");
     50         {
     51             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
     52             std::string s2("aaaaaaA");
     53             std::string s3("BaaaaaA");
     54             assert(f.compare(s2.data(), s2.data() + s2.size(),
     55                              s3.data(), s3.data() + s3.size()) == 1);
     56         }
     57         {
     58             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
     59             std::wstring s2(L"aaaaaaA");
     60             std::wstring s3(L"BaaaaaA");
     61             assert(f.compare(s2.data(), s2.data() + s2.size(),
     62                              s3.data(), s3.data() + s3.size()) == 1);
     63         }
     64     }
     65     {
     66         std::locale l("C");
     67         {
     68             const std::collate<char>& f = std::use_facet<std::collate<char> >(l);
     69             std::string s2("aaaaaaA");
     70             std::string s3("BaaaaaA");
     71             assert(f.compare(s2.data(), s2.data() + s2.size(),
     72                              s3.data(), s3.data() + s3.size()) == 1);
     73         }
     74         {
     75             const std::collate<wchar_t>& f = std::use_facet<std::collate<wchar_t> >(l);
     76             std::wstring s2(L"aaaaaaA");
     77             std::wstring s3(L"BaaaaaA");
     78             assert(f.compare(s2.data(), s2.data() + s2.size(),
     79                              s3.data(), s3.data() + s3.size()) == 1);
     80         }
     81     }
     82 }
     83