Merge branch '19566-glm'
[lightning.git] / chisquare_test.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "fmt"
9
10         "gopkg.in/check.v1"
11 )
12
13 type pvalueSuite struct{}
14
15 var _ = check.Suite(&pvalueSuite{})
16
17 func (s *pvalueSuite) TestPvalue(c *check.C) {
18         a := make([]bool, 54)
19         b := make([]bool, 54)
20         for i := 0; i < 25; i++ {
21                 a[i] = true
22                 b[i] = true
23         }
24         for i := 25; i < 31; i++ {
25                 a[i] = true
26         }
27         for i := 31; i < 40; i++ {
28                 b[i] = true
29         }
30         c.Check(fmt.Sprintf("%.8f", pvalue(a, b)), check.Equals, "0.04147853")
31
32         a = make([]bool, 54)
33         b = make([]bool, 54)
34         for i := 0; i < 25; i++ {
35                 a[i] = true
36                 b[i] = true
37         }
38         c.Check(fmt.Sprintf("%.9f", pvalue(a, b)), check.Equals, "0.000000072")
39         for i := range a {
40                 a[i] = !a[i]
41         }
42         c.Check(fmt.Sprintf("%.9f", pvalue(a, b)), check.Equals, "0.000000573")
43
44         a = []bool{true, true, true, false, true, false, false, false}
45         b = []bool{true, true, true, true, false, false, false, false}
46         c.Check(fmt.Sprintf("%.8f", pvalue(a, b)), check.Equals, "0.31731051")
47         for i := range a {
48                 a[i] = !a[i]
49         }
50         c.Check(fmt.Sprintf("%.8f", pvalue(a, b)), check.Equals, "0.31731051")
51
52         for _, sz := range []int{128, 1024, 4096, 16384} {
53                 c.Logf("sz = %d", sz)
54                 a = make([]bool, sz)
55                 b = make([]bool, sz)
56                 c.Check(fmt.Sprintf("%.8f", pvalue(a, b)), check.Equals, "1.00000000")
57                 for i := 0; i < len(a)/23; i++ {
58                         a[i] = true
59                 }
60                 for i := 0; i < len(a)/2; i++ {
61                         b[i] = true
62                 }
63                 c.Logf("pvalue(a,b) == %e", pvalue(a, b))
64                 c.Logf("pvalue(b,a) == %e", pvalue(b, a))
65                 c.Check(pvalue(a, b), check.Not(check.Equals), float64(0))
66                 c.Check(pvalue(b, a), check.Not(check.Equals), float64(0))
67         }
68 }