Chrysalis - Pattern Test Coverage


pattern/
File: pattern/include/instructions/BaseInstructionsContainer.h
Date: 2026-08-27 18:35:18
Lines:
31/31
100.0%
Functions:
21/21
100.0%
Branches:
17/24
70.8%
Decisions:
4/6
66.7%
Calls:
240/246
97.6%

Line Branch Decision Call Exec Source
1 #ifndef CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H
2 #define CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H
3
4 #include <thread>
5
6 #include "Option.h"
7 #include "Expression.h"
8 #include "BaseInstruction.h"
9 #include "CompositiveContainer.h"
10
11 /** @defgroup Instructions Instructions
12 * @{
13 */
14 namespace Chrysalis {
15 template<typename T>
16 requires std::derived_from<T, BaseInstruction>
17 class BaseInstructionsContainer: public BaseInstruction {
18
17/17
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
18 PROVIDE_DEFAULT_SERIALIZATION_ACCESS(BaseInstructionsContainer)
19
20/20
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
200 SERIALIZE_DERIVED_FROM(BaseInstruction, options_, expressions_, instructions_);
20 public:
21
1/1
✓ Call 0 invoked.
63 explicit BaseInstructionsContainer(OptionsContainer* options, ExpressionsContainer* expressions)
22
25/25
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✓ Call 24 invoked.
63 : options_(options), expressions_(expressions) {}
23 216 ~BaseInstructionsContainer() override {
24
1/2
✓ Branch 3 taken 81 times.
✗ Branch 4 not taken.
10/10
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
162 delete options_;
25
1/2
✓ Branch 4 taken 81 times.
✗ Branch 5 not taken.
11/11
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
162 delete expressions_;
26
3/4
✓ Branch 12 taken 291 times.
✗ Branch 13 not taken.
✓ Branch 29 taken 291 times.
✓ Branch 30 taken 81 times.
0/1
? Decision couldn't be analyzed.
27/27
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✓ Call 24 invoked.
✓ Call 25 invoked.
✓ Call 26 invoked.
✓ Call 27 invoked.
✓ Call 28 invoked.
744 for (const auto& instruction: instructions_) delete instruction;
27
12/12
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
378 }
28 42 void ignore() override {
29
2/2
✓ Branch 13 taken 252 times.
✓ Branch 14 taken 42 times.
2/2
✓ Decision 'true' taken 252 times.
✓ Decision 'false' taken 42 times.
13/13
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
294 for (const auto& instruction: instructions_) {
30
2/3
✓ Branch 13 taken 63 times.
✓ Branch 14 taken 189 times.
✗ Branch 15 not taken.
14/14
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
252 instruction->ignore();
31 }
32 42 }
33 97 void add(T* instruction) {
34
1/2
✓ Branch 7 taken 97 times.
✗ Branch 8 not taken.
15/17
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✗ Call 17 not invoked.
✗ Call 18 not invoked.
291 lastInstruction_ = instructions_.insert(
35
2/2
✓ Branch 11 taken 24 times.
✓ Branch 12 taken 73 times.
22/24
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 13 invoked.
✓ Call 14 invoked.
✓ Call 15 invoked.
✓ Call 16 invoked.
✓ Call 17 invoked.
✓ Call 18 invoked.
✓ Call 19 invoked.
✓ Call 20 invoked.
✓ Call 21 invoked.
✓ Call 22 invoked.
✓ Call 23 invoked.
✗ Call 24 not invoked.
✗ Call 25 not invoked.
267 lastInstruction_ == instructions_.end() ? instructions_.end() : std::next(lastInstruction_),
36 instruction
37 );
38 // (*lastInstruction_)->run();
39 97 }
40 12 std::list<T*>::const_iterator begin() const {
41
6/6
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
12 return instructions_.begin();
42 }
43 12 std::list<T*>::const_iterator end() const {
44
6/6
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
12 return instructions_.end();
45 }
46 59 [[nodiscard]] OptionsContainer* options() const {
47
4/4
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
59 return options_;
48 }
49 83 [[nodiscard]] ExpressionsContainer* expressions() const {
50
4/4
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
83 return expressions_;
51 }
52 protected:
53 48 void execute() override {
54
2/2
✓ Branch 13 taken 267 times.
✓ Branch 14 taken 48 times.
2/2
✓ Decision 'true' taken 267 times.
✓ Decision 'false' taken 48 times.
13/13
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
✓ Call 7 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✓ Call 10 invoked.
✓ Call 11 invoked.
✓ Call 12 invoked.
315 for (auto it = instructions_.begin(); it != instructions_.end(); ++it) {
55
2/3
✓ Branch 6 taken 63 times.
✓ Branch 7 taken 204 times.
✗ Branch 8 not taken.
7/7
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 6 invoked.
267 (*it)->run();
56
1/2
✓ Branch 6 taken 267 times.
✗ Branch 7 not taken.
8/10
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
✓ Call 8 invoked.
✓ Call 9 invoked.
✗ Call 10 not invoked.
✗ Call 11 not invoked.
267 std::this_thread::sleep_for(std::chrono::milliseconds(50));
57
5/5
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
267 lastInstruction_ = it;
58 }
59 48 }
60 private:
61 /// @uml{composition}
62 OptionsContainer* options_;
63 /// @uml{composition}
64 ExpressionsContainer* expressions_;
65 /// @uml{composition}
66 std::list<T*> instructions_;
67 std::list<T*>::iterator lastInstruction_ = instructions_.end();
68 };
69 using InstructionsContainer = BaseInstructionsContainer<BaseInstruction>;
70 }
71 /**@}*/
72
73 #endif //CHRYSALIS_BASEINSTRUCTIONSCONTAINER_H
74