Internals: Use auto in UASSERT_SELFTEST (#8299)

This commit is contained in:
Geza Lore
2026-09-06 17:16:08 -04:00
committed by GitHub
parent 0b824f160f
commit 62bec1bffc
7 changed files with 170 additions and 173 deletions
+72 -72
View File
@@ -596,76 +596,76 @@ public:
10}; // Sandbag denom
const std::vector<ThreadSchedule> scheduled = packer.pack(graph);
UASSERT_SELFTEST(const size_t, scheduled.size(), 3);
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads.size(), threads);
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads[0].size(), 2);
UASSERT_SELFTEST(scheduled.size(), 3);
UASSERT_SELFTEST(scheduled[0].m_threads.size(), threads);
UASSERT_SELFTEST(scheduled[0].m_threads[0].size(), 2);
for (size_t i = 1; i < scheduled[0].m_threads.size(); ++i)
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads[i].size(), 0);
UASSERT_SELFTEST(scheduled[0].m_threads[i].size(), 0);
UASSERT_SELFTEST(const ExecMTask*, scheduled[0].m_threads[0][0], t0);
UASSERT_SELFTEST(const ExecMTask*, scheduled[0].m_threads[0][1], t1);
UASSERT_SELFTEST(scheduled[0].m_threads[0][0], t0);
UASSERT_SELFTEST(scheduled[0].m_threads[0][1], t1);
UASSERT_SELFTEST(const size_t, scheduled[1].m_threads.size(), hierThreads / 3);
UASSERT_SELFTEST(const ExecMTask*, scheduled[1].m_threads[0][0], t2);
UASSERT_SELFTEST(const ExecMTask*, scheduled[1].m_threads[0][1], t3);
UASSERT_SELFTEST(const ExecMTask*, scheduled[1].m_threads[1][0], t4);
UASSERT_SELFTEST(scheduled[1].m_threads.size(), hierThreads / 3);
UASSERT_SELFTEST(scheduled[1].m_threads[0][0], t2);
UASSERT_SELFTEST(scheduled[1].m_threads[0][1], t3);
UASSERT_SELFTEST(scheduled[1].m_threads[1][0], t4);
UASSERT_SELFTEST(const size_t, scheduled[2].m_threads.size(), threads);
UASSERT_SELFTEST(const ExecMTask*, scheduled[2].m_threads[0][0], t5);
UASSERT_SELFTEST(const ExecMTask*, scheduled[2].m_threads[1][0], t6);
UASSERT_SELFTEST(scheduled[2].m_threads.size(), threads);
UASSERT_SELFTEST(scheduled[2].m_threads[0][0], t5);
UASSERT_SELFTEST(scheduled[2].m_threads[1][0], t6);
UASSERT_SELFTEST(const size_t, ThreadSchedule::s_mtaskState.size(), 7);
UASSERT_SELFTEST(ThreadSchedule::s_mtaskState.size(), 7);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t0), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t1), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t2), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t3), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t4), 1);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t5), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t6), 1);
UASSERT_SELFTEST(ThreadSchedule::threadId(t0), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t1), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t2), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t3), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t4), 1);
UASSERT_SELFTEST(ThreadSchedule::threadId(t5), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t6), 1);
// On its native thread, we see the actual end time for t0:
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t0, 0), 1000);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t0, 0), 1000);
// On the other thread, we see a sandbagged end time which does not
// exceed the t1 end time:
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t0, 1), 1099);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t0, 1), 1099);
// Actual end time on native thread:
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t1, 0), 1100);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t1, 0), 1100);
// Sandbagged end time seen on thread 1. Note it does not compound
// with t0's sandbagged time; compounding caused trouble in
// practice.
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t1, 1), 1130);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t1, 1), 1130);
// Wide task scheduling
// Task does not depend on previous or future schedules
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t2, 0), 0);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[2], t2, 0), 0);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t2, 0), 0);
UASSERT_SELFTEST(packer.completionTime(scheduled[2], t2, 0), 0);
// We allow sandbagging for hierarchical children tasks, this does not affect
// wide task scheduling. When the next schedule is created it doesn't matter
// anyway.
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 0), 1200);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 1), 1230);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 2), 1230);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 3), 1230);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 4), 1230);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t2, 5), 1230);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 0), 1200);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 1), 1230);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 2), 1230);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 3), 1230);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 4), 1230);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t2, 5), 1230);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 0), 1300);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 1), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 2), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 3), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 4), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t3, 5), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 0), 1300);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 1), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 2), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 3), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 4), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t3, 5), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 0), 1360);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 1), 1330);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 2), 1360);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 3), 1360);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 4), 1360);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t4, 5), 1360);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 0), 1360);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 1), 1330);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 2), 1360);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 3), 1360);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 4), 1360);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t4, 5), 1360);
for (V3GraphVertex& vtx : graph.vertices()) vtx.as<ExecMTask>()->funcp()->deleteTree();
VL_DO_DANGLING(execGraphp->deleteTree(), execGraphp);
@@ -698,29 +698,29 @@ public:
10}; // Sandbag denom
const std::vector<ThreadSchedule> scheduled = packer.pack(graph);
UASSERT_SELFTEST(const size_t, scheduled.size(), 2);
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads.size(), hierThreads / 2);
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads[0].size(), 1);
UASSERT_SELFTEST(scheduled.size(), 2);
UASSERT_SELFTEST(scheduled[0].m_threads.size(), hierThreads / 2);
UASSERT_SELFTEST(scheduled[0].m_threads[0].size(), 1);
for (size_t i = 1; i < scheduled[0].m_threads.size(); ++i)
UASSERT_SELFTEST(const size_t, scheduled[0].m_threads[i].size(), 0);
UASSERT_SELFTEST(scheduled[0].m_threads[i].size(), 0);
UASSERT_SELFTEST(const ExecMTask*, scheduled[0].m_threads[0][0], t0);
UASSERT_SELFTEST(scheduled[0].m_threads[0][0], t0);
UASSERT_SELFTEST(const size_t, scheduled[1].m_threads.size(), threads);
UASSERT_SELFTEST(const size_t, scheduled[1].m_threads[0].size(), 1);
UASSERT_SELFTEST(scheduled[1].m_threads.size(), threads);
UASSERT_SELFTEST(scheduled[1].m_threads[0].size(), 1);
for (size_t i = 1; i < scheduled[1].m_threads.size(); ++i)
UASSERT_SELFTEST(const size_t, scheduled[1].m_threads[i].size(), 0);
UASSERT_SELFTEST(const ExecMTask*, scheduled[1].m_threads[0][0], t1);
UASSERT_SELFTEST(scheduled[1].m_threads[i].size(), 0);
UASSERT_SELFTEST(scheduled[1].m_threads[0][0], t1);
UASSERT_SELFTEST(const size_t, ThreadSchedule::s_mtaskState.size(), 2);
UASSERT_SELFTEST(ThreadSchedule::s_mtaskState.size(), 2);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t0), 0);
UASSERT_SELFTEST(const uint32_t, ThreadSchedule::threadId(t1), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t0), 0);
UASSERT_SELFTEST(ThreadSchedule::threadId(t1), 0);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[0], t0, 0), 1000);
UASSERT_SELFTEST(packer.completionTime(scheduled[0], t0, 0), 1000);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t1, 0), 1100);
UASSERT_SELFTEST(const uint32_t, packer.completionTime(scheduled[1], t1, 1), 1130);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t1, 0), 1100);
UASSERT_SELFTEST(packer.completionTime(scheduled[1], t1, 1), 1130);
for (V3GraphVertex& vtx : graph.vertices()) vtx.as<ExecMTask>()->funcp()->deleteTree();
VL_DO_DANGLING(execGraphp->deleteTree(), execGraphp);
@@ -1200,12 +1200,12 @@ void selfTest() {
{2, {20, 0}}, // Note no profile
{3, {30, 3000}}});
normalizeCosts(costs);
UASSERT_SELFTEST(const uint64_t, costs[1].first, 1000);
UASSERT_SELFTEST(const uint64_t, costs[1].second, 1000);
UASSERT_SELFTEST(const uint64_t, costs[2].first, 2000);
UASSERT_SELFTEST(const uint64_t, costs[2].second, 0);
UASSERT_SELFTEST(const uint64_t, costs[3].first, 3000);
UASSERT_SELFTEST(const uint64_t, costs[3].second, 3000);
UASSERT_SELFTEST(costs[1].first, 1000);
UASSERT_SELFTEST(costs[1].second, 1000);
UASSERT_SELFTEST(costs[2].first, 2000);
UASSERT_SELFTEST(costs[2].second, 0);
UASSERT_SELFTEST(costs[3].first, 3000);
UASSERT_SELFTEST(costs[3].second, 3000);
}
{ // Test that very large profile data properly scales
Costs costs({// id est prof
@@ -1213,12 +1213,12 @@ void selfTest() {
{2, {20, 200000000000}},
{3, {30, 1}}}); // Make sure doesn't underflow
normalizeCosts(costs);
UASSERT_SELFTEST(const uint64_t, costs[1].first, 2500000);
UASSERT_SELFTEST(const uint64_t, costs[1].second, 5000000);
UASSERT_SELFTEST(const uint64_t, costs[2].first, 5000000);
UASSERT_SELFTEST(const uint64_t, costs[2].second, 10000000);
UASSERT_SELFTEST(const uint64_t, costs[3].first, 7500000);
UASSERT_SELFTEST(const uint64_t, costs[3].second, 1);
UASSERT_SELFTEST(costs[1].first, 2500000);
UASSERT_SELFTEST(costs[1].second, 5000000);
UASSERT_SELFTEST(costs[2].first, 5000000);
UASSERT_SELFTEST(costs[2].second, 10000000);
UASSERT_SELFTEST(costs[3].first, 7500000);
UASSERT_SELFTEST(costs[3].second, 1);
}
PackThreads::selfTest();