better getopt, with test