• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

llnl / dftracer / 27009054001

05 Jun 2026 10:14AM UTC coverage: 18.437%. First build
27009054001

Pull #352

github

web-flow
Merge 02db0fea0 into a4a7a5cb6
Pull Request #352: fix: update logger types and improve error logging messages

7268 of 53566 branches covered (13.57%)

Branch coverage included in aggregate %.

380 of 702 new or added lines in 31 files covered. (54.13%)

4776 of 11760 relevant lines covered (40.61%)

1107.24 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

79.27
/test/unit/test_aggregated_value.cpp
1
#include <dftracer/core/common/datastructure.h>
2

3
#include <cassert>
4
#include <iostream>
5
#include <typeinfo>
6

7
using namespace dftracer;
8

9
void test_number_aggregation_creation() {
1✔
10
  std::cout << "=== Test: NumberAggregationValue Creation ===\n" << std::endl;
1✔
11

12
  NumberAggregationValue<int> val1(10);
1✔
13
  NumberAggregationValue<int> val2(20);
1✔
14

15
  std::cout << "val1: min=" << val1.min << " max=" << val1.max
1✔
16
            << " sum=" << val1.sum << " count=" << val1.count << std::endl;
1✔
17
  std::cout << "val2: min=" << val2.min << " max=" << val2.max
1✔
18
            << " sum=" << val2.sum << " count=" << val2.count << std::endl;
1✔
19

20
  assert(val1.min == 10);
1!
21
  assert(val1.max == 10);
1!
22
  assert(val1.sum == 10);
1!
23
  assert(val1.count == 1);
1!
24

25
  std::cout << "✓ Creation test passed\n" << std::endl;
1✔
26
}
1✔
27

28
void test_type_info() {
1✔
29
  std::cout << "=== Test: Type Info Matching ===\n" << std::endl;
1✔
30

31
  NumberAggregationValue<int> val1(10);
1✔
32
  NumberAggregationValue<int> val2(20);
1✔
33

34
  std::cout << "val1._id: " << val1._id.name() << std::endl;
1✔
35
  std::cout << "val2._id: " << val2._id.name() << std::endl;
1✔
36
  std::cout << "typeid(int): " << typeid(int).name() << std::endl;
1✔
37

38
  assert(val1._id == val2._id);
1!
39
  assert(val1._id == typeid(int));
1!
40

41
  std::cout << "✓ Type info test passed\n" << std::endl;
1✔
42
}
1✔
43

44
void test_base_pointer_cast() {
1✔
45
  std::cout << "=== Test: Base Pointer Dynamic Cast ===\n" << std::endl;
1✔
46

47
  NumberAggregationValue<int> val1(10);
1✔
48
  NumberAggregationValue<int> val2(20);
1✔
49

50
  BaseAggregatedValue* base1 = &val1;
1✔
51
  BaseAggregatedValue* base2 = &val2;
1✔
52

53
  std::cout << "base1 ptr: " << base1 << std::endl;
1✔
54
  std::cout << "base2 ptr: " << base2 << std::endl;
1✔
55
  std::cout << "base1._id: " << base1->_id.name() << std::endl;
1✔
56
  std::cout << "base2._id: " << base2->_id.name() << std::endl;
1✔
57

58
  // Try dynamic_cast back to derived type
59
  auto* derived1 = dynamic_cast<NumberAggregationValue<int>*>(base1);
1!
60
  auto* derived2 = dynamic_cast<NumberAggregationValue<int>*>(base2);
1!
61

62
  std::cout << "derived1 ptr: " << derived1 << std::endl;
1✔
63
  std::cout << "derived2 ptr: " << derived2 << std::endl;
1✔
64

65
  if (!derived1) {
1!
66
    std::cerr << "✗ ERROR: derived1 is NULL after dynamic_cast!" << std::endl;
×
67
    std::cerr << "  base1 type: " << typeid(*base1).name() << std::endl;
×
68
  }
69
  if (!derived2) {
1!
70
    std::cerr << "✗ ERROR: derived2 is NULL after dynamic_cast!" << std::endl;
×
71
    std::cerr << "  base2 type: " << typeid(*base2).name() << std::endl;
×
72
  }
73

74
  assert(derived1 != nullptr);
1!
75
  assert(derived2 != nullptr);
1!
76

77
  std::cout << "✓ Dynamic cast test passed\n" << std::endl;
1✔
78
}
1✔
79

