123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- //
- // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- #ifndef BOOST_LOCALE_WITH_ICU
- #include <iostream>
- int main()
- {
- std::cout << "ICU is not build... Skipping" << std::endl;
- }
- #else
- #include <boost/locale/collator.hpp>
- #include <boost/locale/generator.hpp>
- #include <iomanip>
- #include "test_locale.hpp"
- template<typename Char>
- void test_comp(std::locale l,std::basic_string<Char> left,std::basic_string<Char> right,int ilevel,int expected)
- {
- typedef std::basic_string<Char> string_type;
- boost::locale::collator_base::level_type level = static_cast<boost::locale::collator_base::level_type>(ilevel);
- TEST(boost::locale::comparator<Char>(l,level)(left,right) == (expected < 0));
- if(ilevel==4) {
- std::collate<Char> const &coll=std::use_facet<std::collate<Char> >(l);
- string_type lt=coll.transform(left.c_str(),left.c_str()+left.size());
- string_type rt=coll.transform(right.c_str(),right.c_str()+right.size());
- if(expected < 0)
- TEST(lt<rt);
- else if(expected == 0) {
- TEST(lt==rt);
- }
- else
- TEST(lt > rt);
- long lh=coll.hash(left.c_str(),left.c_str()+left.size());
- long rh=coll.hash(right.c_str(),right.c_str()+right.size());
- if(expected == 0)
- TEST(lh==rh);
- else
- TEST(lh!=rh);
- }
- boost::locale::collator<Char> const &coll=std::use_facet<boost::locale::collator<Char> >(l);
- string_type lt=coll.transform(level,left.c_str(),left.c_str()+left.size());
- TEST(lt==coll.transform(level,left));
- string_type rt=coll.transform(level,right.c_str(),right.c_str()+right.size());
- TEST(rt==coll.transform(level,right));
- if(expected < 0)
- TEST(lt<rt);
- else if(expected == 0)
- TEST(lt==rt);
- else
- TEST(lt > rt);
- long lh=coll.hash(level,left.c_str(),left.c_str()+left.size());
- TEST(lh==coll.hash(level,left));
- long rh=coll.hash(level,right.c_str(),right.c_str()+right.size());
- TEST(rh==coll.hash(level,right));
- if(expected == 0)
- TEST(lh==rh);
- else
- TEST(lh!=rh);
- }
-
- #define TEST_COMP(c,_l,_r) test_comp<c>(l,_l,_r,level,expected)
- void compare(std::string left,std::string right,int level,int expected)
- {
- boost::locale::generator gen;
- std::locale l=gen("en_US.UTF-8");
- if(level == 4)
- TEST(l(left,right) == (expected < 0));
- TEST_COMP(char,left,right);
- TEST_COMP(wchar_t,to<wchar_t>(left),to<wchar_t>(right));
- #ifdef BOOST_LOCALE_ENABLE_CHAR16_T
- TEST_COMP(char16_t,to<char16_t>(left),to<char16_t>(right));
- #endif
- #ifdef BOOST_LOCALE_ENABLE_CHAR32_T
- TEST_COMP(char32_t,to<char32_t>(left),to<char32_t>(right));
- #endif
- l=gen("en_US.ISO8859-1");
- if(level == 4)
- TEST(l(to<char>(left),to<char>(right)) == (expected < 0));
- TEST_COMP(char,to<char>(left),to<char>(right));
- }
- void test_collate()
- {
- int
- primary = 0,
- secondary = 1,
- tertiary = 2,
- quaternary = 3,
- identical = 4;
- int le = -1,gt = 1,eq = 0;
- compare("a","A",primary,eq);
- compare("a","A",secondary,eq);
- compare("A","a",tertiary,gt);
- compare("a","A",tertiary,le);
- compare("a","A",quaternary,le);
- compare("A","a",quaternary,gt);
- compare("a","A",identical,le);
- compare("A","a",identical,gt);
- compare("a","ä",primary,eq); // a , ä
- compare("a","ä",secondary,le); // a , ä
- compare("ä","a",secondary,gt); // a , ä
- compare("a","ä",quaternary,le); // a , ä
- compare("ä","a",quaternary,gt); // a , ä
- compare("a","ä",identical,le); // a , ä
- compare("ä","a",identical,gt); // a , ä
- }
- int main()
- {
- try {
- test_collate();
- }
- catch(std::exception const &e) {
- std::cerr << "Failed " << e.what() << std::endl;
- return EXIT_FAILURE;
- }
- FINALIZE();
- }
- #endif // NOICU
- // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
- // boostinspect:noascii
|