I am testing a theoretical hash function, $f()$, which produces n-bits of output.
By the pigeon hole principle, if I run $f(x)$ over a search space of $1+2^n$ values, I will get at least one collision. According to the birthday problem I should get many more collisions than that.
Is there a similar principle that I can determine how many values of $x$ will be needed to ensure with high probability that I have produced all possible $2^n$ values of $f(x)$?
I'm relatively certain that there is no 100% guarantee of obtaining all values, but at least an approximation within a degree of confidence should be possible. Are these approximations only practical when considering specific hashing algorithms?