static void BM_MixedUTF8MB4_AS_CS()

in unittest/gunit/strings_strnxfrm-t.cc [767:1387]


static void BM_MixedUTF8MB4_AS_CS(size_t num_iterations) {
  StopBenchmarkTiming();

  CHARSET_INFO *cs = init_collation("utf8mb4_0900_as_cs");

  // Some English text, then some Norwegian text, then some Japanese,
  // and then a few emoji (the last with skin tone modifiers).
  const char *content =
      "Premature optimization is the root of all evil. "
      "Våre norske tegn bør æres. 日本語が少しわかります。 "
      "✌️🐶👩🏽";
  const int len = strlen(content);

  // Just recorded from a trial run on the string above.
  static constexpr uchar expected[] = {
      // Primary weights.
      0x1e,
      0x0c,
      0x1e,
      0x33,
      0x1c,
      0xaa,
      0x1d,
      0xaa,
      0x1c,
      0x47,
      0x1e,
      0x95,
      0x1e,
      0xb5,
      0x1e,
      0x33,
      0x1c,
      0xaa,
      0x02,
      0x09,
      0x1d,
      0xdd,
      0x1e,
      0x0c,
      0x1e,
      0x95,
      0x1d,
      0x32,
      0x1d,
      0xaa,
      0x1d,
      0x32,
      0x1f,
      0x21,
      0x1c,
      0x47,
      0x1e,
      0x95,
      0x1d,
      0x32,
      0x1d,
      0xdd,
      0x1d,
      0xb9,
      0x02,
      0x09,
      0x1d,
      0x32,
      0x1e,
      0x71,
      0x02,
      0x09,
      0x1e,
      0x95,
      0x1d,
      0x18,
      0x1c,
      0xaa,
      0x02,
      0x09,
      0x1e,
      0x33,
      0x1d,
      0xdd,
      0x1d,
      0xdd,
      0x1e,
      0x95,
      0x02,
      0x09,
      0x1d,
      0xdd,
      0x1c,
      0xe5,
      0x02,
      0x09,
      0x1c,
      0x47,
      0x1d,
      0x77,
      0x1d,
      0x77,
      0x02,
      0x09,
      0x1c,
      0xaa,
      0x1e,
      0xe3,
      0x1d,
      0x32,
      0x1d,
      0x77,
      0x02,
      0x77,
      0x02,
      0x09,
      0x1e,
      0xe3,
      0x1c,
      0x47,
      0x1e,
      0x33,
      0x1c,
      0xaa,
      0x02,
      0x09,
      0x1d,
      0xb9,
      0x1d,
      0xdd,
      0x1e,
      0x33,
      0x1e,
      0x71,
      0x1d,
      0x65,
      0x1c,
      0xaa,
      0x02,
      0x09,
      0x1e,
      0x95,
      0x1c,
      0xaa,
      0x1c,
      0xf4,
      0x1d,
      0xb9,
      0x02,
      0x09,
      0x1c,
      0x60,
      0x1d,
      0xdd,
      0x1e,
      0x33,
      0x02,
      0x09,
      0x1c,
      0x47,
      0x1c,
      0xaa,
      0x1e,
      0x33,
      0x1c,
      0xaa,
      0x1e,
      0x71,
      0x02,
      0x77,
      0x02,
      0x09,
      0xfb,
      0x40,
      0xe5,
      0xe5,
      0xfb,
      0x40,
      0xe7,
      0x2c,
      0xfb,
      0x41,
      0x8a,
      0x9e,
      0x3d,
      0x60,
      0xfb,
      0x40,
      0xdc,
      0x11,
      0x3d,
      0x66,
      0x3d,
      0x87,
      0x3d,
      0x60,
      0x3d,
      0x83,
      0x3d,
      0x79,
      0x3d,
      0x67,
      0x02,
      0x8a,
      0x02,
      0x09,
      0x0a,
      0x2d,
      0x13,
      0xdf,
      0x14,
      0x12,
      0x13,
      0xa6,
      // Level separator.
      0x00,
      0x00,
      // Secondary weights.
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x29,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x2f,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x01,
      0x10,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x37,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      0x00,
      0x20,
      // Level separator.
      0x00,
      0x00,
      // Tertiary weights.
      0x00,
      0x08,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x08,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x04,
      0x00,
      0x04,
      0x00,
      0x04,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x0e,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x0e,
      0x00,
      0x0e,
      0x00,
      0x0e,
      0x00,
      0x0e,
      0x00,
      0x0e,
      0x00,
      0x0e,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
      0x00,
      0x02,
  };
  uchar dest[sizeof(expected)];

  size_t ret = 0;
  StartBenchmarkTiming();
  for (size_t i = 0; i < num_iterations; ++i) {
    ret = my_strnxfrm(cs, dest, sizeof(dest),
                      pointer_cast<const uchar *>(content), len);
  }
  StopBenchmarkTiming();

  EXPECT_EQ(sizeof(expected), ret);
  expect_arrays_equal(expected, dest, ret);
  SetBytesProcessed(num_iterations * strlen(content));
}