ChimeraTK-DeviceAccess 03.29.00
Loading...
Searching...
No Matches
testNumericAddressingSyntax.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Deutsches Elektronen-Synchrotron DESY, MSK, ChimeraTK Project <chimeratk-support@desy.de>
2// SPDX-License-Identifier: LGPL-3.0-or-later
3
4#define BOOST_TEST_DYN_LINK
5#define BOOST_TEST_MODULE NumericAddressingSyntaxTest
6#include <boost/test/unit_test.hpp>
7using namespace boost::unit_test_framework;
8
10
11using namespace ChimeraTK;
12
13/**********************************************************************************************************************/
14
15void compareRegister(NumericAddressedRegisterInfo info, RegisterPath const& pathName, uint32_t nElements,
16 uint64_t address, uint32_t nBytes, uint64_t bar, uint32_t width, int32_t nFractionalBits, bool signedFlag) {
17 BOOST_TEST(info.pathName == pathName);
18 BOOST_CHECK_MESSAGE(info.nElements == nElements,
19 "nElements mismatch in " << pathName << ": " << info.nElements << " != " << nElements);
20 BOOST_CHECK_MESSAGE(
21 info.address == address, "address mismatch in " << pathName << ": " << info.address << " != " << address);
22 BOOST_CHECK_MESSAGE(info.elementPitchBits / 8 * nElements == nBytes,
23 "nBytes mismatch in " << pathName << ": " << info.elementPitchBits / 8 * nElements << " != " << nBytes);
24 BOOST_CHECK_MESSAGE(info.bar == bar, "bar mismatch in " << pathName << ": " << info.bar << " != " << bar);
25 BOOST_CHECK_MESSAGE(
26 info.channels.size() == 1, "channels.size() mismatch in " << pathName << ": " << info.channels.size() << " != 1");
27 BOOST_CHECK_MESSAGE(info.channels.front().width == width,
28 "width mismatch in " << pathName << ": " << info.channels.front().width << " != " << width);
29 BOOST_CHECK_MESSAGE(info.channels.front().nFractionalBits == nFractionalBits,
30 "nFractionalBits mismatch in " << pathName << ": " << info.channels.front().nFractionalBits
31 << " != " << nFractionalBits);
32 BOOST_CHECK_MESSAGE(info.channels.front().signedFlag == signedFlag,
33 "signedFlag mismatch in " << pathName << ": " << info.channels.front().signedFlag << " != " << signedFlag);
34}
35
36/**********************************************************************************************************************/
37
38BOOST_AUTO_TEST_CASE(TestLegacyScalar) {
40 auto info1 = catalogue.getBackendRegister("/#/0/32");
41
42 compareRegister(info1, "/#/0/32", 1, 32, 4, 0, 32, 0, true);
43}
44
45/**********************************************************************************************************************/
46
47BOOST_AUTO_TEST_CASE(TestLegacyOneD) {
49 auto info1 = catalogue.getBackendRegister("/#/5/12*8");
50
51 compareRegister(info1, "/#/5/12*8", 2, 12, 8, 5, 32, 0, true);
52}
53
54/**********************************************************************************************************************/
55
56BOOST_AUTO_TEST_CASE(TestUnsigned8) {
58 auto info1 = catalogue.getBackendRegister("/#/5/12*8u8");
59
60 compareRegister(info1, "/#/5/12*8u8", 8, 12, 8, 5, 8, 0, false);
61}
62
63/**********************************************************************************************************************/
64
67 auto info1 = catalogue.getBackendRegister("/#/5/12*8s8");
68
69 compareRegister(info1, "/#/5/12*8s8", 8, 12, 8, 5, 8, 0, true);
70}
71
72/**********************************************************************************************************************/
73
74BOOST_AUTO_TEST_CASE(TestUnsigned16) {
76 auto info1 = catalogue.getBackendRegister("/#/5/12*8u16");
77
78 compareRegister(info1, "/#/5/12*8u16", 4, 12, 8, 5, 16, 0, false);
79}
80
81/**********************************************************************************************************************/
82
83BOOST_AUTO_TEST_CASE(TestSigned16) {
85 auto info1 = catalogue.getBackendRegister("/#/5/12*8s16");
86
87 compareRegister(info1, "/#/5/12*8s16", 4, 12, 8, 5, 16, 0, true);
88}
89
90/**********************************************************************************************************************/
91
92BOOST_AUTO_TEST_CASE(TestUnsigned32) {
94 auto info1 = catalogue.getBackendRegister("/#/5/12*8u32");
95
96 compareRegister(info1, "/#/5/12*8u32", 2, 12, 8, 5, 32, 0, false);
97}
98
99/**********************************************************************************************************************/
100
101BOOST_AUTO_TEST_CASE(TestSigned32) {
103 auto info1 = catalogue.getBackendRegister("/#/5/12*8s32");
104
105 compareRegister(info1, "/#/5/12*8s32", 2, 12, 8, 5, 32, 0, true);
106}
107
108/**********************************************************************************************************************/
109
110BOOST_AUTO_TEST_CASE(TestUnsigned64) {
112 auto info1 = catalogue.getBackendRegister("/#/5/12*8u64");
113
114 compareRegister(info1, "/#/5/12*8u64", 1, 12, 8, 5, 64, 0, false);
115}
116
117/**********************************************************************************************************************/
118
119BOOST_AUTO_TEST_CASE(TestSigned64) {
121 auto info1 = catalogue.getBackendRegister("/#/5/12*8s64");
122
123 compareRegister(info1, "/#/5/12*8s64", 1, 12, 8, 5, 64, 0, true);
124}
125
126/**********************************************************************************************************************/
127
128BOOST_AUTO_TEST_CASE(TestReverseOrderU32) {
130 auto info1 = catalogue.getBackendRegister("/#/5/12u32*8");
131
132 compareRegister(info1, "/#/5/12u32*8", 2, 12, 8, 5, 32, 0, false);
133}
134
135/**********************************************************************************************************************/
136
137BOOST_AUTO_TEST_CASE(TestReverseOrderS16) {
139 auto info1 = catalogue.getBackendRegister("/#/5/12s16*8");
140
141 compareRegister(info1, "/#/5/12s16*8", 4, 12, 8, 5, 16, 0, true);
142}
143
144/**********************************************************************************************************************/
145
148 auto info1 = catalogue.getBackendRegister("/#/5/12u8");
149
150 compareRegister(info1, "/#/5/12u8", 1, 12, 1, 5, 8, 0, false);
151}
152
153/**********************************************************************************************************************/
154
157 auto info1 = catalogue.getBackendRegister("/#/5/12s8");
158
159 compareRegister(info1, "/#/5/12s8", 1, 12, 1, 5, 8, 0, true);
160}
161
162/**********************************************************************************************************************/
163
166 auto info1 = catalogue.getBackendRegister("/#/5/12u16");
167
168 compareRegister(info1, "/#/5/12u16", 1, 12, 2, 5, 16, 0, false);
169}
170
171/**********************************************************************************************************************/
172
175 auto info1 = catalogue.getBackendRegister("/#/5/12s16");
176
177 compareRegister(info1, "/#/5/12s16", 1, 12, 2, 5, 16, 0, true);
178}
179
180/**********************************************************************************************************************/
181
184 auto info1 = catalogue.getBackendRegister("/#/5/12u32");
185
186 compareRegister(info1, "/#/5/12u32", 1, 12, 4, 5, 32, 0, false);
187}
188
189/**********************************************************************************************************************/
190
193 auto info1 = catalogue.getBackendRegister("/#/5/12s32");
194
195 compareRegister(info1, "/#/5/12s32", 1, 12, 4, 5, 32, 0, true);
196}
197
198/**********************************************************************************************************************/
199
202 auto info1 = catalogue.getBackendRegister("/#/5/12u64");
203
204 compareRegister(info1, "/#/5/12u64", 1, 12, 8, 5, 64, 0, false);
205}
206
207/**********************************************************************************************************************/
208
211 auto info1 = catalogue.getBackendRegister("/#/5/12s64");
212
213 compareRegister(info1, "/#/5/12s64", 1, 12, 8, 5, 64, 0, true);
214}
215
216/**********************************************************************************************************************/
NumericAddressedRegisterInfo getBackendRegister(const RegisterPath &registerPathName) const override
Note: Override this function if backend has "hidden" registers which are not added to the map and hen...
uint32_t nElements
Number of elements in register.
std::vector< ChannelInfo > channels
Define per-channel information (bit interpretation etc.), 1D/scalars have exactly one entry.
uint64_t bar
Upper part of the address (name originally from PCIe, meaning now generalised)
uint32_t elementPitchBits
Distance in bits (!) between two elements (of the same channel)
uint64_t address
Lower part of the address relative to BAR, in bytes.
Class to store a register path name.
void compareRegister(NumericAddressedRegisterInfo info, RegisterPath const &pathName, uint32_t nElements, uint64_t address, uint32_t nBytes, uint64_t bar, uint32_t width, int32_t nFractionalBits, bool signedFlag)
BOOST_AUTO_TEST_CASE(TestLegacyScalar)