added tests, functors, new operator, decalre_function