diff options
| author | Tyge Lovset <[email protected]> | 2022-12-20 23:31:51 +0100 |
|---|---|---|
| committer | Tyge Lovset <[email protected]> | 2022-12-20 23:31:51 +0100 |
| commit | 5f57d597cd27aef55adbcb3b452973b0c6e33667 (patch) | |
| tree | dfd59c2fd0e36a6ef37912a9d0cc5a65970f1524 /benchmarks/misc/sso_bench.cpp | |
| parent | 1763be8c8cbbc0896477fcf924edd4180d1345a9 (diff) | |
| download | STC-modified-5f57d597cd27aef55adbcb3b452973b0c6e33667.tar.gz STC-modified-5f57d597cd27aef55adbcb3b452973b0c6e33667.zip | |
Restructured folders: examples, benchmarks, tests into misc folder.
Diffstat (limited to 'benchmarks/misc/sso_bench.cpp')
| -rw-r--r-- | benchmarks/misc/sso_bench.cpp | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/benchmarks/misc/sso_bench.cpp b/benchmarks/misc/sso_bench.cpp deleted file mode 100644 index 0fffef7a..00000000 --- a/benchmarks/misc/sso_bench.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include <string> -#include <iostream> -#include <chrono> - -#include <stc/crandom.h> -#include <stc/cstr.h> - -#define i_type StcVec -#define i_val_str -#include <stc/cstack.h> - -#define i_type StcSet -#define i_val_str -#include <stc/csset.h> - -#include <vector> -using StdVec = std::vector<std::string>; -#include <set> -using StdSet = std::set<std::string>; - - -static const int BENCHMARK_SIZE = 2000000; -static const int MAX_STRING_SIZE = 50; -static const char CHARS[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=+-"; -using time_point = std::chrono::high_resolution_clock::time_point; - - -static inline std::string randomString_STD(int strsize) { - std::string s(strsize, 0); - char* p = &s[0]; - union { uint64_t u8; uint8_t b[8]; } r; - for (int i = 0; i < strsize; ++i) { - if ((i & 7) == 0) r.u8 = crandom() & 0x3f3f3f3f3f3f3f3f; - p[i] = CHARS[r.b[i & 7]]; - } - return s; -} - -static inline cstr randomString_STC(int strsize) { - cstr s = cstr_with_size(strsize, 0); - char* p = cstr_data(&s); - union { uint64_t u8; uint8_t b[8]; } r; - for (int i = 0; i < strsize; ++i) { - if ((i & 7) == 0) r.u8 = crandom() & 0x3f3f3f3f3f3f3f3f; - p[i] = CHARS[r.b[i & 7]]; - } - return s; -} - - -void addRandomString(StdVec& vec, int strsize) { - vec.push_back(std::move(randomString_STD(strsize))); -} - -void addRandomString(StcVec& vec, int strsize) { - StcVec_push(&vec, randomString_STC(strsize)); -} - -void addRandomString(StdSet& set, int strsize) { - set.insert(std::move(randomString_STD(strsize))); -} - -void addRandomString(StcSet& set, int strsize) { - StcSet_insert(&set, randomString_STC(strsize)); -} - - -template <class C> -int benchmark(C& container, const int n, const int strsize) { - time_point t1 = std::chrono::high_resolution_clock::now(); - - for (int i = 0; i < n; i++) - addRandomString(container, strsize); - - time_point t2 = std::chrono::high_resolution_clock::now(); - const auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count(); - std::cerr << (strsize ? strsize : 32) << "\t" << duration; - return (int)duration; -} - - -int main() { - uint64_t seed = 4321; - int sum, n; - - // VECTOR WITH STRINGS - - csrandom(seed); - sum = 0, n = 0; - std::cerr << "\nstrsize\tmsecs\tstd::vector<std::string>, size=" << BENCHMARK_SIZE << "\n"; - for (int strsize = 1; strsize <= MAX_STRING_SIZE; strsize += 2) { - StdVec vec; vec.reserve(BENCHMARK_SIZE); - sum += benchmark(vec, BENCHMARK_SIZE, strsize), ++n; - std::cout << '\t' << vec.front() << '\n'; - } - std::cout << "Avg:\t" << sum/n << '\n'; - - csrandom(seed); - sum = 0, n = 0; - std::cerr << "\nstrsize\tmsecs\tcvec<cstr>, size=" << BENCHMARK_SIZE << "\n"; - for (int strsize = 1; strsize <= MAX_STRING_SIZE; strsize += 2) { - StcVec vec = StcVec_with_capacity(BENCHMARK_SIZE); - sum += benchmark(vec, BENCHMARK_SIZE, strsize), ++n; - std::cout << '\t' << cstr_str(&vec.data[0]) << '\n'; - StcVec_drop(&vec); - } - std::cout << "Avg:\t" << sum/n << '\n'; - - // SORTED SET WITH STRINGS - - csrandom(seed); - sum = 0, n = 0; - std::cerr << "\nstrsize\tmsecs\tstd::set<std::string>, size=" << BENCHMARK_SIZE/16 << "\n"; - for (int strsize = 1; strsize <= MAX_STRING_SIZE; strsize += 2) { - StdSet set; - sum += benchmark(set, BENCHMARK_SIZE/16, strsize), ++n; - std::cout << '\t' << *set.begin() << '\n'; - } - std::cout << "Avg:\t" << sum/n << '\n'; - - csrandom(seed); - sum = 0, n = 0; - std::cerr << "\nstrsize\tmsecs\tcsset<cstr>, size=" << BENCHMARK_SIZE/16 << "\n"; - for (int strsize = 1; strsize <= MAX_STRING_SIZE; strsize += 2) { - StcSet set = StcSet_with_capacity(BENCHMARK_SIZE/16); - sum += benchmark(set, BENCHMARK_SIZE/16, strsize), ++n; - std::cout << '\t' << cstr_str(StcSet_front(&set)) << '\n'; - StcSet_drop(&set); - } - std::cout << "Avg:\t" << sum/n << '\n'; - - std::cerr << "sizeof(std::string) : " << sizeof(std::string) << std::endl - << "sizeof(cstr) : " << sizeof(cstr) << std::endl; - return 0; -} |
