// { dg-require-namedlocale "de_DE" } // 2001-08-15 Benjamin Kosnik // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 // Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . // 22.2.4.2 Template class collate_byname #include #include #include void test01() { using namespace std; typedef std::collate::string_type string_type; bool test __attribute__((unused)) = true; string str; locale loc_c = locale::classic(); locale loc_de = locale("de_DE"); str = loc_de.name(); locale loc_byname(locale::classic(), new collate_byname("de_DE")); str = loc_byname.name(); VERIFY( loc_de != loc_byname ); // cache the collate facets const collate& coll_de = use_facet >(loc_de); // Check German "de_DE" locale. int i1; int i2; long l1; long l2; const char* strlit3 = "Äuglein Augment"; // "C" == "Augment Äuglein" const char* strlit4 = "Base baß Baß Bast"; // "C" == "Base baß Baß Bast" int size3 = strlen(strlit3) - 1; i1 = coll_de.compare(strlit3, strlit3 + size3, strlit3, strlit3 + 7); VERIFY ( i1 == 1 ); i1 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + size3); VERIFY ( i1 == -1 ); i1 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + 7); VERIFY ( i1 == 0 ); i1 = coll_de.compare(strlit3, strlit3 + 6, strlit3 + 8, strlit3 + 14); VERIFY ( i1 == -1 ); int size4 = strlen(strlit4) - 1; i2 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + 13); VERIFY ( i2 == 1 ); i2 = coll_de.compare(strlit4, strlit4 + 13, strlit4, strlit4 + size4); VERIFY ( i2 == -1 ); i2 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + size4); VERIFY ( i2 == 0 ); l1 = coll_de.hash(strlit3, strlit3 + size3); l2 = coll_de.hash(strlit3, strlit3 + size3 - 1); VERIFY ( l1 != l2 ); l1 = coll_de.hash(strlit3, strlit3 + size3); l2 = coll_de.hash(strlit4, strlit4 + size4); VERIFY ( l1 != l2 ); string str3 = coll_de.transform(strlit3, strlit3 + size3); string str4 = coll_de.transform(strlit4, strlit4 + size4); i1 = str3.compare(str4); i2 = coll_de.compare(strlit3, strlit3 + size3, strlit4, strlit4 + size4); VERIFY ( i2 == -1 ); VERIFY ( i1 * i2 > 0 ); // Check byname locale int i3; int i4; long l3; long l4; size4 = strlen(strlit3) - 1; i3 = coll_de.compare(strlit3, strlit3 + size4, strlit3, strlit3 + 7); VERIFY ( i3 == 1 ); i3 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + size4); VERIFY ( i3 == -1 ); i3 = coll_de.compare(strlit3, strlit3 + 7, strlit3, strlit3 + 7); VERIFY ( i3 == 0 ); i3 = coll_de.compare(strlit3, strlit3 + 6, strlit3 + 8, strlit3 + 14); VERIFY ( i3 == -1 ); size4 = strlen(strlit4) - 1; i4 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + 13); VERIFY ( i4 == 1 ); i4 = coll_de.compare(strlit4, strlit4 + 13, strlit4, strlit4 + size4); VERIFY ( i4 == -1 ); i4 = coll_de.compare(strlit4, strlit4 + size4, strlit4, strlit4 + size4); VERIFY ( i4 == 0 ); l3 = coll_de.hash(strlit3, strlit3 + size4); l4 = coll_de.hash(strlit3, strlit3 + size4 - 1); VERIFY ( l3 != l4 ); l3 = coll_de.hash(strlit3, strlit3 + size4); l4 = coll_de.hash(strlit4, strlit4 + size4); VERIFY ( l3 != l4 ); string str5 = coll_de.transform(strlit3, strlit3 + size3); string str6 = coll_de.transform(strlit4, strlit4 + size4); i3 = str5.compare(str6); i4 = coll_de.compare(strlit3, strlit3 + size4, strlit4, strlit4 + size4); VERIFY ( i4 == -1 ); VERIFY ( i3 * i4 > 0 ); // Verify byname == de VERIFY ( str5 == str3 ); VERIFY ( str6 == str4 ); } int main() { test01(); return 0; }