GCC Code Coverage Report


Directory: ./
File: src/TraitBackEnd/Nanobind/NanobindTraitProperty/NanobindTraitProperty.cpp
Date: 2026-09-08 15:48:42
Exec Total Coverage
Lines: 44 47 93.6%
Functions: 7 8 87.5%
Branches: 117 129 90.7%

Line Branch Exec Source
1 /***************************************
2 Auteur : Thibaut Oprinsen, Pierre Aubert
3 Mail : thibaut.oprinsen@lapp.in2p3.fr, pierre.aubert@lapp.in2p3.fr
4 Licence : CeCILL-C
5 ****************************************/
6
7 #include "NanobindTraitProperty.h"
8
9 ///Constructor of NanobindTraitProperty
10 1 NanobindTraitProperty::NanobindTraitProperty()
11 1 : PAbstractNanobindTraitBackend()
12 1 {}
13
14 ///Destructor of NanobindTraitProperty
15 2 NanobindTraitProperty::~NanobindTraitProperty(){}
16
17 ///Creates a getter method name
18 /** @param varName : name of the var to get
19 * @return getter method name
20 */
21 9 PString createGetterMethodName(const PString & varName){
22
3/3
✓ Branch 0 (2→3) taken 9 times.
✓ Branch 2 (3→4) taken 9 times.
✓ Branch 4 (4→5) taken 9 times.
18 return "get" + varName.firstToUpper();
23 }
24
25 ///Creates a setter method name
26 /** @param varName : name of the var to set
27 * @return setter method name
28 */
29 9 PString createSetterMethodName(const PString & varName){
30
3/3
✓ Branch 0 (2→3) taken 9 times.
✓ Branch 2 (3→4) taken 9 times.
✓ Branch 4 (4→5) taken 9 times.
18 return "set" + varName.firstToUpper();
31 }
32
33 ///Registration of property
34 /// @param fs stream to write to
35 /// @param classConfig config of the class
36 /// @param mode generator mode
37 4 void NanobindTraitProperty::registerProperty(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
38 4 const PVecClassAttribute & listAttr(classConfig.getListAttribute());
39
2/2
✓ Branch 0 (4→5) taken 1 times.
✓ Branch 1 (4→37) taken 3 times.
4 if(classConfig.getIsEnum()){
40
2/2
✓ Branch 0 (5→6) taken 1 times.
✓ Branch 2 (6→7) taken 1 times.
1 PString enumName = classConfig.getName();
41
2/2
✓ Branch 0 (34→8) taken 2 times.
✓ Branch 1 (34→35) taken 1 times.
6 for(PVecClassAttribute::const_iterator it(listAttr.begin()); it != listAttr.end(); ++it){
42
2/2
✓ Branch 0 (10→11) taken 2 times.
✓ Branch 2 (11→12) taken 2 times.
4 PString attributeValue(it->getName());
43
9/9
✓ Branch 0 (12→13) taken 2 times.
✓ Branch 2 (15→16) taken 2 times.
✓ Branch 4 (16→17) taken 2 times.
✓ Branch 6 (17→18) taken 2 times.
✓ Branch 8 (18→19) taken 2 times.
✓ Branch 10 (19→20) taken 2 times.
✓ Branch 12 (20→21) taken 2 times.
✓ Branch 14 (21→22) taken 2 times.
✓ Branch 16 (22→23) taken 2 times.
4 fs << "\t\t.value(\"" << it->getName() << "\"," << enumName << "::" << attributeValue << ")" << std::endl;
44 2 }
45 1 return;
46 1 }
47
2/4
✓ Branch 0 (37→38) taken 3 times.
✗ Branch 1 (37→39) not taken.
✗ Branch 2 (38→39) not taken.
✓ Branch 3 (38→40) taken 3 times.
3 if(!mode.enableSetter || !mode.enableGetter){return;}
48
2/2
✓ Branch 0 (103→41) taken 9 times.
✓ Branch 1 (103→104) taken 3 times.
24 for(PVecClassAttribute::const_iterator it(listAttr.begin()); it != listAttr.end(); ++it){
49
4/4
✓ Branch 0 (41→42) taken 9 times.
✓ Branch 2 (44→45) taken 9 times.
✓ Branch 4 (45→46) taken 9 times.
✓ Branch 6 (46→47) taken 9 times.
18 fs << "\t\t.def_prop_rw(\"" << it->getName() << "\",";
50
9/9
✓ Branch 0 (47→48) taken 9 times.
✓ Branch 2 (48→49) taken 9 times.
✓ Branch 4 (49→50) taken 9 times.
✓ Branch 6 (50→51) taken 9 times.
✓ Branch 8 (51→52) taken 9 times.
✓ Branch 10 (54→55) taken 9 times.
✓ Branch 12 (55→56) taken 9 times.
✓ Branch 14 (56→57) taken 9 times.
✓ Branch 16 (57→58) taken 9 times.
18 fs << std::endl << "\t\t\t[]( " << classConfig.getName() << " &c) { return c." << createGetterMethodName(it->getName()) << "(); },";
51
14/14
✓ Branch 0 (59→60) taken 9 times.
✓ Branch 2 (60→61) taken 9 times.
✓ Branch 4 (61→62) taken 9 times.
✓ Branch 6 (62→63) taken 9 times.
✓ Branch 8 (63→64) taken 9 times.
✓ Branch 10 (66→67) taken 9 times.
✓ Branch 12 (69→70) taken 9 times.
✓ Branch 14 (70→71) taken 9 times.
✓ Branch 16 (71→72) taken 9 times.
✓ Branch 18 (72→73) taken 9 times.
✓ Branch 20 (75→76) taken 9 times.
✓ Branch 22 (76→77) taken 9 times.
✓ Branch 24 (77→78) taken 9 times.
✓ Branch 26 (78→79) taken 9 times.
36 fs << std::endl << "\t\t\t[]( " << classConfig.getName() << " &c, " << makeVarType(it->getType(), true, false, false, it->getIsPointer()) << " value) { c." << createSetterMethodName(it->getName()) << "(value); })";
52
2/2
✓ Branch 0 (91→92) taken 6 times.
✓ Branch 1 (91→93) taken 3 times.
27 if(it != listAttr.end() - 1){
53
1/1
✓ Branch 0 (92→93) taken 6 times.
6 fs << std::endl;
54 }
55 }
56 }
57
58 ///Generate test function for property
59 /// @param fs stream to write to
60 /// @param classConfig config of the class
61 /// @param mode generator mode
62 /// @param baseFileName : base name of the configuration
63 4 void NanobindTraitProperty::testFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode, const PString & baseFileName) const{
64
7/9
✓ Branch 0 (2→3) taken 4 times.
✗ Branch 1 (2→6) not taken.
✓ Branch 2 (3→4) taken 4 times.
✗ Branch 3 (3→6) not taken.
✓ Branch 4 (4→5) taken 4 times.
✓ Branch 6 (5→6) taken 1 times.
✓ Branch 7 (5→7) taken 3 times.
✓ Branch 8 (8→9) taken 1 times.
✓ Branch 9 (8→10) taken 3 times.
4 if(!mode.enableSetter || !mode.enableSetter || classConfig.getIsEnum()){return;}
65
1/1
✓ Branch 0 (10→11) taken 3 times.
3 PString moduleName = baseFileName.toLower();
66
2/2
✓ Branch 0 (11→12) taken 3 times.
✓ Branch 2 (12→13) taken 3 times.
3 PString className = classConfig.getName().toLower();
67
5/5
✓ Branch 0 (13→14) taken 3 times.
✓ Branch 2 (14→15) taken 3 times.
✓ Branch 4 (15→16) taken 3 times.
✓ Branch 6 (16→17) taken 3 times.
✓ Branch 8 (17→18) taken 3 times.
3 fs << "#Test getters and setters of the " << classConfig.getName() << " property trait" << std::endl;
68
2/2
✓ Branch 0 (18→19) taken 3 times.
✓ Branch 2 (19→20) taken 3 times.
3 fs << "def test_attributes_setters_getters():" << std::endl;
69
2/2
✓ Branch 0 (20→21) taken 3 times.
✓ Branch 2 (21→22) taken 3 times.
3 fs << "\t\"\"\"Test setters and getters of attributes generated by Nanobind\"\"\"" << std::endl;
70
3/3
✓ Branch 0 (22→23) taken 3 times.
✓ Branch 2 (23→24) taken 3 times.
✓ Branch 4 (24→25) taken 3 times.
3 fs << "\t" << "# Test default constructor" << std::endl;
71
9/9
✓ Branch 0 (25→26) taken 3 times.
✓ Branch 2 (26→27) taken 3 times.
✓ Branch 4 (27→28) taken 3 times.
✓ Branch 6 (28→29) taken 3 times.
✓ Branch 8 (29→30) taken 3 times.
✓ Branch 10 (30→31) taken 3 times.
✓ Branch 12 (31→32) taken 3 times.
✓ Branch 14 (32→33) taken 3 times.
✓ Branch 16 (33→34) taken 3 times.
3 fs << "\t" << className << " = " << moduleName << "." << classConfig.getName() << "()" << std::endl;
72
3/3
✓ Branch 0 (34→35) taken 3 times.
✓ Branch 2 (35→36) taken 3 times.
✓ Branch 4 (36→37) taken 3 times.
3 fs << "\t" << "# Test properties" << std::endl;
73
1/1
✓ Branch 0 (37→38) taken 3 times.
3 const PVecClassAttribute & listAttr(classConfig.getListAttribute());
74
2/2
✓ Branch 0 (77→39) taken 9 times.
✓ Branch 1 (77→78) taken 3 times.
24 for(PVecClassAttribute::const_iterator it(listAttr.begin()); it != listAttr.end(); ++it){
75
2/2
✓ Branch 0 (41→42) taken 9 times.
✓ Branch 2 (42→43) taken 9 times.
18 PString defaultValue = getTestDefaultValueTypeInPython(it->getType());
76
3/3
✓ Branch 0 (43→44) taken 9 times.
✓ Branch 2 (44→45) taken 7 times.
✓ Branch 3 (44→66) taken 2 times.
9 if(defaultValue != ""){
77
8/8
✓ Branch 0 (45→46) taken 7 times.
✓ Branch 2 (46→47) taken 7 times.
✓ Branch 4 (47→48) taken 7 times.
✓ Branch 6 (50→51) taken 7 times.
✓ Branch 8 (51→52) taken 7 times.
✓ Branch 10 (52→53) taken 7 times.
✓ Branch 12 (53→54) taken 7 times.
✓ Branch 14 (54→55) taken 7 times.
14 fs << "\t" << className << "." << it->getName() << " = " << defaultValue << std::endl;
78
9/9
✓ Branch 0 (55→56) taken 7 times.
✓ Branch 2 (56→57) taken 7 times.
✓ Branch 4 (57→58) taken 7 times.
✓ Branch 6 (58→59) taken 7 times.
✓ Branch 8 (61→62) taken 7 times.
✓ Branch 10 (62→63) taken 7 times.
✓ Branch 12 (63→64) taken 7 times.
✓ Branch 14 (64→65) taken 7 times.
✓ Branch 16 (65→66) taken 7 times.
14 fs << "\t" << "assert " << className << "." << it->getName() << " == " << defaultValue << std::endl;
79 }
80 9 }
81
1/1
✓ Branch 0 (78→79) taken 3 times.
3 fs << std::endl;
82 3 }
83
84 ///Call of the test function
85 /// @param fs stream to write to
86 /// @param classConfig config of the class
87 /// @param mode generator mode
88 void NanobindTraitProperty::testCallFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
89 if(!mode.enableSetter || !mode.enableSetter || classConfig.getIsEnum()){return;}
90
91 fs << "\ttest_attributes_setters_getters()" << std::endl;
92 }
93