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::big5han_collation_tailoring());
      return tailored_collation_table(
          table_str,
          "zh::big5han_collation_tailoring()", error, warning);
  #else
      if (!exists(boost::filesystem::path("zh_big5han.table"))) {
          string const table_str(data::zh::big5han_collation_tailoring());
          collation_table table = tailored_collation_table(
              table_str,
              "zh::big5han_collation_tailoring()", error, warning);
          save_table(table, "zh_big5han.table.7");
          boost::filesystem::rename("zh_big5han.table.7", "zh_big5han.table");
      }
      return load_table("zh_big5han.table");
  #endif
  }
  collation_table const & table()
  {
      static collation_table retval = make_save_load_table();
      return retval;
  }
  TEST(tailoring, zh_big5han_006_000)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d0f);
      auto const rel = std::vector<uint32_t>(1, 0x7d0c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d0c);
      auto const rel = std::vector<uint32_t>(1, 0x7f5c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f5c);
      auto const rel = std::vector<uint32_t>(1, 0x7f61);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f61);
      auto const rel = std::vector<uint32_t>(1, 0x7f5e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f5e);
      auto const rel = std::vector<uint32_t>(1, 0x7f60);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f60);
      auto const rel = std::vector<uint32_t>(1, 0x7f5d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f5d);
      auto const rel = std::vector<uint32_t>(1, 0x7f5b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f5b);
      auto const rel = std::vector<uint32_t>(1, 0x7f96);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f96);
      auto const rel = std::vector<uint32_t>(1, 0x7f92);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f92);
      auto const rel = std::vector<uint32_t>(1, 0x7fc3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fc3);
      auto const rel = std::vector<uint32_t>(1, 0x7fc2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fc2);
      auto const rel = std::vector<uint32_t>(1, 0x7fc0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fc0);
      auto const rel = std::vector<uint32_t>(1, 0x8016);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8016);
      auto const rel = std::vector<uint32_t>(1, 0x803e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x803e);
      auto const rel = std::vector<uint32_t>(1, 0x8039);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8039);
      auto const rel = std::vector<uint32_t>(1, 0x80fa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80fa);
      auto const rel = std::vector<uint32_t>(1, 0x80f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80f2);
      auto const rel = std::vector<uint32_t>(1, 0x80f9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80f9);
      auto const rel = std::vector<uint32_t>(1, 0x80f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80f5);
      auto const rel = std::vector<uint32_t>(1, 0x8101);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8101);
      auto const rel = std::vector<uint32_t>(1, 0x80fb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x80fb);
      auto const rel = std::vector<uint32_t>(1, 0x8100);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8100);
      auto const rel = std::vector<uint32_t>(1, 0x8201);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8201);
      auto const rel = std::vector<uint32_t>(1, 0x822f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x822f);
      auto const rel = std::vector<uint32_t>(1, 0x8225);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8225);
      auto const rel = std::vector<uint32_t>(1, 0x8333);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8333);
      auto const rel = std::vector<uint32_t>(1, 0x832d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x832d);
      auto const rel = std::vector<uint32_t>(1, 0x8344);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8344);
      auto const rel = std::vector<uint32_t>(1, 0x8319);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8319);
      auto const rel = std::vector<uint32_t>(1, 0x8351);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8351);
      auto const rel = std::vector<uint32_t>(1, 0x8325);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8325);
      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, 0x833f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x833f);
      auto const rel = std::vector<uint32_t>(1, 0x8341);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8341);
      auto const rel = std::vector<uint32_t>(1, 0x8326);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8326);
      auto const rel = std::vector<uint32_t>(1, 0x831c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x831c);
      auto const rel = std::vector<uint32_t>(1, 0x8322);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8322);
      auto const rel = std::vector<uint32_t>(1, 0x8342);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8342);
      auto const rel = std::vector<uint32_t>(1, 0x834e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x834e);
      auto const rel = std::vector<uint32_t>(1, 0x831b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x831b);
      auto const rel = std::vector<uint32_t>(1, 0x832a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x832a);
      auto const rel = std::vector<uint32_t>(1, 0x8308);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8308);
      auto const rel = std::vector<uint32_t>(1, 0x833c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x833c);
      auto const rel = std::vector<uint32_t>(1, 0x834d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x834d);
      auto const rel = std::vector<uint32_t>(1, 0x8316);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8316);
      auto const rel = std::vector<uint32_t>(1, 0x8324);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8324);
      auto const rel = std::vector<uint32_t>(1, 0x8320);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8320);
      auto const rel = std::vector<uint32_t>(1, 0x8337);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8337);
      auto const rel = std::vector<uint32_t>(1, 0x832f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x832f);
      auto const rel = std::vector<uint32_t>(1, 0x8329);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8329);
      auto const rel = std::vector<uint32_t>(1, 0x8347);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_001)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8347);
      auto const rel = std::vector<uint32_t>(1, 0x8345);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8345);
      auto const rel = std::vector<uint32_t>(1, 0x834c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x834c);
      auto const rel = std::vector<uint32_t>(1, 0x8353);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8353);
      auto const rel = std::vector<uint32_t>(1, 0x831e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x831e);
      auto const rel = std::vector<uint32_t>(1, 0x832c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x832c);
      auto const rel = std::vector<uint32_t>(1, 0x834b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x834b);
      auto const rel = std::vector<uint32_t>(1, 0x8327);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8327);
      auto const rel = std::vector<uint32_t>(1, 0x8348);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8348);
      auto const rel = std::vector<uint32_t>(1, 0x8653);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8653);
      auto const rel = std::vector<uint32_t>(1, 0x8652);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8652);
      auto const rel = std::vector<uint32_t>(1, 0x86a2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86a2);
      auto const rel = std::vector<uint32_t>(1, 0x86a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86a8);
      auto const rel = std::vector<uint32_t>(1, 0x8696);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8696);
      auto const rel = std::vector<uint32_t>(1, 0x868d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x868d);
      auto const rel = std::vector<uint32_t>(1, 0x8691);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8691);
      auto const rel = std::vector<uint32_t>(1, 0x869e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x869e);
      auto const rel = std::vector<uint32_t>(1, 0x8687);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8687);
      auto const rel = std::vector<uint32_t>(1, 0x8697);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8697);
      auto const rel = std::vector<uint32_t>(1, 0x8686);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8686);
      auto const rel = std::vector<uint32_t>(1, 0x868b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x868b);
      auto const rel = std::vector<uint32_t>(1, 0x869a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x869a);
      auto const rel = std::vector<uint32_t>(1, 0x8685);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8685);
      auto const rel = std::vector<uint32_t>(1, 0x86a5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86a5);
      auto const rel = std::vector<uint32_t>(1, 0x8699);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8699);
      auto const rel = std::vector<uint32_t>(1, 0x86a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86a1);
      auto const rel = std::vector<uint32_t>(1, 0x86a7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86a7);
      auto const rel = std::vector<uint32_t>(1, 0x8695);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8695);
      auto const rel = std::vector<uint32_t>(1, 0x8698);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8698);
      auto const rel = std::vector<uint32_t>(1, 0x868e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x868e);
      auto const rel = std::vector<uint32_t>(1, 0x869d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x869d);
      auto const rel = std::vector<uint32_t>(1, 0x8690);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8690);
      auto const rel = std::vector<uint32_t>(1, 0x8694);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8694);
      auto const rel = std::vector<uint32_t>(1, 0x8843);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8843);
      auto const rel = std::vector<uint32_t>(1, 0x8844);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8844);
      auto const rel = std::vector<uint32_t>(1, 0x886d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x886d);
      auto const rel = std::vector<uint32_t>(1, 0x8875);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8875);
      auto const rel = std::vector<uint32_t>(1, 0x8876);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8876);
      auto const rel = std::vector<uint32_t>(1, 0x8872);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8872);
      auto const rel = std::vector<uint32_t>(1, 0x8880);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8880);
      auto const rel = std::vector<uint32_t>(1, 0x8871);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8871);
      auto const rel = std::vector<uint32_t>(1, 0x887f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x887f);
      auto const rel = std::vector<uint32_t>(1, 0x886f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x886f);
      auto const rel = std::vector<uint32_t>(1, 0x8883);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8883);
      auto const rel = std::vector<uint32_t>(1, 0x887e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x887e);
      auto const rel = std::vector<uint32_t>(1, 0x8874);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8874);
      auto const rel = std::vector<uint32_t>(1, 0x887c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x887c);
      auto const rel = std::vector<uint32_t>(1, 0x8a12);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a12);
      auto const rel = std::vector<uint32_t>(1, 0x8c47);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c47);
      auto const rel = std::vector<uint32_t>(1, 0x8c57);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c57);
      auto const rel = std::vector<uint32_t>(1, 0x8c7b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c7b);
      auto const rel = std::vector<uint32_t>(1, 0x8ca4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_002)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ca4);
      auto const rel = std::vector<uint32_t>(1, 0x8ca3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ca3);
      auto const rel = std::vector<uint32_t>(1, 0x8d76);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d76);
      auto const rel = std::vector<uint32_t>(1, 0x8d78);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d78);
      auto const rel = std::vector<uint32_t>(1, 0x8db5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8db5);
      auto const rel = std::vector<uint32_t>(1, 0x8db7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8db7);
      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, 0x8ed1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ed1);
      auto const rel = std::vector<uint32_t>(1, 0x8ed3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ed3);
      auto const rel = std::vector<uint32_t>(1, 0x8ffe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ffe);
      auto const rel = std::vector<uint32_t>(1, 0x8ff5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ff5);
      auto const rel = std::vector<uint32_t>(1, 0x9002);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9002);
      auto const rel = std::vector<uint32_t>(1, 0x8fff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8fff);
      auto const rel = std::vector<uint32_t>(1, 0x8ffb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ffb);
      auto const rel = std::vector<uint32_t>(1, 0x9004);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9004);
      auto const rel = std::vector<uint32_t>(1, 0x8ffc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ffc);
      auto const rel = std::vector<uint32_t>(1, 0x8ff6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ff6);
      auto const rel = std::vector<uint32_t>(1, 0x90d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d6);
      auto const rel = std::vector<uint32_t>(1, 0x90e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e0);
      auto const rel = std::vector<uint32_t>(1, 0x90d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d9);
      auto const rel = std::vector<uint32_t>(1, 0x90da);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90da);
      auto const rel = std::vector<uint32_t>(1, 0x90e3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e3);
      auto const rel = std::vector<uint32_t>(1, 0x90df);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90df);
      auto const rel = std::vector<uint32_t>(1, 0x90e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e5);
      auto const rel = std::vector<uint32_t>(1, 0x90d8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d8);
      auto const rel = std::vector<uint32_t>(1, 0x90db);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90db);
      auto const rel = std::vector<uint32_t>(1, 0x90d7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d7);
      auto const rel = std::vector<uint32_t>(1, 0x90dc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90dc);
      auto const rel = std::vector<uint32_t>(1, 0x90e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e4);
      auto const rel = std::vector<uint32_t>(1, 0x9150);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9150);
      auto const rel = std::vector<uint32_t>(1, 0x914e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x914e);
      auto const rel = std::vector<uint32_t>(1, 0x914f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x914f);
      auto const rel = std::vector<uint32_t>(1, 0x91d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91d5);
      auto const rel = std::vector<uint32_t>(1, 0x91e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91e2);
      auto const rel = std::vector<uint32_t>(1, 0x91da);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91da);
      auto const rel = std::vector<uint32_t>(1, 0x965c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x965c);
      auto const rel = std::vector<uint32_t>(1, 0x965f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x965f);
      auto const rel = std::vector<uint32_t>(1, 0x96bc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96bc);
      auto const rel = std::vector<uint32_t>(1, 0x98e3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x98e3);
      auto const rel = std::vector<uint32_t>(1, 0x9adf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9adf);
      auto const rel = std::vector<uint32_t>(1, 0x9b2f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9b2f);
      auto const rel = std::vector<uint32_t>(1, 0x4e7f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x4e7f);
      auto const rel = std::vector<uint32_t>(1, 0x5070);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5070);
      auto const rel = std::vector<uint32_t>(1, 0x506a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x506a);
      auto const rel = std::vector<uint32_t>(1, 0x5061);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5061);
      auto const rel = std::vector<uint32_t>(1, 0x505e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x505e);
      auto const rel = std::vector<uint32_t>(1, 0x5060);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5060);
      auto const rel = std::vector<uint32_t>(1, 0x5053);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5053);
      auto const rel = std::vector<uint32_t>(1, 0x504b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x504b);
      auto const rel = std::vector<uint32_t>(1, 0x505d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x505d);
      auto const rel = std::vector<uint32_t>(1, 0x5072);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5072);
      auto const rel = std::vector<uint32_t>(1, 0x5048);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_003)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5048);
      auto const rel = std::vector<uint32_t>(1, 0x504d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x504d);
      auto const rel = std::vector<uint32_t>(1, 0x5041);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5041);
      auto const rel = std::vector<uint32_t>(1, 0x505b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x505b);
      auto const rel = std::vector<uint32_t>(1, 0x504a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x504a);
      auto const rel = std::vector<uint32_t>(1, 0x5062);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5062);
      auto const rel = std::vector<uint32_t>(1, 0x5015);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5015);
      auto const rel = std::vector<uint32_t>(1, 0x5045);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5045);
      auto const rel = std::vector<uint32_t>(1, 0x505f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x505f);
      auto const rel = std::vector<uint32_t>(1, 0x5069);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5069);
      auto const rel = std::vector<uint32_t>(1, 0x506b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x506b);
      auto const rel = std::vector<uint32_t>(1, 0x5063);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5063);
      auto const rel = std::vector<uint32_t>(1, 0x5064);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5064);
      auto const rel = std::vector<uint32_t>(1, 0x5046);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5046);
      auto const rel = std::vector<uint32_t>(1, 0x5040);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5040);
      auto const rel = std::vector<uint32_t>(1, 0x506e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x506e);
      auto const rel = std::vector<uint32_t>(1, 0x5073);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5073);
      auto const rel = std::vector<uint32_t>(1, 0x5057);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5057);
      auto const rel = std::vector<uint32_t>(1, 0x5051);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5051);
      auto const rel = std::vector<uint32_t>(1, 0x51d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51d0);
      auto const rel = std::vector<uint32_t>(1, 0x526b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x526b);
      auto const rel = std::vector<uint32_t>(1, 0x526d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x526d);
      auto const rel = std::vector<uint32_t>(1, 0x526c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x526c);
      auto const rel = std::vector<uint32_t>(1, 0x526e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x526e);
      auto const rel = std::vector<uint32_t>(1, 0x52d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52d6);
      auto const rel = std::vector<uint32_t>(1, 0x52d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x52d3);
      auto const rel = std::vector<uint32_t>(1, 0x532d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x532d);
      auto const rel = std::vector<uint32_t>(1, 0x539c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x539c);
      auto const rel = std::vector<uint32_t>(1, 0x5575);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5575);
      auto const rel = std::vector<uint32_t>(1, 0x5576);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5576);
      auto const rel = std::vector<uint32_t>(1, 0x553c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x553c);
      auto const rel = std::vector<uint32_t>(1, 0x554d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x554d);
      auto const rel = std::vector<uint32_t>(1, 0x5550);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5550);
      auto const rel = std::vector<uint32_t>(1, 0x5534);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5534);
      auto const rel = std::vector<uint32_t>(1, 0x552a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x552a);
      auto const rel = std::vector<uint32_t>(1, 0x5551);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5551);
      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, 0x5536);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5536);
      auto const rel = std::vector<uint32_t>(1, 0x5535);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5535);
      auto const rel = std::vector<uint32_t>(1, 0x5530);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5530);
      auto const rel = std::vector<uint32_t>(1, 0x5552);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5552);
      auto const rel = std::vector<uint32_t>(1, 0x5545);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5545);
      auto const rel = std::vector<uint32_t>(1, 0x550c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x550c);
      auto const rel = std::vector<uint32_t>(1, 0x5532);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5532);
      auto const rel = std::vector<uint32_t>(1, 0x5565);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5565);
      auto const rel = std::vector<uint32_t>(1, 0x554e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x554e);
      auto const rel = std::vector<uint32_t>(1, 0x5539);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5539);
      auto const rel = std::vector<uint32_t>(1, 0x5548);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5548);
      auto const rel = std::vector<uint32_t>(1, 0x552d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x552d);
      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, 0x5540);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5540);
      auto const rel = std::vector<uint32_t>(1, 0x554b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_004)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x554b);
      auto const rel = std::vector<uint32_t>(1, 0x570a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x570a);
      auto const rel = std::vector<uint32_t>(1, 0x5707);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5707);
      auto const rel = std::vector<uint32_t>(1, 0x57fb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57fb);
      auto const rel = std::vector<uint32_t>(1, 0x5814);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5814);
      auto const rel = std::vector<uint32_t>(1, 0x57e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e2);
      auto const rel = std::vector<uint32_t>(1, 0x57f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f6);
      auto const rel = std::vector<uint32_t>(1, 0x57dc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57dc);
      auto const rel = std::vector<uint32_t>(1, 0x57f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f4);
      auto const rel = std::vector<uint32_t>(1, 0x5800);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5800);
      auto const rel = std::vector<uint32_t>(1, 0x57ed);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57ed);
      auto const rel = std::vector<uint32_t>(1, 0x57fd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57fd);
      auto const rel = std::vector<uint32_t>(1, 0x5808);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5808);
      auto const rel = std::vector<uint32_t>(1, 0x57f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f8);
      auto const rel = std::vector<uint32_t>(1, 0x580b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x580b);
      auto const rel = std::vector<uint32_t>(1, 0x57f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f3);
      auto const rel = std::vector<uint32_t>(1, 0x57cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57cf);
      auto const rel = std::vector<uint32_t>(1, 0x5807);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5807);
      auto const rel = std::vector<uint32_t>(1, 0x57ee);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57ee);
      auto const rel = std::vector<uint32_t>(1, 0x57e3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e3);
      auto const rel = std::vector<uint32_t>(1, 0x57f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f2);
      auto const rel = std::vector<uint32_t>(1, 0x57e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e5);
      auto const rel = std::vector<uint32_t>(1, 0x57ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57ec);
      auto const rel = std::vector<uint32_t>(1, 0x57e1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e1);
      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, 0x57fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57fc);
      auto const rel = std::vector<uint32_t>(1, 0x5810);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5810);
      auto const rel = std::vector<uint32_t>(1, 0x57e7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e7);
      auto const rel = std::vector<uint32_t>(1, 0x5801);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5801);
      auto const rel = std::vector<uint32_t>(1, 0x580c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x580c);
      auto const rel = std::vector<uint32_t>(1, 0x57f1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f1);
      auto const rel = std::vector<uint32_t>(1, 0x57e9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57e9);
      auto const rel = std::vector<uint32_t>(1, 0x57f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f0);
      auto const rel = std::vector<uint32_t>(1, 0x580d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x580d);
      auto const rel = std::vector<uint32_t>(1, 0x5804);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5804);
      auto const rel = std::vector<uint32_t>(1, 0x595c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x595c);
      auto const rel = std::vector<uint32_t>(1, 0x5a60);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a60);
      auto const rel = std::vector<uint32_t>(1, 0x5a58);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a58);
      auto const rel = std::vector<uint32_t>(1, 0x5a55);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a55);
      auto const rel = std::vector<uint32_t>(1, 0x5a67);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a67);
      auto const rel = std::vector<uint32_t>(1, 0x5a5e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a5e);
      auto const rel = std::vector<uint32_t>(1, 0x5a38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a38);
      auto const rel = std::vector<uint32_t>(1, 0x5a35);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a35);
      auto const rel = std::vector<uint32_t>(1, 0x5a6d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a6d);
      auto const rel = std::vector<uint32_t>(1, 0x5a50);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a50);
      auto const rel = std::vector<uint32_t>(1, 0x5a5f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a5f);
      auto const rel = std::vector<uint32_t>(1, 0x5a65);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a65);
      auto const rel = std::vector<uint32_t>(1, 0x5a6c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a6c);
      auto const rel = std::vector<uint32_t>(1, 0x5a53);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a53);
      auto const rel = std::vector<uint32_t>(1, 0x5a64);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a64);
      auto const rel = std::vector<uint32_t>(1, 0x5a57);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a57);
      auto const rel = std::vector<uint32_t>(1, 0x5a43);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_005)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a43);
      auto const rel = std::vector<uint32_t>(1, 0x5a5d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a5d);
      auto const rel = std::vector<uint32_t>(1, 0x5a52);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a52);
      auto const rel = std::vector<uint32_t>(1, 0x5a44);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a44);
      auto const rel = std::vector<uint32_t>(1, 0x5a5b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a5b);
      auto const rel = std::vector<uint32_t>(1, 0x5a48);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a48);
      auto const rel = std::vector<uint32_t>(1, 0x5a8e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a8e);
      auto const rel = std::vector<uint32_t>(1, 0x5a3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a3e);
      auto const rel = std::vector<uint32_t>(1, 0x5a4d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a4d);
      auto const rel = std::vector<uint32_t>(1, 0x5a39);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a39);
      auto const rel = std::vector<uint32_t>(1, 0x5a4c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a4c);
      auto const rel = std::vector<uint32_t>(1, 0x5a70);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a70);
      auto const rel = std::vector<uint32_t>(1, 0x5a69);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a69);
      auto const rel = std::vector<uint32_t>(1, 0x5a47);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a47);
      auto const rel = std::vector<uint32_t>(1, 0x5a51);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a51);
      auto const rel = std::vector<uint32_t>(1, 0x5a56);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a56);
      auto const rel = std::vector<uint32_t>(1, 0x5a42);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a42);
      auto const rel = std::vector<uint32_t>(1, 0x5a5c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a5c);
      auto const rel = std::vector<uint32_t>(1, 0x5b72);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b72);
      auto const rel = std::vector<uint32_t>(1, 0x5b6e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5b6e);
      auto const rel = std::vector<uint32_t>(1, 0x5bc1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bc1);
      auto const rel = std::vector<uint32_t>(1, 0x5bc0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bc0);
      auto const rel = std::vector<uint32_t>(1, 0x5c59);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c59);
      auto const rel = std::vector<uint32_t>(1, 0x5d1e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d1e);
      auto const rel = std::vector<uint32_t>(1, 0x5d0b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d0b);
      auto const rel = std::vector<uint32_t>(1, 0x5d1d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d1d);
      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, 0x5d20);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d20);
      auto const rel = std::vector<uint32_t>(1, 0x5d0c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d0c);
      auto const rel = std::vector<uint32_t>(1, 0x5d28);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d28);
      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, 0x5d26);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d26);
      auto const rel = std::vector<uint32_t>(1, 0x5d25);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d25);
      auto const rel = std::vector<uint32_t>(1, 0x5d0f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d0f);
      auto const rel = std::vector<uint32_t>(1, 0x5d30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d30);
      auto const rel = std::vector<uint32_t>(1, 0x5d12);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d12);
      auto const rel = std::vector<uint32_t>(1, 0x5d23);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d23);
      auto const rel = std::vector<uint32_t>(1, 0x5d1f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d1f);
      auto const rel = std::vector<uint32_t>(1, 0x5d2e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d2e);
      auto const rel = std::vector<uint32_t>(1, 0x5e3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e3e);
      auto const rel = std::vector<uint32_t>(1, 0x5e34);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e34);
      auto const rel = std::vector<uint32_t>(1, 0x5eb1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eb1);
      auto const rel = std::vector<uint32_t>(1, 0x5eb4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eb4);
      auto const rel = std::vector<uint32_t>(1, 0x5eb9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eb9);
      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, 0x5eb3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5eb3);
      auto const rel = std::vector<uint32_t>(1, 0x5f36);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f36);
      auto const rel = std::vector<uint32_t>(1, 0x5f38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f38);
      auto const rel = std::vector<uint32_t>(1, 0x5f9b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f9b);
      auto const rel = std::vector<uint32_t>(1, 0x5f96);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f96);
      auto const rel = std::vector<uint32_t>(1, 0x5f9f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f9f);
      auto const rel = std::vector<uint32_t>(1, 0x608a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_006)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x608a);
      auto const rel = std::vector<uint32_t>(1, 0x6090);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6090);
      auto const rel = std::vector<uint32_t>(1, 0x6086);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6086);
      auto const rel = std::vector<uint32_t>(1, 0x60be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60be);
      auto const rel = std::vector<uint32_t>(1, 0x60b0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60b0);
      auto const rel = std::vector<uint32_t>(1, 0x60ba);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60ba);
      auto const rel = std::vector<uint32_t>(1, 0x60d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60d3);
      auto const rel = std::vector<uint32_t>(1, 0x60d4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60d4);
      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, 0x60e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60e4);
      auto const rel = std::vector<uint32_t>(1, 0x60d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60d9);
      auto const rel = std::vector<uint32_t>(1, 0x60dd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60dd);
      auto const rel = std::vector<uint32_t>(1, 0x60c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c8);
      auto const rel = std::vector<uint32_t>(1, 0x60b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60b1);
      auto const rel = std::vector<uint32_t>(1, 0x60db);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60db);
      auto const rel = std::vector<uint32_t>(1, 0x60b7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60b7);
      auto const rel = std::vector<uint32_t>(1, 0x60ca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60ca);
      auto const rel = std::vector<uint32_t>(1, 0x60bf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60bf);
      auto const rel = std::vector<uint32_t>(1, 0x60c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c3);
      auto const rel = std::vector<uint32_t>(1, 0x60cd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60cd);
      auto const rel = std::vector<uint32_t>(1, 0x60c0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c0);
      auto const rel = std::vector<uint32_t>(1, 0x6332);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6332);
      auto const rel = std::vector<uint32_t>(1, 0x6365);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6365);
      auto const rel = std::vector<uint32_t>(1, 0x638a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x638a);
      auto const rel = std::vector<uint32_t>(1, 0x6382);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6382);
      auto const rel = std::vector<uint32_t>(1, 0x637d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x637d);
      auto const rel = std::vector<uint32_t>(1, 0x63bd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63bd);
      auto const rel = std::vector<uint32_t>(1, 0x639e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x639e);
      auto const rel = std::vector<uint32_t>(1, 0x63ad);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ad);
      auto const rel = std::vector<uint32_t>(1, 0x639d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x639d);
      auto const rel = std::vector<uint32_t>(1, 0x6397);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6397);
      auto const rel = std::vector<uint32_t>(1, 0x63ab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ab);
      auto const rel = std::vector<uint32_t>(1, 0x638e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x638e);
      auto const rel = std::vector<uint32_t>(1, 0x636f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x636f);
      auto const rel = std::vector<uint32_t>(1, 0x6387);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6387);
      auto const rel = std::vector<uint32_t>(1, 0x6390);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6390);
      auto const rel = std::vector<uint32_t>(1, 0x636e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x636e);
      auto const rel = std::vector<uint32_t>(1, 0x63af);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63af);
      auto const rel = std::vector<uint32_t>(1, 0x6375);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6375);
      auto const rel = std::vector<uint32_t>(1, 0x639c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x639c);
      auto const rel = std::vector<uint32_t>(1, 0x636d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x636d);
      auto const rel = std::vector<uint32_t>(1, 0x63ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ae);
      auto const rel = std::vector<uint32_t>(1, 0x637c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x637c);
      auto const rel = std::vector<uint32_t>(1, 0x63a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63a4);
      auto const rel = std::vector<uint32_t>(1, 0x633b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x633b);
      auto const rel = std::vector<uint32_t>(1, 0x639f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x639f);
      auto const rel = std::vector<uint32_t>(1, 0x6378);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6378);
      auto const rel = std::vector<uint32_t>(1, 0x6385);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6385);
      auto const rel = std::vector<uint32_t>(1, 0x6381);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6381);
      auto const rel = std::vector<uint32_t>(1, 0x6391);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6391);
      auto const rel = std::vector<uint32_t>(1, 0x638d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x638d);
      auto const rel = std::vector<uint32_t>(1, 0x6370);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_007)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6370);
      auto const rel = std::vector<uint32_t>(1, 0x6553);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6553);
      auto const rel = std::vector<uint32_t>(1, 0x65cd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65cd);
      auto const rel = std::vector<uint32_t>(1, 0x6665);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6665);
      auto const rel = std::vector<uint32_t>(1, 0x6661);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6661);
      auto const rel = std::vector<uint32_t>(1, 0x665b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x665b);
      auto const rel = std::vector<uint32_t>(1, 0x6659);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6659);
      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, 0x6662);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6662);
      auto const rel = std::vector<uint32_t>(1, 0x6718);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6718);
      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, 0x6887);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6887);
      auto const rel = std::vector<uint32_t>(1, 0x6890);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6890);
      auto const rel = std::vector<uint32_t>(1, 0x689c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x689c);
      auto const rel = std::vector<uint32_t>(1, 0x686d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x686d);
      auto const rel = std::vector<uint32_t>(1, 0x686e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x686e);
      auto const rel = std::vector<uint32_t>(1, 0x68ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ae);
      auto const rel = std::vector<uint32_t>(1, 0x68ab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ab);
      auto const rel = std::vector<uint32_t>(1, 0x6956);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6956);
      auto const rel = std::vector<uint32_t>(1, 0x686f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x686f);
      auto const rel = std::vector<uint32_t>(1, 0x68a3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68a3);
      auto const rel = std::vector<uint32_t>(1, 0x68ac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ac);
      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, 0x6875);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6875);
      auto const rel = std::vector<uint32_t>(1, 0x6874);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6874);
      auto const rel = std::vector<uint32_t>(1, 0x68b2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68b2);
      auto const rel = std::vector<uint32_t>(1, 0x688f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x688f);
      auto const rel = std::vector<uint32_t>(1, 0x6877);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6877);
      auto const rel = std::vector<uint32_t>(1, 0x6892);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6892);
      auto const rel = std::vector<uint32_t>(1, 0x687c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x687c);
      auto const rel = std::vector<uint32_t>(1, 0x686b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x686b);
      auto const rel = std::vector<uint32_t>(1, 0x6872);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6872);
      auto const rel = std::vector<uint32_t>(1, 0x68aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68aa);
      auto const rel = std::vector<uint32_t>(1, 0x6880);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6880);
      auto const rel = std::vector<uint32_t>(1, 0x6871);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6871);
      auto const rel = std::vector<uint32_t>(1, 0x687e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x687e);
      auto const rel = std::vector<uint32_t>(1, 0x689b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x689b);
      auto const rel = std::vector<uint32_t>(1, 0x6896);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6896);
      auto const rel = std::vector<uint32_t>(1, 0x688b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x688b);
      auto const rel = std::vector<uint32_t>(1, 0x68a0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68a0);
      auto const rel = std::vector<uint32_t>(1, 0x6889);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6889);
      auto const rel = std::vector<uint32_t>(1, 0x68a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68a4);
      auto const rel = std::vector<uint32_t>(1, 0x6878);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6878);
      auto const rel = std::vector<uint32_t>(1, 0x687b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x687b);
      auto const rel = std::vector<uint32_t>(1, 0x6891);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6891);
      auto const rel = std::vector<uint32_t>(1, 0x688c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x688c);
      auto const rel = std::vector<uint32_t>(1, 0x688a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x688a);
      auto const rel = std::vector<uint32_t>(1, 0x687d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x687d);
      auto const rel = std::vector<uint32_t>(1, 0x6b36);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b36);
      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, 0x6b37);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b37);
      auto const rel = std::vector<uint32_t>(1, 0x6b38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_008)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b38);
      auto const rel = std::vector<uint32_t>(1, 0x6b91);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b91);
      auto const rel = std::vector<uint32_t>(1, 0x6b8f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b8f);
      auto const rel = std::vector<uint32_t>(1, 0x6b8d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b8d);
      auto const rel = std::vector<uint32_t>(1, 0x6b8e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b8e);
      auto const rel = std::vector<uint32_t>(1, 0x6b8c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6b8c);
      auto const rel = std::vector<uint32_t>(1, 0x6c2a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6c2a);
      auto const rel = std::vector<uint32_t>(1, 0x6dc0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dc0);
      auto const rel = std::vector<uint32_t>(1, 0x6dab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dab);
      auto const rel = std::vector<uint32_t>(1, 0x6db4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6db4);
      auto const rel = std::vector<uint32_t>(1, 0x6db3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6db3);
      auto const rel = std::vector<uint32_t>(1, 0x6e74);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e74);
      auto const rel = std::vector<uint32_t>(1, 0x6dac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dac);
      auto const rel = std::vector<uint32_t>(1, 0x6de9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6de9);
      auto const rel = std::vector<uint32_t>(1, 0x6de2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6de2);
      auto const rel = std::vector<uint32_t>(1, 0x6db7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6db7);
      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, 0x6dd4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd4);
      auto const rel = std::vector<uint32_t>(1, 0x6e00);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6e00);
      auto const rel = std::vector<uint32_t>(1, 0x6dc8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dc8);
      auto const rel = std::vector<uint32_t>(1, 0x6de0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6de0);
      auto const rel = std::vector<uint32_t>(1, 0x6ddf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ddf);
      auto const rel = std::vector<uint32_t>(1, 0x6dd6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd6);
      auto const rel = std::vector<uint32_t>(1, 0x6dbe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dbe);
      auto const rel = std::vector<uint32_t>(1, 0x6de5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6de5);
      auto const rel = std::vector<uint32_t>(1, 0x6ddc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ddc);
      auto const rel = std::vector<uint32_t>(1, 0x6ddd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ddd);
      auto const rel = std::vector<uint32_t>(1, 0x6ddb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ddb);
      auto const rel = std::vector<uint32_t>(1, 0x6df4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6df4);
      auto const rel = std::vector<uint32_t>(1, 0x6dca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dca);
      auto const rel = std::vector<uint32_t>(1, 0x6dbd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dbd);
      auto const rel = std::vector<uint32_t>(1, 0x6ded);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6ded);
      auto const rel = std::vector<uint32_t>(1, 0x6df0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6df0);
      auto const rel = std::vector<uint32_t>(1, 0x6dba);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dba);
      auto const rel = std::vector<uint32_t>(1, 0x6dd5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd5);
      auto const rel = std::vector<uint32_t>(1, 0x6dc2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dc2);
      auto const rel = std::vector<uint32_t>(1, 0x6dcf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dcf);
      auto const rel = std::vector<uint32_t>(1, 0x6dc9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dc9);
      auto const rel = std::vector<uint32_t>(1, 0x6dd0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd0);
      auto const rel = std::vector<uint32_t>(1, 0x6df2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6df2);
      auto const rel = std::vector<uint32_t>(1, 0x6dd3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd3);
      auto const rel = std::vector<uint32_t>(1, 0x6dfd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dfd);
      auto const rel = std::vector<uint32_t>(1, 0x6dd7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dd7);
      auto const rel = std::vector<uint32_t>(1, 0x6dcd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dcd);
      auto const rel = std::vector<uint32_t>(1, 0x6de3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6de3);
      auto const rel = std::vector<uint32_t>(1, 0x6dbb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6dbb);
      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, 0x710d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x710d);
      auto const rel = std::vector<uint32_t>(1, 0x70f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f7);
      auto const rel = std::vector<uint32_t>(1, 0x7117);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7117);
      auto const rel = std::vector<uint32_t>(1, 0x70f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f4);
      auto const rel = std::vector<uint32_t>(1, 0x710c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_009)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x710c);
      auto const rel = std::vector<uint32_t>(1, 0x70f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f0);
      auto const rel = std::vector<uint32_t>(1, 0x7104);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7104);
      auto const rel = std::vector<uint32_t>(1, 0x70f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f3);
      auto const rel = std::vector<uint32_t>(1, 0x7110);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7110);
      auto const rel = std::vector<uint32_t>(1, 0x70fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70fc);
      auto const rel = std::vector<uint32_t>(1, 0x70ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70ff);
      auto const rel = std::vector<uint32_t>(1, 0x7106);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7106);
      auto const rel = std::vector<uint32_t>(1, 0x7113);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7113);
      auto const rel = std::vector<uint32_t>(1, 0x7100);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7100);
      auto const rel = std::vector<uint32_t>(1, 0x70f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f8);
      auto const rel = std::vector<uint32_t>(1, 0x70f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x70f6);
      auto const rel = std::vector<uint32_t>(1, 0x710b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x710b);
      auto const rel = std::vector<uint32_t>(1, 0x7102);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7102);
      auto const rel = std::vector<uint32_t>(1, 0x710e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x710e);
      auto const rel = std::vector<uint32_t>(1, 0x727e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x727e);
      auto const rel = std::vector<uint32_t>(1, 0x727b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x727b);
      auto const rel = std::vector<uint32_t>(1, 0x727c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x727c);
      auto const rel = std::vector<uint32_t>(1, 0x727f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x727f);
      auto const rel = std::vector<uint32_t>(1, 0x731d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x731d);
      auto const rel = std::vector<uint32_t>(1, 0x7317);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7317);
      auto const rel = std::vector<uint32_t>(1, 0x7307);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7307);
      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, 0x7318);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7318);
      auto const rel = std::vector<uint32_t>(1, 0x730a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x730a);
      auto const rel = std::vector<uint32_t>(1, 0x7308);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7308);
      auto const rel = std::vector<uint32_t>(1, 0x72ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x72ff);
      auto const rel = std::vector<uint32_t>(1, 0x730f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x730f);
      auto const rel = std::vector<uint32_t>(1, 0x731e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x731e);
      auto const rel = std::vector<uint32_t>(1, 0x7388);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7388);
      auto const rel = std::vector<uint32_t>(1, 0x73f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73f6);
      auto const rel = std::vector<uint32_t>(1, 0x73f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73f8);
      auto const rel = std::vector<uint32_t>(1, 0x73f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73f5);
      auto const rel = std::vector<uint32_t>(1, 0x7404);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7404);
      auto const rel = std::vector<uint32_t>(1, 0x7401);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7401);
      auto const rel = std::vector<uint32_t>(1, 0x73fd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73fd);
      auto const rel = std::vector<uint32_t>(1, 0x7407);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7407);
      auto const rel = std::vector<uint32_t>(1, 0x7400);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7400);
      auto const rel = std::vector<uint32_t>(1, 0x73fa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73fa);
      auto const rel = std::vector<uint32_t>(1, 0x73fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73fc);
      auto const rel = std::vector<uint32_t>(1, 0x73ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73ff);
      auto const rel = std::vector<uint32_t>(1, 0x740c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x740c);
      auto const rel = std::vector<uint32_t>(1, 0x740b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x740b);
      auto const rel = std::vector<uint32_t>(1, 0x73f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x73f4);
      auto const rel = std::vector<uint32_t>(1, 0x7408);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7408);
      auto const rel = std::vector<uint32_t>(1, 0x7564);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7564);
      auto const rel = std::vector<uint32_t>(1, 0x7563);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7563);
      auto const rel = std::vector<uint32_t>(1, 0x75ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75ce);
      auto const rel = std::vector<uint32_t>(1, 0x75d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75d2);
      auto const rel = std::vector<uint32_t>(1, 0x75cf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75cf);
      auto const rel = std::vector<uint32_t>(1, 0x75cb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75cb);
      auto const rel = std::vector<uint32_t>(1, 0x75cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_010)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75cc);
      auto const rel = std::vector<uint32_t>(1, 0x75d1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75d1);
      auto const rel = std::vector<uint32_t>(1, 0x75d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x75d0);
      auto const rel = std::vector<uint32_t>(1, 0x768f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x768f);
      auto const rel = std::vector<uint32_t>(1, 0x7689);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7689);
      auto const rel = std::vector<uint32_t>(1, 0x76d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x76d3);
      auto const rel = std::vector<uint32_t>(1, 0x7739);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7739);
      auto const rel = std::vector<uint32_t>(1, 0x772f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x772f);
      auto const rel = std::vector<uint32_t>(1, 0x772d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x772d);
      auto const rel = std::vector<uint32_t>(1, 0x7731);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7731);
      auto const rel = std::vector<uint32_t>(1, 0x7732);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7732);
      auto const rel = std::vector<uint32_t>(1, 0x7734);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7734);
      auto const rel = std::vector<uint32_t>(1, 0x7733);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7733);
      auto const rel = std::vector<uint32_t>(1, 0x773d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x773d);
      auto const rel = std::vector<uint32_t>(1, 0x7725);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7725);
      auto const rel = std::vector<uint32_t>(1, 0x773b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x773b);
      auto const rel = std::vector<uint32_t>(1, 0x7735);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7735);
      auto const rel = std::vector<uint32_t>(1, 0x7848);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7848);
      auto const rel = std::vector<uint32_t>(1, 0x7852);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7852);
      auto const rel = std::vector<uint32_t>(1, 0x7849);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7849);
      auto const rel = std::vector<uint32_t>(1, 0x784d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x784d);
      auto const rel = std::vector<uint32_t>(1, 0x784a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x784a);
      auto const rel = std::vector<uint32_t>(1, 0x784c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x784c);
      auto const rel = std::vector<uint32_t>(1, 0x7826);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7826);
      auto const rel = std::vector<uint32_t>(1, 0x7845);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7845);
      auto const rel = std::vector<uint32_t>(1, 0x7850);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7850);
      auto const rel = std::vector<uint32_t>(1, 0x7964);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7964);
      auto const rel = std::vector<uint32_t>(1, 0x7967);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7967);
      auto const rel = std::vector<uint32_t>(1, 0x7969);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7969);
      auto const rel = std::vector<uint32_t>(1, 0x796a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x796a);
      auto const rel = std::vector<uint32_t>(1, 0x7963);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7963);
      auto const rel = std::vector<uint32_t>(1, 0x796b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x796b);
      auto const rel = std::vector<uint32_t>(1, 0x7961);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7961);
      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, 0x79fa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79fa);
      auto const rel = std::vector<uint32_t>(1, 0x79f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79f8);
      auto const rel = std::vector<uint32_t>(1, 0x79f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79f6);
      auto const rel = std::vector<uint32_t>(1, 0x79f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x79f7);
      auto const rel = std::vector<uint32_t>(1, 0x7a8f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a8f);
      auto const rel = std::vector<uint32_t>(1, 0x7a94);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a94);
      auto const rel = std::vector<uint32_t>(1, 0x7a90);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7a90);
      auto const rel = std::vector<uint32_t>(1, 0x7b35);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b35);
      auto const rel = std::vector<uint32_t>(1, 0x7b47);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b47);
      auto const rel = std::vector<uint32_t>(1, 0x7b34);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b34);
      auto const rel = std::vector<uint32_t>(1, 0x7b25);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b25);
      auto const rel = std::vector<uint32_t>(1, 0x7b30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b30);
      auto const rel = std::vector<uint32_t>(1, 0x7b22);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b22);
      auto const rel = std::vector<uint32_t>(1, 0x7b24);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b24);
      auto const rel = std::vector<uint32_t>(1, 0x7b33);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b33);
      auto const rel = std::vector<uint32_t>(1, 0x7b18);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b18);
      auto const rel = std::vector<uint32_t>(1, 0x7b2a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b2a);
      auto const rel = std::vector<uint32_t>(1, 0x7b1d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_011)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b1d);
      auto const rel = std::vector<uint32_t>(1, 0x7b31);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b31);
      auto const rel = std::vector<uint32_t>(1, 0x7b2b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b2b);
      auto const rel = std::vector<uint32_t>(1, 0x7b2d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b2d);
      auto const rel = std::vector<uint32_t>(1, 0x7b2f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b2f);
      auto const rel = std::vector<uint32_t>(1, 0x7b32);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b32);
      auto const rel = std::vector<uint32_t>(1, 0x7b38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b38);
      auto const rel = std::vector<uint32_t>(1, 0x7b1a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b1a);
      auto const rel = std::vector<uint32_t>(1, 0x7b23);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7b23);
      auto const rel = std::vector<uint32_t>(1, 0x7c94);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c94);
      auto const rel = std::vector<uint32_t>(1, 0x7c98);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c98);
      auto const rel = std::vector<uint32_t>(1, 0x7c96);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7c96);
      auto const rel = std::vector<uint32_t>(1, 0x7ca3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7ca3);
      auto const rel = std::vector<uint32_t>(1, 0x7d35);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d35);
      auto const rel = std::vector<uint32_t>(1, 0x7d3d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d3d);
      auto const rel = std::vector<uint32_t>(1, 0x7d38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d38);
      auto const rel = std::vector<uint32_t>(1, 0x7d36);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d36);
      auto const rel = std::vector<uint32_t>(1, 0x7d3a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d3a);
      auto const rel = std::vector<uint32_t>(1, 0x7d45);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d45);
      auto const rel = std::vector<uint32_t>(1, 0x7d2c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d2c);
      auto const rel = std::vector<uint32_t>(1, 0x7d29);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d29);
      auto const rel = std::vector<uint32_t>(1, 0x7d41);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d41);
      auto const rel = std::vector<uint32_t>(1, 0x7d47);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d47);
      auto const rel = std::vector<uint32_t>(1, 0x7d3e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d3e);
      auto const rel = std::vector<uint32_t>(1, 0x7d3f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d3f);
      auto const rel = std::vector<uint32_t>(1, 0x7d4a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d4a);
      auto const rel = std::vector<uint32_t>(1, 0x7d3b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d3b);
      auto const rel = std::vector<uint32_t>(1, 0x7d28);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7d28);
      auto const rel = std::vector<uint32_t>(1, 0x7f63);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f63);
      auto const rel = std::vector<uint32_t>(1, 0x7f95);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f95);
      auto const rel = std::vector<uint32_t>(1, 0x7f9c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f9c);
      auto const rel = std::vector<uint32_t>(1, 0x7f9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f9d);
      auto const rel = std::vector<uint32_t>(1, 0x7f9b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7f9b);
      auto const rel = std::vector<uint32_t>(1, 0x7fca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fca);
      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, 0x7fcd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fcd);
      auto const rel = std::vector<uint32_t>(1, 0x7fd0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fd0);
      auto const rel = std::vector<uint32_t>(1, 0x7fd1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fd1);
      auto const rel = std::vector<uint32_t>(1, 0x7fc7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fc7);
      auto const rel = std::vector<uint32_t>(1, 0x7fcf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fcf);
      auto const rel = std::vector<uint32_t>(1, 0x7fc9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x7fc9);
      auto const rel = std::vector<uint32_t>(1, 0x801f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x801f);
      auto const rel = std::vector<uint32_t>(1, 0x801e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x801e);
      auto const rel = std::vector<uint32_t>(1, 0x801b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x801b);
      auto const rel = std::vector<uint32_t>(1, 0x8047);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8047);
      auto const rel = std::vector<uint32_t>(1, 0x8043);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8043);
      auto const rel = std::vector<uint32_t>(1, 0x8048);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8048);
      auto const rel = std::vector<uint32_t>(1, 0x8118);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8118);
      auto const rel = std::vector<uint32_t>(1, 0x8125);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8125);
      auto const rel = std::vector<uint32_t>(1, 0x8119);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8119);
      auto const rel = std::vector<uint32_t>(1, 0x811b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x811b);
      auto const rel = std::vector<uint32_t>(1, 0x812d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_012)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x812d);
      auto const rel = std::vector<uint32_t>(1, 0x811f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x811f);
      auto const rel = std::vector<uint32_t>(1, 0x812c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x812c);
      auto const rel = std::vector<uint32_t>(1, 0x811e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x811e);
      auto const rel = std::vector<uint32_t>(1, 0x8121);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8121);
      auto const rel = std::vector<uint32_t>(1, 0x8115);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8115);
      auto const rel = std::vector<uint32_t>(1, 0x8127);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8127);
      auto const rel = std::vector<uint32_t>(1, 0x811d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x811d);
      auto const rel = std::vector<uint32_t>(1, 0x8122);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8122);
      auto const rel = std::vector<uint32_t>(1, 0x8211);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8211);
      auto const rel = std::vector<uint32_t>(1, 0x8238);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8238);
      auto const rel = std::vector<uint32_t>(1, 0x8233);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8233);
      auto const rel = std::vector<uint32_t>(1, 0x823a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x823a);
      auto const rel = std::vector<uint32_t>(1, 0x8234);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8234);
      auto const rel = std::vector<uint32_t>(1, 0x8232);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8232);
      auto const rel = std::vector<uint32_t>(1, 0x8274);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8274);
      auto const rel = std::vector<uint32_t>(1, 0x8390);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8390);
      auto const rel = std::vector<uint32_t>(1, 0x83a3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a3);
      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, 0x838d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x838d);
      auto const rel = std::vector<uint32_t>(1, 0x837a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x837a);
      auto const rel = std::vector<uint32_t>(1, 0x8373);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8373);
      auto const rel = std::vector<uint32_t>(1, 0x83a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a4);
      auto const rel = std::vector<uint32_t>(1, 0x8374);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8374);
      auto const rel = std::vector<uint32_t>(1, 0x838f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x838f);
      auto const rel = std::vector<uint32_t>(1, 0x8381);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8381);
      auto const rel = std::vector<uint32_t>(1, 0x8395);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8395);
      auto const rel = std::vector<uint32_t>(1, 0x8399);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8399);
      auto const rel = std::vector<uint32_t>(1, 0x8375);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8375);
      auto const rel = std::vector<uint32_t>(1, 0x8394);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8394);
      auto const rel = std::vector<uint32_t>(1, 0x83a9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a9);
      auto const rel = std::vector<uint32_t>(1, 0x837d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x837d);
      auto const rel = std::vector<uint32_t>(1, 0x8383);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8383);
      auto const rel = std::vector<uint32_t>(1, 0x838c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x838c);
      auto const rel = std::vector<uint32_t>(1, 0x839d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x839d);
      auto const rel = std::vector<uint32_t>(1, 0x839b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x839b);
      auto const rel = std::vector<uint32_t>(1, 0x83aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83aa);
      auto const rel = std::vector<uint32_t>(1, 0x838b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x838b);
      auto const rel = std::vector<uint32_t>(1, 0x837e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x837e);
      auto const rel = std::vector<uint32_t>(1, 0x83a5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a5);
      auto const rel = std::vector<uint32_t>(1, 0x83af);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83af);
      auto const rel = std::vector<uint32_t>(1, 0x8388);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8388);
      auto const rel = std::vector<uint32_t>(1, 0x8397);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8397);
      auto const rel = std::vector<uint32_t>(1, 0x83b0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83b0);
      auto const rel = std::vector<uint32_t>(1, 0x837f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x837f);
      auto const rel = std::vector<uint32_t>(1, 0x83a6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83a6);
      auto const rel = std::vector<uint32_t>(1, 0x8387);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8387);
      auto const rel = std::vector<uint32_t>(1, 0x83ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x83ae);
      auto const rel = std::vector<uint32_t>(1, 0x8376);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8376);
      auto const rel = std::vector<uint32_t>(1, 0x839a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x839a);
      auto const rel = std::vector<uint32_t>(1, 0x8659);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8659);
      auto const rel = std::vector<uint32_t>(1, 0x8656);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_013)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8656);
      auto const rel = std::vector<uint32_t>(1, 0x86bf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86bf);
      auto const rel = std::vector<uint32_t>(1, 0x86b7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b7);
      auto const rel = std::vector<uint32_t>(1, 0x86c2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86c2);
      auto const rel = std::vector<uint32_t>(1, 0x86c1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86c1);
      auto const rel = std::vector<uint32_t>(1, 0x86c5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86c5);
      auto const rel = std::vector<uint32_t>(1, 0x86ba);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86ba);
      auto const rel = std::vector<uint32_t>(1, 0x86b0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b0);
      auto const rel = std::vector<uint32_t>(1, 0x86c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86c8);
      auto const rel = std::vector<uint32_t>(1, 0x86b9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b9);
      auto const rel = std::vector<uint32_t>(1, 0x86b3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b3);
      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, 0x86cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86cc);
      auto const rel = std::vector<uint32_t>(1, 0x86b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86b4);
      auto const rel = std::vector<uint32_t>(1, 0x86bb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86bb);
      auto const rel = std::vector<uint32_t>(1, 0x86bc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86bc);
      auto const rel = std::vector<uint32_t>(1, 0x86c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86c3);
      auto const rel = std::vector<uint32_t>(1, 0x86bd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86bd);
      auto const rel = std::vector<uint32_t>(1, 0x86be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x86be);
      auto const rel = std::vector<uint32_t>(1, 0x8852);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8852);
      auto const rel = std::vector<uint32_t>(1, 0x8889);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8889);
      auto const rel = std::vector<uint32_t>(1, 0x8895);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8895);
      auto const rel = std::vector<uint32_t>(1, 0x88a8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88a8);
      auto const rel = std::vector<uint32_t>(1, 0x88a2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88a2);
      auto const rel = std::vector<uint32_t>(1, 0x88aa);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88aa);
      auto const rel = std::vector<uint32_t>(1, 0x889a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x889a);
      auto const rel = std::vector<uint32_t>(1, 0x8891);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8891);
      auto const rel = std::vector<uint32_t>(1, 0x88a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88a1);
      auto const rel = std::vector<uint32_t>(1, 0x889f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x889f);
      auto const rel = std::vector<uint32_t>(1, 0x8898);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8898);
      auto const rel = std::vector<uint32_t>(1, 0x88a7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88a7);
      auto const rel = std::vector<uint32_t>(1, 0x8899);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8899);
      auto const rel = std::vector<uint32_t>(1, 0x889b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x889b);
      auto const rel = std::vector<uint32_t>(1, 0x8897);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8897);
      auto const rel = std::vector<uint32_t>(1, 0x88a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88a4);
      auto const rel = std::vector<uint32_t>(1, 0x88ac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x88ac);
      auto const rel = std::vector<uint32_t>(1, 0x888c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x888c);
      auto const rel = std::vector<uint32_t>(1, 0x8893);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8893);
      auto const rel = std::vector<uint32_t>(1, 0x888e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x888e);
      auto const rel = std::vector<uint32_t>(1, 0x8982);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8982);
      auto const rel = std::vector<uint32_t>(1, 0x89d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89d6);
      auto const rel = std::vector<uint32_t>(1, 0x89d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89d9);
      auto const rel = std::vector<uint32_t>(1, 0x89d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x89d5);
      auto const rel = std::vector<uint32_t>(1, 0x8a30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a30);
      auto const rel = std::vector<uint32_t>(1, 0x8a27);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a27);
      auto const rel = std::vector<uint32_t>(1, 0x8a2c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a2c);
      auto const rel = std::vector<uint32_t>(1, 0x8a1e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8a1e);
      auto const rel = std::vector<uint32_t>(1, 0x8c39);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c39);
      auto const rel = std::vector<uint32_t>(1, 0x8c3b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c3b);
      auto const rel = std::vector<uint32_t>(1, 0x8c5c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c5c);
      auto const rel = std::vector<uint32_t>(1, 0x8c5d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c5d);
      auto const rel = std::vector<uint32_t>(1, 0x8c7d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_014)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8c7d);
      auto const rel = std::vector<uint32_t>(1, 0x8ca5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ca5);
      auto const rel = std::vector<uint32_t>(1, 0x8d7d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d7d);
      auto const rel = std::vector<uint32_t>(1, 0x8d7b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d7b);
      auto const rel = std::vector<uint32_t>(1, 0x8d79);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8d79);
      auto const rel = std::vector<uint32_t>(1, 0x8dbc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dbc);
      auto const rel = std::vector<uint32_t>(1, 0x8dc2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dc2);
      auto const rel = std::vector<uint32_t>(1, 0x8db9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8db9);
      auto const rel = std::vector<uint32_t>(1, 0x8dbf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dbf);
      auto const rel = std::vector<uint32_t>(1, 0x8dc1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8dc1);
      auto const rel = std::vector<uint32_t>(1, 0x8ed8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ed8);
      auto const rel = std::vector<uint32_t>(1, 0x8ede);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ede);
      auto const rel = std::vector<uint32_t>(1, 0x8edd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8edd);
      auto const rel = std::vector<uint32_t>(1, 0x8edc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8edc);
      auto const rel = std::vector<uint32_t>(1, 0x8ed7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ed7);
      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, 0x8ee1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x8ee1);
      auto const rel = std::vector<uint32_t>(1, 0x9024);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9024);
      auto const rel = std::vector<uint32_t>(1, 0x900b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x900b);
      auto const rel = std::vector<uint32_t>(1, 0x9011);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9011);
      auto const rel = std::vector<uint32_t>(1, 0x901c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x901c);
      auto const rel = std::vector<uint32_t>(1, 0x900c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x900c);
      auto const rel = std::vector<uint32_t>(1, 0x9021);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9021);
      auto const rel = std::vector<uint32_t>(1, 0x90ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90ef);
      auto const rel = std::vector<uint32_t>(1, 0x90ea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90ea);
      auto const rel = std::vector<uint32_t>(1, 0x90f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90f0);
      auto const rel = std::vector<uint32_t>(1, 0x90f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90f4);
      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, 0x90f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90f3);
      auto const rel = std::vector<uint32_t>(1, 0x90d4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90d4);
      auto const rel = std::vector<uint32_t>(1, 0x90eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90eb);
      auto const rel = std::vector<uint32_t>(1, 0x90ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90ec);
      auto const rel = std::vector<uint32_t>(1, 0x90e9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x90e9);
      auto const rel = std::vector<uint32_t>(1, 0x9156);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9156);
      auto const rel = std::vector<uint32_t>(1, 0x9158);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9158);
      auto const rel = std::vector<uint32_t>(1, 0x915a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x915a);
      auto const rel = std::vector<uint32_t>(1, 0x9153);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9153);
      auto const rel = std::vector<uint32_t>(1, 0x9155);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9155);
      auto const rel = std::vector<uint32_t>(1, 0x91ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91ec);
      auto const rel = std::vector<uint32_t>(1, 0x91f4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f4);
      auto const rel = std::vector<uint32_t>(1, 0x91f1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f1);
      auto const rel = std::vector<uint32_t>(1, 0x91f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f3);
      auto const rel = std::vector<uint32_t>(1, 0x91f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f8);
      auto const rel = std::vector<uint32_t>(1, 0x91e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91e4);
      auto const rel = std::vector<uint32_t>(1, 0x91f9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f9);
      auto const rel = std::vector<uint32_t>(1, 0x91ea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91ea);
      auto const rel = std::vector<uint32_t>(1, 0x91eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91eb);
      auto const rel = std::vector<uint32_t>(1, 0x91f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91f7);
      auto const rel = std::vector<uint32_t>(1, 0x91e8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91e8);
      auto const rel = std::vector<uint32_t>(1, 0x91ee);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x91ee);
      auto const rel = std::vector<uint32_t>(1, 0x957a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x957a);
      auto const rel = std::vector<uint32_t>(1, 0x9586);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_015)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9586);
      auto const rel = std::vector<uint32_t>(1, 0x9588);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9588);
      auto const rel = std::vector<uint32_t>(1, 0x967c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x967c);
      auto const rel = std::vector<uint32_t>(1, 0x966d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x966d);
      auto const rel = std::vector<uint32_t>(1, 0x966b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x966b);
      auto const rel = std::vector<uint32_t>(1, 0x9671);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x9671);
      auto const rel = std::vector<uint32_t>(1, 0x966f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x966f);
      auto const rel = std::vector<uint32_t>(1, 0x96bf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x96bf);
      auto const rel = std::vector<uint32_t>(1, 0x976a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x976a);
      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, 0x98e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x98e5);
      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, 0x509b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x509b);
      auto const rel = std::vector<uint32_t>(1, 0x5095);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5095);
      auto const rel = std::vector<uint32_t>(1, 0x5094);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5094);
      auto const rel = std::vector<uint32_t>(1, 0x509e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x509e);
      auto const rel = std::vector<uint32_t>(1, 0x508b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x508b);
      auto const rel = std::vector<uint32_t>(1, 0x50a3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x50a3);
      auto const rel = std::vector<uint32_t>(1, 0x5083);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5083);
      auto const rel = std::vector<uint32_t>(1, 0x508c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x508c);
      auto const rel = std::vector<uint32_t>(1, 0x508e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x508e);
      auto const rel = std::vector<uint32_t>(1, 0x509d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x509d);
      auto const rel = std::vector<uint32_t>(1, 0x5068);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5068);
      auto const rel = std::vector<uint32_t>(1, 0x509c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x509c);
      auto const rel = std::vector<uint32_t>(1, 0x5092);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5092);
      auto const rel = std::vector<uint32_t>(1, 0x5082);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5082);
      auto const rel = std::vector<uint32_t>(1, 0x5087);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5087);
      auto const rel = std::vector<uint32_t>(1, 0x515f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x515f);
      auto const rel = std::vector<uint32_t>(1, 0x51d4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x51d4);
      auto const rel = std::vector<uint32_t>(1, 0x5312);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5312);
      auto const rel = std::vector<uint32_t>(1, 0x5311);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5311);
      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, 0x53a7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x53a7);
      auto const rel = std::vector<uint32_t>(1, 0x5591);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5591);
      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, 0x55a5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a5);
      auto const rel = std::vector<uint32_t>(1, 0x55ad);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55ad);
      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, 0x5645);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5645);
      auto const rel = std::vector<uint32_t>(1, 0x55a2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a2);
      auto const rel = std::vector<uint32_t>(1, 0x5593);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5593);
      auto const rel = std::vector<uint32_t>(1, 0x5588);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5588);
      auto const rel = std::vector<uint32_t>(1, 0x558f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x558f);
      auto const rel = std::vector<uint32_t>(1, 0x55b5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55b5);
      auto const rel = std::vector<uint32_t>(1, 0x5581);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5581);
      auto const rel = std::vector<uint32_t>(1, 0x55a3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a3);
      auto const rel = std::vector<uint32_t>(1, 0x5592);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5592);
      auto const rel = std::vector<uint32_t>(1, 0x55a4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a4);
      auto const rel = std::vector<uint32_t>(1, 0x557d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x557d);
      auto const rel = std::vector<uint32_t>(1, 0x558c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x558c);
      auto const rel = std::vector<uint32_t>(1, 0x55a6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a6);
      auto const rel = std::vector<uint32_t>(1, 0x557f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_016)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x557f);
      auto const rel = std::vector<uint32_t>(1, 0x5595);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5595);
      auto const rel = std::vector<uint32_t>(1, 0x55a1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x55a1);
      auto const rel = std::vector<uint32_t>(1, 0x558e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x558e);
      auto const rel = std::vector<uint32_t>(1, 0x570c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x570c);
      auto const rel = std::vector<uint32_t>(1, 0x5829);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5829);
      auto const rel = std::vector<uint32_t>(1, 0x5837);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5837);
      auto const rel = std::vector<uint32_t>(1, 0x5819);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5819);
      auto const rel = std::vector<uint32_t>(1, 0x581e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x581e);
      auto const rel = std::vector<uint32_t>(1, 0x5827);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5827);
      auto const rel = std::vector<uint32_t>(1, 0x5823);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5823);
      auto const rel = std::vector<uint32_t>(1, 0x5828);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5828);
      auto const rel = std::vector<uint32_t>(1, 0x57f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x57f5);
      auto const rel = std::vector<uint32_t>(1, 0x5848);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5848);
      auto const rel = std::vector<uint32_t>(1, 0x5825);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5825);
      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, 0x581b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x581b);
      auto const rel = std::vector<uint32_t>(1, 0x5833);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5833);
      auto const rel = std::vector<uint32_t>(1, 0x583f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x583f);
      auto const rel = std::vector<uint32_t>(1, 0x5836);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5836);
      auto const rel = std::vector<uint32_t>(1, 0x582e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x582e);
      auto const rel = std::vector<uint32_t>(1, 0x5839);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5839);
      auto const rel = std::vector<uint32_t>(1, 0x5838);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5838);
      auto const rel = std::vector<uint32_t>(1, 0x582d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x582d);
      auto const rel = std::vector<uint32_t>(1, 0x582c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x582c);
      auto const rel = std::vector<uint32_t>(1, 0x583b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x583b);
      auto const rel = std::vector<uint32_t>(1, 0x5961);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5961);
      auto const rel = std::vector<uint32_t>(1, 0x5aaf);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aaf);
      auto const rel = std::vector<uint32_t>(1, 0x5a94);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a94);
      auto const rel = std::vector<uint32_t>(1, 0x5a9f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a9f);
      auto const rel = std::vector<uint32_t>(1, 0x5a7a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a7a);
      auto const rel = std::vector<uint32_t>(1, 0x5aa2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aa2);
      auto const rel = std::vector<uint32_t>(1, 0x5a9e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a9e);
      auto const rel = std::vector<uint32_t>(1, 0x5a78);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a78);
      auto const rel = std::vector<uint32_t>(1, 0x5aa6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aa6);
      auto const rel = std::vector<uint32_t>(1, 0x5a7c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a7c);
      auto const rel = std::vector<uint32_t>(1, 0x5aa5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aa5);
      auto const rel = std::vector<uint32_t>(1, 0x5aac);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aac);
      auto const rel = std::vector<uint32_t>(1, 0x5a95);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a95);
      auto const rel = std::vector<uint32_t>(1, 0x5aae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aae);
      auto const rel = std::vector<uint32_t>(1, 0x5a37);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a37);
      auto const rel = std::vector<uint32_t>(1, 0x5a84);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a84);
      auto const rel = std::vector<uint32_t>(1, 0x5a8a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a8a);
      auto const rel = std::vector<uint32_t>(1, 0x5a97);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a97);
      auto const rel = std::vector<uint32_t>(1, 0x5a83);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a83);
      auto const rel = std::vector<uint32_t>(1, 0x5a8b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a8b);
      auto const rel = std::vector<uint32_t>(1, 0x5aa9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5aa9);
      auto const rel = std::vector<uint32_t>(1, 0x5a7b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a7b);
      auto const rel = std::vector<uint32_t>(1, 0x5a7d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a7d);
      auto const rel = std::vector<uint32_t>(1, 0x5a8c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a8c);
      auto const rel = std::vector<uint32_t>(1, 0x5a9c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a9c);
      auto const rel = std::vector<uint32_t>(1, 0x5a8f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_017)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a8f);
      auto const rel = std::vector<uint32_t>(1, 0x5a93);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a93);
      auto const rel = std::vector<uint32_t>(1, 0x5a9d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5a9d);
      auto const rel = std::vector<uint32_t>(1, 0x5bea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bea);
      auto const rel = std::vector<uint32_t>(1, 0x5bcd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bcd);
      auto const rel = std::vector<uint32_t>(1, 0x5bcb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bcb);
      auto const rel = std::vector<uint32_t>(1, 0x5bd4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bd4);
      auto const rel = std::vector<uint32_t>(1, 0x5bd1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bd1);
      auto const rel = std::vector<uint32_t>(1, 0x5bca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bca);
      auto const rel = std::vector<uint32_t>(1, 0x5bce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5bce);
      auto const rel = std::vector<uint32_t>(1, 0x5c0c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c0c);
      auto const rel = std::vector<uint32_t>(1, 0x5c30);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5c30);
      auto const rel = std::vector<uint32_t>(1, 0x5d37);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d37);
      auto const rel = std::vector<uint32_t>(1, 0x5d43);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d43);
      auto const rel = std::vector<uint32_t>(1, 0x5d6b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d6b);
      auto const rel = std::vector<uint32_t>(1, 0x5d41);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d41);
      auto const rel = std::vector<uint32_t>(1, 0x5d4b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d4b);
      auto const rel = std::vector<uint32_t>(1, 0x5d3f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d3f);
      auto const rel = std::vector<uint32_t>(1, 0x5d35);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d35);
      auto const rel = std::vector<uint32_t>(1, 0x5d51);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d51);
      auto const rel = std::vector<uint32_t>(1, 0x5d4e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d4e);
      auto const rel = std::vector<uint32_t>(1, 0x5d55);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d55);
      auto const rel = std::vector<uint32_t>(1, 0x5d33);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d33);
      auto const rel = std::vector<uint32_t>(1, 0x5d3a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d3a);
      auto const rel = std::vector<uint32_t>(1, 0x5d52);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d52);
      auto const rel = std::vector<uint32_t>(1, 0x5d3d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d3d);
      auto const rel = std::vector<uint32_t>(1, 0x5d31);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d31);
      auto const rel = std::vector<uint32_t>(1, 0x5d59);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d59);
      auto const rel = std::vector<uint32_t>(1, 0x5d42);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d42);
      auto const rel = std::vector<uint32_t>(1, 0x5d39);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d39);
      auto const rel = std::vector<uint32_t>(1, 0x5d49);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d49);
      auto const rel = std::vector<uint32_t>(1, 0x5d38);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d38);
      auto const rel = std::vector<uint32_t>(1, 0x5d3c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d3c);
      auto const rel = std::vector<uint32_t>(1, 0x5d32);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d32);
      auto const rel = std::vector<uint32_t>(1, 0x5d36);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d36);
      auto const rel = std::vector<uint32_t>(1, 0x5d40);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d40);
      auto const rel = std::vector<uint32_t>(1, 0x5d45);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5d45);
      auto const rel = std::vector<uint32_t>(1, 0x5e44);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e44);
      auto const rel = std::vector<uint32_t>(1, 0x5e41);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5e41);
      auto const rel = std::vector<uint32_t>(1, 0x5f58);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5f58);
      auto const rel = std::vector<uint32_t>(1, 0x5fa6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5fa6);
      auto const rel = std::vector<uint32_t>(1, 0x5fa5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5fa5);
      auto const rel = std::vector<uint32_t>(1, 0x5fab);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x5fab);
      auto const rel = std::vector<uint32_t>(1, 0x60c9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c9);
      auto const rel = std::vector<uint32_t>(1, 0x60b9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60b9);
      auto const rel = std::vector<uint32_t>(1, 0x60cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60cc);
      auto const rel = std::vector<uint32_t>(1, 0x60e2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60e2);
      auto const rel = std::vector<uint32_t>(1, 0x60ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60ce);
      auto const rel = std::vector<uint32_t>(1, 0x60c4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c4);
      auto const rel = std::vector<uint32_t>(1, 0x6114);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6114);
      auto const rel = std::vector<uint32_t>(1, 0x60f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60f2);
      auto const rel = std::vector<uint32_t>(1, 0x610a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_018)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x610a);
      auto const rel = std::vector<uint32_t>(1, 0x6116);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6116);
      auto const rel = std::vector<uint32_t>(1, 0x6105);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6105);
      auto const rel = std::vector<uint32_t>(1, 0x60f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60f5);
      auto const rel = std::vector<uint32_t>(1, 0x6113);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6113);
      auto const rel = std::vector<uint32_t>(1, 0x60f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60f8);
      auto const rel = std::vector<uint32_t>(1, 0x60fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60fc);
      auto const rel = std::vector<uint32_t>(1, 0x60fe);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60fe);
      auto const rel = std::vector<uint32_t>(1, 0x60c1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60c1);
      auto const rel = std::vector<uint32_t>(1, 0x6103);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6103);
      auto const rel = std::vector<uint32_t>(1, 0x6118);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6118);
      auto const rel = std::vector<uint32_t>(1, 0x611d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x611d);
      auto const rel = std::vector<uint32_t>(1, 0x6110);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6110);
      auto const rel = std::vector<uint32_t>(1, 0x60ff);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x60ff);
      auto const rel = std::vector<uint32_t>(1, 0x6104);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6104);
      auto const rel = std::vector<uint32_t>(1, 0x610b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x610b);
      auto const rel = std::vector<uint32_t>(1, 0x624a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x624a);
      auto const rel = std::vector<uint32_t>(1, 0x6394);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6394);
      auto const rel = std::vector<uint32_t>(1, 0x63b1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63b1);
      auto const rel = std::vector<uint32_t>(1, 0x63b0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63b0);
      auto const rel = std::vector<uint32_t>(1, 0x63ce);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ce);
      auto const rel = std::vector<uint32_t>(1, 0x63e5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63e5);
      auto const rel = std::vector<uint32_t>(1, 0x63e8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63e8);
      auto const rel = std::vector<uint32_t>(1, 0x63ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ef);
      auto const rel = std::vector<uint32_t>(1, 0x63c3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c3);
      auto const rel = std::vector<uint32_t>(1, 0x649d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x649d);
      auto const rel = std::vector<uint32_t>(1, 0x63f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63f3);
      auto const rel = std::vector<uint32_t>(1, 0x63ca);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63ca);
      auto const rel = std::vector<uint32_t>(1, 0x63e0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63e0);
      auto const rel = std::vector<uint32_t>(1, 0x63f6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63f6);
      auto const rel = std::vector<uint32_t>(1, 0x63d5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63d5);
      auto const rel = std::vector<uint32_t>(1, 0x63f2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63f2);
      auto const rel = std::vector<uint32_t>(1, 0x63f5);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63f5);
      auto const rel = std::vector<uint32_t>(1, 0x6461);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6461);
      auto const rel = std::vector<uint32_t>(1, 0x63df);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63df);
      auto const rel = std::vector<uint32_t>(1, 0x63be);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63be);
      auto const rel = std::vector<uint32_t>(1, 0x63dd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63dd);
      auto const rel = std::vector<uint32_t>(1, 0x63dc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63dc);
      auto const rel = std::vector<uint32_t>(1, 0x63c4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c4);
      auto const rel = std::vector<uint32_t>(1, 0x63d8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63d8);
      auto const rel = std::vector<uint32_t>(1, 0x63d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63d3);
      auto const rel = std::vector<uint32_t>(1, 0x63c2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c2);
      auto const rel = std::vector<uint32_t>(1, 0x63c7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c7);
      auto const rel = std::vector<uint32_t>(1, 0x63cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63cc);
      auto const rel = std::vector<uint32_t>(1, 0x63cb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63cb);
      auto const rel = std::vector<uint32_t>(1, 0x63c8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63c8);
      auto const rel = std::vector<uint32_t>(1, 0x63f0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63f0);
      auto const rel = std::vector<uint32_t>(1, 0x63d7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63d7);
      auto const rel = std::vector<uint32_t>(1, 0x63d9);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x63d9);
      auto const rel = std::vector<uint32_t>(1, 0x6532);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6532);
      auto const rel = std::vector<uint32_t>(1, 0x6567);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6567);
      auto const rel = std::vector<uint32_t>(1, 0x656a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), 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_big5han_007_019)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x656a);
      auto const rel = std::vector<uint32_t>(1, 0x6564);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6564);
      auto const rel = std::vector<uint32_t>(1, 0x655c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x655c);
      auto const rel = std::vector<uint32_t>(1, 0x6568);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6568);
      auto const rel = std::vector<uint32_t>(1, 0x6565);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6565);
      auto const rel = std::vector<uint32_t>(1, 0x658c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x658c);
      auto const rel = std::vector<uint32_t>(1, 0x659d);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x659d);
      auto const rel = std::vector<uint32_t>(1, 0x659e);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x659e);
      auto const rel = std::vector<uint32_t>(1, 0x65ae);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65ae);
      auto const rel = std::vector<uint32_t>(1, 0x65d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65d0);
      auto const rel = std::vector<uint32_t>(1, 0x65d2);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x65d2);
      auto const rel = std::vector<uint32_t>(1, 0x667c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x667c);
      auto const rel = std::vector<uint32_t>(1, 0x666c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x666c);
      auto const rel = std::vector<uint32_t>(1, 0x667b);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x667b);
      auto const rel = std::vector<uint32_t>(1, 0x6680);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6680);
      auto const rel = std::vector<uint32_t>(1, 0x6671);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6671);
      auto const rel = std::vector<uint32_t>(1, 0x6679);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6679);
      auto const rel = std::vector<uint32_t>(1, 0x666a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x666a);
      auto const rel = std::vector<uint32_t>(1, 0x6672);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6672);
      auto const rel = std::vector<uint32_t>(1, 0x6701);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6701);
      auto const rel = std::vector<uint32_t>(1, 0x690c);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x690c);
      auto const rel = std::vector<uint32_t>(1, 0x68d3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68d3);
      auto const rel = std::vector<uint32_t>(1, 0x6904);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6904);
      auto const rel = std::vector<uint32_t>(1, 0x68dc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68dc);
      auto const rel = std::vector<uint32_t>(1, 0x692a);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x692a);
      auto const rel = std::vector<uint32_t>(1, 0x68ec);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ec);
      auto const rel = std::vector<uint32_t>(1, 0x68ea);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ea);
      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, 0x690f);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x690f);
      auto const rel = std::vector<uint32_t>(1, 0x68d6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68d6);
      auto const rel = std::vector<uint32_t>(1, 0x68f7);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68f7);
      auto const rel = std::vector<uint32_t>(1, 0x68eb);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68eb);
      auto const rel = std::vector<uint32_t>(1, 0x68e4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68e4);
      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, 0x6913);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6913);
      auto const rel = std::vector<uint32_t>(1, 0x6910);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6910);
      auto const rel = std::vector<uint32_t>(1, 0x68f3);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68f3);
      auto const rel = std::vector<uint32_t>(1, 0x68e1);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68e1);
      auto const rel = std::vector<uint32_t>(1, 0x6907);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6907);
      auto const rel = std::vector<uint32_t>(1, 0x68cc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68cc);
      auto const rel = std::vector<uint32_t>(1, 0x6908);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6908);
      auto const rel = std::vector<uint32_t>(1, 0x6970);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6970);
      auto const rel = std::vector<uint32_t>(1, 0x68b4);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68b4);
      auto const rel = std::vector<uint32_t>(1, 0x6911);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6911);
      auto const rel = std::vector<uint32_t>(1, 0x68ef);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68ef);
      auto const rel = std::vector<uint32_t>(1, 0x68c6);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68c6);
      auto const rel = std::vector<uint32_t>(1, 0x6914);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x6914);
      auto const rel = std::vector<uint32_t>(1, 0x68f8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68f8);
      auto const rel = std::vector<uint32_t>(1, 0x68d0);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68d0);
      auto const rel = std::vector<uint32_t>(1, 0x68fd);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68fd);
      auto const rel = std::vector<uint32_t>(1, 0x68fc);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x68fc);
      auto const rel = std::vector<uint32_t>(1, 0x68e8);
      string const res_str = to_string(res);
      string const rel_str = to_string(rel);
      auto const res_view = as_utf32(res);
      auto const rel_view = as_utf32(rel);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      EXPECT_EQ(collate(
          res_view.begin(), res_view.end(),
          rel_view.begin(), rel_view.end(),
          table(), collation_strength::primary),
          -1);
      }
  }
  
  