add reflect and type test