aboutsummaryrefslogtreecommitdiff
path: root/bench/tests/BenchUnicode.c
diff options
context:
space:
mode:
Diffstat (limited to 'bench/tests/BenchUnicode.c')
-rw-r--r--bench/tests/BenchUnicode.c381
1 files changed, 381 insertions, 0 deletions
diff --git a/bench/tests/BenchUnicode.c b/bench/tests/BenchUnicode.c
new file mode 100644
index 0000000..ec6fc25
--- /dev/null
+++ b/bench/tests/BenchUnicode.c
@@ -0,0 +1,381 @@
+#include <BH/Bench.h>
+#include <BH/Unicode.h>
+
+
+#define BUF_SIZE 8
+
+
+static char buffer[BUF_SIZE];
+static size_t result;
+static uint32_t testUnitLower = 'a';
+static uint32_t testUnitUpper = 'A';
+static uint32_t testUnitLatin1 = 0x00E9;
+static uint32_t testUnitBMP = 0x2603;
+static uint32_t testUnitSMP = 0x1F600;
+
+static const char utf8_a[] = { 'a' };
+static const char utf8_e_acute[] = { 0xC3, 0xA9 };
+static const char utf8_snowman[] = { 0xE2, 0x98, 0x83 };
+static const char utf8_grin[] = { 0xF0, 0x9F, 0x98, 0x80 };
+static const char utf16_a_le[] = { 'a', 0x00 };
+static const char utf16_e_acute_le[] = { 0xE9, 0x00 };
+static const char utf16_snowman_le[] = { 0x03, 0x26 };
+static const char utf16_grin_le[] = { 0xD8, 0x3D, 0xDE, 0x00 };
+static const char utf16_a_be[] = { 0x00, 'a' };
+static const char utf16_e_acute_be[] = { 0x00, 0xE9 };
+static const char utf16_snowman_be[] = { 0x26, 0x03 };
+static const char utf16_grin_be[] = { 0x3D, 0xD8, 0x00, 0xDE };
+static const char utf32_a_le[] = { 'a', 0x00, 0x00, 0x00 };
+static const char utf32_e_acute_le[] = { 0xE9, 0x00, 0x00, 0x00 };
+static const char utf32_snowman_le[] = { 0x03, 0x26, 0x00, 0x00 };
+static const char utf32_grin_le[] = { 0x00, 0xF0, 0x01, 0x00 };
+static const char utf32_a_be[] = { 0x00, 0x00, 0x00, 'a' };
+static const char utf32_e_acute_be[] = { 0x00, 0x00, 0x00, 0xE9 };
+static const char utf32_snowman_be[] = { 0x00, 0x00, 0x26, 0x03 };
+static const char utf32_grin_be[] = { 0x00, 0x01, 0xF0, 0x00 };
+
+
+BH_BENCH_TEST(Lower)
+{
+ while (BH_BenchIter(state))
+ {
+ uint32_t lower;
+ lower = BH_UnicodeLower(testUnitUpper);
+ BH_BenchDoNotOptimize(lower);
+ }
+}
+
+
+BH_BENCH_TEST(Upper)
+{
+ while (BH_BenchIter(state))
+ {
+ uint32_t upper;
+ upper = BH_UnicodeUpper(testUnitLower);
+ BH_BenchDoNotOptimize(upper);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf8Ascii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf8(utf8_a, 1, &testUnitLower);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLower);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf8Latin1)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf8(utf8_e_acute, 2, &testUnitLatin1);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLatin1);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf8BMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf8(utf8_snowman, 3, &testUnitBMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitBMP);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf8SMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf8(utf8_grin, 4, &testUnitSMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitSMP);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf8Ascii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf8(testUnitLower, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf8Latin1)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf8(testUnitLatin1, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf8BMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf8(testUnitBMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf8SMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf8(testUnitSMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16LEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16LE(utf16_a_le, 2, &testUnitLower);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLower);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16LELatin1)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16LE(utf16_e_acute_le, 2, &testUnitLatin1);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLatin1);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16LEBMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16LE(utf16_snowman_le, 2, &testUnitBMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitBMP);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16LESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16LE(utf16_grin_le, 4, &testUnitSMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitSMP);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16BEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16BE(utf16_a_be, 2, &testUnitLower);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLower);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf16BESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf16BE(utf16_grin_be, 4, &testUnitSMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitSMP);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf16LEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf16LE(testUnitLower, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf16LESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf16LE(testUnitSMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf16BEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf16BE(testUnitLower, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf16BESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf16BE(testUnitSMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf32LEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf32LE(utf32_a_le, 4, &testUnitLower);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLower);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf32LESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf32LE(utf32_grin_le, 4, &testUnitSMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitSMP);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf32BEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf32BE(utf32_a_be, 4, &testUnitLower);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitLower);
+ }
+}
+
+
+BH_BENCH_TEST(DecodeUtf32BESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeDecodeUtf32BE(utf32_grin_be, 4, &testUnitSMP);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(testUnitSMP);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf32LEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf32LE(testUnitLower, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf32LESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf32LE(testUnitSMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf32BEAscii)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf32BE(testUnitLower, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+BH_BENCH_TEST(EncodeUtf32BESMP)
+{
+ while (BH_BenchIter(state))
+ {
+ result = BH_UnicodeEncodeUtf32BE(testUnitSMP, buffer);
+ BH_BenchDoNotOptimize(result);
+ BH_BenchDoNotOptimize(buffer);
+ }
+}
+
+
+int main(int argc, char **argv)
+{
+ BH_UNUSED(argc);
+ BH_UNUSED(argv);
+
+ BH_BENCH_ADD(Lower);
+ BH_BENCH_ADD(Upper);
+ BH_BENCH_ADD(DecodeUtf8Ascii);
+ BH_BENCH_ADD(DecodeUtf8Latin1);
+ BH_BENCH_ADD(DecodeUtf8BMP);
+ BH_BENCH_ADD(DecodeUtf8SMP);
+ BH_BENCH_ADD(EncodeUtf8Ascii);
+ BH_BENCH_ADD(EncodeUtf8Latin1);
+ BH_BENCH_ADD(EncodeUtf8BMP);
+ BH_BENCH_ADD(EncodeUtf8SMP);
+ BH_BENCH_ADD(DecodeUtf16LEAscii);
+ BH_BENCH_ADD(DecodeUtf16LELatin1);
+ BH_BENCH_ADD(DecodeUtf16LEBMP);
+ BH_BENCH_ADD(DecodeUtf16LESMP);
+ BH_BENCH_ADD(DecodeUtf16BEAscii);
+ BH_BENCH_ADD(DecodeUtf16BESMP);
+ BH_BENCH_ADD(EncodeUtf16LEAscii);
+ BH_BENCH_ADD(EncodeUtf16LESMP);
+ BH_BENCH_ADD(EncodeUtf16BEAscii);
+ BH_BENCH_ADD(EncodeUtf16BESMP);
+ BH_BENCH_ADD(DecodeUtf32LEAscii);
+ BH_BENCH_ADD(DecodeUtf32LESMP);
+ BH_BENCH_ADD(DecodeUtf32BEAscii);
+ BH_BENCH_ADD(DecodeUtf32BESMP);
+ BH_BENCH_ADD(EncodeUtf32LEAscii);
+ BH_BENCH_ADD(EncodeUtf32LESMP);
+ BH_BENCH_ADD(EncodeUtf32BEAscii);
+ BH_BENCH_ADD(EncodeUtf32BESMP);
+
+ return BH_BenchRun();
+}