there are several issues with the original code. In better cases, it would generated undesirable latches. In more realistic cases, it would be removed entirely. Or in the actual case, be an error.
in either case, the type of unary_out is a 4b value. So you will get either 0001, 0001, 0001, or 0001. (or possibly xxx1, xx01, x001 at the start of sim). Just because you don't define an output for a given case doesn't mean it doesn't exist. It will just default to x <= x, which infers a latch in a combinatorial process, or is harmless in a clocked process.