I would also say none of the above.
I will not work for free, unless it is for my benefit. For example if it was to fix an issue on an open source project. If I am applying for a job it is to many and do not have time for working on your project. If payed it would be at the Salary I would be getting if the position was landed.
I have anxiety and most of the time solving a problem requires me to sit and think about it with my music on.
Referrals I would say are great but what about people who have been working in a closed network and have not had a chance to make as many network referral opportunities. I feel like you would close out many developers because of this.
Pair programming can be nice but it is just like any group project. If it was pair programming it would be nice if the person to pair with was working with the company and they could give the okay if the person could work there or not. But I would not base it on just one person's opinion. Possibly multiple people to pair with to have many team members input.
I don't see testing someone as a good way of seeing if they can solve a problem. I don't have a time limit to solve problems at work. But I do finish my work quickly because I am not expected to do so. I work for my respect, I work for myself, and lastly I work for my company to gain as much from me as possible. I would like to work with someone with the same ideals as myself. But this is my opinion.