def METHOD_NAME(self):
    f = dll._testfunc_callback_i_if
    f.restype = c_int
    f.argtypes = None
    MyCallback = CFUNCTYPE(c_int, c_int)
    def callback(value):
        #print "called back with", value
        return value
    cb = MyCallback(callback)
    result = f(self.wrap(-10), self.wrap(cb))
    self.assertEqual(result, -18)
    # test with prototype
    f.argtypes = [c_int, MyCallback]
    cb = MyCallback(callback)
    result = f(self.wrap(-10), self.wrap(cb))
    self.assertEqual(result, -18)
    result = f(self.wrap(-10), self.wrap(cb))
    self.assertEqual(result, -18)
    AnotherCallback = CALLBACK_FUNCTYPE(c_int, c_int, c_int, c_int, c_int)
    # check that the prototype works: we call f with wrong
    # argument types
    cb = AnotherCallback(callback)
    self.assertRaises(ArgumentError, f, self.wrap(-10), self.wrap(cb))