Project
Loading...
Searching...
No Matches
testStatusMap.cxx
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
12#include <boost/test/tools/old/interface.hpp>
13#include <type_traits>
14#define BOOST_TEST_MODULE MCH StatusMap
15#define BOOST_TEST_DYN_LINK
16#include <boost/test/unit_test.hpp>
17#include <boost/test/data/test_case.hpp>
18#include <boost/test/data/monomorphic.hpp>
19
22#include "MCHStatus/StatusMap.h"
23#include <fmt/format.h>
24
25namespace bdata = boost::unit_test::data;
26
27BOOST_AUTO_TEST_CASE(CtorBuildAnEmptyMap)
28{
29 o2::mch::StatusMap statusMap;
30
31 BOOST_CHECK_EQUAL(statusMap.empty(), true);
32}
33
34std::vector<o2::mch::DsChannelId> chid{{42, 17, 63},
35 {320, 34, 1}};
36
37std::vector<o2::mch::ChannelCode> cc{
38 {302, 20117}, // same as chid[0]
39 {100, 15665}, // same as chid[1]
40 {1025, 8},
41 {515, 1863}};
42
43o2::mch::DsIndex ds = 246; // 56 pads, contains chid[1]
44
45uint16_t de = 1025; // 6976 pads, contains cc[2]
46
47uint32_t badMask = 1 << 3;
48
49BOOST_AUTO_TEST_CASE(ClearShouldGiveEmptyMap)
50{
51 o2::mch::StatusMap statusMap;
53 statusMap.clear();
54 BOOST_CHECK_EQUAL(statusMap.empty(), true);
55}
56
57BOOST_AUTO_TEST_CASE(AddChannelIdWithInvalidMaskShouldThrow)
58{
59 o2::mch::StatusMap statusMap;
60 BOOST_CHECK_THROW(statusMap.add(chid, badMask), std::runtime_error);
61}
62
63BOOST_AUTO_TEST_CASE(AddChannelCodeWithInvalidMaskShouldThrow)
64{
65 o2::mch::StatusMap statusMap;
66 BOOST_CHECK_THROW(statusMap.add(cc, badMask), std::runtime_error);
67}
68
69BOOST_AUTO_TEST_CASE(AddDSWithInvalidMaskShouldThrow)
70{
71 o2::mch::StatusMap statusMap;
72 BOOST_CHECK_THROW(statusMap.addDS(0, badMask), std::runtime_error);
73}
74
75BOOST_AUTO_TEST_CASE(AddDEWithInvalidMaskShouldThrow)
76{
77 o2::mch::StatusMap statusMap;
78 BOOST_CHECK_THROW(statusMap.addDE(100, badMask), std::runtime_error);
79}
80
87
88BOOST_DATA_TEST_CASE(CheckAddedChannelsGetTheRightMask, bdata::xrange(maskList.size()), maskIndex)
89{
90 o2::mch::StatusMap statusMap;
91 auto mask = maskList[maskIndex];
92 statusMap.add(cc, mask);
93 for (const auto& status : statusMap) {
94 BOOST_CHECK_EQUAL(status.second, mask);
95 }
96}
97
98BOOST_AUTO_TEST_CASE(CheckChannelStatusCombination)
99{
100 auto size = [](const o2::mch::StatusMap& statusMap) {
101 int n = 0;
102 for (const auto& status : statusMap) {
103 ++n;
104 }
105 return n;
106 };
107 o2::mch::StatusMap statusMap;
109 BOOST_CHECK_EQUAL(size(statusMap), 4);
111 BOOST_CHECK_EQUAL(size(statusMap), 4);
113 BOOST_CHECK_EQUAL(size(statusMap), 59);
115 BOOST_CHECK_EQUAL(size(statusMap), 7034);
120}
121
122BOOST_AUTO_TEST_CASE(ApplyMaskShouldReturnASubsetDependingOnMask)
123{
124 auto size = [](const std::map<int, std::vector<int>>& badChannels) {
125 int n = 0;
126 for (const auto& channels : badChannels) {
127 n += channels.second.size();
128 }
129 return n;
130 };
131 o2::mch::StatusMap statusMap;
136 auto badPed = applyMask(statusMap, o2::mch::StatusMap::kBadPedestal);
137 auto rejectList = applyMask(statusMap, o2::mch::StatusMap::kRejectList);
138 auto badHV = applyMask(statusMap, o2::mch::StatusMap::kBadHV);
139 auto badHVOrRL = applyMask(statusMap, o2::mch::StatusMap::kBadHV | o2::mch::StatusMap::kRejectList);
141 BOOST_CHECK_EQUAL(badPed.size(), 4);
142 BOOST_CHECK_EQUAL(size(badPed), 4);
143 BOOST_CHECK_EQUAL(badPed[1025][0], 8);
144 BOOST_CHECK_EQUAL(rejectList.size(), 2);
145 BOOST_CHECK_EQUAL(size(rejectList), 2);
146 BOOST_CHECK_EQUAL(rejectList[100][0], 15665);
147 BOOST_CHECK_EQUAL(badHV.size(), 2);
148 BOOST_CHECK_EQUAL(size(badHV), 7032);
149 BOOST_CHECK_EQUAL(badHV[1025].size(), 6976);
150 BOOST_CHECK_EQUAL(badHVOrRL.size(), 3);
151 BOOST_CHECK_EQUAL(size(badHVOrRL), 7033);
152 BOOST_CHECK_EQUAL(badHVOrRL[515].size(), 0);
153 BOOST_CHECK_EQUAL(any.size(), 4);
154 BOOST_CHECK_EQUAL(size(any), 7034);
155 BOOST_CHECK_EQUAL(any[302][0], 20117);
156}
bool empty() const
Definition StatusMap.h:93
void add(gsl::span< const DsChannelId > badchannels, uint32_t mask)
Definition StatusMap.cxx:36
uint32_t status(const ChannelCode &id) const
void addDS(DsIndex badDS, uint32_t mask)
Definition StatusMap.cxx:58
void addDE(uint16_t badDE, uint32_t mask)
Definition StatusMap.cxx:87
GLdouble n
Definition glcorearb.h:1982
GLsizeiptr size
Definition glcorearb.h:659
GLint GLuint mask
Definition glcorearb.h:291
uint16_t DsIndex
Definition DsIndex.h:26
uint32_t badMask
std::array< uint32_t, 5 > maskList
std::vector< o2::mch::ChannelCode > cc
BOOST_DATA_TEST_CASE(CheckAddedChannelsGetTheRightMask, bdata::xrange(maskList.size()), maskIndex)
BOOST_AUTO_TEST_CASE(CtorBuildAnEmptyMap)
uint16_t de
std::vector< o2::mch::DsChannelId > chid
o2::mch::DsIndex ds
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size())
std::vector< ChannelData > channels