def testEventHash(self):
        a = _Event(0.5, None)
        b = _Event(1, None)
        b2 = _Event(1, None)
        b2._run_at = b._run_at
        b3 = _Event(1, 2)
        b3._run_at = b._run_at
        c = _Event(1, 4)
        c._run_at = b._run_at

        self.assertEqual(hash(a), hash(a))
        self.assertNotEqual(hash(a), hash(b))
        self.assertEqual(hash(b), hash(b2))
        self.assertNotEqual(hash(b), hash(b3))
        self.assertNotEqual(hash(b), hash(c))
    def testEventCmp(self):
        a = _Event(0.5, a_func)
        # b/b2/b3/c have same timing to test comparisons of
        # callback (b==b2 and b!=b3)
        b = _Event(1, b_func)
        b2 = _Event(1, b_func)
        b2._run_at = b._run_at
        b3 = _Event(1, a_func)
        b3._run_at = b._run_at
        c = _Event(1, c_func)
        c._run_at = b._run_at

        self.assertEqual(b, b2)
        self.assertNotEqual(b, b3)
        self.assertTrue(a != b)
        self.assertFalse(b != b2)
        self.assertTrue(b == b2)
        self.assertTrue(a < b)
        self.assertTrue(a <= b)
        self.assertTrue(b > a)
        self.assertTrue(b >= a)

        self.assertFalse(a == b2)
        self.assertFalse(b < a)
        self.assertFalse(b <= a)
        self.assertFalse(a > b)
        self.assertFalse(a >= b)
        self.assertTrue(b3 < c)
        self.assertFalse(c < b3)

        s = sorted([c, a, b, b3])
        self.assertEqual(s, [a, b3, b, c])

        s = "teststring"
        self.assertNotEqual(a, s)
        self.assertEqual(a.__lt__(s), NotImplemented)
        self.assertEqual(a.__ne__(s), True)
        self.assertEqual(a.__eq__(s), False)