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::sr_Latn::standard_collation_tailoring());
      return tailored_collation_table(
          table_str,
          "sr_Latn::standard_collation_tailoring()", error, warning);
  #else
      if (!exists(boost::filesystem::path("sr_Latn_standard.table"))) {
          string const table_str(data::sr_Latn::standard_collation_tailoring());
          collation_table table = tailored_collation_table(
              table_str,
              "sr_Latn::standard_collation_tailoring()", error, warning);
          save_table(table, "sr_Latn_standard.table.0");
          boost::filesystem::rename("sr_Latn_standard.table.0", "sr_Latn_standard.table");
      }
      return load_table("sr_Latn_standard.table");
  #endif
  }
  collation_table const & table()
  {
      static collation_table retval = make_save_load_table();
      return retval;
  }
  TEST(tailoring, sr_Latn_standard_000_001)
  {
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0043);
      auto const rel = std::vector<uint32_t>(1, 0x010d);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x010d);
      auto const rel = std::vector<uint32_t>(1, 0x010c);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x010c);
      auto const rel = std::vector<uint32_t>(1, 0x0107);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0107);
      auto const rel = std::vector<uint32_t>(1, 0x0106);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0044);
      auto const rel = std::vector<uint32_t>{0x0064, 0x017e};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x0064, 0x017e};
      auto const rel = std::vector<uint32_t>(1, 0x01c6);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01c6);
      auto const rel = std::vector<uint32_t>{0x0044, 0x017e};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x0044, 0x017e};
      auto const rel = std::vector<uint32_t>(1, 0x01c5);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01c5);
      auto const rel = std::vector<uint32_t>{0x0044, 0x017d};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x0044, 0x017d};
      auto const rel = std::vector<uint32_t>(1, 0x01c4);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01c4);
      auto const rel = std::vector<uint32_t>(1, 0x0111);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0111);
      auto const rel = std::vector<uint32_t>(1, 0x0110);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x004c);
      auto const rel = std::vector<uint32_t>{0x006c, 0x006a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x006c, 0x006a};
      auto const rel = std::vector<uint32_t>(1, 0x01c9);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01c9);
      auto const rel = std::vector<uint32_t>{0x004c, 0x006a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x004c, 0x006a};
      auto const rel = std::vector<uint32_t>(1, 0x01c8);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01c8);
      auto const rel = std::vector<uint32_t>{0x004c, 0x004a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x004c, 0x004a};
      auto const rel = std::vector<uint32_t>(1, 0x01c7);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x004e);
      auto const rel = std::vector<uint32_t>{0x006e, 0x006a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x006e, 0x006a};
      auto const rel = std::vector<uint32_t>(1, 0x01cc);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01cc);
      auto const rel = std::vector<uint32_t>{0x004e, 0x006a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x004e, 0x006a};
      auto const rel = std::vector<uint32_t>(1, 0x01cb);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x01cb);
      auto const rel = std::vector<uint32_t>{0x004e, 0x004a};
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>{0x004e, 0x004a};
      auto const rel = std::vector<uint32_t>(1, 0x01ca);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0053);
      auto const rel = std::vector<uint32_t>(1, 0x0161);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x0161);
      auto const rel = std::vector<uint32_t>(1, 0x0160);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x005a);
      auto const rel = std::vector<uint32_t>(1, 0x017e);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::primary),
          -1);
      }
      {
      // greater than (or equal to, for =) preceeding cps
      auto const res = std::vector<uint32_t>(1, 0x017e);
      auto const rel = std::vector<uint32_t>(1, 0x017d);
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::tertiary),
          -1);
      // equal to preceeding cps at next-lower strength
      EXPECT_EQ(collate(
          res.begin(), res.end(),
          rel.begin(), rel.end(),
          table(), collation_strength::secondary),
          0);
      }
  }
  