Add benchmark.

This commit is contained in:
2025-12-23 08:28:10 +00:00
parent 44b7994f8d
commit 92eeca62c9
3 changed files with 53 additions and 0 deletions

View File

@@ -120,3 +120,4 @@ add_library("Aaru.Checksums.Native" SHARED adler32.h adler32.c crc16.h crc16.c c
crc16_neon.c)
add_subdirectory(tests)
add_subdirectory(benchmarks)

23
benchmarks/CMakeLists.txt Normal file
View File

@@ -0,0 +1,23 @@
cmake_minimum_required(VERSION 3.15)
project(benchmarks CXX)
include(FetchContent)
FetchContent_Declare(
benchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG v1.8.4
)
FetchContent_MakeAvailable(benchmark)
add_executable(bench_spamsum bench_spamsum.cpp)
target_link_libraries(bench_spamsum PRIVATE benchmark::benchmark "Aaru.Checksums.Native")
target_include_directories(bench_spamsum PRIVATE ${CMAKE_SOURCE_DIR})
# Copy DLL to benchmark output directory after build (Windows)
if (WIN32)
add_custom_command(TARGET bench_spamsum POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"$<TARGET_FILE_DIR:Aaru.Checksums.Native>/$<TARGET_FILE_NAME:Aaru.Checksums.Native>"
$<TARGET_FILE_DIR:bench_spamsum>
)
endif()

View File

@@ -0,0 +1,29 @@
#include <benchmark/benchmark.h>
#include "library.h"
#include "spamsum.h"
#include <cstdlib>
#include <cstring>
#include <random>
#define TEST_DATA_SIZE (1024 * 1024)
static void BM_spamsum_update(benchmark::State& state) {
spamsum_ctx *ctx = spamsum_init();
uint8_t *data = (uint8_t*)malloc(TEST_DATA_SIZE);
// Fill buffer with random data
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(0, 255);
for (size_t i = 0; i < TEST_DATA_SIZE; ++i) {
data[i] = static_cast<uint8_t>(dis(gen));
}
for (auto _ : state) {
spamsum_update(ctx, data, TEST_DATA_SIZE);
}
free(data);
spamsum_free(ctx);
}
BENCHMARK(BM_spamsum_update)->MinTime(5.0)->Unit(benchmark::kMillisecond);
BENCHMARK_MAIN();