cmake_minimum_required(VERSION 2.8.5)
+#SET(CMAKE_C_COMPILER clang-native)
+#SET(CMAKE_CXX_COMPILER clang++-native)
+SET(CMAKE_C_COMPILER clang-cross)
+SET(CMAKE_CXX_COMPILER clang++-cross)
+
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
# If this is the root project, issue a project() command so that
# the Visual Studio generator will create an .sln file.
set(JUNCTION_WITH_SAMPLES TRUE CACHE BOOL "Include all Junction samples in generated build system")
set(JUNCTION_MAKE_INSTALLABLE TRUE)
set(TURF_MAKE_INSTALLABLE TRUE)
-endif()
+endif()
# Default values, can be overridden by user
set(JUNCTION_USERCONFIG "" CACHE STRING "Optional path to additional config file (relative to root CMakeLists.txt)")
void run() {
m_map = new MapAdapter::Map(MapAdapter::getInitialCapacity(KeysToInsert));
- m_index = 2;
+// m_index = 2;
+ m_index.store(2, turf::SeqCst);
m_env.dispatcher.kick(&TestDoubleAssign::doubleAssignKeys, *this);
checkMapContents();
delete m_map;
--- /dev/null
+#include <junction/ConcurrentMap_Grampa.h>
+#include <iostream>
+#include <memory>
+#include <chrono>
+#include <cassert>
+
+namespace {
+
+const size_t kMapSize = 10000;
+const size_t kPassCount = 100000;
+const unsigned s_nInsertPercentage = 10;
+const char* kTestName = "InsDelFind";
+const char* kBenchmarkName = "JunctionMapLinear";
+
+} // namespace
+
+typedef junction::ConcurrentMap_Grampa<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));
+ 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 << "\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";
+ }
+ }
+ }
+ }
+ 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;
+}
--- /dev/null
+#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;
+}