-#include <junction/ConcurrentMap_Linear.h>
-#include <iostream>
-#include <memory>
-#include <chrono>
-#include <cassert>
-
-namespace {
-
-const size_t kMapSize = 10000;
-const size_t kPassCount = 1;
-const unsigned s_nInsertPercentage = 10;
-const char* kTestName = "InsDelFind";
-const char* kBenchmarkName = "JunctionMapLinear";
-
-} // namespace
-
-typedef junction::ConcurrentMap_Linear<turf::u64, turf::u64> Map;
-
-int main() {
- auto start_time = std::chrono::system_clock::now();
-
- size_t nInsertedNum = 0;
- size_t nFindSuccess = 0;
- std::unique_ptr<Map> map(new Map(kMapSize / 8));
- for (size_t count = 0; count < kPassCount; count++) {
- for (size_t i = 1; i <= kMapSize; ++i) {
- // The number to operate on the map.
- size_t n = i;
- // Insert
- if (i % s_nInsertPercentage == 1) {
- auto iter = map->insertOrFind(n);
- if (!iter.getValue()) {
- iter.assignValue(n + 1);
- nInsertedNum++;
- std::cout << "Inserted\n";
- }
- }
- // Find
- {
- auto iter = map->find(n);
- if (!iter.getValue()) {
- ++nFindSuccess;
- std::cout << "Found\n";
- }
- }
- // Delete
- if (i % s_nInsertPercentage == 1) {
- auto iter = map->find(n);
- if (iter.getValue()) {
- iter.eraseValue();
- std::cout << "Erased\n";
- }
- }
- }
- }
- assert(nFindSuccess == nFindSuccess && "junction::ConcurrentMap_Linear ERROR");
-
- auto finish_time = std::chrono::system_clock::now();
- auto dur = finish_time - start_time;
- auto milisecs = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
- std::cout << "[ OK ] " << kTestName << "." << kBenchmarkName << "("
- << milisecs.count() << " ms)\n";
-
- return 0;
-}