text: 
  // Warning! This file is autogenerated.
  #include <boost/text/collation_table.hpp>
  #include <boost/text/collate.hpp>
  #include <boost/text/data/all.hpp>
  
  #ifndef LIMIT_TESTING_FOR_CI
  #include <boost/text/save_load_table.hpp>
  
  #include <boost/filesystem.hpp>
  #endif
  
  #include <gtest/gtest.h>
  
  using namespace boost::text;
  
  auto const error = [](string const & s) { std::cout << s; };
  auto const warning = [](string const & s) {};
  
  collation_table make_save_load_table()
  {
  #ifdef LIMIT_TESTING_FOR_CI
      string const table_str(data::zh::pinyin_collation_tailoring());
      return tailored_collation_table(
          table_str,
          "zh::pinyin_collation_tailoring()", error, warning);
  #else
      if (!exists(boost::filesystem::path("zh_pinyin.table"))) {
          string const table_str(data::zh::pinyin_collation_tailoring());
          collation_table table = tailored_collation_table(
              table_str,
              "zh::pinyin_collation_tailoring()", error, warning);
          save_table(table, "zh_pinyin.table.8");
          boost::filesystem::rename("zh_pinyin.table.8", "zh_pinyin.table");
      }
      return load_table("zh_pinyin.table");
  #endif
  }
  collation_table const & table()
  {
      static collation_table retval = make_save_load_table();
      return retval;
  }
  TEST(tailoring, zh_pinyin_007_000)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eab);
      auto const rel = std::vector<uint32_t>(1, 0x79d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79d9);
      auto const rel = std::vector<uint32_t>(1, 0x8db6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8db6);
      auto const rel = std::vector<uint32_t>(1, 0x7105);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7105);
      auto const rel = std::vector<uint32_t>(1, 0x88b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88b4);
      auto const rel = std::vector<uint32_t>(1, 0x55be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55be);
      auto const rel = std::vector<uint32_t>(1, 0x7d5d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d5d);
      auto const rel = std::vector<uint32_t>(1, 0x88e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88e4);
      auto const rel = std::vector<uint32_t>(1, 0x7614);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7614);
      auto const rel = std::vector<uint32_t>(1, 0x9177);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9177);
      auto const rel = std::vector<uint32_t>(1, 0x5ee4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ee4);
      auto const rel = std::vector<uint32_t>(1, 0x8932);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8932);
      auto const rel = std::vector<uint32_t>(1, 0x56b3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56b3);
      auto const rel = std::vector<uint32_t>(1, 0x5938);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5938);
      auto const rel = std::vector<uint32_t>(1, 0x59f1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x59f1);
      auto const rel = std::vector<uint32_t>(1, 0x823f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x823f);
      auto const rel = std::vector<uint32_t>(1, 0x8a87);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a87);
      auto const rel = std::vector<uint32_t>(1, 0x4f89);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4f89);
      auto const rel = std::vector<uint32_t>(1, 0x54b5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54b5);
      auto const rel = std::vector<uint32_t>(1, 0x57ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57ae);
      auto const rel = std::vector<uint32_t>(1, 0x9299);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9299);
      auto const rel = std::vector<uint32_t>(1, 0x630e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x630e);
      auto const rel = std::vector<uint32_t>(1, 0x80ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80ef);
      auto const rel = std::vector<uint32_t>(1, 0x8de8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8de8);
      auto const rel = std::vector<uint32_t>(1, 0x9abb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9abb);
      auto const rel = std::vector<uint32_t>(1, 0x84af);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84af);
      auto const rel = std::vector<uint32_t>(1, 0x64d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x64d3);
      auto const rel = std::vector<uint32_t>(1, 0x5ddc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ddc);
      auto const rel = std::vector<uint32_t>(1, 0x51f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51f7);
      auto const rel = std::vector<uint32_t>(1, 0x5726);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5726);
      auto const rel = std::vector<uint32_t>(1, 0x5757);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5757);
      auto const rel = std::vector<uint32_t>(1, 0x5feb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5feb);
      auto const rel = std::vector<uint32_t>(1, 0x4fa9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fa9);
      auto const rel = std::vector<uint32_t>(1, 0x90d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d0);
      auto const rel = std::vector<uint32_t>(1, 0x54d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54d9);
      auto const rel = std::vector<uint32_t>(1, 0x72ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72ef);
      auto const rel = std::vector<uint32_t>(1, 0x810d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x810d);
      auto const rel = std::vector<uint32_t>(1, 0x584a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x584a);
      auto const rel = std::vector<uint32_t>(1, 0x7b77);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b77);
      auto const rel = std::vector<uint32_t>(1, 0x9c99);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c99);
      auto const rel = std::vector<uint32_t>(1, 0x5108);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5108);
      auto const rel = std::vector<uint32_t>(1, 0x58a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58a4);
      auto const rel = std::vector<uint32_t>(1, 0x9136);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9136);
      auto const rel = std::vector<uint32_t>(1, 0x5672);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5672);
      auto const rel = std::vector<uint32_t>(1, 0x5ee5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ee5);
      auto const rel = std::vector<uint32_t>(1, 0x736a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x736a);
      auto const rel = std::vector<uint32_t>(1, 0x81be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81be);
      auto const rel = std::vector<uint32_t>(1, 0x65dd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65dd);
      auto const rel = std::vector<uint32_t>(1, 0x7ce9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ce9);
      auto const rel = std::vector<uint32_t>(1, 0x9c60);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c60);
      auto const rel = std::vector<uint32_t>(1, 0x5bbd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bbd);
      auto const rel = std::vector<uint32_t>(1, 0x5bdb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_001)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bdb);
      auto const rel = std::vector<uint32_t>(1, 0x5bec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bec);
      auto const rel = std::vector<uint32_t>(1, 0x81d7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81d7);
      auto const rel = std::vector<uint32_t>(1, 0x9acb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9acb);
      auto const rel = std::vector<uint32_t>(1, 0x9467);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9467);
      auto const rel = std::vector<uint32_t>(1, 0x9ad6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ad6);
      auto const rel = std::vector<uint32_t>(1, 0x6b35);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b35);
      auto const rel = std::vector<uint32_t>(1, 0x6b3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b3e);
      auto const rel = std::vector<uint32_t>(1, 0x6b40);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b40);
      auto const rel = std::vector<uint32_t>(1, 0x7abd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7abd);
      auto const rel = std::vector<uint32_t>(1, 0x7abe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7abe);
      auto const rel = std::vector<uint32_t>(1, 0x5321);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5321);
      auto const rel = std::vector<uint32_t>(1, 0x52bb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52bb);
      auto const rel = std::vector<uint32_t>(1, 0x8bd3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8bd3);
      auto const rel = std::vector<uint32_t>(1, 0x90bc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90bc);
      auto const rel = std::vector<uint32_t>(1, 0x5329);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5329);
      auto const rel = std::vector<uint32_t>(1, 0x54d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54d0);
      auto const rel = std::vector<uint32_t>(1, 0x6047);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6047);
      auto const rel = std::vector<uint32_t>(1, 0x6d2d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d2d);
      auto const rel = std::vector<uint32_t>(1, 0x6846);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6846);
      auto const rel = std::vector<uint32_t>(1, 0x7844);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7844);
      auto const rel = std::vector<uint32_t>(1, 0x7b50);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b50);
      auto const rel = std::vector<uint32_t>(1, 0x7b7a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b7a);
      auto const rel = std::vector<uint32_t>(1, 0x8a86);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a86);
      auto const rel = std::vector<uint32_t>(1, 0x8eed);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8eed);
      auto const rel = std::vector<uint32_t>(1, 0x5ff9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ff9);
      auto const rel = std::vector<uint32_t>(1, 0x6282);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6282);
      auto const rel = std::vector<uint32_t>(1, 0x72c2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72c2);
      auto const rel = std::vector<uint32_t>(1, 0x72c5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72c5);
      auto const rel = std::vector<uint32_t>(1, 0x8bf3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8bf3);
      auto const rel = std::vector<uint32_t>(1, 0x8ed6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ed6);
      auto const rel = std::vector<uint32_t>(1, 0x8ee0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ee0);
      auto const rel = std::vector<uint32_t>(1, 0x8a91);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a91);
      auto const rel = std::vector<uint32_t>(1, 0x9d5f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d5f);
      auto const rel = std::vector<uint32_t>(1, 0x593c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x593c);
      auto const rel = std::vector<uint32_t>(1, 0x5123);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5123);
      auto const rel = std::vector<uint32_t>(1, 0x61ed);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61ed);
      auto const rel = std::vector<uint32_t>(1, 0x535d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x535d);
      auto const rel = std::vector<uint32_t>(1, 0x909d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x909d);
      auto const rel = std::vector<uint32_t>(1, 0x5739);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5739);
      auto const rel = std::vector<uint32_t>(1, 0x7ea9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ea9);
      auto const rel = std::vector<uint32_t>(1, 0x51b5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51b5);
      auto const rel = std::vector<uint32_t>(1, 0x65f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65f7);
      auto const rel = std::vector<uint32_t>(1, 0x5cb2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5cb2);
      auto const rel = std::vector<uint32_t>(1, 0x6cc1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6cc1);
      auto const rel = std::vector<uint32_t>(1, 0x77ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x77ff);
      auto const rel = std::vector<uint32_t>(1, 0x663f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x663f);
      auto const rel = std::vector<uint32_t>(1, 0x8d36);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d36);
      auto const rel = std::vector<uint32_t>(1, 0x7716);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7716);
      auto const rel = std::vector<uint32_t>(1, 0x783f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x783f);
      auto const rel = std::vector<uint32_t>(1, 0x7736);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7736);
      auto const rel = std::vector<uint32_t>(1, 0x7d4b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_002)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d4b);
      auto const rel = std::vector<uint32_t>(1, 0x7d56);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d56);
      auto const rel = std::vector<uint32_t>(1, 0x8cba);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8cba);
      auto const rel = std::vector<uint32_t>(1, 0x8ee6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ee6);
      auto const rel = std::vector<uint32_t>(1, 0x9271);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9271);
      auto const rel = std::vector<uint32_t>(1, 0x92db);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x92db);
      auto const rel = std::vector<uint32_t>(1, 0x913a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x913a);
      auto const rel = std::vector<uint32_t>(1, 0x58d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58d9);
      auto const rel = std::vector<uint32_t>(1, 0x9ecb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ecb);
      auto const rel = std::vector<uint32_t>(1, 0x61ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61ec);
      auto const rel = std::vector<uint32_t>(1, 0x66e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x66e0);
      auto const rel = std::vector<uint32_t>(1, 0x720c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x720c);
      auto const rel = std::vector<uint32_t>(1, 0x77cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x77cc);
      auto const rel = std::vector<uint32_t>(1, 0x7926);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7926);
      auto const rel = std::vector<uint32_t>(1, 0x7a6c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a6c);
      auto const rel = std::vector<uint32_t>(1, 0x7e8a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e8a);
      auto const rel = std::vector<uint32_t>(1, 0x945b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x945b);
      auto const rel = std::vector<uint32_t>(1, 0x4e8f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e8f);
      auto const rel = std::vector<uint32_t>(1, 0x5232);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5232);
      auto const rel = std::vector<uint32_t>(1, 0x5cbf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5cbf);
      auto const rel = std::vector<uint32_t>(1, 0x609d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x609d);
      auto const rel = std::vector<uint32_t>(1, 0x76d4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x76d4);
      auto const rel = std::vector<uint32_t>(1, 0x7aa5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7aa5);
      auto const rel = std::vector<uint32_t>(1, 0x8067);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8067);
      auto const rel = std::vector<uint32_t>(1, 0x7aba);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7aba);
      auto const rel = std::vector<uint32_t>(1, 0x8667);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8667);
      auto const rel = std::vector<uint32_t>(1, 0x985d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x985d);
      auto const rel = std::vector<uint32_t>(1, 0x95da);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95da);
      auto const rel = std::vector<uint32_t>(1, 0x5dcb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5dcb);
      auto const rel = std::vector<uint32_t>(1, 0x862c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x862c);
      auto const rel = std::vector<uint32_t>(1, 0x594e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x594e);
      auto const rel = std::vector<uint32_t>(1, 0x6646);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6646);
      auto const rel = std::vector<uint32_t>(1, 0x9035);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9035);
      auto const rel = std::vector<uint32_t>(1, 0x9108);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9108);
      auto const rel = std::vector<uint32_t>(1, 0x9697);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9697);
      auto const rel = std::vector<uint32_t>(1, 0x9804);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9804);
      auto const rel = std::vector<uint32_t>(1, 0x9997);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9997);
      auto const rel = std::vector<uint32_t>(1, 0x55b9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55b9);
      auto const rel = std::vector<uint32_t>(1, 0x63c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c6);
      auto const rel = std::vector<uint32_t>(1, 0x8475);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8475);
      auto const rel = std::vector<uint32_t>(1, 0x9a99);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a99);
      auto const rel = std::vector<uint32_t>(1, 0x6223);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6223);
      auto const rel = std::vector<uint32_t>(1, 0x668c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x668c);
      auto const rel = std::vector<uint32_t>(1, 0x694f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x694f);
      auto const rel = std::vector<uint32_t>(1, 0x6951);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6951);
      auto const rel = std::vector<uint32_t>(1, 0x9b41);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b41);
      auto const rel = std::vector<uint32_t>(1, 0x777d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x777d);
      auto const rel = std::vector<uint32_t>(1, 0x8770);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8770);
      auto const rel = std::vector<uint32_t>(1, 0x982f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x982f);
      auto const rel = std::vector<uint32_t>(1, 0x6ac6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ac6);
      auto const rel = std::vector<uint32_t>(1, 0x85c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85c8);
      auto const rel = std::vector<uint32_t>(1, 0x9368);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_003)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9368);
      auto const rel = std::vector<uint32_t>(1, 0x9377);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9377);
      auto const rel = std::vector<uint32_t>(1, 0x9a24);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a24);
      auto const rel = std::vector<uint32_t>(1, 0x5914);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5914);
      auto const rel = std::vector<uint32_t>(1, 0x8637);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8637);
      auto const rel = std::vector<uint32_t>(1, 0x5dd9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5dd9);
      auto const rel = std::vector<uint32_t>(1, 0x8641);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8641);
      auto const rel = std::vector<uint32_t>(1, 0x72aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72aa);
      auto const rel = std::vector<uint32_t>(1, 0x8ea8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ea8);
      auto const rel = std::vector<uint32_t>(1, 0x7143);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7143);
      auto const rel = std::vector<uint32_t>(1, 0x8dec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dec);
      auto const rel = std::vector<uint32_t>(1, 0x980d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x980d);
      auto const rel = std::vector<uint32_t>(1, 0x8e5e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e5e);
      auto const rel = std::vector<uint32_t>(1, 0x5c2f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c2f);
      auto const rel = std::vector<uint32_t>(1, 0x532e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x532e);
      auto const rel = std::vector<uint32_t>(1, 0x6b33);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b33);
      auto const rel = std::vector<uint32_t>(1, 0x559f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x559f);
      auto const rel = std::vector<uint32_t>(1, 0x5abf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5abf);
      auto const rel = std::vector<uint32_t>(1, 0x6126);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6126);
      auto const rel = std::vector<uint32_t>(1, 0x6127);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6127);
      auto const rel = std::vector<uint32_t>(1, 0x6e83);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e83);
      auto const rel = std::vector<uint32_t>(1, 0x8143);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8143);
      auto const rel = std::vector<uint32_t>(1, 0x8489);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8489);
      auto const rel = std::vector<uint32_t>(1, 0x9988);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9988);
      auto const rel = std::vector<uint32_t>(1, 0x7786);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7786);
      auto const rel = std::vector<uint32_t>(1, 0x5633);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5633);
      auto const rel = std::vector<uint32_t>(1, 0x5b07);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b07);
      auto const rel = std::vector<uint32_t>(1, 0x6192);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6192);
      auto const rel = std::vector<uint32_t>(1, 0x6f70);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f70);
      auto const rel = std::vector<uint32_t>(1, 0x7bd1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7bd1);
      auto const rel = std::vector<uint32_t>(1, 0x8069);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8069);
      auto const rel = std::vector<uint32_t>(1, 0x806d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x806d);
      auto const rel = std::vector<uint32_t>(1, 0x8562);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8562);
      auto const rel = std::vector<uint32_t>(1, 0x6a3b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a3b);
      auto const rel = std::vector<uint32_t>(1, 0x8b09);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b09);
      auto const rel = std::vector<uint32_t>(1, 0x993d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x993d);
      auto const rel = std::vector<uint32_t>(1, 0x7c23);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c23);
      auto const rel = std::vector<uint32_t>(1, 0x8075);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8075);
      auto const rel = std::vector<uint32_t>(1, 0x7c44);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c44);
      auto const rel = std::vector<uint32_t>(1, 0x9400);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9400);
      auto const rel = std::vector<uint32_t>(1, 0x994b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x994b);
      auto const rel = std::vector<uint32_t>(1, 0x944e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x944e);
      auto const rel = std::vector<uint32_t>(1, 0x5764);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5764);
      auto const rel = std::vector<uint32_t>(1, 0x6606);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6606);
      auto const rel = std::vector<uint32_t>(1, 0x5803);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5803);
      auto const rel = std::vector<uint32_t>(1, 0x5812);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5812);
      auto const rel = std::vector<uint32_t>(1, 0x5a6b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a6b);
      auto const rel = std::vector<uint32_t>(1, 0x5d10);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d10);
      auto const rel = std::vector<uint32_t>(1, 0x5d11);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d11);
      auto const rel = std::vector<uint32_t>(1, 0x665c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x665c);
      auto const rel = std::vector<uint32_t>(1, 0x7311);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7311);
      auto const rel = std::vector<uint32_t>(1, 0x83ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_004)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83ce);
      auto const rel = std::vector<uint32_t>(1, 0x88c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88c8);
      auto const rel = std::vector<uint32_t>(1, 0x711c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x711c);
      auto const rel = std::vector<uint32_t>(1, 0x7428);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7428);
      auto const rel = std::vector<uint32_t>(1, 0x9ae0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ae0);
      auto const rel = std::vector<uint32_t>(1, 0x88e9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88e9);
      auto const rel = std::vector<uint32_t>(1, 0x8c87);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c87);
      auto const rel = std::vector<uint32_t>(1, 0x951f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x951f);
      auto const rel = std::vector<uint32_t>(1, 0x9ae1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ae1);
      auto const rel = std::vector<uint32_t>(1, 0x9e4d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e4d);
      auto const rel = std::vector<uint32_t>(1, 0x6f49);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f49);
      auto const rel = std::vector<uint32_t>(1, 0x872b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x872b);
      auto const rel = std::vector<uint32_t>(1, 0x890c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x890c);
      auto const rel = std::vector<uint32_t>(1, 0x9ae8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ae8);
      auto const rel = std::vector<uint32_t>(1, 0x71b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x71b4);
      auto const rel = std::vector<uint32_t>(1, 0x747b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x747b);
      auto const rel = std::vector<uint32_t>(1, 0x918c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x918c);
      auto const rel = std::vector<uint32_t>(1, 0x9315);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9315);
      auto const rel = std::vector<uint32_t>(1, 0x9cb2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9cb2);
      auto const rel = std::vector<uint32_t>(1, 0x9a09);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a09);
      auto const rel = std::vector<uint32_t>(1, 0x9be4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9be4);
      auto const rel = std::vector<uint32_t>(1, 0x9d7e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d7e);
      auto const rel = std::vector<uint32_t>(1, 0x9da4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9da4);
      auto const rel = std::vector<uint32_t>(1, 0x6083);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6083);
      auto const rel = std::vector<uint32_t>(1, 0x6346);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6346);
      auto const rel = std::vector<uint32_t>(1, 0x9603);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9603);
      auto const rel = std::vector<uint32_t>(1, 0x58f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58f8);
      auto const rel = std::vector<uint32_t>(1, 0x68b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68b1);
      auto const rel = std::vector<uint32_t>(1, 0x7975);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7975);
      auto const rel = std::vector<uint32_t>(1, 0x7871);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7871);
      auto const rel = std::vector<uint32_t>(1, 0x7a07);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a07);
      auto const rel = std::vector<uint32_t>(1, 0x88cd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88cd);
      auto const rel = std::vector<uint32_t>(1, 0x58fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58fc);
      auto const rel = std::vector<uint32_t>(1, 0x7a1b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a1b);
      auto const rel = std::vector<uint32_t>(1, 0x7d91);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d91);
      auto const rel = std::vector<uint32_t>(1, 0x95ab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95ab);
      auto const rel = std::vector<uint32_t>(1, 0x95b8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95b8);
      auto const rel = std::vector<uint32_t>(1, 0x56f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56f0);
      auto const rel = std::vector<uint32_t>(1, 0x6d83);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d83);
      auto const rel = std::vector<uint32_t>(1, 0x774f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x774f);
      auto const rel = std::vector<uint32_t>(1, 0x5c21);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c21);
      auto const rel = std::vector<uint32_t>(1, 0x6269);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6269);
      auto const rel = std::vector<uint32_t>(1, 0x62e1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x62e1);
      auto const rel = std::vector<uint32_t>(1, 0x62ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x62ec);
      auto const rel = std::vector<uint32_t>(1, 0x6304);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6304);
      auto const rel = std::vector<uint32_t>(1, 0x6870);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6870);
      auto const rel = std::vector<uint32_t>(1, 0x7b48);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b48);
      auto const rel = std::vector<uint32_t>(1, 0x843f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x843f);
      auto const rel = std::vector<uint32_t>(1, 0x8440);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8440);
      auto const rel = std::vector<uint32_t>(1, 0x86de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86de);
      auto const rel = std::vector<uint32_t>(1, 0x9614);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9614);
      auto const rel = std::vector<uint32_t>(1, 0x5ed3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_005)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ed3);
      auto const rel = std::vector<uint32_t>(1, 0x9822);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9822);
      auto const rel = std::vector<uint32_t>(1, 0x9afa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9afa);
      auto const rel = std::vector<uint32_t>(1, 0x64f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x64f4);
      auto const rel = std::vector<uint32_t>(1, 0x6ff6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ff6);
      auto const rel = std::vector<uint32_t>(1, 0x95ca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95ca);
      auto const rel = std::vector<uint32_t>(1, 0x979f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x979f);
      auto const rel = std::vector<uint32_t>(1, 0x97d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x97d5);
      auto const rel = std::vector<uint32_t>(1, 0x61d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61d6);
      auto const rel = std::vector<uint32_t>(1, 0x9729);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9729);
      auto const rel = std::vector<uint32_t>(1, 0x97b9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x97b9);
      auto const rel = std::vector<uint32_t>(1, 0x9b20);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b20);
      auto const rel = std::vector<uint32_t>{0xfdd0, 0x004c};
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0xfdd0, 0x004c};
      auto const rel = std::vector<uint32_t>(1, 0x5783);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5783);
      auto const rel = std::vector<uint32_t>(1, 0x62c9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x62c9);
      auto const rel = std::vector<uint32_t>(1, 0x67c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x67c6);
      auto const rel = std::vector<uint32_t>(1, 0x7fcb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fcb);
      auto const rel = std::vector<uint32_t>(1, 0x83c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83c8);
      auto const rel = std::vector<uint32_t>(1, 0x641a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x641a);
      auto const rel = std::vector<uint32_t>(1, 0x908b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x908b);
      auto const rel = std::vector<uint32_t>(1, 0x65ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65ef);
      auto const rel = std::vector<uint32_t>(1, 0x524c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x524c);
      auto const rel = std::vector<uint32_t>(1, 0x782c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x782c);
      auto const rel = std::vector<uint32_t>(1, 0x63e6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63e6);
      auto const rel = std::vector<uint32_t>(1, 0x78d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78d6);
      auto const rel = std::vector<uint32_t>(1, 0x56b9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56b9);
      auto const rel = std::vector<uint32_t>(1, 0x5587);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5587);
      auto const rel = std::vector<uint32_t>(1, 0x85de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85de);
      auto const rel = std::vector<uint32_t>(1, 0x6e82);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e82);
      auto const rel = std::vector<uint32_t>(1, 0x814a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x814a);
      auto const rel = std::vector<uint32_t>(1, 0x63e7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63e7);
      auto const rel = std::vector<uint32_t>(1, 0x694b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x694b);
      auto const rel = std::vector<uint32_t>(1, 0x760c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x760c);
      auto const rel = std::vector<uint32_t>(1, 0x8721);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8721);
      auto const rel = std::vector<uint32_t>(1, 0x874b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x874b);
      auto const rel = std::vector<uint32_t>(1, 0x8fa2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8fa2);
      auto const rel = std::vector<uint32_t>(1, 0x8fa3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8fa3);
      auto const rel = std::vector<uint32_t>(1, 0x8772);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8772);
      auto const rel = std::vector<uint32_t>(1, 0x81c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81c8);
      auto const rel = std::vector<uint32_t>(1, 0x650b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x650b);
      auto const rel = std::vector<uint32_t>(1, 0x7209);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7209);
      auto const rel = std::vector<uint32_t>(1, 0x81d8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81d8);
      auto const rel = std::vector<uint32_t>(1, 0x9b0e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b0e);
      auto const rel = std::vector<uint32_t>(1, 0x74ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74ce);
      auto const rel = std::vector<uint32_t>(1, 0x9574);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9574);
      auto const rel = std::vector<uint32_t>(1, 0x9bfb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9bfb);
      auto const rel = std::vector<uint32_t>(1, 0x881f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x881f);
      auto const rel = std::vector<uint32_t>(1, 0x945e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x945e);
      auto const rel = std::vector<uint32_t>(1, 0x5566);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5566);
      auto const rel = std::vector<uint32_t>(1, 0x97a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x97a1);
      auto const rel = std::vector<uint32_t>(1, 0x6765);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6765);
      auto const rel = std::vector<uint32_t>(1, 0x4f86);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_006)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4f86);
      auto const rel = std::vector<uint32_t>(1, 0x4feb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4feb);
      auto const rel = std::vector<uint32_t>(1, 0x5008);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5008);
      auto const rel = std::vector<uint32_t>(1, 0x5d03);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d03);
      auto const rel = std::vector<uint32_t>(1, 0x5f95);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f95);
      auto const rel = std::vector<uint32_t>(1, 0x6d9e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d9e);
      auto const rel = std::vector<uint32_t>(1, 0x83b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83b1);
      auto const rel = std::vector<uint32_t>(1, 0x90f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90f2);
      auto const rel = std::vector<uint32_t>(1, 0x5a61);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a61);
      auto const rel = std::vector<uint32_t>(1, 0x5d0d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d0d);
      auto const rel = std::vector<uint32_t>(1, 0x5eb2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eb2);
      auto const rel = std::vector<uint32_t>(1, 0x5fa0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5fa0);
      auto const rel = std::vector<uint32_t>(1, 0x68be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68be);
      auto const rel = std::vector<uint32_t>(1, 0x6df6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6df6);
      auto const rel = std::vector<uint32_t>(1, 0x730d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x730d);
      auto const rel = std::vector<uint32_t>(1, 0x840a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x840a);
      auto const rel = std::vector<uint32_t>(1, 0x9028);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9028);
      auto const rel = std::vector<uint32_t>(1, 0x68f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68f6);
      auto const rel = std::vector<uint32_t>(1, 0x741c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x741c);
      auto const rel = std::vector<uint32_t>(1, 0x7b59);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b59);
      auto const rel = std::vector<uint32_t>(1, 0x94fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x94fc);
      auto const rel = std::vector<uint32_t>(1, 0x7b82);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b82);
      auto const rel = std::vector<uint32_t>(1, 0x9338);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9338);
      auto const rel = std::vector<uint32_t>(1, 0x9a0b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a0b);
      auto const rel = std::vector<uint32_t>(1, 0x9be0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9be0);
      auto const rel = std::vector<uint32_t>(1, 0x9d86);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d86);
      auto const rel = std::vector<uint32_t>(1, 0x9eb3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9eb3);
      auto const rel = std::vector<uint32_t>(1, 0x553b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x553b);
      auto const rel = std::vector<uint32_t>(1, 0x8d49);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d49);
      auto const rel = std::vector<uint32_t>(1, 0x7750);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7750);
      auto const rel = std::vector<uint32_t>(1, 0x775e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x775e);
      auto const rel = std::vector<uint32_t>(1, 0x8d56);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d56);
      auto const rel = std::vector<uint32_t>(1, 0x8cda);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8cda);
      auto const rel = std::vector<uint32_t>(1, 0x6fd1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fd1);
      auto const rel = std::vector<uint32_t>(1, 0x8cf4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8cf4);
      auto const rel = std::vector<uint32_t>(1, 0x983c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x983c);
      auto const rel = std::vector<uint32_t>(1, 0x9842);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9842);
      auto const rel = std::vector<uint32_t>(1, 0x765e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x765e);
      auto const rel = std::vector<uint32_t>(1, 0x9d63);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d63);
      auto const rel = std::vector<uint32_t>(1, 0x7028);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7028);
      auto const rel = std::vector<uint32_t>(1, 0x702c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x702c);
      auto const rel = std::vector<uint32_t>(1, 0x7c41);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c41);
      auto const rel = std::vector<uint32_t>(1, 0x85fe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85fe);
      auto const rel = std::vector<uint32_t>(1, 0x6af4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6af4);
      auto const rel = std::vector<uint32_t>(1, 0x7669);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7669);
      auto const rel = std::vector<uint32_t>(1, 0x8970);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8970);
      auto const rel = std::vector<uint32_t>(1, 0x7c5f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c5f);
      auto const rel = std::vector<uint32_t>(1, 0x5170);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5170);
      auto const rel = std::vector<uint32_t>(1, 0x5c9a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c9a);
      auto const rel = std::vector<uint32_t>(1, 0x62e6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x62e6);
      auto const rel = std::vector<uint32_t>(1, 0x680f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x680f);
      auto const rel = std::vector<uint32_t>(1, 0x5a6a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_007)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a6a);
      auto const rel = std::vector<uint32_t>(1, 0x60cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60cf);
      auto const rel = std::vector<uint32_t>(1, 0x5d50);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d50);
      auto const rel = std::vector<uint32_t>(1, 0x847b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x847b);
      auto const rel = std::vector<uint32_t>(1, 0x9611);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9611);
      auto const rel = std::vector<uint32_t>(1, 0x84dd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84dd);
      auto const rel = std::vector<uint32_t>(1, 0x8c30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c30);
      auto const rel = std::vector<uint32_t>(1, 0x53b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53b1);
      auto const rel = std::vector<uint32_t>(1, 0x6f9c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f9c);
      auto const rel = std::vector<uint32_t>(1, 0x8934);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8934);
      auto const rel = std::vector<uint32_t>(1, 0x5116);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5116);
      auto const rel = std::vector<uint32_t>(1, 0x6593);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6593);
      auto const rel = std::vector<uint32_t>(1, 0x7bee);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7bee);
      auto const rel = std::vector<uint32_t>(1, 0x61e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61e2);
      auto const rel = std::vector<uint32_t>(1, 0x71e3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x71e3);
      auto const rel = std::vector<uint32_t>(1, 0x71f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x71f7);
      auto const rel = std::vector<uint32_t>(1, 0x85cd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85cd);
      auto const rel = std::vector<uint32_t>(1, 0x8955);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8955);
      auto const rel = std::vector<uint32_t>(1, 0x9567);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9567);
      auto const rel = std::vector<uint32_t>(1, 0x95cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95cc);
      auto const rel = std::vector<uint32_t>(1, 0x74bc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74bc);
      auto const rel = std::vector<uint32_t>(1, 0x8964);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8964);
      auto const rel = std::vector<uint32_t>(1, 0x8b4b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b4b);
      auto const rel = std::vector<uint32_t>(1, 0x5e71);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e71);
      auto const rel = std::vector<uint32_t>(1, 0x6514);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6514);
      auto const rel = std::vector<uint32_t>(1, 0x703e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x703e);
      auto const rel = std::vector<uint32_t>(1, 0x7046);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7046);
      auto const rel = std::vector<uint32_t>(1, 0x7c43);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c43);
      auto const rel = std::vector<uint32_t>(1, 0x7e7f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e7f);
      auto const rel = std::vector<uint32_t>(1, 0x862d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x862d);
      auto const rel = std::vector<uint32_t>(1, 0x6595);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6595);
      auto const rel = std::vector<uint32_t>(1, 0x6b04);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b04);
      auto const rel = std::vector<uint32_t>(1, 0x7937);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7937);
      auto const rel = std::vector<uint32_t>(1, 0x8974);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8974);
      auto const rel = std::vector<uint32_t>(1, 0x56d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56d2);
      auto const rel = std::vector<uint32_t>(1, 0x7061);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7061);
      auto const rel = std::vector<uint32_t>(1, 0x7c63);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c63);
      auto const rel = std::vector<uint32_t>(1, 0x6b17);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b17);
      auto const rel = std::vector<uint32_t>(1, 0x8b95);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b95);
      auto const rel = std::vector<uint32_t>(1, 0x8e9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e9d);
      auto const rel = std::vector<uint32_t>(1, 0x897d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x897d);
      auto const rel = std::vector<uint32_t>(1, 0x9484);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9484);
      auto const rel = std::vector<uint32_t>(1, 0x97ca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x97ca);
      auto const rel = std::vector<uint32_t>(1, 0x89c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89c8);
      auto const rel = std::vector<uint32_t>(1, 0x6d68);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d68);
      auto const rel = std::vector<uint32_t>(1, 0x63fd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63fd);
      auto const rel = std::vector<uint32_t>(1, 0x7f06);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f06);
      auto const rel = std::vector<uint32_t>(1, 0x6984);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6984);
      auto const rel = std::vector<uint32_t>(1, 0x6f24);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f24);
      auto const rel = std::vector<uint32_t>(1, 0x7f71);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f71);
      auto const rel = std::vector<uint32_t>(1, 0x9182);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9182);
      auto const rel = std::vector<uint32_t>(1, 0x58c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_008)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58c8);
      auto const rel = std::vector<uint32_t>(1, 0x61d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61d2);
      auto const rel = std::vector<uint32_t>(1, 0x89a7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89a7);
      auto const rel = std::vector<uint32_t>(1, 0x64e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x64e5);
      auto const rel = std::vector<uint32_t>(1, 0x5b3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b3e);
      auto const rel = std::vector<uint32_t>(1, 0x61f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61f6);
      auto const rel = std::vector<uint32_t>(1, 0x5b44);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b44);
      auto const rel = std::vector<uint32_t>(1, 0x89bd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89bd);
      auto const rel = std::vector<uint32_t>(1, 0x5b4f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b4f);
      auto const rel = std::vector<uint32_t>(1, 0x652c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x652c);
      auto const rel = std::vector<uint32_t>(1, 0x7060);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7060);
      auto const rel = std::vector<uint32_t>(1, 0x56d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56d5);
      auto const rel = std::vector<uint32_t>(1, 0x6b16);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b16);
      auto const rel = std::vector<uint32_t>(1, 0x7226);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7226);
      auto const rel = std::vector<uint32_t>(1, 0x9872);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9872);
      auto const rel = std::vector<uint32_t>(1, 0x7e9c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e9c);
      auto const rel = std::vector<uint32_t>(1, 0x70c2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70c2);
      auto const rel = std::vector<uint32_t>(1, 0x6ee5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ee5);
      auto const rel = std::vector<uint32_t>(1, 0x71d7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x71d7);
      auto const rel = std::vector<uint32_t>(1, 0x5682);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5682);
      auto const rel = std::vector<uint32_t>(1, 0x6feb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6feb);
      auto const rel = std::vector<uint32_t>(1, 0x7201);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7201);
      auto const rel = std::vector<uint32_t>(1, 0x721b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x721b);
      auto const rel = std::vector<uint32_t>(1, 0x74d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74d3);
      auto const rel = std::vector<uint32_t>(1, 0x7224);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7224);
      auto const rel = std::vector<uint32_t>(1, 0x946d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x946d);
      auto const rel = std::vector<uint32_t>(1, 0x7cf7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cf7);
      auto const rel = std::vector<uint32_t>(1, 0x5577);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5577);
      auto const rel = std::vector<uint32_t>(1, 0x52c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52c6);
      auto const rel = std::vector<uint32_t>(1, 0x90ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90ce);
      auto const rel = std::vector<uint32_t>(1, 0x90de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90de);
      auto const rel = std::vector<uint32_t>(1, 0x6b34);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b34);
      auto const rel = std::vector<uint32_t>(1, 0x72fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72fc);
      auto const rel = std::vector<uint32_t>(1, 0x9606);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9606);
      auto const rel = std::vector<uint32_t>(1, 0x5acf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5acf);
      auto const rel = std::vector<uint32_t>(1, 0x5eca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eca);
      auto const rel = std::vector<uint32_t>(1, 0x658f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x658f);
      auto const rel = std::vector<uint32_t>(1, 0x6879);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6879);
      auto const rel = std::vector<uint32_t>(1, 0x7405);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7405);
      auto const rel = std::vector<uint32_t>(1, 0x84c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84c8);
      auto const rel = std::vector<uint32_t>(1, 0x6994);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6994);
      auto const rel = std::vector<uint32_t>(1, 0x746f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x746f);
      auto const rel = std::vector<uint32_t>(1, 0x7860);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7860);
      auto const rel = std::vector<uint32_t>(1, 0x7a02);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a02);
      auto const rel = std::vector<uint32_t>(1, 0x9512);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9512);
      auto const rel = std::vector<uint32_t>(1, 0x7b64);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b64);
      auto const rel = std::vector<uint32_t>(1, 0x8246);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8246);
      auto const rel = std::vector<uint32_t>(1, 0x870b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x870b);
      auto const rel = std::vector<uint32_t>(1, 0x90d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d2);
      auto const rel = std::vector<uint32_t>(1, 0x8782);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8782);
      auto const rel = std::vector<uint32_t>(1, 0x8eb4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8eb4);
      auto const rel = std::vector<uint32_t>(1, 0x92c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_009)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x92c3);
      auto const rel = std::vector<uint32_t>(1, 0x93af);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x93af);
      auto const rel = std::vector<uint32_t>(1, 0x99fa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x99fa);
      auto const rel = std::vector<uint32_t>(1, 0x6717);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6717);
      auto const rel = std::vector<uint32_t>(1, 0x6716);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6716);
      auto const rel = std::vector<uint32_t>(1, 0x70fa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70fa);
      auto const rel = std::vector<uint32_t>(1, 0x5871);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5871);
      auto const rel = std::vector<uint32_t>(1, 0x84e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84e2);
      auto const rel = std::vector<uint32_t>(1, 0x6a03);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a03);
      auto const rel = std::vector<uint32_t>(1, 0x8a8f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a8f);
      auto const rel = std::vector<uint32_t>(1, 0x6724);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6724);
      auto const rel = std::vector<uint32_t>(1, 0x57cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57cc);
      auto const rel = std::vector<uint32_t>(1, 0x5d00);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d00);
      auto const rel = std::vector<uint32_t>(1, 0x6d6a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d6a);
      auto const rel = std::vector<uint32_t>(1, 0x83a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a8);
      auto const rel = std::vector<uint32_t>(1, 0x8497);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8497);
      auto const rel = std::vector<uint32_t>(1, 0x95ac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x95ac);
      auto const rel = std::vector<uint32_t>(1, 0x5525);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5525);
      auto const rel = std::vector<uint32_t>(1, 0x635e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x635e);
      auto const rel = std::vector<uint32_t>(1, 0x7ca9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ca9);
      auto const rel = std::vector<uint32_t>(1, 0x6488);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6488);
      auto const rel = std::vector<uint32_t>(1, 0x52b3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52b3);
      auto const rel = std::vector<uint32_t>(1, 0x52b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52b4);
      auto const rel = std::vector<uint32_t>(1, 0x7262);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7262);
      auto const rel = std::vector<uint32_t>(1, 0x7a82);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a82);
      auto const rel = std::vector<uint32_t>(1, 0x54f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54f0);
      auto const rel = std::vector<uint32_t>(1, 0x5520);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5520);
      auto const rel = std::vector<uint32_t>(1, 0x5d02);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d02);
      auto const rel = std::vector<uint32_t>(1, 0x6d76);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d76);
      auto const rel = std::vector<uint32_t>(1, 0x52de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52de);
      auto const rel = std::vector<uint32_t>(1, 0x75e8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75e8);
      auto const rel = std::vector<uint32_t>(1, 0x94f9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x94f9);
      auto const rel = std::vector<uint32_t>(1, 0x50d7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x50d7);
      auto const rel = std::vector<uint32_t>(1, 0x562e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x562e);
      auto const rel = std::vector<uint32_t>(1, 0x5d97);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d97);
      auto const rel = std::vector<uint32_t>(1, 0x61a5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61a5);
      auto const rel = std::vector<uint32_t>(1, 0x6725);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6725);
      auto const rel = std::vector<uint32_t>(1, 0x7646);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7646);
      auto const rel = std::vector<uint32_t>(1, 0x78f1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78f1);
      auto const rel = std::vector<uint32_t>(1, 0x7c29);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c29);
      auto const rel = std::vector<uint32_t>(1, 0x87e7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x87e7);
      auto const rel = std::vector<uint32_t>(1, 0x91aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91aa);
      auto const rel = std::vector<uint32_t>(1, 0x9412);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9412);
      auto const rel = std::vector<uint32_t>(1, 0x985f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x985f);
      auto const rel = std::vector<uint32_t>(1, 0x9add);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9add);
      auto const rel = std::vector<uint32_t>(1, 0x8002);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8002);
      auto const rel = std::vector<uint32_t>(1, 0x8001);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8001);
      auto const rel = std::vector<uint32_t>(1, 0x4f6c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4f6c);
      auto const rel = std::vector<uint32_t>(1, 0x54be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54be);
      auto const rel = std::vector<uint32_t>(1, 0x59e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x59e5);
      auto const rel = std::vector<uint32_t>(1, 0x6045);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6045);
      auto const rel = std::vector<uint32_t>(1, 0x72eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_010)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72eb);
      auto const rel = std::vector<uint32_t>(1, 0x8356);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8356);
      auto const rel = std::vector<uint32_t>(1, 0x6833);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6833);
      auto const rel = std::vector<uint32_t>(1, 0x73ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73ef);
      auto const rel = std::vector<uint32_t>(1, 0x7853);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7853);
      auto const rel = std::vector<uint32_t>(1, 0x94d1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x94d1);
      auto const rel = std::vector<uint32_t>(1, 0x86ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86ef);
      auto const rel = std::vector<uint32_t>(1, 0x92a0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x92a0);
      auto const rel = std::vector<uint32_t>(1, 0x6f66);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f66);
      auto const rel = std::vector<uint32_t>(1, 0x6a51);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a51);
      auto const rel = std::vector<uint32_t>(1, 0x9bb1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9bb1);
      auto const rel = std::vector<uint32_t>(1, 0x8f51);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f51);
      auto const rel = std::vector<uint32_t>(1, 0x6d9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d9d);
      auto const rel = std::vector<uint32_t>(1, 0x70d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70d9);
      auto const rel = std::vector<uint32_t>(1, 0x55e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55e0);
      auto const rel = std::vector<uint32_t>(1, 0x8022);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8022);
      auto const rel = std::vector<uint32_t>(1, 0x916a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x916a);
      auto const rel = std::vector<uint32_t>(1, 0x5aea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aea);
      auto const rel = std::vector<uint32_t>(1, 0x61a6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x61a6);
      auto const rel = std::vector<uint32_t>(1, 0x6f87);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f87);
      auto const rel = std::vector<uint32_t>(1, 0x8ebc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ebc);
      auto const rel = std::vector<uint32_t>(1, 0x6a6f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a6f);
      auto const rel = std::vector<uint32_t>(1, 0x802e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x802e);
      auto const rel = std::vector<uint32_t>(1, 0x8ec2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ec2);
      auto const rel = std::vector<uint32_t>(1, 0x808b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x808b);
      auto const rel = std::vector<uint32_t>(1, 0x4ec2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4ec2);
      auto const rel = std::vector<uint32_t>(1, 0x961e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x961e);
      auto const rel = std::vector<uint32_t>(1, 0x4e50);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e50);
      auto const rel = std::vector<uint32_t>(1, 0x53fb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53fb);
      auto const rel = std::vector<uint32_t>(1, 0x5fc7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5fc7);
      auto const rel = std::vector<uint32_t>(1, 0x6250);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6250);
      auto const rel = std::vector<uint32_t>(1, 0x6c3b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6c3b);
      auto const rel = std::vector<uint32_t>(1, 0x827b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x827b);
      auto const rel = std::vector<uint32_t>(1, 0x738f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x738f);
      auto const rel = std::vector<uint32_t>(1, 0x6cd0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6cd0);
      auto const rel = std::vector<uint32_t>(1, 0x7afb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7afb);
      auto const rel = std::vector<uint32_t>(1, 0x7833);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7833);
      auto const rel = std::vector<uint32_t>(1, 0x697d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x697d);
      auto const rel = std::vector<uint32_t>(1, 0x97f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x97f7);
      auto const rel = std::vector<uint32_t>(1, 0x6a02);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a02);
      auto const rel = std::vector<uint32_t>(1, 0x7c15);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c15);
      auto const rel = std::vector<uint32_t>(1, 0x9cd3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9cd3);
      auto const rel = std::vector<uint32_t>(1, 0x9c33);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c33);
      auto const rel = std::vector<uint32_t>(1, 0x4e86);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e86);
      auto const rel = std::vector<uint32_t>(1, 0x9979);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9979);
      auto const rel = std::vector<uint32_t>(1, 0x990e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x990e);
      auto const rel = std::vector<uint32_t>(1, 0x52d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52d2);
      auto const rel = std::vector<uint32_t>(1, 0x96f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96f7);
      auto const rel = std::vector<uint32_t>(1, 0x5ad8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ad8);
      auto const rel = std::vector<uint32_t>(1, 0x7f27);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f27);
      auto const rel = std::vector<uint32_t>(1, 0x8502);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8502);
      auto const rel = std::vector<uint32_t>(1, 0x757e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_011)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x757e);
      auto const rel = std::vector<uint32_t>(1, 0x64c2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x64c2);
      auto const rel = std::vector<uint32_t>(1, 0x6a91);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a91);
      auto const rel = std::vector<uint32_t>(1, 0x7e32);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e32);
      auto const rel = std::vector<uint32_t>(1, 0x790c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x790c);
      auto const rel = std::vector<uint32_t>(1, 0x956d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x956d);
      auto const rel = std::vector<uint32_t>(1, 0x6ad1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ad1);
      auto const rel = std::vector<uint32_t>(1, 0x74c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74c3);
      auto const rel = std::vector<uint32_t>(1, 0x7fb8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fb8);
      auto const rel = std::vector<uint32_t>(1, 0x7927);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7927);
      auto const rel = std::vector<uint32_t>(1, 0x7e8d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e8d);
      auto const rel = std::vector<uint32_t>(1, 0x7f4d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f4d);
      auto const rel = std::vector<uint32_t>(1, 0x8632);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8632);
      auto const rel = std::vector<uint32_t>(1, 0x9433);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9433);
      auto const rel = std::vector<uint32_t>(1, 0x8f60);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f60);
      auto const rel = std::vector<uint32_t>(1, 0x513d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x513d);
      auto const rel = std::vector<uint32_t>(1, 0x58e8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58e8);
      auto const rel = std::vector<uint32_t>(1, 0x9458);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9458);
      auto const rel = std::vector<uint32_t>(1, 0x9741);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9741);
      auto const rel = std::vector<uint32_t>(1, 0x8646);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8646);
      auto const rel = std::vector<uint32_t>(1, 0x9c69);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c69);
      auto const rel = std::vector<uint32_t>(1, 0x6b19);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b19);
      auto const rel = std::vector<uint32_t>(1, 0x7e9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e9d);
      auto const rel = std::vector<uint32_t>(1, 0x9f3a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9f3a);
      auto const rel = std::vector<uint32_t>(1, 0x53bd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53bd);
      auto const rel = std::vector<uint32_t>(1, 0x8012);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8012);
      auto const rel = std::vector<uint32_t>(1, 0x8bd4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8bd4);
      auto const rel = std::vector<uint32_t>(1, 0x5792);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5792);
      auto const rel = std::vector<uint32_t>(1, 0x5841);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5841);
      auto const rel = std::vector<uint32_t>(1, 0x7d6b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d6b);
      auto const rel = std::vector<uint32_t>(1, 0x8142);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8142);
      auto const rel = std::vector<uint32_t>(1, 0x50ab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x50ab);
      auto const rel = std::vector<uint32_t>(1, 0x8a84);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a84);
      auto const rel = std::vector<uint32_t>(1, 0x6a0f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a0f);
      auto const rel = std::vector<uint32_t>(1, 0x78ca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78ca);
      auto const rel = std::vector<uint32_t>(1, 0x854c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x854c);
      auto const rel = std::vector<uint32_t>(1, 0x78e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78e5);
      auto const rel = std::vector<uint32_t>(1, 0x857e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x857e);
      auto const rel = std::vector<uint32_t>(1, 0x5121);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5121);
      auto const rel = std::vector<uint32_t>(1, 0x58d8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58d8);
      auto const rel = std::vector<uint32_t>(1, 0x7657);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7657);
      auto const rel = std::vector<uint32_t>(1, 0x85df);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85df);
      auto const rel = std::vector<uint32_t>(1, 0x6ad0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ad0);
      auto const rel = std::vector<uint32_t>(1, 0x77cb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x77cb);
      auto const rel = std::vector<uint32_t>(1, 0x7928);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7928);
      auto const rel = std::vector<uint32_t>(1, 0x7045);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7045);
      auto const rel = std::vector<uint32_t>(1, 0x881d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x881d);
      auto const rel = std::vector<uint32_t>(1, 0x863d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x863d);
      auto const rel = std::vector<uint32_t>(1, 0x8b84);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b84);
      auto const rel = std::vector<uint32_t>(1, 0x9478);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9478);
      auto const rel = std::vector<uint32_t>(1, 0x9e13);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e13);
      auto const rel = std::vector<uint32_t>(1, 0x6cea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_012)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6cea);
      auto const rel = std::vector<uint32_t>(1, 0x6d21);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d21);
      auto const rel = std::vector<uint32_t>(1, 0x7c7b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c7b);
      auto const rel = std::vector<uint32_t>(1, 0x6d99);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d99);
      auto const rel = std::vector<uint32_t>(1, 0x6dda);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dda);
      auto const rel = std::vector<uint32_t>(1, 0x7d2f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d2f);
      auto const rel = std::vector<uint32_t>(1, 0x9179);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9179);
      auto const rel = std::vector<uint32_t>(1, 0x9287);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9287);
      auto const rel = std::vector<uint32_t>(1, 0x981b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x981b);
      auto const rel = std::vector<uint32_t>(1, 0x982a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x982a);
      auto const rel = std::vector<uint32_t>(1, 0x9311);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9311);
      auto const rel = std::vector<uint32_t>(1, 0x6502);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6502);
      auto const rel = std::vector<uint32_t>(1, 0x98a3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x98a3);
      auto const rel = std::vector<uint32_t>(1, 0x985e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x985e);
      auto const rel = std::vector<uint32_t>(1, 0x7e87);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e87);
      auto const rel = std::vector<uint32_t>(1, 0x8631);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8631);
      auto const rel = std::vector<uint32_t>(1, 0x79b7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79b7);
      auto const rel = std::vector<uint32_t>(1, 0x561e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x561e);
      auto const rel = std::vector<uint32_t>(1, 0x5d1a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d1a);
      auto const rel = std::vector<uint32_t>(1, 0x5844);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5844);
      auto const rel = std::vector<uint32_t>(1, 0x68f1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68f1);
      auto const rel = std::vector<uint32_t>(1, 0x695e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x695e);
      auto const rel = std::vector<uint32_t>(1, 0x7890);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7890);
      auto const rel = std::vector<uint32_t>(1, 0x7a1c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a1c);
      auto const rel = std::vector<uint32_t>(1, 0x8f18);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f18);
      auto const rel = std::vector<uint32_t>(1, 0x8590);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8590);
      auto const rel = std::vector<uint32_t>(1, 0x51b7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51b7);
      auto const rel = std::vector<uint32_t>(1, 0x5030);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5030);
      auto const rel = std::vector<uint32_t>(1, 0x580e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x580e);
      auto const rel = std::vector<uint32_t>(1, 0x6123);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6123);
      auto const rel = std::vector<uint32_t>(1, 0x7756);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7756);
      auto const rel = std::vector<uint32_t>(1, 0x8e1c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e1c);
      auto const rel = std::vector<uint32_t>(1, 0x54e9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54e9);
      auto const rel = std::vector<uint32_t>(1, 0x5215);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5215);
      auto const rel = std::vector<uint32_t>(1, 0x675d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x675d);
      auto const rel = std::vector<uint32_t>(1, 0x5398);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5398);
      auto const rel = std::vector<uint32_t>(1, 0x5253);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5253);
      auto const rel = std::vector<uint32_t>(1, 0x72f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72f8);
      auto const rel = std::vector<uint32_t>(1, 0x79bb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79bb);
      auto const rel = std::vector<uint32_t>(1, 0x8372);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8372);
      auto const rel = std::vector<uint32_t>(1, 0x9a8a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a8a);
      auto const rel = std::vector<uint32_t>(1, 0x60a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60a1);
      auto const rel = std::vector<uint32_t>(1, 0x68a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68a8);
      auto const rel = std::vector<uint32_t>(1, 0x68a9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68a9);
      auto const rel = std::vector<uint32_t>(1, 0x68b8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68b8);
      auto const rel = std::vector<uint32_t>(1, 0x7281);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7281);
      auto const rel = std::vector<uint32_t>(1, 0x740d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x740d);
      auto const rel = std::vector<uint32_t>(1, 0x83de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83de);
      auto const rel = std::vector<uint32_t>(1, 0x55b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55b1);
      auto const rel = std::vector<uint32_t>(1, 0x68c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68c3);
      auto const rel = std::vector<uint32_t>(1, 0x7282);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7282);
      auto const rel = std::vector<uint32_t>(1, 0x9e42);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_013)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e42);
      auto const rel = std::vector<uint32_t>(1, 0x527a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x527a);
      auto const rel = std::vector<uint32_t>(1, 0x6f13);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f13);
      auto const rel = std::vector<uint32_t>(1, 0x775d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x775d);
      auto const rel = std::vector<uint32_t>(1, 0x7b63);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b63);
      auto const rel = std::vector<uint32_t>(1, 0x7f21);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f21);
      auto const rel = std::vector<uint32_t>(1, 0x8243);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8243);
      auto const rel = std::vector<uint32_t>(1, 0x84e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84e0);
      auto const rel = std::vector<uint32_t>(1, 0x870a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x870a);
      auto const rel = std::vector<uint32_t>(1, 0x5ae0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ae0);
      auto const rel = std::vector<uint32_t>(1, 0x5b77);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b77);
      auto const rel = std::vector<uint32_t>(1, 0x6a06);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a06);
      auto const rel = std::vector<uint32_t>(1, 0x7483);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7483);
      auto const rel = std::vector<uint32_t>(1, 0x76e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x76e0);
      auto const rel = std::vector<uint32_t>(1, 0x7af0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7af0);
      auto const rel = std::vector<uint32_t>(1, 0x8c8d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c8d);
      auto const rel = std::vector<uint32_t>(1, 0x7cce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cce);
      auto const rel = std::vector<uint32_t>(1, 0x853e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x853e);
      auto const rel = std::vector<uint32_t>(1, 0x8935);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8935);
      auto const rel = std::vector<uint32_t>(1, 0x92eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x92eb);
      auto const rel = std::vector<uint32_t>(1, 0x9ca1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ca1);
      auto const rel = std::vector<uint32_t>(1, 0x9ece);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ece);
      auto const rel = std::vector<uint32_t>(1, 0x7bf1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7bf1);
      auto const rel = std::vector<uint32_t>(1, 0x7e2d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e2d);
      auto const rel = std::vector<uint32_t>(1, 0x7f79);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f79);
      auto const rel = std::vector<uint32_t>(1, 0x9305);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9305);
      auto const rel = std::vector<uint32_t>(1, 0x87cd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x87cd);
      auto const rel = std::vector<uint32_t>(1, 0x8b27);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b27);
      auto const rel = std::vector<uint32_t>(1, 0x91a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91a8);
      auto const rel = std::vector<uint32_t>(1, 0x569f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x569f);
      auto const rel = std::vector<uint32_t>(1, 0x85dc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85dc);
      auto const rel = std::vector<uint32_t>(1, 0x908c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x908c);
      auto const rel = std::vector<uint32_t>(1, 0x91d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91d0);
      auto const rel = std::vector<uint32_t>(1, 0x96e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96e2);
      auto const rel = std::vector<uint32_t>(1, 0x9bcf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9bcf);
      auto const rel = std::vector<uint32_t>(1, 0x6584);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6584);
      auto const rel = std::vector<uint32_t>(1, 0x74c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74c8);
      auto const rel = std::vector<uint32_t>(1, 0x93eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x93eb);
      auto const rel = std::vector<uint32_t>(1, 0x9bec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9bec);
      auto const rel = std::vector<uint32_t>(1, 0x9d79);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d79);
      auto const rel = std::vector<uint32_t>(1, 0x9ee7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ee7);
      auto const rel = std::vector<uint32_t>(1, 0x56c4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56c4);
      auto const rel = std::vector<uint32_t>(1, 0x7055);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7055);
      auto const rel = std::vector<uint32_t>(1, 0x863a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x863a);
      auto const rel = std::vector<uint32_t>(1, 0x8821);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8821);
      auto const rel = std::vector<uint32_t>(1, 0x882b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x882b);
      auto const rel = std::vector<uint32_t>(1, 0x5b4b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b4b);
      auto const rel = std::vector<uint32_t>(1, 0x5ef2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ef2);
      auto const rel = std::vector<uint32_t>(1, 0x5299);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5299);
      auto const rel = std::vector<uint32_t>(1, 0x9457);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9457);
      auto const rel = std::vector<uint32_t>(1, 0x7a72);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a72);
      auto const rel = std::vector<uint32_t>(1, 0x7c6c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_014)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c6c);
      auto const rel = std::vector<uint32_t>(1, 0x7e9a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e9a);
      auto const rel = std::vector<uint32_t>(1, 0x9a6a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9a6a);
      auto const rel = std::vector<uint32_t>(1, 0x9c7a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c7a);
      auto const rel = std::vector<uint32_t>(1, 0x9e1d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e1d);
      auto const rel = std::vector<uint32_t>(1, 0x793c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x793c);
      auto const rel = std::vector<uint32_t>(1, 0x674e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x674e);
      auto const rel = std::vector<uint32_t>(1, 0x91cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91cc);
      auto const rel = std::vector<uint32_t>(1, 0x4fda);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fda);
      auto const rel = std::vector<uint32_t>(1, 0x5cdb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5cdb);
      auto const rel = std::vector<uint32_t>(1, 0x5ce2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ce2);
      auto const rel = std::vector<uint32_t>(1, 0x5a0c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a0c);
      auto const rel = std::vector<uint32_t>(1, 0x5cf2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5cf2);
      auto const rel = std::vector<uint32_t>(1, 0x6d6c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d6c);
      auto const rel = std::vector<uint32_t>(1, 0x9026);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9026);
      auto const rel = std::vector<uint32_t>(1, 0x7406);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7406);
      auto const rel = std::vector<uint32_t>(1, 0x88e1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88e1);
      auto const rel = std::vector<uint32_t>(1, 0x9502);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9502);
      auto const rel = std::vector<uint32_t>(1, 0x7cb4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cb4);
      auto const rel = std::vector<uint32_t>(1, 0x88cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88cf);
      auto const rel = std::vector<uint32_t>(1, 0x8c4a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c4a);
      auto const rel = std::vector<uint32_t>(1, 0x92f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x92f0);
      auto const rel = std::vector<uint32_t>(1, 0x9ca4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ca4);
      auto const rel = std::vector<uint32_t>(1, 0x5163);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5163);
      auto const rel = std::vector<uint32_t>(1, 0x6fa7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fa7);
      auto const rel = std::vector<uint32_t>(1, 0x79ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79ae);
      auto const rel = std::vector<uint32_t>(1, 0x9bc9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9bc9);
      auto const rel = std::vector<uint32_t>(1, 0x87f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x87f8);
      auto const rel = std::vector<uint32_t>(1, 0x91b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91b4);
      auto const rel = std::vector<uint32_t>(1, 0x9ce2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ce2);
      auto const rel = std::vector<uint32_t>(1, 0x9090);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9090);
      auto const rel = std::vector<uint32_t>(1, 0x9c67);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c67);
      auto const rel = std::vector<uint32_t>(1, 0x6b1a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b1a);
      auto const rel = std::vector<uint32_t>(1, 0x529b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x529b);
      auto const rel = std::vector<uint32_t>(1, 0x5386);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5386);
      auto const rel = std::vector<uint32_t>(1, 0x5389);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5389);
      auto const rel = std::vector<uint32_t>(1, 0x5c74);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c74);
      auto const rel = std::vector<uint32_t>(1, 0x7acb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7acb);
      auto const rel = std::vector<uint32_t>(1, 0x540f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x540f);
      auto const rel = std::vector<uint32_t>(1, 0x6738);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6738);
      auto const rel = std::vector<uint32_t>(1, 0x4e3d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e3d);
      auto const rel = std::vector<uint32_t>(1, 0x5229);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5229);
      auto const rel = std::vector<uint32_t>(1, 0x52b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52b1);
      auto const rel = std::vector<uint32_t>(1, 0x5456);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5456);
      auto const rel = std::vector<uint32_t>(1, 0x575c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x575c);
      auto const rel = std::vector<uint32_t>(1, 0x6ca5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ca5);
      auto const rel = std::vector<uint32_t>(1, 0x82c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x82c8);
      auto const rel = std::vector<uint32_t>(1, 0x4f8b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4f8b);
      auto const rel = std::vector<uint32_t>(1, 0x5ca6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ca6);
      auto const rel = std::vector<uint32_t>(1, 0x623e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x623e);
      auto const rel = std::vector<uint32_t>(1, 0x67a5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x67a5);
      auto const rel = std::vector<uint32_t>(1, 0x6cb4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_015)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6cb4);
      auto const rel = std::vector<uint32_t>(1, 0x75a0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75a0);
      auto const rel = std::vector<uint32_t>(1, 0x82d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x82d9);
      auto const rel = std::vector<uint32_t>(1, 0x96b6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96b6);
      auto const rel = std::vector<uint32_t>(1, 0x4fd0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fd0);
      auto const rel = std::vector<uint32_t>(1, 0x4fea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fea);
      auto const rel = std::vector<uint32_t>(1, 0x6803);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6803);
      auto const rel = std::vector<uint32_t>(1, 0x680e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x680e);
      auto const rel = std::vector<uint32_t>(1, 0x75ac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75ac);
      auto const rel = std::vector<uint32_t>(1, 0x7805);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7805);
      auto const rel = std::vector<uint32_t>(1, 0x8318);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8318);
      auto const rel = std::vector<uint32_t>(1, 0x8354);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8354);
      auto const rel = std::vector<uint32_t>(1, 0x8d72);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d72);
      auto const rel = std::vector<uint32_t>(1, 0x8f79);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f79);
      auto const rel = std::vector<uint32_t>(1, 0x90e6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e6);
      auto const rel = std::vector<uint32_t>(1, 0x550e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x550e);
      auto const rel = std::vector<uint32_t>(1, 0x5a33);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a33);
      auto const rel = std::vector<uint32_t>(1, 0x60a7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60a7);
      auto const rel = std::vector<uint32_t>(1, 0x6817);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6817);
      auto const rel = std::vector<uint32_t>(1, 0x681b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x681b);
      auto const rel = std::vector<uint32_t>(1, 0x6d96);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d96);
      auto const rel = std::vector<uint32_t>(1, 0x7301);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7301);
      auto const rel = std::vector<uint32_t>(1, 0x73d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73d5);
      auto const rel = std::vector<uint32_t>(1, 0x783a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x783a);
      auto const rel = std::vector<uint32_t>(1, 0x783e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x783e);
      auto const rel = std::vector<uint32_t>(1, 0x79dd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79dd);
      auto const rel = std::vector<uint32_t>(1, 0x8385);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8385);
      auto const rel = std::vector<uint32_t>(1, 0x8389);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8389);
      auto const rel = std::vector<uint32_t>(1, 0x5533);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5533);
      auto const rel = std::vector<uint32_t>(1, 0x5a6f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a6f);
      auto const rel = std::vector<uint32_t>(1, 0x7b20);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b20);
      auto const rel = std::vector<uint32_t>(1, 0x7c92);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c92);
      auto const rel = std::vector<uint32_t>(1, 0x7c9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c9d);
      auto const rel = std::vector<uint32_t>(1, 0x8137);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8137);
      auto const rel = std::vector<uint32_t>(1, 0x86b8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b8);
      auto const rel = std::vector<uint32_t>(1, 0x86ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86ce);
      auto const rel = std::vector<uint32_t>(1, 0x5088);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5088);
      auto const rel = std::vector<uint32_t>(1, 0x51d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51d3);
      auto const rel = std::vector<uint32_t>(1, 0x53a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53a4);
      auto const rel = std::vector<uint32_t>(1, 0x68d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68d9);
      auto const rel = std::vector<uint32_t>(1, 0x75e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75e2);
      auto const rel = std::vector<uint32_t>(1, 0x86e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86e0);
      auto const rel = std::vector<uint32_t>(1, 0x8a48);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a48);
      auto const rel = std::vector<uint32_t>(1, 0x8dde);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dde);
      auto const rel = std::vector<uint32_t>(1, 0x96f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96f3);
      auto const rel = std::vector<uint32_t>(1, 0x53af);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53af);
      auto const rel = std::vector<uint32_t>(1, 0x585b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x585b);
      auto const rel = std::vector<uint32_t>(1, 0x6144);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6144);
      auto const rel = std::vector<uint32_t>(1, 0x642e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x642e);
      auto const rel = std::vector<uint32_t>(1, 0x6ea7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ea7);
      auto const rel = std::vector<uint32_t>(1, 0x849a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x849a);
      auto const rel = std::vector<uint32_t>(1, 0x849e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_016)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x849e);
      auto const rel = std::vector<uint32_t>(1, 0x925d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x925d);
      auto const rel = std::vector<uint32_t>(1, 0x9ce8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ce8);
      auto const rel = std::vector<uint32_t>(1, 0x53b2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53b2);
      auto const rel = std::vector<uint32_t>(1, 0x66a6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x66a6);
      auto const rel = std::vector<uint32_t>(1, 0x6b74);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b74);
      auto const rel = std::vector<uint32_t>(1, 0x746e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x746e);
      auto const rel = std::vector<uint32_t>(1, 0x7d9f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d9f);
      auto const rel = std::vector<uint32_t>(1, 0x8727);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8727);
      auto const rel = std::vector<uint32_t>(1, 0x8777);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8777);
      auto const rel = std::vector<uint32_t>(1, 0x52f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52f5);
      auto const rel = std::vector<uint32_t>(1, 0x66c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x66c6);
      auto const rel = std::vector<uint32_t>(1, 0x6b77);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b77);
      auto const rel = std::vector<uint32_t>(1, 0x7be5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7be5);
      auto const rel = std::vector<uint32_t>(1, 0x96b7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96b7);
      auto const rel = std::vector<uint32_t>(1, 0x9d17);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9d17);
      auto const rel = std::vector<uint32_t>(1, 0x5dc1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5dc1);
      auto const rel = std::vector<uint32_t>(1, 0x6aaa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6aaa);
      auto const rel = std::vector<uint32_t>(1, 0x6fff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fff);
      auto const rel = std::vector<uint32_t>(1, 0x7658);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7658);
      auto const rel = std::vector<uint32_t>(1, 0x78ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78ff);
      auto const rel = std::vector<uint32_t>(1, 0x96b8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96b8);
      auto const rel = std::vector<uint32_t>(1, 0x9b01);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b01);
      auto const rel = std::vector<uint32_t>(1, 0x512e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x512e);
      auto const rel = std::vector<uint32_t>(1, 0x66de);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x66de);
      auto const rel = std::vector<uint32_t>(1, 0x6ad4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ad4);
      auto const rel = std::vector<uint32_t>(1, 0x7204);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7204);
      auto const rel = std::vector<uint32_t>(1, 0x72a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72a1);
      auto const rel = std::vector<uint32_t>(1, 0x79b2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79b2);
      auto const rel = std::vector<uint32_t>(1, 0x8807);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8807);
      auto const rel = std::vector<uint32_t>(1, 0x9398);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9398);
      auto const rel = std::vector<uint32_t>(1, 0x56a6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56a6);
      auto const rel = std::vector<uint32_t>(1, 0x58e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x58e2);
      auto const rel = std::vector<uint32_t>(1, 0x650a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x650a);
      auto const rel = std::vector<uint32_t>(1, 0x6adf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6adf);
      auto const rel = std::vector<uint32_t>(1, 0x701d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x701d);
      auto const rel = std::vector<uint32_t>(1, 0x74c5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74c5);
      auto const rel = std::vector<uint32_t>(1, 0x792a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x792a);
      auto const rel = std::vector<uint32_t>(1, 0x85f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x85f6);
      auto const rel = std::vector<uint32_t>(1, 0x9e97);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e97);
      auto const rel = std::vector<uint32_t>(1, 0x6aea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6aea);
      auto const rel = std::vector<uint32_t>(1, 0x720f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x720f);
      auto const rel = std::vector<uint32_t>(1, 0x74d1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74d1);
      auto const rel = std::vector<uint32_t>(1, 0x76aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x76aa);
      auto const rel = std::vector<uint32_t>(1, 0x76ed);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x76ed);
      auto const rel = std::vector<uint32_t>(1, 0x792b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x792b);
      auto const rel = std::vector<uint32_t>(1, 0x7cf2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cf2);
      auto const rel = std::vector<uint32_t>(1, 0x8823);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8823);
      auto const rel = std::vector<uint32_t>(1, 0x5137);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5137);
      auto const rel = std::vector<uint32_t>(1, 0x7667);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7667);
      auto const rel = std::vector<uint32_t>(1, 0x7930);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7930);
      auto const rel = std::vector<uint32_t>(1, 0x9148);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_017)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9148);
      auto const rel = std::vector<uint32_t>(1, 0x9dc5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9dc5);
      auto const rel = std::vector<uint32_t>(1, 0x9e9c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9e9c);
      auto const rel = std::vector<uint32_t>(1, 0x56c7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x56c7);
      auto const rel = std::vector<uint32_t>(1, 0x6526);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6526);
      auto const rel = std::vector<uint32_t>(1, 0x89fb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89fb);
      auto const rel = std::vector<uint32_t>(1, 0x8e92);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e92);
      auto const rel = std::vector<uint32_t>(1, 0x8f62);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f62);
      auto const rel = std::vector<uint32_t>(1, 0x6b10);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b10);
      auto const rel = std::vector<uint32_t>(1, 0x8b88);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b88);
      auto const rel = std::vector<uint32_t>(1, 0x8f63);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f63);
      auto const rel = std::vector<uint32_t>(1, 0x652d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x652d);
      auto const rel = std::vector<uint32_t>(1, 0x74e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x74e5);
      auto const rel = std::vector<uint32_t>(1, 0x9742);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9742);
      auto const rel = std::vector<uint32_t>(1, 0x9c71);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c71);
      auto const rel = std::vector<uint32_t>(1, 0x9c73);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c73);
      auto const rel = std::vector<uint32_t>(1, 0x974b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x974b);
      auto const rel = std::vector<uint32_t>(1, 0x4fe9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fe9);
      auto const rel = std::vector<uint32_t>(1, 0x5006);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5006);
      auto const rel = std::vector<uint32_t>(1, 0x5941);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5941);
      auto const rel = std::vector<uint32_t>(1, 0x8fde);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8fde);
      auto const rel = std::vector<uint32_t>(1, 0x5e18);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e18);
      auto const rel = std::vector<uint32_t>(1, 0x601c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x601c);
      auto const rel = std::vector<uint32_t>(1, 0x6d9f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d9f);
      auto const rel = std::vector<uint32_t>(1, 0x83b2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83b2);
      auto const rel = std::vector<uint32_t>(1, 0x9023);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9023);
      auto const rel = std::vector<uint32_t>(1, 0x68bf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68bf);
      auto const rel = std::vector<uint32_t>(1, 0x8054);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8054);
      auto const rel = std::vector<uint32_t>(1, 0x88e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88e2);
      auto const rel = std::vector<uint32_t>(1, 0x4eb7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4eb7);
      auto const rel = std::vector<uint32_t>(1, 0x55f9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55f9);
      auto const rel = std::vector<uint32_t>(1, 0x5ec9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5ec9);
      auto const rel = std::vector<uint32_t>(1, 0x6169);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6169);
      auto const rel = std::vector<uint32_t>(1, 0x6e93);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e93);
      auto const rel = std::vector<uint32_t>(1, 0x6f23);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f23);
      auto const rel = std::vector<uint32_t>(1, 0x84ee);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x84ee);
      auto const rel = std::vector<uint32_t>(1, 0x5332);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5332);
      auto const rel = std::vector<uint32_t>(1, 0x5969);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5969);
      auto const rel = std::vector<uint32_t>(1, 0x69e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x69e4);
      auto const rel = std::vector<uint32_t>(1, 0x7191);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7191);
      auto const rel = std::vector<uint32_t>(1, 0x899d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x899d);
      auto const rel = std::vector<uint32_t>(1, 0x5286);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5286);
      auto const rel = std::vector<uint32_t>(1, 0x5333);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5333);
      auto const rel = std::vector<uint32_t>(1, 0x5652);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5652);
      auto const rel = std::vector<uint32_t>(1, 0x5afe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5afe);
      auto const rel = std::vector<uint32_t>(1, 0x6190);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6190);
      auto const rel = std::vector<uint32_t>(1, 0x78cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x78cf);
      auto const rel = std::vector<uint32_t>(1, 0x8068);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8068);
      auto const rel = std::vector<uint32_t>(1, 0x806b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x806b);
      auto const rel = std::vector<uint32_t>(1, 0x8933);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8933);
      auto const rel = std::vector<uint32_t>(1, 0x9ca2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9ca2);
      auto const rel = std::vector<uint32_t>(1, 0x6fc2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_018)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fc2);
      auto const rel = std::vector<uint32_t>(1, 0x6fd3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fd3);
      auto const rel = std::vector<uint32_t>(1, 0x7e3a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e3a);
      auto const rel = std::vector<uint32_t>(1, 0x7ff4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ff4);
      auto const rel = std::vector<uint32_t>(1, 0x806e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x806e);
      auto const rel = std::vector<uint32_t>(1, 0x8595);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8595);
      auto const rel = std::vector<uint32_t>(1, 0x878a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x878a);
      auto const rel = std::vector<uint32_t>(1, 0x6ae3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ae3);
      auto const rel = std::vector<uint32_t>(1, 0x71eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x71eb);
      auto const rel = std::vector<uint32_t>(1, 0x806f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x806f);
      auto const rel = std::vector<uint32_t>(1, 0x81c1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81c1);
      auto const rel = std::vector<uint32_t>(1, 0x8b30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8b30);
      auto const rel = std::vector<uint32_t>(1, 0x8e65);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e65);
      auto const rel = std::vector<uint32_t>(1, 0x938c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x938c);
      auto const rel = std::vector<uint32_t>(1, 0x9570);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9570);
      auto const rel = std::vector<uint32_t>(1, 0x7c3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c3e);
      auto const rel = std::vector<uint32_t>(1, 0x880a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x880a);
      auto const rel = std::vector<uint32_t>(1, 0x9b11);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b11);
      auto const rel = std::vector<uint32_t>(1, 0x942e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x942e);
      auto const rel = std::vector<uint32_t>(1, 0x9c31);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c31);
      auto const rel = std::vector<uint32_t>(1, 0x7c62);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c62);
      auto const rel = std::vector<uint32_t>(1, 0x7c68);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c68);
      auto const rel = std::vector<uint32_t>(1, 0x655b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x655b);
      auto const rel = std::vector<uint32_t>(1, 0x740f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x740f);
      auto const rel = std::vector<uint32_t>(1, 0x8138);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8138);
      auto const rel = std::vector<uint32_t>(1, 0x88e3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88e3);
      auto const rel = std::vector<uint32_t>(1, 0x6459);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6459);
      auto const rel = std::vector<uint32_t>(1, 0x7489);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7489);
      auto const rel = std::vector<uint32_t>(1, 0x8539);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8539);
      auto const rel = std::vector<uint32_t>(1, 0x5b1a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b1a);
      auto const rel = std::vector<uint32_t>(1, 0x6582);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6582);
      auto const rel = std::vector<uint32_t>(1, 0x81c9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x81c9);
      auto const rel = std::vector<uint32_t>(1, 0x913b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x913b);
      auto const rel = std::vector<uint32_t>(1, 0x895d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x895d);
      auto const rel = std::vector<uint32_t>(1, 0x7fb7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fb7);
      auto const rel = std::vector<uint32_t>(1, 0x861d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x861d);
      auto const rel = std::vector<uint32_t>(1, 0x861e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x861e);
      auto const rel = std::vector<uint32_t>(1, 0x7ec3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ec3);
      auto const rel = std::vector<uint32_t>(1, 0x70bc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70bc);
      auto const rel = std::vector<uint32_t>(1, 0x604b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x604b);
      auto const rel = std::vector<uint32_t>(1, 0x6d70);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6d70);
      auto const rel = std::vector<uint32_t>(1, 0x6b93);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b93);
      auto const rel = std::vector<uint32_t>(1, 0x50c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x50c6);
      auto const rel = std::vector<uint32_t>(1, 0x581c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x581c);
      auto const rel = std::vector<uint32_t>(1, 0x5aa1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aa1);
      auto const rel = std::vector<uint32_t>(1, 0x6e45);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e45);
      auto const rel = std::vector<uint32_t>(1, 0x8430);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8430);
      auto const rel = std::vector<uint32_t>(1, 0x94fe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x94fe);
      auto const rel = std::vector<uint32_t>(1, 0x695d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x695d);
      auto const rel = std::vector<uint32_t>(1, 0x7149);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7149);
      auto const rel = std::vector<uint32_t>(1, 0x7453);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7453);
      auto const rel = std::vector<uint32_t>(1, 0x6f4b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  TEST(tailoring, zh_pinyin_008_019)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6f4b);
      auto const rel = std::vector<uint32_t>(1, 0x7df4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7df4);
      auto const rel = std::vector<uint32_t>(1, 0x6fb0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6fb0);
      auto const rel = std::vector<uint32_t>(1, 0x932c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x932c);
      auto const rel = std::vector<uint32_t>(1, 0x6bae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6bae);
      auto const rel = std::vector<uint32_t>(1, 0x934a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x934a);
      auto const rel = std::vector<uint32_t>(1, 0x93c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x93c8);
      auto const rel = std::vector<uint32_t>(1, 0x7032);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7032);
      auto const rel = std::vector<uint32_t>(1, 0x9c0a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9c0a);
      auto const rel = std::vector<uint32_t>(1, 0x6200);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6200);
      auto const rel = std::vector<uint32_t>(1, 0x7e9e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7e9e);
      auto const rel = std::vector<uint32_t>(1, 0x826f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x826f);
      auto const rel = std::vector<uint32_t>(1, 0x4fcd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4fcd);
      auto const rel = std::vector<uint32_t>(1, 0x51c9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51c9);
      auto const rel = std::vector<uint32_t>(1, 0x6881);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6881);
      auto const rel = std::vector<uint32_t>(1, 0x6dbc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dbc);
      auto const rel = std::vector<uint32_t>(1, 0x690b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x690b);
      auto const rel = std::vector<uint32_t>(1, 0x8f8c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f8c);
      auto const rel = std::vector<uint32_t>(1, 0x7cae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cae);
      auto const rel = std::vector<uint32_t>(1, 0x7cb1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7cb1);
      auto const rel = std::vector<uint32_t>(1, 0x589a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x589a);
      auto const rel = std::vector<uint32_t>(1, 0x7da1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7da1);
      auto const rel = std::vector<uint32_t>(1, 0x8e09);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8e09);
      auto const rel = std::vector<uint32_t>(1, 0x6a11);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6a11);
      auto const rel = std::vector<uint32_t>(1, 0x8f2c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f2c);
      auto const rel = std::vector<uint32_t>(1, 0x7ce7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ce7);
      auto const rel = std::vector<uint32_t>(1, 0x4e21);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e21);
      auto const rel = std::vector<uint32_t>(1, 0x4e24);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e24);
      auto const rel = std::vector<uint32_t>(1, 0x5169);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5169);
      auto const rel = std::vector<uint32_t>(1, 0x5521);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5521);
      auto const rel = std::vector<uint32_t>(1, 0x5562);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5562);
      auto const rel = std::vector<uint32_t>(1, 0x639a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x639a);
      auto const rel = std::vector<uint32_t>(1, 0x813c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x813c);
      auto const rel = std::vector<uint32_t>(1, 0x88f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88f2);
      auto const rel = std::vector<uint32_t>(1, 0x7dc9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7dc9);
      auto const rel = std::vector<uint32_t>(1, 0x873d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x873d);
      auto const rel = std::vector<uint32_t>(1, 0x9b49);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b49);
      auto const rel = std::vector<uint32_t>(1, 0x9b4e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b4e);
      auto const rel = std::vector<uint32_t>(1, 0x4eae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4eae);
      auto const rel = std::vector<uint32_t>(1, 0x54f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x54f4);
      auto const rel = std::vector<uint32_t>(1, 0x60a2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60a2);
      auto const rel = std::vector<uint32_t>(1, 0x8c05);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c05);
      auto const rel = std::vector<uint32_t>(1, 0x8f86);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f86);
      auto const rel = std::vector<uint32_t>(1, 0x55a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a8);
      auto const rel = std::vector<uint32_t>(1, 0x667e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x667e);
      auto const rel = std::vector<uint32_t>(1, 0x6e78);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e78);
      auto const rel = std::vector<uint32_t>(1, 0x91cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91cf);
      auto const rel = std::vector<uint32_t>(1, 0x8f0c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f0c);
      auto const rel = std::vector<uint32_t>(1, 0x8ad2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ad2);
      auto const rel = std::vector<uint32_t>(1, 0x8f1b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8f1b);
      auto const rel = std::vector<uint32_t>(1, 0x9344);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9344);
      auto const rel = std::vector<uint32_t>(1, 0x7177);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  