def test_logic(self, member, logic, operator='eq'):
        """Find the type of test to run on member, and perform that test"""

        if type(logic) is dict:
            return self.test_dict(member, logic)
        elif type(logic) is Logic_AND:
            return self.test_and(member, logic)
        elif type(logic) is Logic_OR:
            return self.test_or(member, logic)
        elif type(logic) is Logic_Operator:
            return self.test_operator(member, logic)
        else:
            # compare the value, I think using Logic_Operator() here
            # allows completeness in test_operator(), but I can't put
            # my finger on why for the minute
            return self.test_operator(member,
                Logic_Operator({operator: logic}))