Assertion is not to be used unless you get into trouble. Why assert something you certain? If not certain, make it certain instead of mark assertion to hope it certain or guarantee it certain. It is not a guarantee, it is a debug aid. Guarantee is by design, and by unit tests.
for never happen code, use exception. Because u need it even in production. Using assertion for never happen code is probably wrong tool.