/* * Copyright 2025 Valve Corporation * SPDX-License-Identifier: MIT */ #include #include #include "macros.h" #include "ralloc.h" #include "range_minimum_query.h" static uint32_t rmq_naive(struct range_minimum_query_table *const table, uint32_t left_idx, uint32_t right_idx) { uint32_t result = UINT32_MAX; for (uint32_t i = left_idx; i < right_idx; i++) { result = MIN2(result, table->table[i]); } return result; } TEST(range_minimum_query_test, range_minimum_query_test) { void* context = ralloc_context(nullptr); std::mt19937 gen(1337); struct range_minimum_query_table table; range_minimum_query_table_init(&table); for (uint32_t width = 0; width < 256; width++) { range_minimum_query_table_resize(&table, context, width); std::uniform_int_distribution<> distrib(0, 100); for (uint32_t i = 0; i < width; i++) { table.table[i] = distrib(gen); // printf("%i\n", table.table[i]); } range_minimum_query_table_preprocess(&table); for (uint32_t i = 0; i < width; i++) { for (uint32_t j = i + 1; j < width; j++) { // printf("%i, %i\n", i, j); EXPECT_EQ(range_minimum_query(&table, i, j), rmq_naive(&table, i, j)); } } } ralloc_free(context); }