1 // { dg-require-namedlocale "en_US.ISO8859-1" }
2 // { dg-require-namedlocale "fr_FR.ISO8859-15" }
3 // { dg-require-namedlocale "de_DE.ISO8859-15" }
4 
5 // 2001-08-15 Benjamin Kosnik  <bkoz@redhat.com>
6 
7 // Copyright (C) 2001-2018 Free Software Foundation, Inc.
8 //
9 // This file is part of the GNU ISO C++ Library.  This library is free
10 // software; you can redistribute it and/or modify it under the
11 // terms of the GNU General Public License as published by the
12 // Free Software Foundation; either version 3, or (at your option)
13 // any later version.
14 
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 // GNU General Public License for more details.
19 
20 // You should have received a copy of the GNU General Public License along
21 // with this library; see the file COPYING3.  If not see
22 // <http://www.gnu.org/licenses/>.
23 
24 // 22.2.4.1.1 collate members
25 
26 #include <locale>
27 #include <testsuite_hooks.h>
28 
29 // Check German "de_DE.ISO8859-15" locale.
test02()30 void test02()
31 {
32   using namespace std;
33   typedef std::collate<char>::string_type string_type;
34 
35   // basic construction
36   locale loc_c = locale::classic();
37   locale loc_us = locale(ISO_8859(1,en_US));
38   locale loc_fr = locale(ISO_8859(15,fr_FR));
39   locale loc_de = locale(ISO_8859(15,de_DE));
40   VERIFY( loc_c != loc_de );
41   VERIFY( loc_us != loc_fr );
42   VERIFY( loc_us != loc_de );
43   VERIFY( loc_de != loc_fr );
44 
45   // cache the collate facets
46   const collate<char>& coll_de = use_facet<collate<char> >(loc_de);
47 
48   // long hash(const charT*, const charT*) cosnt
49   const char* strlit3 = "�uglein Augment"; // "C" == "Augment �uglein"
50   const char* strlit4 = "Base ba� Ba� Bast"; // "C" == "Base ba� Ba� Bast"
51 
52   long l1;
53   long l2;
54   int size3 = char_traits<char>::length(strlit4) - 1;
55   int size4 = char_traits<char>::length(strlit3) - 1;
56 
57   l1 = coll_de.hash(strlit3, strlit3 + size3);
58   l2 = coll_de.hash(strlit3, strlit3 + size3 - 1);
59   VERIFY ( l1 != l2 );
60   l1 = coll_de.hash(strlit3, strlit3 + size3);
61   l2 = coll_de.hash(strlit4, strlit4 + size4);
62   VERIFY ( l1 != l2 );
63 }
64 
main()65 int main()
66 {
67   test02();
68   return 0;
69 }
70