-#include <junction/ConcurrentMap_Grampa.h>
-#include <iostream>
-#include <memory>
-#include <chrono>
-#include <cassert>
-
-namespace {
-
-const unsigned s_nInsertPercentage = 10;
-const char* kTestName = "InsDelFind";
-const size_t kGrampaMapSize = 20000;
-const size_t kGrampaPassCount = 30000;
-const char* kGrampaBenchmarkName = "JunctionMapLinear";
-
-} // namespace
-
-typedef junction::ConcurrentMap_Grampa<size_t, size_t> GrampaMap;
-
-template <typename Map>
-void run_test(size_t map_size, size_t pass_count, const char* bench_name) {
- auto start_time = std::chrono::system_clock::now();
-
- size_t nInsertedNum = 0;
- size_t nFindSuccess = 0;
- std::unique_ptr<Map> map(new Map());
- auto qsbrContext = junction::DefaultQSBR.createContext();
- for (size_t count = 0; count < pass_count; count++) {
- for (size_t i = 0; i < map_size; ++i) {
- // The number to operate on the map.
- size_t n = map_size + i;
- // Insert
- if (i % s_nInsertPercentage == 1) {
- auto iter = map->insertOrFind(n);
- if (!iter.getValue()) {
- iter.assignValue(n);
- nInsertedNum++;
-// std::cout << "Inserted" << n << "\n";
- }
- }
- // Find
- {
- auto iter = map->find(n);
- if (iter.getValue()) {
- ++nFindSuccess;
-// std::cout << "Found" << n << "\n";
- }
- }
- // Delete
- if (i % s_nInsertPercentage == 1) {
- auto iter = map->find(n);
- if (iter.getValue()) {
- iter.eraseValue();
-// std::cout << "Erased" << n << "\n";
- }
- }
- junction::DefaultQSBR.update(qsbrContext);
- }
- }
- auto finish_time = std::chrono::system_clock::now();
- auto dur = finish_time - start_time;
- auto milisecs = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
-
- if (nFindSuccess != nInsertedNum) {
- std::cout << "nFindSuccess=" << nFindSuccess << ", nInsertedNum="
- << nInsertedNum << "\n";
- std::cout << "[ FAILED ] " << kTestName << "." << bench_name
- << "(" << milisecs.count() << " ms)\n";
- assert(false && "ConcurrentMap ERROR");
- } else {
- std::cout << "[ OK ] " << kTestName << "." << bench_name
- << "(" << milisecs.count() << " ms)\n";
- }
-}
-
-int main() {
- run_test<GrampaMap>(kGrampaMapSize, kGrampaPassCount, kGrampaBenchmarkName);
- return 0;
-}