> A language’s type system doesn’t need to model every possible type of guarantee

Actually this is the exact point of a type system. Why would you want to write unit tests for stuff the compiler can guarantee for you at the type system level?