D051 - Thirty census names promoted to behavioural checks, all of them settled by a document

Status: decided.

The census counts a symbol's presence and claims nothing about what it does. That is the right trade for the vendor surface, where the functions are documented and their exact behaviour for a given input generally is not - an expectation there is an assumption however sensible.

The C library half is different: ISO C and POSIX settle it. A name sitting in the census when a public document says exactly what it must return is coverage left on the table, and every one promoted carries OBS_FROM_SPEC rather than OBS_FROM_ASSUMED. Eleven new checks, and the ratio of settled expectations to assumed ones moves the right way.

They are chosen for having exact answers. Every value compared against is exactly representable in binary floating point - log2(8) is 3, exp(0) is 1, strtod("2.5") is 2.5 - so the comparisons stay exact and need no tolerance. Where the true answer is not representable, the function is left out: asin(1) is pi/2, and checking it would mean picking an epsilon, which is inventing a specification nobody wrote and building the one place a wrong answer can hide forever.

They are chosen for having a wrong answer that looks right. Each check aims at a specific plausible failure rather than at the happy path:

All eleven pass under make host against glibc. That is not a formality: the rule exists because a probe whose own expectation is wrong reports a working implementation as broken, and it has caught exactly that twice - most memorably a responsiveness probe built on fmod(7, 4) and fmod(11, 4), which are both 3.