PLUM: Preference Learning Plus Test Cases Yields Better Code Language Models