Captain Bob, 2026-11-12: "Build an appropriate test harness! Love the idea." The kernel had no tests below the boots, so defects QEMU cannot provoke could not be tested first. Plan: docs/v4.0.0/plans/2026-11-12-kernel-host-tests.md. kernel/tests/: one host program per kernel source, built with that source as it is, the kernel's flags (-std=c99 -Wall -Wextra -Werror), and fakes -- the console captured line by line, a deterministic RNG that can fail, and a RAM disk whose reads, writes or flushes fail at chosen 1 KiB blocks. make -C kernel/tests test runs them; SRC_<test>= runs a test against other code, which is how a test is seen to fail against the code before a fix. test_gpt.c, 12 checks: a table written and read back; 16, 17 and 18 used entries against max 16 and an entry out of range after the 16th (#180); the RNG, the first write, a later write and a flush failing (#168). Against gpt.c before #168 and #180: 4 failures, each defect caught. Now: 0. Both runs in logs/.../kernel-tests/. Not yet a protocol stage: to rule (the plan, step 5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
22 lines
821 B
C
22 lines
821 B
C
/* SPDX-License-Identifier: LicenseRef-Starship-1.0
|
|
* Copyright (c) 2023-2026 Robert A. James
|
|
*/
|
|
/* harness.h -- the kernel host tests' checks (docs/v4.0.0/plans/2026-11-12-kernel-host-tests.md).
|
|
*
|
|
* As v4's tests: CHECK(cond, fmt, ...) counts a check, prints FAIL with the file, line and message
|
|
* when it fails; DONE() prints "N checks, M failures" and is main's return value.
|
|
*/
|
|
#ifndef KERNEL_TESTS_HARNESS_H
|
|
#define KERNEL_TESTS_HARNESS_H
|
|
|
|
#include <stdio.h>
|
|
|
|
static int harness_checks = 0, harness_failures = 0;
|
|
|
|
#define CHECK(c, ...) do { harness_checks++; if (!(c)) { harness_failures++; \
|
|
printf("FAIL %s:%d: ", __FILE__, __LINE__); printf(__VA_ARGS__); printf("\n"); } } while (0)
|
|
|
|
#define DONE() (printf(" %d checks, %d failures\n", harness_checks, harness_failures), harness_failures != 0)
|
|
|
|
#endif
|