#1 tested 2 and put in code for all 3. TODO test 3