You are correct that there are 2^16 possible input values for Not16.
Test Cases is a better description of the inputs used in the test scripts. The dilemma when writing test code is that very quickly, the possible number of test cases grows beyond the possibility of exhaustive testing. Consider the Mux8Way16 which has 8 16-bit data inputs and a 3-bit select input for a total of 131 inputs. At 1,000,000 tests per second, it would take about 10^26 years to exhaustively test the part!
The test engineer needs to determine what are likely failure scenarios for the part and build an appropriate set of test cases to catch those failures.
Think about Not16 and the way it is normally written -- using 16 tested and verified Nots. The things that can commonly go wrong are: Not has not been implemented, missing one or more of the Nots, and typos in subscripts.
If I were to write a test script for Not16, here's what I've had tested:
0000000000000000 -> 1111111111111111 Test that all output bits are connected and that Not has been implemented.
1111111111111111 -> 0000000000000000 Test that all input bits are connected.
0000000000000001 -> 1111111111111110 Test that each input bit affects the correct output bit.
0000000000000010 -> 1111111111111101
0000000000000100 -> 1111111111111011
0000000000001000 -> 1111111111110111
0000000000010000 -> 1111111111101111
0000000000100000 -> 1111111111011111
0000000001000000 -> 1111111110111111
0000000010000000 -> 1111111101111111
0000000100000000 -> 1111111011111111
0000001000000000 -> 1111110111111111
0000010000000000 -> 1111101111111111
0000100000000000 -> 1111011111111111
0001000000000000 -> 1110111111111111
0010000000000000 -> 1101111111111111
0100000000000000 -> 1011111111111111
1000000000000000 -> 0111111111111111
If the test was intended for a real hardware part, I'd include a "walking 0's" test -- the opposite of the "walking 1's" test used above -- so that the individual Not gates would have been tested as well.
--Mark