diff options
| author | chenzizhan <[email protected]> | 2023-06-26 10:19:05 +0800 |
|---|---|---|
| committer | chenzizhan <[email protected]> | 2023-06-26 10:19:05 +0800 |
| commit | 7a52b4feb5b4eb1c748e06baab8a14dc61292e87 (patch) | |
| tree | ed1a5d03d5666441fae92fc59e1f64b3d6d8a1e1 /test/utils.cpp | |
| parent | fcba593fc1125a48a693226f13d89de498bb00eb (diff) | |
revert test_utils, hll no timewindow support
Diffstat (limited to 'test/utils.cpp')
| -rw-r--r-- | test/utils.cpp | 250 |
1 files changed, 12 insertions, 238 deletions
diff --git a/test/utils.cpp b/test/utils.cpp index 6438512..922ba73 100644 --- a/test/utils.cpp +++ b/test/utils.cpp @@ -17,18 +17,6 @@ using namespace std; -static int g_tag_num = 10; - -void set_tag_num(int num) -{ - g_tag_num = num; -} - -int get_tag_num() -{ - return g_tag_num; -} - string gen_rand_string(int len) { string s; @@ -39,104 +27,12 @@ string gen_rand_string(int len) return s; } -// Fieldstat_tag_wrapper::Fieldstat_tag_wrapper(const char *key, long long value) { -// tag.key = key; -// tag.type = TAG_INTEGER; -// tag.value_int = value; -// } - -// Fieldstat_tag_wrapper::Fieldstat_tag_wrapper(const char *key, double value) { -// tag.key = key; -// tag.type = TAG_DOUBLE; -// tag.value_double = value; -// } - -// Fieldstat_tag_wrapper::Fieldstat_tag_wrapper(const char *key, const char *value) { -// tag.key = key; -// tag.type = TAG_CSTRING; -// tag.value_str = value; -// // TODO: 这个地方应该是strdup。说实话这个类感觉都没什么用了,就先这样吧 -// } - -// Fieldstat_tag_wrapper::Fieldstat_tag_wrapper(const struct fieldstat_tag *tag) { -// switch (tag->type) -// { -// case TAG_INTEGER: -// Fieldstat_tag_wrapper(tag->key, tag->value_int); -// break; -// case TAG_DOUBLE: -// Fieldstat_tag_wrapper(tag->key, tag->value_double); -// break; -// case TAG_CSTRING: -// Fieldstat_tag_wrapper(tag->key, tag->value_str); -// break; -// default: -// break; -// } -// } - -// Fieldstat_tag_wrapper::Fieldstat_tag_wrapper(const std::uniform_int_distribution<int>& dist) -// { -// default_random_engine e; -// tag.key = strdup(gen_rand_string(10).c_str()); -// int rand_ret = rand() % 3; -// if (rand_ret == 0) -// { -// tag.type = TAG_INTEGER; -// tag.value_int = static_cast<int>(dist(e)); -// } -// else if (rand_ret == 1) -// { -// tag.type = TAG_DOUBLE; -// tag.value_double = static_cast<int>(dist(e)); -// } -// else -// { -// tag.type = TAG_CSTRING; -// tag.value_str = strdup(gen_rand_string(10).c_str()); -// } -// } -// Fieldstat_tag_wrapper::~Fieldstat_tag_wrapper() { -// if (tag.type == TAG_CSTRING) -// { -// free((void *)tag.value_str); -// } -// free((void *)tag.key); -// } - -// bool Fieldstat_tag_wrapper::operator==(const Fieldstat_tag_wrapper& rhs) const { -// if (tag.type != rhs.tag.type) -// { -// return false; -// } -// if (tag.type == TAG_INTEGER) -// { -// return tag.value_int == rhs.tag.value_int; -// } -// else if (tag.type == TAG_DOUBLE) -// { -// return tag.value_double == rhs.tag.value_double; -// } -// else -// { -// return strcmp(tag.value_str, rhs.tag.value_str) == 0; -// } -// if (strcmp(tag.key, rhs.tag.key) != 0) { -// return false; -// } -// return true; -// } - -// const struct fieldstat_tag& Fieldstat_tag_wrapper::get_c_struct() const -// { -// return tag; -// } /* -------------------------------------------------------------------------- */ /* taglist wrapper */ /* -------------------------------------------------------------------------- */ -Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(struct fieldstat_tag_list *tag_list) { +Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(const struct fieldstat_tag_list *tag_list) { tag_list_c.tag = (struct fieldstat_tag *)malloc(sizeof(struct fieldstat_tag) * tag_list->n_tag); tag_list_c.n_tag = tag_list->n_tag; for (size_t i = 0; i < tag_list->n_tag; i++) @@ -173,9 +69,8 @@ Fieldstat_tag_list_wrapper::~Fieldstat_tag_list_wrapper() { free((void *)tag_list_c.tag); } -Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(std::uniform_int_distribution<int> &dist) +Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(std::uniform_int_distribution<int> &dist, int tag_count) { - int tag_count = get_tag_count(); // TODO: 更多的tag数量产生方式 tag_list_c.tag = (struct fieldstat_tag *)malloc(sizeof(struct fieldstat_tag) * tag_count); tag_list_c.n_tag = tag_count; std::mt19937 rng(RAND_SEED); @@ -201,149 +96,28 @@ Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(std::uniform_int_distribu } } -const struct fieldstat_tag *Fieldstat_tag_list_wrapper::get_tag() -{ - return tag_list_c.tag; -} - -size_t Fieldstat_tag_list_wrapper::get_tag_count() -{ - return tag_list_c.n_tag; +Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper() { + tag_list_c.tag = NULL; + tag_list_c.n_tag = 0; } - -/* -------------------------------------------------------------------------- */ -/* Api_caller */ -/* -------------------------------------------------------------------------- */ - -template <typename ReturnType, typename... Args> -Api_caller<ReturnType, Args...>::Api_caller() : rng(std::random_device()()), distribution(1, 100) -{ +Fieldstat_tag_list_wrapper::Fieldstat_tag_list_wrapper(const Fieldstat_tag_list_wrapper &tag_list_wrapper) : Fieldstat_tag_list_wrapper(tag_list_wrapper.get_c_struct()) { } -template <typename ReturnType, typename... Args> -void Api_caller<ReturnType, Args...>::addApiFunction(const std::function<ReturnType(Args...)>& apiFunction) { - apiFunctions.push_back(apiFunction); -} -template <typename ReturnType, typename... Args> -void Api_caller<ReturnType, Args...>::testApis() +const struct fieldstat_tag *Fieldstat_tag_list_wrapper::get_tag() const { - for (const auto& apiFunction : apiFunctions) { - std::vector<std::tuple<Args...>> args = generateArguments(); - for (const auto& argSet : args) { - ReturnType result = callApiFunction(apiFunction, argSet); - recordInputOutput(apiFunction, argSet, result); - } - } -} - -template <typename ReturnType, typename... Args> -void Api_caller<ReturnType, Args...>::testApis(int loop_num) { - for (int i = 0; i < loop_num; i++) { - testApis(); - } -} - -template<typename ReturnType, typename... Args> -template<typename Arg> -Arg Api_caller<ReturnType, Args...>::generateArgument() { - return static_cast<Arg>(distribution(rng)); -} - -template<typename ReturnType, typename... Args> -template<size_t Index> -void Api_caller<ReturnType, Args...>::generateArgumentsImpl(std::vector<std::tuple<Args...>>& args, std::tuple<Args...>& current) { - if constexpr (Index == sizeof...(Args)) { - args.push_back(current); - } else { - std::get<Index>(current) = generateArgument<std::tuple_element_t<Index, std::tuple<Args...>>>(); - generateArgumentsImpl<Index + 1, Args...>(args, current); - } -} - -template<typename ReturnType, typename... Args> -template<size_t Index> -void Api_caller<ReturnType, Args...>::generateArgumentsImpl(std::vector<std::tuple<Args...>>& args) { - std::tuple<Args...> current; - generateArgumentsImpl<Index, Args...>(args, current); -} - -template<typename ReturnType, typename... Args> -std::vector<std::tuple<Args...>> Api_caller<ReturnType, Args...>::generateArguments() { - std::vector<std::tuple<Args...>> args; - generateArgumentsImpl<0, Args...>(args); - return args; -} - -// Call an API function with arguments -template<typename ReturnType, typename... Args> -ReturnType Api_caller<ReturnType, Args...>::callApiFunction(const std::function<ReturnType(Args...)>& apiFunction, const std::tuple<Args...>& args) { - return std::apply(apiFunction, args); -} - -// TODO: 看看到底有没用,没用就删了吧 -template<size_t Index, typename... Args> -void printInput(const std::tuple<Args...>& args) { - if constexpr (Index < sizeof...(Args)) { - std::cout << std::get<Index>(args) << " "; - printInput<Index + 1, Args...>(args); - } -} - -// Record the input arguments and output of an API function -template<typename ReturnType, typename... Args> -void Api_caller<ReturnType, Args...>::recordInputOutput(Args... args, ReturnType result) -{ - arguments.emplace_back(std::make_tuple(args...)); - results.push_back(result); -} - -template<typename ReturnType, typename... Args> -std::vector<std::tuple<Args...>>Api_caller<ReturnType, Args...>::getArguments() -{ - return arguments; -} - -template <typename Query_ret> -Query_caller<Query_ret>::Query_caller(const std::function<Query_ret(Fieldstat_tag_list_wrapper &)>& queryFunction) : queryFunction(queryFunction) -{ -} - -template <typename Query_ret> -template <typename... Args> -void Query_caller<Query_ret>::take_args(std::vector<std::tuple<Args...>>& args) -{ - for (auto& arg : args) - { - extract_tags(arg); - } + return tag_list_c.tag; } -template <typename Query_ret> -std::vector<Query_ret> Query_caller<Query_ret>::get_results() +size_t Fieldstat_tag_list_wrapper::get_tag_count() const { - std::vector<Query_ret> results; - std::transform(arguments.begin(), arguments.end(), std::back_inserter(results), queryFunction); - return results; + return tag_list_c.n_tag; } -template <typename Query_ret> -template <typename... Args> -void Query_caller<Query_ret>::extract_tags(std::tuple<Args...>& args) +const struct fieldstat_tag_list *Fieldstat_tag_list_wrapper::get_c_struct() const { - Fieldstat_tag_list_wrapper tag_list_wrapper; - arguments.push_back(std::get<Fieldstat_tag_list_wrapper>(args)); + return &tag_list_c; } -template <typename Query_ret> -double cal_accuracy(std::vector<Query_ret>& results, std::vector<Query_ret>& expected_results) -{ - int count = 0; - - for (const auto &expected_result : expected_results) { - count += std::count(results.begin(), results.end(), expected_result); - } - return count / results.size(); -}
\ No newline at end of file |
