aboutsummaryrefslogtreecommitdiffstats
path: root/tools/enum_parser
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-05-31 21:49:01 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-05-31 21:49:01 +0300
commitceb13dcc40dd5e11c8e3189b3c15b3bd5897d4ac (patch)
treeeda501e07fcaba4f64bc3d29725472162f2e4227 /tools/enum_parser
parent5b69557e440e6ac18399a29076fef25602859f17 (diff)
downloadydb-ceb13dcc40dd5e11c8e3189b3c15b3bd5897d4ac.tar.gz
intermediate changes
ref:85306a27df0004d13faf777131d0b092370e6b90
Diffstat (limited to 'tools/enum_parser')
-rw-r--r--tools/enum_parser/parse_enum/benchmark/enum.h228
-rw-r--r--tools/enum_parser/parse_enum/benchmark/main.cpp97
2 files changed, 325 insertions, 0 deletions
diff --git a/tools/enum_parser/parse_enum/benchmark/enum.h b/tools/enum_parser/parse_enum/benchmark/enum.h
new file mode 100644
index 0000000000..fbe4a27a73
--- /dev/null
+++ b/tools/enum_parser/parse_enum/benchmark/enum.h
@@ -0,0 +1,228 @@
+#pragma once
+
+enum class ESmallSortedEnum {
+ V0000,
+ V0001,
+ V0002,
+ V0003,
+ V0004,
+ V0005,
+ V0006,
+ V0007,
+ V0008,
+ V0009,
+};
+
+enum class ESmalUnsortedEnum {
+ V0000 = 0x7804d349,
+ V0001 = 0x55a9721f,
+ V0002 = 0x12626d1d,
+ V0003 = 0x292c750c,
+ V0004 = 0x239a978a,
+ V0005 = 0x2fcb8f2e,
+ V0006 = 0x2236a047,
+ V0007 = 0x32b06c06,
+ V0008 = 0x1e865d05,
+ V0009 = 0x6fa40ed0,
+};
+
+enum class EBigSortedEnum {
+ V0000,
+ V0001,
+ V0002,
+ V0003,
+ V0004,
+ V0005,
+ V0006,
+ V0007,
+ V0008,
+ V0009,
+ V0010,
+ V0011,
+ V0012,
+ V0013,
+ V0014,
+ V0015,
+ V0016,
+ V0017,
+ V0018,
+ V0019,
+ V0020,
+ V0021,
+ V0022,
+ V0023,
+ V0024,
+ V0025,
+ V0026,
+ V0027,
+ V0028,
+ V0029,
+ V0030,
+ V0031,
+ V0032,
+ V0033,
+ V0034,
+ V0035,
+ V0036,
+ V0037,
+ V0038,
+ V0039,
+ V0040,
+ V0041,
+ V0042,
+ V0043,
+ V0044,
+ V0045,
+ V0046,
+ V0047,
+ V0048,
+ V0049,
+ V0050,
+ V0051,
+ V0052,
+ V0053,
+ V0054,
+ V0055,
+ V0056,
+ V0057,
+ V0058,
+ V0059,
+ V0060,
+ V0061,
+ V0062,
+ V0063,
+};
+
+enum class EBigUnsortedEnum {
+ V0000 = 0x7cb8953c,
+ V0001 = 0x0533db00,
+ V0002 = 0x0d8819c7,
+ V0003 = 0x5658287e,
+ V0004 = 0x6c8cec31,
+ V0005 = 0x41126a21,
+ V0006 = 0x1fce5e53,
+ V0007 = 0x38e908c4,
+ V0008 = 0x3473b870,
+ V0009 = 0x1b1004d0,
+ V0010 = 0x7f6a0f7a,
+ V0011 = 0x61e02fd2,
+ V0012 = 0x45efb1a9,
+ V0013 = 0x260e1854,
+ V0014 = 0x6e90cb99,
+ V0015 = 0x7b50d5ea,
+ V0016 = 0x30c578c2,
+ V0017 = 0x1007ad6a,
+ V0018 = 0x4bd8caf7,
+ V0019 = 0x72e70170,
+ V0020 = 0x229256b7,
+ V0021 = 0x20cebbce,
+ V0022 = 0x5a59e6b3,
+ V0023 = 0x59b3be1b,
+ V0024 = 0x0b5a9206,
+ V0025 = 0x48e876e6,
+ V0026 = 0x0f3ce30a,
+ V0027 = 0x60910ec5,
+ V0028 = 0x230e6118,
+ V0029 = 0x16ce6571,
+ V0030 = 0x73161b2a,
+ V0031 = 0x0a3660e2,
+ V0032 = 0x30f59823,
+ V0033 = 0x41e97c04,
+ V0034 = 0x57e2997a,
+ V0035 = 0x3e5e7ffd,
+ V0036 = 0x778b5731,
+ V0037 = 0x68fe7f8b,
+ V0038 = 0x1fd6ea0b,
+ V0039 = 0x24186de6,
+ V0040 = 0x0d7f4067,
+ V0041 = 0x25ebbd68,
+ V0042 = 0x480bbd36,
+ V0043 = 0x423f93d2,
+ V0044 = 0x0782e322,
+ V0045 = 0x5f67694f,
+ V0046 = 0x33e80014,
+ V0047 = 0x6b5bf62b,
+ V0048 = 0x706d5839,
+ V0049 = 0x60fe55e7,
+ V0050 = 0x20a3d37c,
+ V0051 = 0x6ab90bbd,
+ V0052 = 0x1015a391,
+ V0053 = 0x0532c72a,
+ V0054 = 0x070b346d,
+ V0055 = 0x355b5fcf,
+ V0056 = 0x45d60e09,
+ V0057 = 0x41f39f5d,
+ V0058 = 0x38fee1aa,
+ V0059 = 0x5b357363,
+ V0060 = 0x2b01bfb7,
+ V0061 = 0x32c2f3ae,
+ V0062 = 0x7fbe9cac,
+ V0063 = 0x0414e601,
+};
+
+enum class EBigUnsortedDenseEnum {
+ V0000 = 0x00000022,
+ V0001 = 0x00000001,
+ V0002 = 0x00000028,
+ V0003 = 0x0000003c,
+ V0004 = 0x0000002d,
+ V0005 = 0x0000003e,
+ V0006 = 0x0000001d,
+ V0007 = 0x00000031,
+ V0008 = 0x00000020,
+ V0009 = 0x00000005,
+ V0010 = 0x00000010,
+ V0011 = 0x0000001a,
+ V0012 = 0x00000007,
+ V0013 = 0x00000018,
+ V0014 = 0x0000001b,
+ V0015 = 0x00000014,
+ V0016 = 0x0000002c,
+ V0017 = 0x00000034,
+ V0018 = 0x00000025,
+ V0019 = 0x00000038,
+ V0020 = 0x00000002,
+ V0021 = 0x0000003d,
+ V0022 = 0x00000035,
+ V0023 = 0x00000006,
+ V0024 = 0x00000012,
+ V0025 = 0x00000026,
+ V0026 = 0x00000016,
+ V0027 = 0x0000002f,
+ V0028 = 0x00000037,
+ V0029 = 0x0000003a,
+ V0030 = 0x0000000c,
+ V0031 = 0x00000000,
+ V0032 = 0x00000039,
+ V0033 = 0x00000029,
+ V0034 = 0x00000024,
+ V0035 = 0x0000001e,
+ V0036 = 0x0000002a,
+ V0037 = 0x00000003,
+ V0038 = 0x0000000e,
+ V0039 = 0x00000023,
+ V0040 = 0x00000017,
+ V0041 = 0x00000015,
+ V0042 = 0x0000001f,
+ V0043 = 0x00000009,
+ V0044 = 0x00000021,
+ V0045 = 0x0000000f,
+ V0046 = 0x0000001c,
+ V0047 = 0x0000000a,
+ V0048 = 0x0000002b,
+ V0049 = 0x00000032,
+ V0050 = 0x0000003f,
+ V0051 = 0x00000033,
+ V0052 = 0x00000030,
+ V0053 = 0x00000027,
+ V0054 = 0x00000008,
+ V0055 = 0x0000000d,
+ V0056 = 0x0000003b,
+ V0057 = 0x0000002e,
+ V0058 = 0x00000004,
+ V0059 = 0x00000011,
+ V0060 = 0x0000000b,
+ V0061 = 0x00000013,
+ V0062 = 0x00000019,
+ V0063 = 0x00000036,
+};
diff --git a/tools/enum_parser/parse_enum/benchmark/main.cpp b/tools/enum_parser/parse_enum/benchmark/main.cpp
new file mode 100644
index 0000000000..9f2694f236
--- /dev/null
+++ b/tools/enum_parser/parse_enum/benchmark/main.cpp
@@ -0,0 +1,97 @@
+#include <tools/enum_parser/parse_enum/benchmark/enum.h_serialized.h>
+#include <library/cpp/testing/benchmark/bench.h>
+#include <util/generic/algorithm.h>
+#include <util/generic/vector.h>
+#include <util/generic/xrange.h>
+#include <util/stream/null.h>
+#include <util/string/cast.h>
+
+namespace {
+
+ template <class TEnum>
+ TVector<TEnum> SelectValues(size_t count) {
+ auto values = GetEnumAllValues<TEnum>().Materialize();
+ SortBy(values, [](const TEnum& v) { return IntHash(static_cast<ui64>(v)); });
+ values.crop(count);
+ return values;
+ }
+
+ template <class TEnum>
+ TVector<TStringBuf> SelectStrings(size_t count) {
+ TVector<TStringBuf> strings(Reserve(GetEnumItemsCount<TEnum>()));
+ for (const auto& [_, s] : GetEnumNames<TEnum>()) {
+ strings.push_back(s);
+ }
+ SortBy(strings, [](const TStringBuf& s) { return THash<TStringBuf>()(s); });
+ strings.crop(count);
+ return strings;
+ }
+
+ template <class TEnum, class TContext>
+ void BMToString(TContext& iface) {
+ const auto values = SelectValues<TEnum>(5u);
+ for (const auto iter : xrange(iface.Iterations())) {
+ Y_UNUSED(iter);
+ for (const auto value : values) {
+ Y_DO_NOT_OPTIMIZE_AWAY(ToString(value).size());
+ }
+ }
+ }
+
+ template <class TEnum, class TContext>
+ void BMOut(TContext& iface) {
+ const auto values = SelectValues<TEnum>(5u);
+ TNullOutput null;
+ for (const auto iter : xrange(iface.Iterations())) {
+ Y_UNUSED(iter);
+ for (const auto value : values) {
+ Y_DO_NOT_OPTIMIZE_AWAY(null << value);
+ }
+ }
+ }
+
+ template <class TEnum, class TContext>
+ void BMFromString(TContext& iface) {
+ const auto strings = SelectStrings<TEnum>(5u);
+ for (const auto iter : xrange(iface.Iterations())) {
+ Y_UNUSED(iter);
+ for (const auto s : strings) {
+ Y_DO_NOT_OPTIMIZE_AWAY(FromString<TEnum>(s));
+ }
+ }
+ }
+
+ template <class TEnum, class TContext>
+ void BMTryFromString(TContext& iface) {
+ auto strings = SelectStrings<TEnum>(5u);
+ strings.back() = "fake";
+
+ TEnum value;
+ for (const auto iter : xrange(iface.Iterations())) {
+ Y_UNUSED(iter);
+ for (const auto s : strings) {
+ Y_DO_NOT_OPTIMIZE_AWAY(TryFromString<TEnum>(s, value));
+ }
+ }
+ }
+}
+
+#define DEFINE_BENCHMARK(name) \
+ Y_CPU_BENCHMARK(ToString_##name, iface) { \
+ BMToString<name>(iface); \
+ } \
+ Y_CPU_BENCHMARK(Out_##name, iface) { \
+ BMOut<name>(iface); \
+ } \
+ Y_CPU_BENCHMARK(FromString_##name, iface) { \
+ BMFromString<name>(iface); \
+ } \
+ Y_CPU_BENCHMARK(TryFromString_##name, iface) { \
+ BMTryFromString<name>(iface); \
+ }
+
+DEFINE_BENCHMARK(ESmallSortedEnum);
+DEFINE_BENCHMARK(ESmalUnsortedEnum);
+DEFINE_BENCHMARK(EBigSortedEnum);
+DEFINE_BENCHMARK(EBigUnsortedEnum);
+DEFINE_BENCHMARK(EBigUnsortedDenseEnum);