Fix AKERR_MAX_ERR_VALUE to cover all AKERR_* codes
AKERR_MAX_ERR_VALUE was AKERR_LAST_ERRNO_VALUE + 15, but the highest defined code, AKERR_BADEXC, is + 17 (AKERR_NOT_IMPLEMENTED is + 16). akerr_name_for_status rejects any status above the max, so those codes could never have a registered name and the AKERR_BADEXC registration in akerr_init was dead code -- a gap found by mutation testing. Bump the max to + 17. - err_maxval: new test asserting the reserved AKERR_* range exceeds the number of AKERR_* codes and that every code is individually indexable. Fails against the old + 15 value (verified), guarding against regression. - err_error_names: now also checks AKERR_BADEXC's name, which the fix makes reachable. Mutation score on src/error.c rises 71% -> 74%: the previously-dead BADEXC registration and the name_for_status upper-bound check are now killable. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -7,9 +7,9 @@
|
||||
* Verify the names are actually installed (mutation testing showed the
|
||||
* registration calls could be deleted without any test noticing).
|
||||
*
|
||||
* Note: AKERR_NOT_IMPLEMENTED and AKERR_BADEXC are intentionally omitted -- they
|
||||
* exceed AKERR_MAX_ERR_VALUE, so akerr_name_for_status cannot store or return
|
||||
* their names (see tests/MUTATION.md).
|
||||
* Note: AKERR_EOF, AKERR_ITERATOR_BREAK and AKERR_NOT_IMPLEMENTED are omitted --
|
||||
* they are valid codes but akerr_init does not register a display name for them,
|
||||
* so akerr_name_for_status returns an empty string rather than a known name.
|
||||
*/
|
||||
|
||||
static const struct {
|
||||
@@ -28,6 +28,7 @@ static const struct {
|
||||
{ AKERR_VALUE, "Value Error" },
|
||||
{ AKERR_RELATIONSHIP, "Relationship Error" },
|
||||
{ AKERR_CIRCULAR_REFERENCE, "Circular Reference Error" },
|
||||
{ AKERR_BADEXC, "Invalid akerr_ErrorContext" },
|
||||
};
|
||||
|
||||
int main(void)
|
||||
|
||||
Reference in New Issue
Block a user