Add some extra checks to unit tests

This commit is contained in:
Jeremy 2024-06-22 19:48:04 -05:00
parent 7a9ed920d5
commit bf0551b781
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4
3 changed files with 22 additions and 0 deletions

View File

@ -39,6 +39,7 @@ TEST(ObjectTrace, Basic) {
CPPTRACE_FORCE_NO_INLINE void object_basic_resolution() {
auto line = __LINE__ + 1;
auto trace = cpptrace::generate_object_trace().resolve();
ASSERT_GE(trace.frames.size(), 1);
EXPECT_THAT(trace.frames[0].filename, testing::EndsWith("object_trace.cpp"));
EXPECT_EQ(trace.frames[0].line.value(), line);
EXPECT_THAT(trace.frames[0].symbol, testing::HasSubstr("object_basic_resolution"));
@ -69,6 +70,10 @@ CPPTRACE_FORCE_NO_INLINE int object_resolve_3(std::vector<int>& line_numbers) {
cpptrace::object_frame{0, dummy.frames[3].object_address, dummy_otrace.frames[3].object_path}
);
auto trace = otrace.resolve();
if(trace.frames.size() < 4) {
ADD_FAILURE() << "trace.frames.size() >= 4";
return 2;
}
int i = 0;
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("object_trace.cpp"));
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);

View File

@ -20,6 +20,7 @@ using namespace std::literals;
CPPTRACE_FORCE_NO_INLINE static void raw_trace_basic() {
auto raw_trace = cpptrace::generate_raw_trace();
// look for within 90 bytes of the start of the function
ASSERT_GE(raw_trace.frames.size(), 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_basic));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_basic) + 90);
}
@ -37,6 +38,7 @@ CPPTRACE_FORCE_NO_INLINE void raw_trace_basic_precise() {
if(x) {
goto* &&b;
}
ASSERT_GE(raw_trace.frames.size(), 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&a));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&b));
}
@ -57,6 +59,7 @@ CPPTRACE_FORCE_NO_INLINE static void raw_trace_multi_2(
cpptrace::frame_ptr parent_high_bound
) {
auto raw_trace = cpptrace::generate_raw_trace();
ASSERT_GE(raw_trace.frames.size(), 2);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_2));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_2) + 90);
EXPECT_GE(raw_trace.frames[1], parent_low_bound);
@ -66,6 +69,7 @@ CPPTRACE_FORCE_NO_INLINE static void raw_trace_multi_2(
CPPTRACE_FORCE_NO_INLINE static void raw_trace_multi_1() {
auto raw_trace = cpptrace::generate_raw_trace();
raw_trace_multi_2(reinterpret_cast<uintptr_t>(raw_trace_multi_1), reinterpret_cast<uintptr_t>(raw_trace_multi_1) + 300);
ASSERT_GE(raw_trace.frames.size(), 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_1));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(raw_trace_multi_1) + 90);
}
@ -88,6 +92,7 @@ CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_3() {
if(x) {
goto* &&b;
}
ASSERT_GE(raw_trace.frames.size(), parents.size() + 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&a)); // this frame
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&b));
for(size_t i = 0; i < parents.size(); i++) { // parent frames
@ -107,6 +112,7 @@ CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_2() {
if(x) {
goto* &&b;
}
ASSERT_GE(raw_trace.frames.size(), parents.size() + 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&a)); // this frame
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&b));
for(size_t i = 0; i < parents.size(); i++) { // parent frames
@ -136,6 +142,7 @@ CPPTRACE_FORCE_NO_INLINE void raw_trace_multi_precise_1() {
if(x) {
goto* &&b;
}
ASSERT_GE(raw_trace.frames.size(), 1);
EXPECT_GE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&a));
EXPECT_LE(raw_trace.frames[0], reinterpret_cast<uintptr_t>(&&b));
record_parent(reinterpret_cast<uintptr_t>(&&c), reinterpret_cast<uintptr_t>(&&d));

View File

@ -31,6 +31,7 @@ TEST(Stacktrace, Empty) {
CPPTRACE_FORCE_NO_INLINE void stacktrace_basic() {
auto line = __LINE__ + 1;
auto trace = cpptrace::generate_trace();
ASSERT_GE(trace.frames.size(), 1);
EXPECT_THAT(trace.frames[0].filename, testing::EndsWith("stacktrace.cpp"));
EXPECT_EQ(trace.frames[0].line.value(), line);
EXPECT_THAT(trace.frames[0].symbol, testing::HasSubstr("stacktrace_basic"));
@ -47,6 +48,10 @@ TEST(Stacktrace, Basic) {
CPPTRACE_FORCE_NO_INLINE int stacktrace_multi_3(std::vector<int>& line_numbers) {
line_numbers.insert(line_numbers.begin(), __LINE__ + 1);
auto trace = cpptrace::generate_trace();
if(trace.frames.size() < 4) {
ADD_FAILURE() << "trace.frames.size() >= 4";
return 2;
}
int i = 0;
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
@ -104,6 +109,7 @@ TEST(Stacktrace, RawTraceResolution) {
line_numbers.insert(line_numbers.begin(), __LINE__ + 1);
auto raw = stacktrace_raw_resolve_1(line_numbers);
auto trace = raw.resolve();
ASSERT_GE(trace.frames.size(), 4);
int i = 0;
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);
@ -128,6 +134,10 @@ TEST(Stacktrace, RawTraceResolution) {
CPPTRACE_FORCE_NO_INLINE int stacktrace_inline_resolution_3(std::vector<int>& line_numbers) {
line_numbers.insert(line_numbers.begin(), __LINE__ + 1);
auto trace = cpptrace::generate_trace();
if(trace.frames.size() < 4) {
ADD_FAILURE() << "trace.frames.size() >= 4";
return 2;
}
int i = 0;
EXPECT_THAT(trace.frames[i].filename, testing::EndsWith("stacktrace.cpp"));
EXPECT_EQ(trace.frames[i].line.value(), line_numbers[i]);