Chrysalis - Pattern Test Coverage


pattern/
File: pattern/include/observers/BaseObservable.h
Date: 2026-08-27 18:35:18
Lines:
11/15
73.3%
Functions:
23/28
82.1%
Branches:
7/18
38.9%
Decisions:
2/2
100.0%
Calls:
61/77
79.2%

Line Branch Decision Call Exec Source
1 #ifndef CHRYSALIS_BASEOBSERVABLE_H
2 #define CHRYSALIS_BASEOBSERVABLE_H
3
4 #include <set>
5 #include <mutex>
6
7 /**
8 * @defgroup Observers Observers
9 * @{
10 */
11 namespace Chrysalis {
12 template<typename T>
13 class BaseObservable {
14 protected:
15
10/10
✓ 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.
329 explicit BaseObservable() = default;
16
6/6
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
✓ Call 5 invoked.
586 virtual ~BaseObservable() = default;
17 public:
18 template<typename... Args, typename... CallArgs>
19 858 void notify(void(T::*function)(Args...), CallArgs&&... args) const {
20
1/2
✓ Branch 5 taken 579 times.
✗ Branch 6 not taken.
5/5
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
858 std::lock_guard lock(mutex_);
21
2/2
✓ Branch 15 taken 3 times.
✓ Branch 16 taken 579 times.
2/2
✓ Decision 'true' taken 3 times.
✓ Decision 'false' taken 579 times.
15/15
✓ 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.
864 for (const auto& observer: observers_) {
22
2/6
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 16 taken 3 times.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
14/17
✓ 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 not invoked.
✗ Call 17 not invoked.
✗ Call 18 not invoked.
6 (observer->*function)(std::forward<CallArgs>(args)...);
23 }
24
1/2
✓ Call 0 invoked.
✗ Call 1 not invoked.
1716 }
25 12 void addObserver(T* observer) {
26
1/2
✓ Branch 5 taken 12 times.
✗ Branch 6 not taken.
5/5
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
✓ Call 4 invoked.
12 std::lock_guard lock(mutex_);
27
1/2
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
4/4
✓ Call 0 invoked.
✓ Call 1 invoked.
✓ Call 2 invoked.
✓ Call 3 invoked.
12 observers_.insert(observer);
28
1/2
✓ Call 0 invoked.
✗ Call 1 not invoked.
24 }
29 ✗ void removeObserver(T* observer) {
30
0/5
✗ Call 0 not invoked.
✗ Call 1 not invoked.
✗ Call 2 not invoked.
✗ Call 3 not invoked.
✗ Call 4 not invoked.
✗ std::lock_guard lock(mutex_);
31
0/4
✗ Call 0 not invoked.
✗ Call 1 not invoked.
✗ Call 2 not invoked.
✗ Call 3 not invoked.
✗ observers_.erase(observer);
32
0/2
✗ Call 0 not invoked.
✗ Call 1 not invoked.
✗ }
33 private:
34 std::set<T*> observers_;
35 mutable std::mutex mutex_;
36 };
37 }
38 /**@}*/
39
40 #endif //CHRYSALIS_BASEOBSERVABLE_H
41