CbmRoot
Loading...
Searching...
No Matches
_GTestEnumMapper.cxx
Go to the documentation of this file.
1/* Copyright (C) 2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#include "CbmEnumKeySet.h"
11#include "CbmEnumMap.h"
12#include "gtest/gtest.h"
13
14#include <type_traits>
15
16// Some enumeration
17enum class ESomeEnum
18{
25};
26
28
29template<typename T>
31
32TEST(_GTestEnumMapper, CanInstantiateMapper)
33{
34 SCOPED_TRACE("CanInstantiateMapper");
35
36 // Check keys
37 EXPECT_EQ(SomeKeySet_t::CheckKey(ESomeEnum::B), true); // the key is in the mapper
38 EXPECT_EQ(SomeKeySet_t::CheckKey(ESomeEnum::F), false); // the key is not in the mapper
39 EXPECT_EQ(SomeKeySet_t::Index(ESomeEnum::B), 0);
40 EXPECT_EQ(SomeKeySet_t::Index(ESomeEnum::D), 1);
41 EXPECT_EQ(SomeKeySet_t::Index(ESomeEnum::E), 2);
45 EXPECT_EQ(std::is_trivially_copyable_v<SomeMap_t<double>>, true);
46
47 // Instantiate some map
48 SomeMap_t<int> myMap = {{ESomeEnum::B, 10}, {ESomeEnum::D, 20}, {ESomeEnum::E, 30}};
49
50 // Loop over keys and make an operation on values
51 int res = 0;
52 for (ESomeEnum key : SomeKeySet_t::kKeys) {
53 myMap[key] *= 2;
54 res += myMap[key];
55 }
56
57 EXPECT_EQ(res, 120);
58
59 // Test constant-expression instantiation
60 constexpr SomeMap_t<int> constexprMap1 = {{ESomeEnum::B, 1}, {ESomeEnum::D, 2}};
61 constexpr SomeMap_t<int> constexprMap2 = {{ESomeEnum::B, 1}, {ESomeEnum::D, 2}, {ESomeEnum::E, 3}};
62}
A compile-time mapper of an enumeration subset on the contiguous index.
A map container for statically defined mapping rule.
cbm::util::EnumMap< T, SomeKeySet_t > SomeMap_t
TEST(_GTestEnumMapper, CanInstantiateMapper)
cbm::util::EnumKeySet< ESomeEnum::B, ESomeEnum::D, ESomeEnum::E > SomeKeySet_t
Some class A.
Some class B.
Some class C.
A subset of some enumeration entries and rule for mapping them to a contiguous integral index.
A class to define a statical mapper over some type.
Definition CbmEnumMap.h:31