μHAL (v2.8.17)
Part of the IPbus software repository
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
test_masking.cpp
Go to the documentation of this file.
1/*
2---------------------------------------------------------------------------
3
4 This file is part of uHAL.
5
6 uHAL is a hardware access library and programming framework
7 originally developed for upgrades of the Level-1 trigger of the CMS
8 experiment at CERN.
9
10 uHAL is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
14
15 uHAL is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with uHAL. If not, see <http://www.gnu.org/licenses/>.
22
23 Marc Magrans de Abril, CERN
24 email: marc.magrans.de.abril <AT> cern.ch
25
26 Andrew Rose, Imperial College, London
27 email: awr01 <AT> imperial.ac.uk
28
29 Tom Williams, Rutherford Appleton Laboratory, Oxfordshire
30 email: tom.williams <AT> cern.ch
31
32---------------------------------------------------------------------------
33*/
34
35#include "uhal/uhal.hpp"
36
39#include "uhal/tests/tools.hpp"
40
41#include <boost/test/unit_test.hpp>
42
43#include <iostream>
44#include <ios>
45#include <cstdlib>
46#include <typeinfo>
47
48
49namespace uhal {
50namespace tests {
51
52
53UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(MaskedNodeTestSuite, write_read_masked, DummyHardwareFixture,
54{
55 HwInterface hw = getHwInterface();
56
57 uint32_t x = static_cast<uint32_t> ( rand() );
58 hw.getNode ( "REG_LOWER_MASK" ).write ( x & 0xFFFF );
59 hw.getNode ( "REG_UPPER_MASK" ).write ( x >> 16 );
60 BOOST_CHECK_THROW ( hw.getNode ( "REG_LOWER_MASK" ).write ( 0x1FFFF ),uhal::exception::exception );
61 BOOST_CHECK_THROW ( hw.getNode ( "REG_UPPER_MASK" ).write ( 0x1FFFF ),uhal::exception::exception );
62 BOOST_CHECK_EQUAL ( hw.getNode ( "REG_LOWER_MASK" ).getMask(), 0xFFFFu );
63 BOOST_CHECK_EQUAL ( hw.getNode ( "REG_UPPER_MASK" ).getMask(), 0xFFFF0000u );
64 ValWord<uint32_t> reg_l = hw.getNode ( "REG_LOWER_MASK" ).read();
65 ValWord<uint32_t> reg_u = hw.getNode ( "REG_UPPER_MASK" ).read();
66 BOOST_CHECK ( !reg_l.valid() && !reg_u.valid() );
70 BOOST_CHECK ( reg_l.value() <= 0xFFFF );
71 BOOST_CHECK ( reg_u.value() <= 0xFFFF );
72 BOOST_CHECK ( reg_l.valid() && reg_u.valid() );
73 BOOST_CHECK_EQUAL ( reg_l.value(), ( x & 0xFFFF ) );
74 BOOST_CHECK_EQUAL ( reg_u.value(), ( x >> 16 ) );
75}
76)
77
78
79} // end ns tests
80} // end ns uhal
const Node & getNode() const
Retrieve the top-level node.
void dispatch()
Make the IPbus client issue a dispatch.
ValWord< uint32_t > read() const
Read a single, unmasked, unsigned word.
Definition: Node.cpp:611
const uint32_t & getMask() const
Return the mask to be applied if this node is a sub-field, rather than an entire register.
Definition: Node.cpp:262
ValHeader write(const uint32_t &aValue) const
Write a single, unmasked word to a register.
Definition: Node.cpp:516
An abstract base exception class, including an interface to throw as the derived type (for passing ex...
Definition: exception.hpp:71
None tests(nox.Session session)
Definition: noxfile.py:19
BOOST_CHECK_THROW(hw.getNode("REG").writeBlockOffset(xx, 0), uhal::exception::BulkTransferOffsetRequestedForSingleRegister)
BOOST_CHECK_EQUAL(mem.size(), N)
BOOST_CHECK_NO_THROW(hw.getNode("REG").writeBlock(xx))
BOOST_CHECK(!mem.valid())
HwInterface hw
uint32_t x
Definition: test_single.cpp:93
#define UHAL_TESTS_DEFINE_CLIENT_TEST_CASES(test_suite_name, test_case_name, test_fixture, test_case_contents)
Definition: definitions.hpp:53