New module (inference_words_test.c, Module 26) covers exactly the 8 words proof/COVERAGE.md marks proof-covered in inference_words.c (out of 20 registered): the 5 output accessors (INFER-WINDOW@/DECAY@/ VARIANCE@/FIT@/EARLY-EXIT@), INFER-RUN (populates what they read), and Q.VARIANCE/INFER-DECAY-SLOPE/INFER-WINDOW-WIDTH (array-based primitives, using HERE as multi-cell scratch memory). Deliberately not the L8 Jacquard or Bayesian-posterior words in the same file -- not proof-covered, out of this cluster's scope. Caught and fixed a contract-selection mistake before booting: copied CONTRACT_PHYSICS_TRANSPARENT from the Q48.16 cluster without checking whether it fit. It doesn't -- these words are specifically about reading physics state (dictionary heat, rolling window), so asserting A4' transparency on them would test an invariant they deliberately don't have. Switched to CONTRACT_NONE with an explanatory comment. Boot-verified: zero warnings, all 9 suite entries pass, FINAL TEST SUMMARY 1031->1040 total / 993->1002 passed (+9 exactly), 0 failed, contract checks (A4'/A1) still report "all passed" -- confirms the CONTRACT_NONE fix actually avoided the violation, not just silenced it. Cluster 4 of 4 (final one) left: physics freeze/diagnostic, 5 words. Full writeup in FABRIC-2.md Section J. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
175 lines
5.3 KiB
C
175 lines
5.3 KiB
C
/*
|
||
StarForth — Steady-State Virtual Machine Runtime
|
||
|
||
Copyright (c) 2023–2025 Robert A. James
|
||
All rights reserved.
|
||
|
||
This file is part of the StarForth project.
|
||
|
||
Licensed under the StarForth License, Version 1.0 (the "License");
|
||
you may not use this file except in compliance with the License.
|
||
|
||
You may obtain a copy of the License at:
|
||
https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
|
||
|
||
This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
express or implied, including but not limited to the warranties of
|
||
merchantability, fitness for a particular purpose, and noninfringement.
|
||
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|
||
|
||
StarForth — Steady-State Virtual Machine Runtime
|
||
Copyright (c) 2023–2025 Robert A. James
|
||
All rights reserved.
|
||
|
||
This file is part of the StarForth project.
|
||
|
||
Licensed under the StarForth License, Version 1.0 (the "License");
|
||
you may not use this file except in compliance with the License.
|
||
|
||
You may obtain a copy of the License at:
|
||
https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
|
||
|
||
This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||
express or implied, including but not limited to the warranties of
|
||
merchantability, fitness for a particular purpose, and noninfringement.
|
||
|
||
See the License for the specific language governing permissions and
|
||
limitations under the License.
|
||
|
||
*/
|
||
|
||
#ifndef TEST_RUNNER_H
|
||
#define TEST_RUNNER_H
|
||
|
||
#include "../../../include/vm.h"
|
||
#include <stdint.h>
|
||
|
||
/**
|
||
* @brief Structure holding test execution statistics
|
||
*/
|
||
typedef struct {
|
||
int total_tests; /**< Total number of tests executed */
|
||
int total_pass; /**< Number of passed tests */
|
||
int total_fail; /**< Number of failed tests */
|
||
int total_skip; /**< Number of skipped tests */
|
||
int total_error; /**< Number of tests that resulted in errors */
|
||
} TestStats;
|
||
|
||
/**
|
||
* @brief Structure representing a test module
|
||
*/
|
||
typedef struct {
|
||
const char *module_name; /**< Name of the test module */
|
||
void *reserved; /**< Reserved for future use */
|
||
int reserved_int; /**< Reserved integer value */
|
||
|
||
void (*run_module_tests)(VM *vm); /**< Function pointer to run module tests */
|
||
} TestModule;
|
||
|
||
/* Global test statistics - extern declaration */
|
||
extern TestStats global_test_stats;
|
||
|
||
/*
|
||
* Same-TU accumulator — use instead of direct struct access from other TUs.
|
||
* Direct extern struct access generates R_X86_64_REX_GOTPCRELX which the
|
||
* PE linker does not relax, causing double-dereference in -fPIC PE builds.
|
||
*/
|
||
void test_stats_accumulate(int tests, int pass, int fail, int skip, int error);
|
||
|
||
/*
|
||
* @brief Run tests for stack manipulation words
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_stack_words_tests(VM * vm);
|
||
|
||
void run_return_stack_words_tests(VM * vm);
|
||
void run_memory_words_tests(VM * vm);
|
||
void run_arithmetic_words_tests(VM * vm);
|
||
void run_logical_words_tests(VM * vm);
|
||
void run_mixed_arithmetic_words_tests(VM * vm);
|
||
void run_double_words_tests(VM * vm);
|
||
void run_dictionary_words_tests(VM * vm);
|
||
void run_io_words_tests(VM * vm);
|
||
void run_format_words_tests(VM * vm);
|
||
void run_string_words_tests(VM * vm);
|
||
void run_dictionary_manipulation_words_tests(VM * vm);
|
||
void run_vocabulary_words_tests(VM * vm);
|
||
void run_block_words_tests(VM * vm);
|
||
void run_system_words_tests(VM * vm);
|
||
void run_defining_words_tests(VM * vm);
|
||
void run_control_words_tests(VM * vm);
|
||
void run_starforth_words_tests(VM * vm);
|
||
void run_acl_words_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Run tests for Q48.16 fixed-point words (Module 25)
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_q48_words_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Run tests for the proof-covered subset of inference-engine words (Module 26)
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_inference_words_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Run tests for Mama FORTH vocabulary (capsule system M7.1)
|
||
* @param vm Pointer to the VM instance
|
||
*
|
||
* In hosted builds, all tests are skipped (Mama words are kernel-only).
|
||
* In kernel builds, tests validate capsule enumeration and VM birth.
|
||
*/
|
||
void run_mama_forth_words_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Enable benchmark mode for performance testing
|
||
* @param iterations Number of iterations for benchmark tests
|
||
*/
|
||
void enable_benchmark_mode(int iterations);
|
||
|
||
/*
|
||
* @brief Execute stress tests
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_stress_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Execute integration tests
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_integration_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Run all available tests
|
||
* @param vm Pointer to the VM instance
|
||
*/
|
||
void run_all_tests(VM * vm);
|
||
|
||
/*
|
||
* @brief Run tests for a specific module
|
||
* @param vm Pointer to the VM instance
|
||
* @param module_name Name of the module to test
|
||
*/
|
||
void run_module_tests(VM *vm, const char *module_name);
|
||
|
||
/*
|
||
* @brief Run tests for a specific word
|
||
* @param vm Pointer to the VM instance
|
||
* @param word_name Name of the word to test
|
||
*/
|
||
void run_word_tests(VM *vm, const char *word_name);
|
||
|
||
/**
|
||
* @brief Run ultra-comprehensive break-me diagnostic suite
|
||
* @param vm Pointer to the VM instance
|
||
*
|
||
* Executes the most exhaustive test battery ever designed for StarForth,
|
||
* generates a detailed markdown report in docs/BREAK_ME_REPORT.md,
|
||
* and includes a surprise easter egg at the end.
|
||
*/
|
||
void run_break_me_tests(VM * vm);
|
||
|
||
#endif /* TEST_RUNNER_H */ |