run setup inline so fn and teardown have access to it's closed scope