def METHOD_NAME(self):
    # check that equal values hash equal
    # exact integers
    for i in range(-1000, 1000):
        self.check_equal_hash(i, float(i))
        self.check_equal_hash(i, D(i))
        self.check_equal_hash(i, F(i))
    # the current hash is based on reduction modulo 2**n-1 for some
    # n, so pay special attention to numbers of the form 2**n and 2**n-1.
    for i in range(100):
        n = 2**i - 1
        if n == int(float(n)):
            self.check_equal_hash(n, float(n))
            self.check_equal_hash(-n, -float(n))
        self.check_equal_hash(n, D(n))
        self.check_equal_hash(n, F(n))
        self.check_equal_hash(-n, D(-n))
        self.check_equal_hash(-n, F(-n))
        n = 2**i
        self.check_equal_hash(n, float(n))
        self.check_equal_hash(-n, -float(n))
        self.check_equal_hash(n, D(n))
        self.check_equal_hash(n, F(n))
        self.check_equal_hash(-n, D(-n))
        self.check_equal_hash(-n, F(-n))
    # random values of various sizes
    for _ in range(1000):
        e = random.randrange(300)
        n = random.randrange(-10**e, 10**e)
        self.check_equal_hash(n, D(n))
        self.check_equal_hash(n, F(n))
        if n == int(float(n)):
            self.check_equal_hash(n, float(n))