LibTest: Change #define-d constants into constexpr and a runtime flag

MAX_GENERATED_VALUES_PER_TEST is now the --randomized_runs flag:
$ ./Build/lagom/bin/TestGenerator --randomized_runs 1000

It's sometimes useful to try larger numbers for it instead of the
default of 100.

MAX_GEN_ATTEMPTS_PER_VALUE is now a constexpr. It's not usually needed
to tweak this value; we can recompile with a different value on the rare
occasion.
This commit is contained in:
Martin Janiczek 2023-10-27 11:47:43 +02:00 committed by Andrew Kaster
parent ed60a032a8
commit 4fc1daa69f
Notes: sideshowbarker 2024-07-17 18:06:52 +09:00
4 changed files with 23 additions and 18 deletions

View file

@ -30,6 +30,8 @@ void set_randomness_source(Randomized::RandomnessSource);
bool is_reporting_enabled();
void enable_reporting();
void disable_reporting();
u64 randomized_runs();
}
#define EXPECT_EQ(a, b) \

View file

@ -7,22 +7,13 @@
#pragma once
#include <LibTest/Macros.h> // intentionally first -- we redefine VERIFY and friends in here
#include <LibTest/Randomized/RandomnessSource.h>
#include <LibTest/Randomized/Shrink.h>
#include <AK/DeprecatedString.h>
#include <AK/Function.h>
#include <AK/NonnullRefPtr.h>
#include <AK/RefCounted.h>
#ifndef MAX_GENERATED_VALUES_PER_TEST
# define MAX_GENERATED_VALUES_PER_TEST 100
#endif
#ifndef MAX_GEN_ATTEMPTS_PER_VALUE
# define MAX_GEN_ATTEMPTS_PER_VALUE 15
#endif
#include <LibTest/Macros.h>
#include <LibTest/Randomized/RandomnessSource.h>
#include <LibTest/Randomized/Shrink.h>
namespace Test {
@ -54,8 +45,12 @@ public:
static NonnullRefPtr<TestCase> randomized(DeprecatedString const& name, TestFunction&& test_function)
{
using namespace Randomized;
constexpr u8 MAX_GEN_ATTEMPTS_PER_VALUE = 15;
TestFunction test_case_function = [test_function = move(test_function)]() {
for (u32 i = 0; i < MAX_GENERATED_VALUES_PER_TEST; ++i) {
u64 max_randomized_runs = randomized_runs();
for (u64 i = 0; i < max_randomized_runs; ++i) {
bool generated_successfully = false;
u8 gen_attempt;
for (gen_attempt = 0; gen_attempt < MAX_GEN_ATTEMPTS_PER_VALUE && !generated_successfully; ++gen_attempt) {
@ -100,7 +95,7 @@ public:
return;
}
}
// MAX_GENERATED_VALUES_PER_TEST values generated, all passed the test.
// All randomized_runs() values generated + passed the test.
};
return make_ref_counted<TestCase>(name, move(test_case_function), false);
}

View file

@ -5,10 +5,9 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibTest/Macros.h> // intentionally first -- we redefine VERIFY and friends in here
#include <AK/Function.h>
#include <LibCore/ArgsParser.h>
#include <LibTest/Macros.h>
#include <LibTest/TestResult.h>
#include <LibTest/TestSuite.h>
#include <math.h>
@ -64,6 +63,12 @@ Randomized::RandomnessSource& randomness_source()
return TestSuite::the().randomness_source();
}
// Declared in Macros.h
u64 randomized_runs()
{
return TestSuite::the().randomized_runs();
}
// Declared in TestCase.h
void add_test_case_to_suite(NonnullRefPtr<TestCase> const& test_case)
{
@ -126,6 +131,7 @@ int TestSuite::main(DeprecatedString const& suite_name, Span<StringView> argumen
args_parser.add_option(do_tests_only, "Only run tests.", "tests", 0);
args_parser.add_option(do_benchmarks_only, "Only run benchmarks.", "bench", 0);
args_parser.add_option(m_benchmark_repetitions, "Number of times to repeat each benchmark (default 1)", "benchmark_repetitions", 0, "N");
args_parser.add_option(m_randomized_runs, "Number of times to run each RANDOMIZED_TEST_CASE (default 100)", "randomized_runs", 0, "RUNS");
args_parser.add_option(do_list_cases, "List available test cases.", "list", 0);
args_parser.add_positional_argument(search_string, "Only run matching cases.", "pattern", Core::ArgsParser::Required::No);
args_parser.parse(arguments);

View file

@ -7,11 +7,10 @@
#pragma once
#include <LibTest/Macros.h> // intentionally first -- we redefine VERIFY and friends in here
#include <AK/DeprecatedString.h>
#include <AK/Function.h>
#include <AK/Vector.h>
#include <LibTest/Macros.h>
#include <LibTest/Randomized/RandomnessSource.h>
#include <LibTest/TestCase.h>
#include <LibTest/TestResult.h>
@ -61,6 +60,8 @@ public:
void enable_reporting() { m_reporting_enabled = true; }
void disable_reporting() { m_reporting_enabled = false; }
u64 randomized_runs() { return m_randomized_runs; }
private:
static TestSuite* s_global;
Vector<NonnullRefPtr<TestCase>> m_cases;
@ -68,6 +69,7 @@ private:
u64 m_benchtime = 0;
DeprecatedString m_suite_name;
u64 m_benchmark_repetitions = 1;
u64 m_randomized_runs = 100;
Function<void()> m_setup;
TestResult m_current_test_result = TestResult::NotRun;
Randomized::RandomnessSource m_randomness_source = Randomized::RandomnessSource::live();