1+ // / \file TestBarAcessor.cxx
2+ // / \brief Tests for BarAccessor
3+ // /
4+ // / \author Pascal Boeschoten ([email protected] )5+
6+ #define BOOST_TEST_MODULE RORC_TestBarAccessor
7+ #define BOOST_TEST_MAIN
8+ #define BOOST_TEST_DYN_LINK
9+ #include < boost/test/unit_test.hpp>
10+ #include < assert.h>
11+ #include " ReadoutCard/BarInterface.h"
12+ #include " Cru/BarAccessor.h"
13+
14+ using namespace AliceO2 ::roc;
15+
16+ BOOST_AUTO_TEST_CASE (TestFirmwareFeatures)
17+ {
18+ {
19+ // Integrated firmware should have everything
20+ FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures (0x40000000 );
21+ BOOST_CHECK (!f.standalone );
22+ BOOST_CHECK (f.serial );
23+ BOOST_CHECK (f.dataSelection );
24+ BOOST_CHECK (f.temperature );
25+ BOOST_CHECK (f.firmwareInfo );
26+ }
27+ {
28+ // Standalone with everything enabled
29+ FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE );
30+ BOOST_CHECK (f.standalone );
31+ BOOST_CHECK (f.serial );
32+ BOOST_CHECK (f.dataSelection );
33+ BOOST_CHECK (f.temperature );
34+ BOOST_CHECK (f.firmwareInfo );
35+ }
36+ {
37+ // Standalone with everything disabled
38+ FirmwareFeatures f = Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE + (0b1111 << 16 ));
39+ BOOST_CHECK (f.standalone );
40+ BOOST_CHECK (!f.serial );
41+ BOOST_CHECK (!f.dataSelection );
42+ BOOST_CHECK (!f.temperature );
43+ BOOST_CHECK (!f.firmwareInfo );
44+ }
45+ {
46+ // Standalone individual features disabled
47+ BOOST_CHECK (!Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE + (1 << 16 )).dataSelection );
48+ BOOST_CHECK (!Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE + (1 << 17 )).temperature );
49+ BOOST_CHECK (!Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE + (1 << 18 )).serial );
50+ BOOST_CHECK (!Cru::BarAccessor::convertToFirmwareFeatures (0x40005AFE + (1 << 19 )).firmwareInfo );
51+ }
52+ }
53+
54+ BOOST_AUTO_TEST_CASE (TestDataGeneratorConfiguration)
55+ {
56+ {
57+ uint32_t bits = 0 ;
58+ Cru::BarAccessor::setDataGeneratorEnableBits (bits, true );
59+ BOOST_CHECK (bits == 0x1 );
60+ Cru::BarAccessor::setDataGeneratorEnableBits (bits, false );
61+ BOOST_CHECK (bits == 0x0 );
62+ }
63+ {
64+ uint32_t bits = 0 ;
65+ Cru::BarAccessor::setDataGeneratorRandomSizeBits (bits, true );
66+ BOOST_CHECK (bits == (1 << 16 ));
67+ Cru::BarAccessor::setDataGeneratorRandomSizeBits (bits, false );
68+ BOOST_CHECK (bits != (1 << 16 ));
69+ }
70+ {
71+ uint32_t bits = 0 ;
72+ Cru::BarAccessor::setDataGeneratorEnableBits (bits, true );
73+ BOOST_CHECK (bits == 0x1 );
74+ Cru::BarAccessor::setDataGeneratorPatternBits (bits, GeneratorPattern::Incremental);
75+ BOOST_CHECK (bits == 0x3 );
76+ Cru::BarAccessor::setDataGeneratorSizeBits (bits, 8 *1024 );
77+ BOOST_CHECK (bits == 0xff03 );
78+ }
79+ {
80+ uint32_t bits = 0 ;
81+ Cru::BarAccessor::setDataGeneratorEnableBits (bits, true );
82+ Cru::BarAccessor::setDataGeneratorPatternBits (bits, GeneratorPattern::Incremental);
83+ Cru::BarAccessor::setDataGeneratorSizeBits (bits, 32 );
84+ BOOST_CHECK (bits == 0x0003 );
85+ }
86+ {
87+ uint32_t bits = 0 ;
88+ // Too high value
89+ BOOST_CHECK_THROW (Cru::BarAccessor::setDataGeneratorSizeBits (bits, 8 *1024 + 1 ), std::exception);
90+ // Not a multiple of 256 bits
91+ BOOST_CHECK_THROW (Cru::BarAccessor::setDataGeneratorSizeBits (bits, 257 ), std::exception);
92+ }
93+ }
0 commit comments