MCPcopy Index your code
hub / github.com/RustPython/RustPython / test_binomialvariate

Method test_binomialvariate

Lib/test/test_random.py:1100–1154  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1098 self.assertEqual(variate(*args), expected)
1099
1100 def test_binomialvariate(self):
1101 B = random.binomialvariate
1102
1103 # Cover all the code paths
1104 with self.assertRaises(ValueError):
1105 B(n=-1) # Negative n
1106 with self.assertRaises(ValueError):
1107 B(n=1, p=-0.5) # Negative p
1108 with self.assertRaises(ValueError):
1109 B(n=1, p=1.5) # p > 1.0
1110 self.assertEqual(B(0, 0.5), 0) # n == 0
1111 self.assertEqual(B(10, 0.0), 0) # p == 0.0
1112 self.assertEqual(B(10, 1.0), 10) # p == 1.0
1113 self.assertTrue(B(1, 0.3) in {0, 1}) # n == 1 fast path
1114 self.assertTrue(B(1, 0.9) in {0, 1}) # n == 1 fast path
1115 self.assertTrue(B(1, 0.0) in {0}) # n == 1 fast path
1116 self.assertTrue(B(1, 1.0) in {1}) # n == 1 fast path
1117
1118 # BG method very small p
1119 self.assertEqual(B(5, 1e-18), 0)
1120
1121 # BG method p <= 0.5 and n*p=1.25
1122 self.assertTrue(B(5, 0.25) in set(range(6)))
1123
1124 # BG method p >= 0.5 and n*(1-p)=1.25
1125 self.assertTrue(B(5, 0.75) in set(range(6)))
1126
1127 # BTRS method p <= 0.5 and n*p=25
1128 self.assertTrue(B(100, 0.25) in set(range(101)))
1129
1130 # BTRS method p > 0.5 and n*(1-p)=25
1131 self.assertTrue(B(100, 0.75) in set(range(101)))
1132
1133 # Statistical tests chosen such that they are
1134 # exceedingly unlikely to ever fail for correct code.
1135
1136 # BG code path
1137 # Expected dist: [31641, 42188, 21094, 4688, 391]
1138 c = Counter(B(4, 0.25) for i in range(100_000))
1139 self.assertTrue(29_641 <= c[0] <= 33_641, c)
1140 self.assertTrue(40_188 <= c[1] <= 44_188)
1141 self.assertTrue(19_094 <= c[2] <= 23_094)
1142 self.assertTrue(2_688 <= c[3] <= 6_688)
1143 self.assertEqual(set(c), {0, 1, 2, 3, 4})
1144
1145 # BTRS code path
1146 # Sum of c[20], c[21], c[22], c[23], c[24] expected to be 36,214
1147 c = Counter(B(100, 0.25) for i in range(100_000))
1148 self.assertTrue(34_214 <= c[20]+c[21]+c[22]+c[23]+c[24] <= 38_214)
1149 self.assertTrue(set(c) <= set(range(101)))
1150 self.assertEqual(c.total(), 100_000)
1151
1152 # Demonstrate the BTRS works for huge values of n
1153 self.assertTrue(19_000_000 <= B(100_000_000, 0.2) <= 21_000_000)
1154 self.assertTrue(89_000_000 <= B(100_000_000, 0.9) <= 91_000_000)
1155
1156
1157 def test_von_mises_range(self):

Callers

nothing calls this directly

Calls 7

totalMethod · 0.95
CounterClass · 0.90
setFunction · 0.85
assertTrueMethod · 0.80
BClass · 0.70
assertRaisesMethod · 0.45
assertEqualMethod · 0.45

Tested by

no test coverage detected