add a self test function