Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:13:08

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         //the second argument is the buffer capacity, not the last length sent
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           //this should go back to buffer0
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 }