Skip to content

Commit

Permalink
fixed tests
Browse files Browse the repository at this point in the history
  • Loading branch information
oh-yes-0-fps committed Oct 3, 2024
1 parent 2706c93 commit 9272208
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 88 deletions.
6 changes: 4 additions & 2 deletions wpilibc/src/main/native/cpp/Tracer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,13 +214,15 @@ Tracer::SubstitutiveTracer::~SubstitutiveTracer() {

void Tracer::SubstitutiveTracer::SubIn() {
if (!m_currentlySubbedIn) {
std::swap(m_state, threadLocalState);
m_state.swap(threadLocalState);
m_currentlySubbedIn = true;
}
}

void Tracer::SubstitutiveTracer::SubOut() {
if (m_currentlySubbedIn) {
std::swap(m_state, threadLocalState);
m_state.swap(threadLocalState);
m_currentlySubbedIn = false;
}
}

Expand Down
145 changes: 59 additions & 86 deletions wpilibc/src/test/native/cpp/TracerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ TEST(TracerTest, TraceFunc) {
auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/Test1/Test2");

EXPECT_NEAR(test1Entry.GetDouble(0.0), 500.0, 1.0);
EXPECT_NEAR(test2Entry.GetDouble(0.0), 400.0, 1.0);
EXPECT_NEAR(test1Entry.GetDouble(-1.0), 500.0, 1.0);
EXPECT_NEAR(test2Entry.GetDouble(-1.0), 400.0, 1.0);

frc::sim::ResumeTiming();
frc::Tracer::ResetForTest();
Expand All @@ -57,8 +57,8 @@ TEST(TracerTest, ScopedTrace) {

EXPECT_TRUE(test3Entry.Exists());
EXPECT_TRUE(test4Entry.Exists());
EXPECT_NEAR(test3Entry.GetDouble(0.0), 500.0, 1.0);
EXPECT_NEAR(test4Entry.GetDouble(0.0), 400.0, 1.0);
EXPECT_NEAR(test3Entry.GetDouble(-1.0), 500.0, 1.0);
EXPECT_NEAR(test4Entry.GetDouble(-1.0), 400.0, 1.0);

frc::sim::ResumeTiming();
frc::Tracer::ResetForTest();
Expand All @@ -71,47 +71,31 @@ TEST(TracerTest, Threaded) {
frc::sim::PauseTiming();

// run a trace in the main thread, assert that the tracer ran
{
frc::Tracer::StartTrace("ThreadTest1");
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();
frc::Tracer::StartTrace("ThreadTest1");
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();

auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/ThreadTest1");
auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/ThreadTest1");

EXPECT_TRUE(test1Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(0.0), 100.0, 1.0);
}
EXPECT_TRUE(test1Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(-1.0), 100.0, 1.0);

// run a trace in a new thread, assert that the tracer ran
// and that the output position and value are correct
{
std::thread thread([]() {
frc::Tracer::SetThreadName("TestThread");
frc::Tracer::StartTrace("ThreadTest1");
frc::sim::StepTiming(400_ms);
frc::Tracer::EndTrace();

auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/ThreadTest1");

EXPECT_TRUE(test1Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(0.0), 100.0, 1.0);

auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TestThread/ThreadTest1");

EXPECT_TRUE(test2Entry.Exists());
EXPECT_NEAR(test2Entry.GetDouble(0.0), 400.0, 1.0);
});
thread.join();
std::thread thread([]() {
frc::Tracer::SetThreadName("TestThread");
frc::Tracer::StartTrace("ThreadTest1");
frc::sim::StepTiming(400_ms);
frc::Tracer::EndTrace();

auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TestThread/ThreadTest1");
"/Tracer/TestThread/ThreadTest1");

EXPECT_TRUE(test2Entry.Exists());
EXPECT_NEAR(test2Entry.GetDouble(0.0), 400.0, 1.0);
}
EXPECT_NEAR(test2Entry.GetDouble(-1.0), 400.0, 1.0);
});
thread.join();

frc::sim::ResumeTiming();
frc::Tracer::ResetForTest();
Expand All @@ -125,38 +109,34 @@ TEST(TracerTest, SingleThreaded) {

// start a trace in the main thread, assert that the tracer ran
// and that the thread name is not in the trace path
{
frc::Tracer::EnableSingleThreadedMode();
frc::Tracer::EnableSingleThreadedMode();

frc::Tracer::StartTrace("SingleThreadTest1");
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();
frc::Tracer::StartTrace("SingleThreadTest1");
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();

auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/SingleThreadTest1");
auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/SingleThreadTest1");

EXPECT_TRUE(test1Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(0.0), 100.0, 1.0);
}
EXPECT_TRUE(test1Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(-1.0), 100.0, 1.0);

// start a trace in a new thread after enabling single threaded mode,
// this should disable the tracer on the new thread, assert that the tracer
// did not run
{
std::thread thread([]() {
std::string newThreadName = "TestThread";
frc::Tracer::SetThreadName(newThreadName);
frc::Tracer::StartTrace("SingleThreadTest1");
frc::sim::StepTiming(400_ms);
frc::Tracer::EndTrace();

auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
std::thread thread([]() {
std::string newThreadName = "TestThread";
frc::Tracer::SetThreadName(newThreadName);
frc::Tracer::StartTrace("SingleThreadTest1");
frc::sim::StepTiming(400_ms);
frc::Tracer::EndTrace();

auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/" + newThreadName + "/SingleThreadTest1");

EXPECT_FALSE(test2Entry.Exists());
});
thread.join();
}
EXPECT_FALSE(test2Entry.Exists());
});
thread.join();

frc::sim::ResumeTiming();
frc::Tracer::ResetForTest();
Expand All @@ -168,42 +148,35 @@ TEST(TracerTest, Substitutor) {

frc::sim::PauseTiming();

{
frc::Tracer::StartTrace("SubTest1");
frc::Tracer::TraceFunc("SubTest2", []() { frc::sim::StepTiming(400_ms); });
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();
}
frc::Tracer::StartTrace("SubTest1");
frc::Tracer::TraceFunc("SubTest2", []() { frc::sim::StepTiming(400_ms); });
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();

{
frc::Tracer::SubstitutiveTracer sub("Sub");
sub.SubIn();
frc::Tracer::SubstitutiveTracer sub("Sub");
sub.SubIn();

frc::Tracer::StartTrace("SubTest1");
frc::Tracer::TraceFunc("SubTest2", []() { frc::sim::StepTiming(400_ms); });
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();
frc::Tracer::StartTrace("SubTest1");
frc::Tracer::TraceFunc("SubTest2", []() { frc::sim::StepTiming(400_ms); });
frc::sim::StepTiming(100_ms);
frc::Tracer::EndTrace();

sub.SubOut();
}
sub.SubOut();

auto test1Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/SubTest1");
auto test2Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/TracerTest/SubTest1/SubTest2");
auto test3Entry =
nt::NetworkTableInstance::GetDefault().GetEntry("/Tracer/Sub/SubTest1");
auto test4Entry = nt::NetworkTableInstance::GetDefault().GetEntry(
"/Tracer/Sub/SubTest1/SubTest2");
auto inst = nt::NetworkTableInstance::GetDefault();

auto test1Entry = inst.GetEntry("/Tracer/TracerTest/SubTest1");
auto test2Entry = inst.GetEntry("/Tracer/TracerTest/SubTest1/SubTest2");
auto test3Entry = inst.GetEntry("/Tracer/Sub/SubTest1");
auto test4Entry = inst.GetEntry("/Tracer/Sub/SubTest1/SubTest2");
EXPECT_TRUE(test1Entry.Exists());
EXPECT_TRUE(test2Entry.Exists());
EXPECT_TRUE(test3Entry.Exists());
EXPECT_TRUE(test4Entry.Exists());
EXPECT_NEAR(test1Entry.GetDouble(0.0), 500.0, 1.0);
EXPECT_NEAR(test2Entry.GetDouble(0.0), 400.0, 1.0);
EXPECT_NEAR(test3Entry.GetDouble(0.0), 500.0, 1.0);
EXPECT_NEAR(test4Entry.GetDouble(0.0), 400.0, 1.0);
EXPECT_NEAR(test1Entry.GetDouble(-1.0), 500.0, 1.0);
EXPECT_NEAR(test2Entry.GetDouble(-1.0), 400.0, 1.0);
EXPECT_NEAR(test3Entry.GetDouble(-1.0), 500.0, 1.0);
EXPECT_NEAR(test4Entry.GetDouble(-1.0), 400.0, 1.0);

frc::sim::ResumeTiming();
frc::Tracer::ResetForTest();
Expand Down

0 comments on commit 9272208

Please sign in to comment.