File indexing completed on 2023-03-17 11:03:45
0001 #include "catch.hpp"
0002 #include <stdio.h>
0003 #include <string>
0004 #include <algorithm>
0005
0006 #include "FWCore/SharedMemory/interface/WriteBuffer.h"
0007 #include "FWCore/SharedMemory/interface/ReadBuffer.h"
0008
0009 using namespace edm::shared_memory;
0010
0011 TEST_CASE("test Read/WriteBuffers", "[Buffers]") {
0012 BufferInfo bufferInfo = {0, 0};
0013
0014 std::string const uniqueName = "BufferTest" + std::to_string(getpid());
0015
0016 WriteBuffer writeBuffer(uniqueName, &bufferInfo);
0017
0018 ReadBuffer readBuffer(uniqueName, &bufferInfo);
0019
0020 SECTION("First") {
0021 std::array<char, 4> dummy = {{'t', 'e', 's', 't'}};
0022
0023 writeBuffer.copyToBuffer(dummy.data(), dummy.size());
0024
0025 REQUIRE(readBuffer.bufferIdentifier() == 1);
0026 {
0027 auto b = readBuffer.buffer();
0028 REQUIRE(b.second == dummy.size());
0029 REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
0030 }
0031
0032 SECTION("Smaller") {
0033 dummy[0] = 'm';
0034
0035 writeBuffer.copyToBuffer(dummy.data(), dummy.size() - 1);
0036
0037 REQUIRE(readBuffer.bufferIdentifier() == 1);
0038 {
0039 auto b = readBuffer.buffer();
0040
0041 REQUIRE(b.second == dummy.size());
0042 REQUIRE(std::equal(b.first, b.first + b.second - 1, dummy.cbegin(), dummy.cbegin() + dummy.size() - 1));
0043 }
0044
0045 SECTION("Larger") {
0046 std::array<char, 6> dummy = {{'l', 'a', 'r', 'g', 'e', 'r'}};
0047 writeBuffer.copyToBuffer(dummy.data(), dummy.size());
0048
0049 REQUIRE(readBuffer.bufferIdentifier() == 2);
0050 {
0051 auto b = readBuffer.buffer();
0052 REQUIRE(b.second == dummy.size());
0053 REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
0054 }
0055
0056 SECTION("Largest") {
0057
0058 std::array<char, 7> dummy = {{'l', 'a', 'r', 'g', 'e', 's', 't'}};
0059 writeBuffer.copyToBuffer(dummy.data(), dummy.size());
0060
0061 REQUIRE(readBuffer.bufferIdentifier() == 3);
0062 {
0063 auto b = readBuffer.buffer();
0064 REQUIRE(b.second == dummy.size());
0065 REQUIRE(std::equal(b.first, b.first + b.second, dummy.cbegin(), dummy.cend()));
0066 }
0067 }
0068 }
0069 }
0070 }
0071 }