D047 - A function is asked whether it reads its arguments, separately from whether it is right
Status: decided, and it changed the reading of an existing run.
A platform that has not implemented a function resolves it to a stub
returning zero. A platform that has implemented it badly returns
something wrong. Both produce the same record - wcslen
returned 0, atol returned 0 - and they need opposite work:
one is "write this", the other is "you have a bug". Twenty-five failures
in one run were indistinguishable for this reason, and the best that
could honestly be said about them was "probably stubs".
007-responsive removes the "probably". It calls each
function twice with inputs whose answers must differ, and
compares the two results to each other rather than to
an expected value:
strlen("a") and strlen("abcdef") must differ
toupper('a') and toupper('z') must differ
strcmp("a","b") and strcmp("b","a") must have opposite signs
A stub returns the same value both times, whatever it is. An implementation that is merely wrong still varies with its input. The verdict therefore needs no knowledge of the correct answer, which is what makes it hold where an expectation could be argued with.
First run said: strlen and
strcmp respond; the other ten are silent and every one
returns zero. So that emulator implements two of twelve and stubs the
rest - and the twenty-five failures elsewhere are mostly absence, not
incorrectness.
It runs before every behavioural section, because it changes how their failures read.
What it does not claim. Responding is not correct; a function that varies with its input has only proven it is looking. And a sufficiently clever stub could vary and still be a stub - nothing here can see that, and pretending otherwise would be the same sin this section exists to correct.