@@ -128,7 +128,9 @@ func floatingPointRangeTest<T: BinaryFloatingPoint>(_ type: T.Type)
128
128
RandomTests . test ( " random floating points in ranges " ) {
129
129
floatingPointRangeTest ( Float . self)
130
130
floatingPointRangeTest ( Double . self)
131
+ #if !os(Windows) && (arch(i386) || arch(x86_64))
131
132
floatingPointRangeTest ( Float80 . self)
133
+ #endif
132
134
}
133
135
134
136
// Random Elements from collection
@@ -233,13 +235,18 @@ RandomTests.test("different random number generators") {
233
235
func chi2Test( _ samples: [ Double ] ) -> Bool {
234
236
precondition ( samples. count == 50 , " confidence interval requires 50 samples " )
235
237
let expected = samples. reduce ( 0 , + ) / Double( samples. count)
236
- let cvLow = 23.983 // 0.1% with a degree of freedom of (50 - 1)
237
- let cvHigh = 85.351 // 99.9% with a degree of freedom of (50 - 1)
238
+ // Right tail for 0.0001% (1e-6) with a degree of freedom of (50 -
239
+ // 1). With hundreds of builds a day, this has to be very low to not get too
240
+ // many spurious failures, but obvious problems should still be detected
241
+ // (e.g. an off-by-one that means samples[0] == 0 will result in chi2 =
242
+ // (0-expected)**2/expected + ... > expected, so as long as we've generated
243
+ // more than samples.count * cvHigh (~5500) values, we'll catch it).
244
+ let cvHigh = 111.1
238
245
let chi2 = samples. map {
239
246
( ( $0 - expected) * ( $0 - expected) ) / expected
240
247
} . reduce ( 0 , + )
241
248
242
- if chi2 < cvLow || chi2 > cvHigh {
249
+ if chi2 > cvHigh {
243
250
return false
244
251
} else {
245
252
return true
0 commit comments