GCC Code Coverage Report


Directory: libimgdoc2/
File: libimgdoc2/inc/Intervals.h
Date: 2025-02-03 12:41:04
Exec Total Coverage
Lines: 16 16 100.0%
Functions: 6 6 100.0%
Branches: 12 16 75.0%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2023 Carl Zeiss Microscopy GmbH
2 //
3 // SPDX-License-Identifier: MIT
4
5 #pragma once
6
7 #include <limits>
8
9 namespace imgdoc2
10 {
11 /// This structure gathers a minimum and maximum value. If minimum is greater than maximum, this means
12 /// that the bounds is invalid.
13 struct DoubleInterval
14 {
15 double minimum_value{ std::numeric_limits<double>::max() }; ///< The minimum value.
16 double maximum_value{ std::numeric_limits<double>::lowest() }; ///< The maximum value.
17
18 /// <summary> Query if this object is valid. </summary>
19 /// <returns> True if valid, false if not. </returns>
20 22 [[nodiscard]] bool IsValid() const
21 {
22 22 return this->minimum_value <= this->maximum_value;
23 }
24
25 /// <summary> Equality operator. </summary>
26 /// <remarks> In case the both are 'not valid', then they are considered equal (irrespective of the actual values). </remarks>
27 /// <param name="rhs"> The right hand side. </param>
28 /// <returns> True if the parameters are considered equivalent. </returns>
29 20 [[nodiscard]] bool operator==(const DoubleInterval& rhs) const
30 {
31
3/4
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
20 if (this->minimum_value == rhs.minimum_value && this->maximum_value == rhs.maximum_value)
32 {
33 14 return true;
34 }
35
36 // if both are invalid, then we consider them as equal - otherwise, they are unequal
37
3/4
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
6 return !this->IsValid() && !rhs.IsValid();
38 }
39
40 /// <summary> Inequality operator. </summary>
41 /// <remarks> In case the both are 'not valid', then they are considered equal (irrespective of the actual values). </remarks>
42 /// <param name="rhs"> The right hand side. </param>
43 /// <returns> True if the parameters are not considered equivalent. </returns>
44 4 [[nodiscard]] bool operator!=(const DoubleInterval& rhs) const
45 {
46 4 return !(*this == rhs);
47 }
48 };
49
50 /// This structure gathers a minimum and maximum value. If minimum is greater than maximum, this means
51 /// that the bounds is invalid.
52 struct Int32Interval
53 {
54 std::int32_t minimum_value{ std::numeric_limits<std::int32_t>::max() }; ///< The minimum value.
55 std::int32_t maximum_value{ std::numeric_limits<std::int32_t>::min() }; ///< The maximum value.
56
57 /// <summary> Query if this object is valid. </summary>
58 /// <returns> True if valid, false if not. </returns>
59 20 [[nodiscard]] bool IsValid() const
60 {
61 20 return this->minimum_value <= this->maximum_value;
62 }
63
64 /// <summary> Equality operator. </summary>
65 /// <remarks> In case the both are 'not valid', then they are considered equal (irrespective of the actual values). </remarks>
66 /// <param name="rhs"> The right hand side. </param>
67 /// <returns> True if the parameters are considered equivalent. </returns>
68 10 bool operator==(const Int32Interval& rhs) const
69 {
70
3/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 4 times.
✗ Branch 3 not taken.
10 if (this->minimum_value == rhs.minimum_value && this->maximum_value == rhs.maximum_value)
71 {
72 4 return true;
73 }
74
75 // if both are invalid, then we consider them as equal - otherwise, they are unequal
76
3/4
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
6 return !this->IsValid() && !rhs.IsValid();
77 }
78
79 /// <summary> Inequality operator. </summary>
80 /// <remarks> In case the both are 'not valid', then they are considered equal (irrespective of the actual values). </remarks>
81 /// <param name="rhs"> The right hand side. </param>
82 /// <returns> True if the parameters are not considered equivalent. </returns>
83 4 bool operator!=(const Int32Interval& rhs) const
84 {
85 4 return !(*this == rhs);
86 }
87 };
88 } // namespace imgdoc2
89