more elaborated edge cases in precondition check