Fix wrong index in chunk>0 case.
[lightning.git] / mask_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         "math/rand"
9         "testing"
10
11         "gopkg.in/check.v1"
12 )
13
14 type maskSuite struct{}
15
16 var _ = check.Suite(&maskSuite{})
17
18 func (s *maskSuite) TestMask(c *check.C) {
19         m := mask{}
20         for i := 0; i < 1000000; i++ {
21                 start := rand.Int() % 100000
22                 end := rand.Int()%100000 + start
23                 if start <= 9000 && end >= 8000 ||
24                         start <= 8 && end >= 4 ||
25                         start <= 1 {
26                         continue
27                 }
28                 m.Add("chr1", start, end)
29         }
30         m.Add("chr1", 1200, 3400)
31         m.Add("chr1", 5600, 7800)
32         m.Add("chr1", 5300, 7900)
33         m.Add("chr1", 9900, 9900)
34         m.Add("chr1", 1, 1)
35         m.Add("chr1", 0, 0)
36         m.Add("chr1", 2, 2)
37         m.Add("chr1", 9, 9)
38         m.Freeze()
39         c.Check(m.Check("chr1", 1, 1), check.Equals, true)
40         c.Check(m.Check("chr1", 4, 8), check.Equals, false)
41         c.Check(m.Check("chr1", 7800, 8000), check.Equals, true)
42         c.Check(m.Check("chr1", 8000, 9000), check.Equals, false)
43         c.Check(m.Check("chr1999", 1, 1), check.Equals, false)
44 }
45
46 func BenchmarkMask1000(b *testing.B) {
47         benchmarkMask(b, 1000)
48 }
49
50 func BenchmarkMask10000(b *testing.B) {
51         benchmarkMask(b, 10000)
52 }
53
54 func BenchmarkMask100000(b *testing.B) {
55         benchmarkMask(b, 100000)
56 }
57
58 func BenchmarkMask1000000(b *testing.B) {
59         benchmarkMask(b, 1000000)
60 }
61
62 func benchmarkMask(b *testing.B, size int) {
63         m := mask{}
64         for i := 0; i < size; i++ {
65                 start := rand.Int() % 10000000
66                 end := rand.Int()%300 + start
67                 m.Add("chrB", start, end)
68         }
69         m.Freeze()
70         for n := 0; n < b.N; n++ {
71                 start := rand.Int() % 10000000
72                 end := rand.Int()%300 + start
73                 m.Check("chrB", start, end)
74         }
75 }