|
Packit Service |
724aca |
/*
|
|
Packit Service |
724aca |
* Copyright (c) 2018 - 2019 Intel Corporation
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
724aca |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
724aca |
* are met:
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* * Redistributions of source code must retain the above copyright
|
|
Packit Service |
724aca |
* notice, this list of conditions and the following disclaimer.
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* * Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
724aca |
* notice, this list of conditions and the following disclaimer in
|
|
Packit Service |
724aca |
* the documentation and/or other materials provided with the
|
|
Packit Service |
724aca |
* distribution.
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* * Neither the name of Intel Corporation nor the names of its
|
|
Packit Service |
724aca |
* contributors may be used to endorse or promote products derived
|
|
Packit Service |
724aca |
* from this software without specific prior written permission.
|
|
Packit Service |
724aca |
*
|
|
Packit Service |
724aca |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
Packit Service |
724aca |
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
Packit Service |
724aca |
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
Packit Service |
724aca |
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
Packit Service |
724aca |
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
Packit Service |
724aca |
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
Packit Service |
724aca |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
Packit Service |
724aca |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
Packit Service |
724aca |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
Packit Service |
724aca |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY LOG OF THE USE
|
|
Packit Service |
724aca |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit Service |
724aca |
*/
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#include "pmem_allocator.h"
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#include <sys/stat.h>
|
|
Packit Service |
724aca |
#include <iostream>
|
|
Packit Service |
724aca |
#include <vector>
|
|
Packit Service |
724aca |
#include <list>
|
|
Packit Service |
724aca |
#include <map>
|
|
Packit Service |
724aca |
#include <string>
|
|
Packit Service |
724aca |
#include <scoped_allocator>
|
|
Packit Service |
724aca |
#include <cassert>
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#define STL_VECTOR_TEST
|
|
Packit Service |
724aca |
#define STL_LIST_TEST
|
|
Packit Service |
724aca |
#if _GLIBCXX_USE_CXX11_ABI
|
|
Packit Service |
724aca |
#define STL_VEC_STRING_TEST
|
|
Packit Service |
724aca |
#define STL_MAP_INT_STRING_TEST
|
|
Packit Service |
724aca |
#endif
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
void cpp_allocator_test(const char *pmem_directory)
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
std::cout << "TEST SCOPE: HELLO" << std::endl;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
size_t pmem_max_size = 1024*1024*1024;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#ifdef STL_VECTOR_TEST
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
std::cout << "VECTOR OPEN" << std::endl;
|
|
Packit Service |
724aca |
libmemkind::pmem::allocator<int> alc{ pmem_directory, pmem_max_size };
|
|
Packit Service |
724aca |
std::vector<int, libmemkind::pmem::allocator<int>> vector{ alc };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
for (int i = 0; i < 20; ++i) {
|
|
Packit Service |
724aca |
vector.push_back(0xDEAD + i);
|
|
Packit Service |
724aca |
assert(vector.back() == 0xDEAD + i);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
std::cout << "VECTOR CLOSE" << std::endl;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
#endif
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#ifdef STL_LIST_TEST
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
std::cout << "LIST OPEN" << std::endl;
|
|
Packit Service |
724aca |
libmemkind::pmem::allocator<int> alc{ pmem_directory, pmem_max_size };
|
|
Packit Service |
724aca |
std::list<int, libmemkind::pmem::allocator<int>> list{ alc };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
const int nx2 = 4;
|
|
Packit Service |
724aca |
for (int i = 0; i < nx2; ++i) {
|
|
Packit Service |
724aca |
list.emplace_back(0xBEAC011 + i);
|
|
Packit Service |
724aca |
assert(list.back() == 0xBEAC011 + i);
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
for (int i = 0; i < nx2; ++i) {
|
|
Packit Service |
724aca |
list.pop_back();
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
std::cout << "LIST CLOSE" << std::endl;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
#endif
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#ifdef STL_VEC_STRING_TEST
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
std::cout << "STRINGED VECTOR OPEN" << std::endl;
|
|
Packit Service |
724aca |
typedef libmemkind::pmem::allocator<char> str_alloc_t;
|
|
Packit Service |
724aca |
typedef std::basic_string<char, std::char_traits<char>, str_alloc_t>
|
|
Packit Service |
724aca |
pmem_string;
|
|
Packit Service |
724aca |
typedef libmemkind::pmem::allocator<pmem_string> vec_alloc_t;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
vec_alloc_t vec_alloc{ pmem_directory, pmem_max_size };
|
|
Packit Service |
724aca |
str_alloc_t str_alloc{ pmem_directory, pmem_max_size };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
std::vector<pmem_string, std::scoped_allocator_adaptor<vec_alloc_t> >
|
|
Packit Service |
724aca |
vec{ std::scoped_allocator_adaptor<vec_alloc_t>(vec_alloc) };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
pmem_string arg{ "Very very loooong striiiing", str_alloc };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
vec.push_back(arg);
|
|
Packit Service |
724aca |
assert(vec.back() == arg);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
std::cout << "STRINGED VECTOR CLOSE" << std::endl;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#endif
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
#ifdef STL_MAP_INT_STRING_TEST
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
std::cout << "INT_STRING MAP OPEN" << std::endl;
|
|
Packit Service |
724aca |
typedef std::basic_string<char, std::char_traits<char>, libmemkind::pmem::allocator<char>>
|
|
Packit Service |
724aca |
pmem_string;
|
|
Packit Service |
724aca |
typedef int key_t;
|
|
Packit Service |
724aca |
typedef pmem_string value_t;
|
|
Packit Service |
724aca |
typedef libmemkind::pmem::allocator<std::pair<const key_t, value_t>>
|
|
Packit Service |
724aca |
allocator_t;
|
|
Packit Service |
724aca |
typedef std::map<key_t, value_t, std::less<key_t>, std::scoped_allocator_adaptor<allocator_t>>
|
|
Packit Service |
724aca |
map_t;
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
allocator_t allocator( pmem_directory, pmem_max_size );
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
value_t source_str1("Lorem ipsum dolor ", allocator);
|
|
Packit Service |
724aca |
value_t source_str2("sit amet consectetuer adipiscing elit", allocator );
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
map_t target_map{ std::scoped_allocator_adaptor<allocator_t>(allocator) };
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
target_map[key_t(165)] = source_str1;
|
|
Packit Service |
724aca |
assert(target_map[key_t(165)] == source_str1);
|
|
Packit Service |
724aca |
target_map[key_t(165)] = source_str2;
|
|
Packit Service |
724aca |
assert(target_map[key_t(165)] == source_str2);
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
std::cout << "INT_STRING MAP CLOSE" << std::endl;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
#endif
|
|
Packit Service |
724aca |
std::cout << "TEST SCOPE: GOODBYE" << std::endl;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
int main(int argc, char *argv[])
|
|
Packit Service |
724aca |
{
|
|
Packit Service |
724aca |
const char *pmem_directory = "/tmp/";
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
if (argc > 2) {
|
|
Packit Service |
724aca |
std::cerr << "Usage: pmem_cpp_allocator [directory path]\n"
|
|
Packit Service |
724aca |
<< "\t[directory path] - directory where temporary file is created (default = \"/tmp/\")"
|
|
Packit Service |
724aca |
<< std::endl;
|
|
Packit Service |
724aca |
return 0;
|
|
Packit Service |
724aca |
} else if (argc == 2) {
|
|
Packit Service |
724aca |
struct stat st;
|
|
Packit Service |
724aca |
if (stat(argv[1], &st) != 0 || !S_ISDIR(st.st_mode)) {
|
|
Packit Service |
724aca |
fprintf(stderr,"%s : Invalid path to pmem kind directory\n", argv[1]);
|
|
Packit Service |
724aca |
return 1;
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
pmem_directory = argv[1];
|
|
Packit Service |
724aca |
}
|
|
Packit Service |
724aca |
|
|
Packit Service |
724aca |
cpp_allocator_test(pmem_directory);
|
|
Packit Service |
724aca |
return 0;
|
|
Packit Service |
724aca |
}
|