1*61c4878aSAndroid Build Coastguard Worker // Copyright 2022 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker //
3*61c4878aSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker // the License at
6*61c4878aSAndroid Build Coastguard Worker //
7*61c4878aSAndroid Build Coastguard Worker // https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker //
9*61c4878aSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker // the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Worker #include <cstdint>
16*61c4878aSAndroid Build Coastguard Worker #include <string_view>
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker #include "pw_bytes/array.h"
19*61c4878aSAndroid Build Coastguard Worker #include "pw_checksum/crc32.h"
20*61c4878aSAndroid Build Coastguard Worker #include "pw_perf_test/perf_test.h"
21*61c4878aSAndroid Build Coastguard Worker #include "pw_span/span.h"
22*61c4878aSAndroid Build Coastguard Worker
23*61c4878aSAndroid Build Coastguard Worker namespace pw::checksum {
24*61c4878aSAndroid Build Coastguard Worker namespace {
25*61c4878aSAndroid Build Coastguard Worker
26*61c4878aSAndroid Build Coastguard Worker constexpr std::string_view kString =
27*61c4878aSAndroid Build Coastguard Worker "In the beginning the Universe was created. This has made a lot of "
28*61c4878aSAndroid Build Coastguard Worker "people very angry and been widely regarded as a bad move.";
29*61c4878aSAndroid Build Coastguard Worker constexpr auto kBytes = bytes::Array<1, 2, 3, 4, 5, 6, 7, 8, 9>();
30*61c4878aSAndroid Build Coastguard Worker
Crc32OneBitTest(perf_test::State & state,span<const std::byte> data)31*61c4878aSAndroid Build Coastguard Worker void Crc32OneBitTest(perf_test::State& state, span<const std::byte> data) {
32*61c4878aSAndroid Build Coastguard Worker while (state.KeepRunning()) {
33*61c4878aSAndroid Build Coastguard Worker Crc32OneBit::Calculate(data);
34*61c4878aSAndroid Build Coastguard Worker }
35*61c4878aSAndroid Build Coastguard Worker }
36*61c4878aSAndroid Build Coastguard Worker
Crc32FourBitTest(perf_test::State & state,span<const std::byte> data)37*61c4878aSAndroid Build Coastguard Worker void Crc32FourBitTest(perf_test::State& state, span<const std::byte> data) {
38*61c4878aSAndroid Build Coastguard Worker while (state.KeepRunning()) {
39*61c4878aSAndroid Build Coastguard Worker Crc32FourBit::Calculate(data);
40*61c4878aSAndroid Build Coastguard Worker }
41*61c4878aSAndroid Build Coastguard Worker }
42*61c4878aSAndroid Build Coastguard Worker
Crc32EightBitTest(perf_test::State & state,span<const std::byte> data)43*61c4878aSAndroid Build Coastguard Worker void Crc32EightBitTest(perf_test::State& state, span<const std::byte> data) {
44*61c4878aSAndroid Build Coastguard Worker while (state.KeepRunning()) {
45*61c4878aSAndroid Build Coastguard Worker Crc32EightBit::Calculate(data);
46*61c4878aSAndroid Build Coastguard Worker }
47*61c4878aSAndroid Build Coastguard Worker }
48*61c4878aSAndroid Build Coastguard Worker
49*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcOneBitStringTest, Crc32OneBitTest, as_bytes(span(kString)));
50*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcFourBitStringTest, Crc32FourBitTest, as_bytes(span(kString)));
51*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcEightBitStringTest, Crc32EightBitTest, as_bytes(span(kString)));
52*61c4878aSAndroid Build Coastguard Worker
53*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcOneBitBytesTest, Crc32OneBitTest, kBytes);
54*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcFourBitBytesTest, Crc32FourBitTest, kBytes);
55*61c4878aSAndroid Build Coastguard Worker PW_PERF_TEST(CrcEightBitBytesTest, Crc32EightBitTest, kBytes);
56*61c4878aSAndroid Build Coastguard Worker
57*61c4878aSAndroid Build Coastguard Worker } // namespace
58*61c4878aSAndroid Build Coastguard Worker } // namespace pw::checksum
59