#include <catch2/catch_test_macros.hpp>
#include <panda/backtrace.h>
#include <panda/exception.h>
#include "fn.h"
#include <iostream>
using namespace panda::backtrace;
using namespace panda;
// TEST_CASE("backtrace", "[backtrace]") {
// install();
// bool got_it = false;
// try {
// fn03();
// } catch (const exception& ex) {
// got_it = true;
// auto bt = ex.get_backtrace_info();
// std::cout << bt->to_string() << "\n";
// auto frames = bt->frames;
// CHECK(frames.size() >= 3);
// int fn_01_idx = -1;
// for(int i = 0; i < (int)frames.size(); ++i) {
// if (frames[i]->name.find("fn01") != string::npos) { fn_01_idx = i; }
// }
// REQUIRE(fn_01_idx >= 0);
// CHECK(frames[fn_01_idx + 1]->name.find("fn02") != string::npos);
// CHECK(frames[fn_01_idx + 2]->name.find("fn03") != string::npos);
// }
// REQUIRE(got_it);
// }
TEST_CASE("backtrace-tmp", "[backtrace]") {
install();
bool got_it = false;
try {
fn03();
} catch (const exception& ex) {
got_it = true;
auto bt = ex.get_backtrace_info();
std::cout << bt->to_string() << "\n";
auto frames = bt->frames;
CHECK(frames.size() >= 3);
int fn_01_idx = -1;
for(int i = 0; i < (int)frames.size(); ++i) {
if (frames[i]->name.find("fn02") != string::npos) { fn_01_idx = i; }
}
REQUIRE(fn_01_idx >= 0);
CHECK(frames[fn_01_idx + 1]->name.find("fn03") != string::npos);
}
REQUIRE(got_it);
}