diff --git a/test/unit/object_trace.cpp b/test/unit/object_trace.cpp index e96db11..d3449ef 100644 --- a/test/unit/object_trace.cpp +++ b/test/unit/object_trace.cpp @@ -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& 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]); diff --git a/test/unit/raw_trace.cpp b/test/unit/raw_trace.cpp index 2ddc72c..b6117ed 100644 --- a/test/unit/raw_trace.cpp +++ b/test/unit/raw_trace.cpp @@ -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(raw_trace_basic)); EXPECT_LE(raw_trace.frames[0], reinterpret_cast(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(&&a)); EXPECT_LE(raw_trace.frames[0], reinterpret_cast(&&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(raw_trace_multi_2)); EXPECT_LE(raw_trace.frames[0], reinterpret_cast(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(raw_trace_multi_1), reinterpret_cast(raw_trace_multi_1) + 300); + ASSERT_GE(raw_trace.frames.size(), 1); EXPECT_GE(raw_trace.frames[0], reinterpret_cast(raw_trace_multi_1)); EXPECT_LE(raw_trace.frames[0], reinterpret_cast(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(&&a)); // this frame EXPECT_LE(raw_trace.frames[0], reinterpret_cast(&&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(&&a)); // this frame EXPECT_LE(raw_trace.frames[0], reinterpret_cast(&&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(&&a)); EXPECT_LE(raw_trace.frames[0], reinterpret_cast(&&b)); record_parent(reinterpret_cast(&&c), reinterpret_cast(&&d)); diff --git a/test/unit/stacktrace.cpp b/test/unit/stacktrace.cpp index 87cd389..e252de2 100644 --- a/test/unit/stacktrace.cpp +++ b/test/unit/stacktrace.cpp @@ -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& 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& 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]);