def test_lower_boundary(self): n = 2 p1 = 0.333 # 33.3% p2 = 0.334 # 33.4% self.assertEqual(rank(p1, n), 1) # can't use assertEqual here b/c floating point numbers self.assertAlmostEqual(rank(p2, n), p2 * (n + 1))
def test_upper_boundary(self): n = 4 p1 = 0.80 # 80% p2 = 0.799 # 79.9% # should trigger the 3rd case self.assertEqual(rank(p1, n), n) # should trigger the second case self.assertAlmostEqual(rank(p2, n), p2 * (n + 1))
def test_median(self): for n in range(1, 14): with self.subTest(size=n): x = rank(0.5, n) midpoint = (n + 1) / 2 self.assertEqual(x, midpoint)
def test_excluded_percentile(self): with self.assertRaises(PercentileBoundsError): rank(0, 100) with self.assertRaises(PercentileBoundsError): rank(1, 100)
def test_one_sample_size(self): for p in range(1, 100): with self.subTest(p=p): x = rank(p / 100, 1) self.assertEqual(x, 1)
def test_zero_sample_size(self): for p in range(1, 10): x = rank(p / 10, 0) self.assertEqual(x, 1)