parent
5d1b613910
commit
6dab74689c
2
.gitignore
vendored
2
.gitignore
vendored
@ -49,4 +49,4 @@ cmake-build-debug/
|
|||||||
|
|
||||||
# cmake
|
# cmake
|
||||||
build/
|
build/
|
||||||
|
compile_commands.json
|
||||||
@ -1,5 +1,5 @@
|
|||||||
/*!
|
/*!
|
||||||
* Copyright (c) 2014 by Contributors
|
* Copyright (c) 2014-2019 by Contributors
|
||||||
* \file io.h
|
* \file io.h
|
||||||
* \brief utilities with different serializable implementations
|
* \brief utilities with different serializable implementations
|
||||||
* \author Tianqi Chen
|
* \author Tianqi Chen
|
||||||
@ -11,6 +11,7 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <numeric>
|
||||||
#include "rabit/internal/utils.h"
|
#include "rabit/internal/utils.h"
|
||||||
#include "rabit/serializable.h"
|
#include "rabit/serializable.h"
|
||||||
|
|
||||||
@ -20,6 +21,10 @@ namespace utils {
|
|||||||
typedef dmlc::SeekStream SeekStream;
|
typedef dmlc::SeekStream SeekStream;
|
||||||
/*! \brief fixed size memory buffer */
|
/*! \brief fixed size memory buffer */
|
||||||
struct MemoryFixSizeBuffer : public SeekStream {
|
struct MemoryFixSizeBuffer : public SeekStream {
|
||||||
|
public:
|
||||||
|
// similar to SEEK_END in libc
|
||||||
|
static size_t constexpr SeekEnd = std::numeric_limits<size_t>::max();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MemoryFixSizeBuffer(void *p_buffer, size_t buffer_size)
|
MemoryFixSizeBuffer(void *p_buffer, size_t buffer_size)
|
||||||
: p_buffer_(reinterpret_cast<char*>(p_buffer)),
|
: p_buffer_(reinterpret_cast<char*>(p_buffer)),
|
||||||
@ -28,8 +33,6 @@ struct MemoryFixSizeBuffer : public SeekStream {
|
|||||||
}
|
}
|
||||||
virtual ~MemoryFixSizeBuffer(void) {}
|
virtual ~MemoryFixSizeBuffer(void) {}
|
||||||
virtual size_t Read(void *ptr, size_t size) {
|
virtual size_t Read(void *ptr, size_t size) {
|
||||||
utils::Assert(curr_ptr_ + size <= buffer_size_,
|
|
||||||
"read can not have position excceed buffer length");
|
|
||||||
size_t nread = std::min(buffer_size_ - curr_ptr_, size);
|
size_t nread = std::min(buffer_size_ - curr_ptr_, size);
|
||||||
if (nread != 0) std::memcpy(ptr, p_buffer_ + curr_ptr_, nread);
|
if (nread != 0) std::memcpy(ptr, p_buffer_ + curr_ptr_, nread);
|
||||||
curr_ptr_ += nread;
|
curr_ptr_ += nread;
|
||||||
@ -43,7 +46,11 @@ struct MemoryFixSizeBuffer : public SeekStream {
|
|||||||
curr_ptr_ += size;
|
curr_ptr_ += size;
|
||||||
}
|
}
|
||||||
virtual void Seek(size_t pos) {
|
virtual void Seek(size_t pos) {
|
||||||
curr_ptr_ = static_cast<size_t>(pos);
|
if (pos == SeekEnd) {
|
||||||
|
curr_ptr_ = buffer_size_;
|
||||||
|
} else {
|
||||||
|
curr_ptr_ = static_cast<size_t>(pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
virtual size_t Tell(void) {
|
virtual size_t Tell(void) {
|
||||||
return curr_ptr_;
|
return curr_ptr_;
|
||||||
|
|||||||
1
test/.gitignore
vendored
1
test/.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
*.mpi
|
*.mpi
|
||||||
test_*
|
|
||||||
*_test
|
*_test
|
||||||
*_recover
|
*_recover
|
||||||
|
|||||||
@ -2,7 +2,10 @@ find_package(GTest REQUIRED)
|
|||||||
|
|
||||||
add_executable(
|
add_executable(
|
||||||
unit_tests
|
unit_tests
|
||||||
allreduce_base_test.cc allreduce_robust_test.cc allreduce_mock_test.cc
|
test_io.cc
|
||||||
|
allreduce_robust_test.cc
|
||||||
|
allreduce_base_test.cc
|
||||||
|
allreduce_mock_test.cc
|
||||||
test_main.cpp)
|
test_main.cpp)
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
|
|||||||
18
test/cpp/test_io.cc
Normal file
18
test/cpp/test_io.cc
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*!
|
||||||
|
* Copyright (c) 2019 by Contributors
|
||||||
|
*/
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <rabit/internal/io.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace rabit {
|
||||||
|
TEST(MemoryFixSizeBuffer, Seek) {
|
||||||
|
size_t constexpr kSize { 64 };
|
||||||
|
std::vector<int32_t> memory( kSize );
|
||||||
|
utils::MemoryFixSizeBuffer buf(memory.data(), memory.size());
|
||||||
|
buf.Seek(utils::MemoryFixSizeBuffer::SeekEnd);
|
||||||
|
size_t end = buf.Tell();
|
||||||
|
ASSERT_EQ(end, kSize);
|
||||||
|
}
|
||||||
|
} // namespace rabit
|
||||||
Loading…
x
Reference in New Issue
Block a user