GCC Code Coverage Report


Directory: ./
File: src/TraitBackEnd/Rust/RustTraitGetterSetter/RustTraitGetterSetter.cpp
Date: 2026-10-16 17:52:29
Exec Total Coverage
Lines: 74 74 100.0%
Functions: 5 5 100.0%
Branches: 211 222 95.0%

Line Branch Exec Source
1 /***************************************
2 Auteur : Pierre Aubert
3 Mail : pierre.aubert@lapp.in2p3.fr
4 Licence : LGPL-3.0-only
5 ****************************************/
6
7 #include "rust_type_utils.h"
8 #include "RustTraitGetterSetter.h"
9
10 ///Consctructor of RustTraitGetterSetter
11 1 RustTraitGetterSetter::RustTraitGetterSetter()
12 1 :PAbstractRustTraitBackend()
13 1 {}
14
15 ///Desctructor of RustTraitGetterSetter
16 2 RustTraitGetterSetter::~RustTraitGetterSetter(){}
17
18 ///Implementation of the impl block methods
19 /** @param[out] fs : file to be completed
20 * @param classConfig : PClassConfig to be used
21 * @param mode : mode of the generator
22 */
23 2 void RustTraitGetterSetter::implMethodDeclaration(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
24
1/2
✗ Branch 0 (3→4) not taken.
✓ Branch 1 (3→5) taken 2 times.
2 if(classConfig.getIsEnum()){return;}
25 2 const PVecClassAttribute & vecAttr(classConfig.getListAttribute());
26
2/2
✓ Branch 0 (179→7) taken 5 times.
✓ Branch 1 (179→180) taken 2 times.
14 for(PVecClassAttribute::const_iterator it(vecAttr.begin()); it != vecAttr.end(); ++it){
27
4/4
✓ Branch 0 (9→10) taken 5 times.
✓ Branch 2 (10→11) taken 5 times.
✓ Branch 4 (13→14) taken 5 times.
✓ Branch 6 (14→15) taken 5 times.
15 PString varType(it->getType()), fieldName(it->getName().toSnakeCase());
28
3/3
✓ Branch 0 (15→16) taken 5 times.
✓ Branch 2 (16→17) taken 1 times.
✓ Branch 3 (16→85) taken 4 times.
5 if(getIsPointerType(varType)){
29
3/3
✓ Branch 0 (17→18) taken 1 times.
✓ Branch 2 (18→19) taken 1 times.
✓ Branch 4 (19→20) taken 1 times.
1 PString pointeeType(getRustType(varType.eraseFirstLastChar(" \n\t*")));
30
1/2
✓ Branch 0 (22→23) taken 1 times.
✗ Branch 1 (22→59) not taken.
1 if(mode.enableGetter){
31
7/7
✓ Branch 0 (23→24) taken 1 times.
✓ Branch 2 (26→27) taken 1 times.
✓ Branch 4 (27→28) taken 1 times.
✓ Branch 6 (28→29) taken 1 times.
✓ Branch 8 (29→30) taken 1 times.
✓ Branch 10 (30→31) taken 1 times.
✓ Branch 12 (31→32) taken 1 times.
2 fs << "\t///Gets the " << it->getName() << " of the " << classConfig.getName() << "\n";
32
5/5
✓ Branch 0 (32→33) taken 1 times.
✓ Branch 2 (33→34) taken 1 times.
✓ Branch 4 (34→35) taken 1 times.
✓ Branch 6 (35→36) taken 1 times.
✓ Branch 8 (36→37) taken 1 times.
1 fs << "\tpub fn get_" << fieldName << "(&self) -> Option<&" << pointeeType << ">{\n";
33
3/3
✓ Branch 0 (37→38) taken 1 times.
✓ Branch 2 (38→39) taken 1 times.
✓ Branch 4 (39→40) taken 1 times.
1 fs << "\t\tself." << fieldName << ".as_deref()\n";
34
1/1
✓ Branch 0 (40→41) taken 1 times.
1 fs << "\t}\n\n";
35
7/7
✓ Branch 0 (41→42) taken 1 times.
✓ Branch 2 (44→45) taken 1 times.
✓ Branch 4 (45→46) taken 1 times.
✓ Branch 6 (46→47) taken 1 times.
✓ Branch 8 (47→48) taken 1 times.
✓ Branch 10 (48→49) taken 1 times.
✓ Branch 12 (49→50) taken 1 times.
2 fs << "\t///Gets a mutable reference to the " << it->getName() << " of the " << classConfig.getName() << "\n";
36
5/5
✓ Branch 0 (50→51) taken 1 times.
✓ Branch 2 (51→52) taken 1 times.
✓ Branch 4 (52→53) taken 1 times.
✓ Branch 6 (53→54) taken 1 times.
✓ Branch 8 (54→55) taken 1 times.
1 fs << "\tpub fn get_" << fieldName << "_mut(&mut self) -> Option<&mut " << pointeeType << ">{\n";
37
3/3
✓ Branch 0 (55→56) taken 1 times.
✓ Branch 2 (56→57) taken 1 times.
✓ Branch 4 (57→58) taken 1 times.
1 fs << "\t\tself." << fieldName << ".as_deref_mut()\n";
38
1/1
✓ Branch 0 (58→59) taken 1 times.
1 fs << "\t}\n\n";
39 }
40
1/2
✓ Branch 0 (59→60) taken 1 times.
✗ Branch 1 (59→82) not taken.
1 if(mode.enableSetter){
41
7/7
✓ Branch 0 (60→61) taken 1 times.
✓ Branch 2 (63→64) taken 1 times.
✓ Branch 4 (64→65) taken 1 times.
✓ Branch 6 (65→66) taken 1 times.
✓ Branch 8 (66→67) taken 1 times.
✓ Branch 10 (67→68) taken 1 times.
✓ Branch 12 (68→69) taken 1 times.
2 fs << "\t///Sets the " << it->getName() << " of the " << classConfig.getName() << "\n";
42
7/7
✓ Branch 0 (69→70) taken 1 times.
✓ Branch 2 (70→71) taken 1 times.
✓ Branch 4 (71→72) taken 1 times.
✓ Branch 6 (72→73) taken 1 times.
✓ Branch 8 (73→74) taken 1 times.
✓ Branch 10 (74→75) taken 1 times.
✓ Branch 12 (75→76) taken 1 times.
1 fs << "\tpub fn set_" << fieldName << "(&mut self, " << fieldName << ": " << pointeeType << "){\n";
43
5/5
✓ Branch 0 (76→77) taken 1 times.
✓ Branch 2 (77→78) taken 1 times.
✓ Branch 4 (78→79) taken 1 times.
✓ Branch 6 (79→80) taken 1 times.
✓ Branch 8 (80→81) taken 1 times.
1 fs << "\t\tself." << fieldName << " = Some(Box::new(" << fieldName << "));\n";
44
1/1
✓ Branch 0 (81→82) taken 1 times.
1 fs << "\t}\n\n";
45 }
46 1 continue;
47 1 }
48
1/1
✓ Branch 0 (85→86) taken 4 times.
4 PString rustType(getRustType(varType));
49
1/1
✓ Branch 0 (86→87) taken 4 times.
4 bool isCopy(getRustTypeIsCopy(varType));
50
1/2
✓ Branch 0 (87→88) taken 4 times.
✗ Branch 1 (87→134) not taken.
4 if(mode.enableGetter){
51
7/7
✓ Branch 0 (88→89) taken 4 times.
✓ Branch 2 (91→92) taken 4 times.
✓ Branch 4 (92→93) taken 4 times.
✓ Branch 6 (93→94) taken 4 times.
✓ Branch 8 (94→95) taken 4 times.
✓ Branch 10 (95→96) taken 4 times.
✓ Branch 12 (96→97) taken 4 times.
8 fs << "\t///Gets the " << it->getName() << " of the " << classConfig.getName() << "\n";
52
2/2
✓ Branch 0 (97→98) taken 2 times.
✓ Branch 1 (97→106) taken 2 times.
4 if(isCopy){
53
5/5
✓ Branch 0 (98→99) taken 2 times.
✓ Branch 2 (99→100) taken 2 times.
✓ Branch 4 (100→101) taken 2 times.
✓ Branch 6 (101→102) taken 2 times.
✓ Branch 8 (102→103) taken 2 times.
2 fs << "\tpub fn get_" << fieldName << "(&self) -> " << rustType << "{\n";
54
3/3
✓ Branch 0 (103→104) taken 2 times.
✓ Branch 2 (104→105) taken 2 times.
✓ Branch 4 (105→114) taken 2 times.
2 fs << "\t\tself." << fieldName << "\n";
55 }else{
56
5/5
✓ Branch 0 (106→107) taken 2 times.
✓ Branch 2 (107→108) taken 2 times.
✓ Branch 4 (108→109) taken 2 times.
✓ Branch 6 (109→110) taken 2 times.
✓ Branch 8 (110→111) taken 2 times.
2 fs << "\tpub fn get_" << fieldName << "(&self) -> &" << rustType << "{\n";
57
3/3
✓ Branch 0 (111→112) taken 2 times.
✓ Branch 2 (112→113) taken 2 times.
✓ Branch 4 (113→114) taken 2 times.
2 fs << "\t\t&self." << fieldName << "\n";
58 }
59
1/1
✓ Branch 0 (114→115) taken 4 times.
4 fs << "\t}\n\n";
60
2/2
✓ Branch 0 (115→116) taken 2 times.
✓ Branch 1 (115→134) taken 2 times.
4 if(!isCopy){
61
7/7
✓ Branch 0 (116→117) taken 2 times.
✓ Branch 2 (119→120) taken 2 times.
✓ Branch 4 (120→121) taken 2 times.
✓ Branch 6 (121→122) taken 2 times.
✓ Branch 8 (122→123) taken 2 times.
✓ Branch 10 (123→124) taken 2 times.
✓ Branch 12 (124→125) taken 2 times.
4 fs << "\t///Gets a mutable reference to the " << it->getName() << " of the " << classConfig.getName() << "\n";
62
5/5
✓ Branch 0 (125→126) taken 2 times.
✓ Branch 2 (126→127) taken 2 times.
✓ Branch 4 (127→128) taken 2 times.
✓ Branch 6 (128→129) taken 2 times.
✓ Branch 8 (129→130) taken 2 times.
2 fs << "\tpub fn get_" << fieldName << "_mut(&mut self) -> &mut " << rustType << "{\n";
63
3/3
✓ Branch 0 (130→131) taken 2 times.
✓ Branch 2 (131→132) taken 2 times.
✓ Branch 4 (132→133) taken 2 times.
2 fs << "\t\t&mut self." << fieldName << "\n";
64
1/1
✓ Branch 0 (133→134) taken 2 times.
2 fs << "\t}\n\n";
65 }
66 }
67
1/2
✓ Branch 0 (134→135) taken 4 times.
✗ Branch 1 (134→157) not taken.
4 if(mode.enableSetter){
68
7/7
✓ Branch 0 (135→136) taken 4 times.
✓ Branch 2 (138→139) taken 4 times.
✓ Branch 4 (139→140) taken 4 times.
✓ Branch 6 (140→141) taken 4 times.
✓ Branch 8 (141→142) taken 4 times.
✓ Branch 10 (142→143) taken 4 times.
✓ Branch 12 (143→144) taken 4 times.
8 fs << "\t///Sets the " << it->getName() << " of the " << classConfig.getName() << "\n";
69
7/7
✓ Branch 0 (144→145) taken 4 times.
✓ Branch 2 (145→146) taken 4 times.
✓ Branch 4 (146→147) taken 4 times.
✓ Branch 6 (147→148) taken 4 times.
✓ Branch 8 (148→149) taken 4 times.
✓ Branch 10 (149→150) taken 4 times.
✓ Branch 12 (150→151) taken 4 times.
4 fs << "\tpub fn set_" << fieldName << "(&mut self, " << fieldName << ": " << rustType << "){\n";
70
5/5
✓ Branch 0 (151→152) taken 4 times.
✓ Branch 2 (152→153) taken 4 times.
✓ Branch 4 (153→154) taken 4 times.
✓ Branch 6 (154→155) taken 4 times.
✓ Branch 8 (155→156) taken 4 times.
4 fs << "\t\tself." << fieldName << " = " << fieldName << ";\n";
71
1/1
✓ Branch 0 (156→157) taken 4 times.
4 fs << "\t}\n\n";
72 }
73
4/4
✓ Branch 0 (160→161) taken 4 times.
✓ Branch 1 (160→162) taken 1 times.
✓ Branch 2 (165→166) taken 4 times.
✓ Branch 3 (165→168) taken 1 times.
10 }
74 }
75
76 ///Implementation of test function
77 /** @param[out] fs : file to be completed
78 * @param classConfig : PClassConfig to be used
79 * @param mode : mode of the generator
80 */
81 3 void RustTraitGetterSetter::testFunction(std::ofstream & fs, const PClassConfig & classConfig, const GeneratorMode & mode) const{
82
7/11
✓ Branch 0 (2→3) taken 3 times.
✓ Branch 2 (3→4) taken 2 times.
✓ Branch 3 (3→7) taken 1 times.
✓ Branch 4 (4→5) taken 2 times.
✗ Branch 5 (4→7) not taken.
✗ Branch 6 (5→6) not taken.
✓ Branch 7 (5→8) taken 2 times.
✗ Branch 8 (6→7) not taken.
✗ Branch 9 (6→8) not taken.
✓ Branch 10 (9→10) taken 1 times.
✓ Branch 11 (9→11) taken 2 times.
3 if(classConfig.getIsEnum() || !mode.enableUnitTest || (!mode.enableGetter && !mode.enableSetter)){return;}
83
2/2
✓ Branch 0 (11→12) taken 2 times.
✓ Branch 2 (12→13) taken 2 times.
2 PString name(classConfig.getName());
84
1/1
✓ Branch 0 (13→14) taken 2 times.
2 fs << "#[test]\n";
85
4/4
✓ Branch 0 (14→15) taken 2 times.
✓ Branch 2 (15→16) taken 2 times.
✓ Branch 4 (16→17) taken 2 times.
✓ Branch 6 (17→18) taken 2 times.
2 fs << "fn test_" << name.toSnakeCase() << "_getter_setter(){\n";
86
3/3
✓ Branch 0 (19→20) taken 2 times.
✓ Branch 2 (20→21) taken 2 times.
✓ Branch 4 (21→22) taken 2 times.
2 fs << "\tlet mut obj = " << name << "::default();\n";
87
1/1
✓ Branch 0 (22→23) taken 2 times.
2 const PVecClassAttribute & vecAttr(classConfig.getListAttribute());
88
2/2
✓ Branch 0 (106→24) taken 5 times.
✓ Branch 1 (106→107) taken 2 times.
14 for(PVecClassAttribute::const_iterator it(vecAttr.begin()); it != vecAttr.end(); ++it){
89
4/4
✓ Branch 0 (26→27) taken 5 times.
✓ Branch 2 (27→28) taken 5 times.
✓ Branch 4 (30→31) taken 5 times.
✓ Branch 6 (31→32) taken 5 times.
15 PString varType(it->getType()), fieldName(it->getName().toSnakeCase());
90
3/3
✓ Branch 0 (32→33) taken 5 times.
✓ Branch 2 (33→34) taken 1 times.
✓ Branch 3 (33→57) taken 4 times.
5 if(getIsPointerType(varType)){
91
3/3
✓ Branch 0 (34→35) taken 1 times.
✓ Branch 2 (35→36) taken 1 times.
✓ Branch 4 (36→37) taken 1 times.
1 PString pointeeType(getRustType(varType.eraseFirstLastChar(" \n\t*")));
92
5/5
✓ Branch 0 (39→40) taken 1 times.
✓ Branch 2 (40→41) taken 1 times.
✓ Branch 4 (41→42) taken 1 times.
✓ Branch 6 (42→43) taken 1 times.
✓ Branch 8 (43→44) taken 1 times.
1 fs << "\tlet next_" << fieldName << " = " << pointeeType << "::default();\n";
93
5/5
✓ Branch 0 (44→45) taken 1 times.
✓ Branch 2 (45→46) taken 1 times.
✓ Branch 4 (46→47) taken 1 times.
✓ Branch 6 (47→48) taken 1 times.
✓ Branch 8 (48→49) taken 1 times.
1 fs << "\tobj.set_" << fieldName << "(next_" << fieldName << ".clone());\n";
94
5/5
✓ Branch 0 (49→50) taken 1 times.
✓ Branch 2 (50→51) taken 1 times.
✓ Branch 4 (51→52) taken 1 times.
✓ Branch 6 (52→53) taken 1 times.
✓ Branch 8 (53→54) taken 1 times.
1 fs << "\tassert_eq!(*obj.get_" << fieldName << "().unwrap(), next_" << fieldName << ");\n";
95 1 continue;
96 1 }
97
1/1
✓ Branch 0 (59→60) taken 4 times.
8 PString testValue(getRustTestValue(*it));
98
2/3
✓ Branch 0 (60→61) taken 4 times.
✗ Branch 2 (61→62) not taken.
✓ Branch 3 (61→63) taken 4 times.
4 if(testValue == ""){continue;} //list/nested type : no generic literal test value, skip
99
1/1
✓ Branch 0 (63→64) taken 4 times.
4 bool isCopy(getRustTypeIsCopy(varType));
100
5/5
✓ Branch 0 (64→65) taken 4 times.
✓ Branch 2 (65→66) taken 4 times.
✓ Branch 4 (66→67) taken 4 times.
✓ Branch 6 (67→68) taken 4 times.
✓ Branch 8 (68→69) taken 4 times.
4 fs << "\tobj.set_" << fieldName << "(" << testValue << ");\n";
101
2/2
✓ Branch 0 (69→70) taken 2 times.
✓ Branch 1 (69→75) taken 2 times.
4 if(isCopy){
102
5/5
✓ Branch 0 (70→71) taken 2 times.
✓ Branch 2 (71→72) taken 2 times.
✓ Branch 4 (72→73) taken 2 times.
✓ Branch 6 (73→74) taken 2 times.
✓ Branch 8 (74→80) taken 2 times.
2 fs << "\tassert_eq!(obj.get_" << fieldName << "(), " << testValue << ");\n";
103 }else{
104
5/5
✓ Branch 0 (75→76) taken 2 times.
✓ Branch 2 (76→77) taken 2 times.
✓ Branch 4 (77→78) taken 2 times.
✓ Branch 6 (78→79) taken 2 times.
✓ Branch 8 (79→80) taken 2 times.
2 fs << "\tassert_eq!(*obj.get_" << fieldName << "(), " << testValue << ");\n";
105 }
106
5/6
✓ Branch 0 (82→83) taken 4 times.
✗ Branch 1 (82→84) not taken.
✓ Branch 2 (87→88) taken 4 times.
✓ Branch 3 (87→89) taken 1 times.
✓ Branch 4 (92→93) taken 4 times.
✓ Branch 5 (92→95) taken 1 times.
14 }
107
1/1
✓ Branch 0 (107→108) taken 2 times.
2 fs << "}\n\n";
108 2 }
109