|
6 | 6 | #include <chrono>
|
7 | 7 | #include <cstddef>
|
8 | 8 | #include <cstdio>
|
| 9 | +#include <vector> |
9 | 10 |
|
10 | 11 | #include <gtest/gtest.h>
|
11 | 12 | #include <wpi/array.h>
|
@@ -55,7 +56,7 @@ struct fmt::formatter<wpi::array<T, N>, CharT> {
|
55 | 56 | };
|
56 | 57 |
|
57 | 58 | template <size_t N>
|
58 |
| -void ProcessDurations(const wpi::array<units::nanosecond_t, N>& durations, |
| 59 | +void ProcessDurations(const std::vector<units::nanosecond_t>& durations, |
59 | 60 | std::string_view prefix = "") {
|
60 | 61 | wpi::print("Summing durations\n");
|
61 | 62 | std::fflush(stdout);
|
@@ -94,14 +95,28 @@ void ProcessDurations(const wpi::array<units::nanosecond_t, N>& durations,
|
94 | 95 | }
|
95 | 96 |
|
96 | 97 | wpi::print("{}Last 10: {}\n", prefix, buffer);
|
97 |
| - std::fflush(stdout); |
| 98 | + |
| 99 | + std::vector<units::nanosecond_t> sorted{durations}; |
| 100 | + std::sort(sorted.begin(), sorted.end()); |
| 101 | + |
| 102 | + for (size_t i = 0; i < 10; ++i) { |
| 103 | + buffer[i] = sorted[i]; |
| 104 | + } |
| 105 | + |
| 106 | + wpi::print("{}Fastest 10: {}\n", prefix, buffer); |
| 107 | + |
| 108 | + for (size_t i = 0; i < 10; ++i) { |
| 109 | + buffer[i] = sorted[N - 10 + i]; |
| 110 | + } |
| 111 | + |
| 112 | + wpi::print("{}Slowest 10: {}\n", prefix, buffer); |
98 | 113 | }
|
99 | 114 |
|
100 | 115 | template <size_t N>
|
101 | 116 | void Time(
|
102 | 117 | std::function<void()> action, std::function<void()> setup = [] {},
|
103 | 118 | std::string_view prefix = "") {
|
104 |
| - wpi::array<units::nanosecond_t, N> durations(wpi::empty_array); |
| 119 | + std::vector<units::nanosecond_t> durations{N}; |
105 | 120 |
|
106 | 121 | for (size_t i = 0; i < N; ++i) {
|
107 | 122 | setup();
|
@@ -130,32 +145,7 @@ void TimeSuite(
|
130 | 145 | }
|
131 | 146 | }
|
132 | 147 |
|
133 |
| -template <size_t N> |
134 |
| -void TestArray() { |
135 |
| - fmt::print("TestArray: N = {}\n", N); |
136 |
| - std::fflush(stdout); |
137 |
| - wpi::array<units::nanosecond_t, N> array_a(wpi::empty_array); |
138 |
| - for (size_t i = 0; i < N; ++i) { |
139 |
| - array_a[i] = 0_ns; |
140 |
| - } |
141 |
| - |
142 |
| - [[ maybe_unused ]] std::array<units::nanosecond_t, N> array_b{array_a}; |
143 |
| - |
144 |
| - wpi::print("{}\n", array_b[0]); |
145 |
| -} |
146 |
| - |
147 | 148 | TEST(TimeTest, Time) {
|
148 |
| - fmt::print("Testing 2**10 + 1\n"); |
149 |
| - std::fflush(stdout); |
150 |
| - TestArray<(1 << 10) + 1>(); |
151 |
| - |
152 |
| - fmt::print("Testing 2**12 + 1\n"); |
153 |
| - std::fflush(stdout); |
154 |
| - TestArray<(1 << 12) + 1>(); |
155 |
| - |
156 |
| - fmt::print("Testing 2**16 + 1\n"); |
157 |
| - std::fflush(stdout); |
158 |
| - TestArray<(1 << 16) + 1>(); |
159 | 149 | {
|
160 | 150 | frc::DifferentialDriveOdometry odometry{frc::Rotation2d{}, 0_m, 0_m,
|
161 | 151 | frc::Pose2d{}};
|
|
0 commit comments