1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include "catch.hpp"
#include <stdio.h>
#include <string>
#include <algorithm>
#include "FWCore/SharedMemory/interface/WriteBuffer.h"
#include "FWCore/SharedMemory/interface/ReadBuffer.h"
using namespace edm::shared_memory;
TEST_CASE("test Read/WriteBuffers", "[Buffers]") {
BufferInfo bufferInfo = {0, 0};
std::string const uniqueName = "BufferTest" + std::to_string(getpid());
WriteBuffer writeBuffer(uniqueName, &bufferInfo);
ReadBuffer readBuffer(uniqueName, &bufferInfo);
SECTION("First") {
std::array<char, 4> dummy = {{'t', 'e', 's', 't'}};
writeBuffer.copyToBuffer(dummy.data(), dummy.size());
REQUIRE(readBuffer.bufferIdentifier() == 1);
{
auto b = readBuffer.buffer();
REQUIRE(b.second == dummy.size());
REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
}
SECTION("Smaller") {
dummy[0] = 'm';
writeBuffer.copyToBuffer(dummy.data(), dummy.size() - 1);
REQUIRE(readBuffer.bufferIdentifier() == 1);
{
auto b = readBuffer.buffer();
//the second argument is the buffer capacity, not the last length sent
REQUIRE(b.second == dummy.size());
REQUIRE(std::equal(b.first, b.first + b.second - 1, dummy.cbegin(), dummy.cbegin() + dummy.size() - 1));
}
SECTION("Larger") {
std::array<char, 6> dummy = {{'l', 'a', 'r', 'g', 'e', 'r'}};
writeBuffer.copyToBuffer(dummy.data(), dummy.size());
REQUIRE(readBuffer.bufferIdentifier() == 2);
{
auto b = readBuffer.buffer();
REQUIRE(b.second == dummy.size());
REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
}
SECTION("Largest") {
//this should go back to buffer0
std::array<char, 7> dummy = {{'l', 'a', 'r', 'g', 'e', 's', 't'}};
writeBuffer.copyToBuffer(dummy.data(), dummy.size());
REQUIRE(readBuffer.bufferIdentifier() == 3);
{
auto b = readBuffer.buffer();
REQUIRE(b.second == dummy.size());
REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
}
}
}
}
}
}
|