80
void test_direct_update() {
1✔
81
  std::cout << "=== Test: Direct Update (Derived Type) ===\n" << std::endl;
1✔
82

83
  NumberAggregationValue<int> val1(10);
1✔
84
  NumberAggregationValue<int> val2(20);
1✔
85

86
  std::cout << "Before update:" << std::endl;
1✔
87
  std::cout << "  val1: min=" << val1.min << " max=" << val1.max
1✔
88
            << " sum=" << val1.sum << " count=" << val1.count << std::endl;
1✔
89

90
  val1.update(&val2);
1✔
91

92
  std::cout << "After update:" << std::endl;
1✔
93
  std::cout << "  val1: min=" << val1.min << " max=" << val1.max
1✔
94
            << " sum=" << val1.sum << " count=" << val1.count << std::endl;
1✔
95

96
  assert(val1.min == 10);
1!
97
  assert(val1.max == 20);
1!
98
  assert(val1.sum == 30);
1!
99
  assert(val1.count == 2);
1!
100

101
  std::cout << "✓ Direct update test passed\n" << std::endl;
1✔
102
}
1✔
103

104
void test_base_update() {
1✔
105
  std::cout << "=== Test: Base Update (Polymorphic) ===\n" << std::endl;
1✔
106

107
  NumberAggregationValue<int> val1(10);
1✔
108
  NumberAggregationValue<int> val2(20);
1✔
109

110
  BaseAggregatedValue* base1 = &val1;
1✔
111
  BaseAggregatedValue* base2 = &val2;
1✔
112

113
  std::cout << "Before update:" << std::endl;
1✔
114
  std::cout << "  val1: min=" << val1.min << " max=" << val1.max
1✔
115
            << " sum=" << val1.sum << " count=" << val1.count << std::endl;
1✔
116
  std::cout << "  Type match: " << (base1->_id == base2->_id ? "YES" : "NO")
1!
117
            << std::endl;
1✔
118

119
  base1->update(base2);
1✔
120

121
  std::cout << "After update:" << std::endl;
1✔
122
  std::cout << "  val1: min=" << val1.min << " max=" << val1.max
1✔
123
            << " sum=" << val1.sum << " count=" << val1.count << std::endl;
1✔
124

125
  assert(val1.min == 10);
1!
126
  assert(val1.max == 20);
1!
127
  assert(val1.sum == 30);
1!
128
  assert(val1.count == 2);
1!
129

130
  std::cout << "✓ Base update test passed\n" << std::endl;
1✔
131
}
1✔
132

133
void test_multiple_types() {
1✔
134
  std::cout << "=== Test: Multiple Numeric Types ===\n" << std::endl;
1✔
135

136
  NumberAggregationValue<int> int_val1(10);
1✔
137
  NumberAggregationValue<int> int_val2(20);
1✔
138

139
  NumberAggregationValue<double> double_val1(10.5);
1✔
140
  NumberAggregationValue<double> double_val2(20.5);
1✔
141

142
  BaseAggregatedValue* base_int1 = &int_val1;
1✔
143
  BaseAggregatedValue* base_int2 = &int_val2;
1✔
144
  BaseAggregatedValue* base_double1 = &double_val1;
1✔
145
  BaseAggregatedValue* base_double2 = &double_val2;
1✔
146

147
  // Int update
148
  base_int1->update(base_int2);
1✔
149
  assert(int_val1.sum == 30);
1!
150
  assert(int_val1.count == 2);
1!
151

152
  // Double update
153
  base_double1->update(base_double2);
1✔
154
  assert(double_val1.sum == 31.0);
1!
155
  assert(double_val1.count == 2);
1!
156

157
  // Cross-type update should be safe (no-op)
158
  base_int1->update(base_double1);
1✔
159
  assert(int_val1.sum == 30);   // Should not change
1!
160
  assert(int_val1.count == 2);  // Should not change
1!
161

162
  std::cout << "✓ Multiple types test passed\n" << std::endl;
1✔
163
}
1✔
164

165
int main() {
1✔
166
  try {
167
    test_number_aggregation_creation();
1✔
168
    test_type_info();
1✔
169
    test_base_pointer_cast();
1✔
170
    test_direct_update();
1✔
171
    test_base_update();
1✔
172
    test_multiple_types();
1✔
173

174
    std::cout << "\n✓✓✓ All AggregatedValue tests passed! ✓✓✓\n" << std::endl;
1✔
175
    return 0;
1✔
NEW
176
  } catch (const std::exception& e) {
×
177
    std::cerr << "✗ Test failed with exception: " << e.what() << std::endl;
×
178
    return 1;
×
179
  } catch (...) {
×
180
    std::cerr << "✗ Test failed with unknown exception" << std::endl;
×
181
    return 1;
×
182
  }
×
183
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc