Fix reference assembly.
[lightning.git] / slice_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         "io/ioutil"
9         "os"
10         "os/exec"
11
12         "github.com/kshedden/gonpy"
13         "gopkg.in/check.v1"
14 )
15
16 type sliceSuite struct{}
17
18 var _ = check.Suite(&sliceSuite{})
19
20 func (s *sliceSuite) TestImportAndSlice(c *check.C) {
21         tmpdir := c.MkDir()
22
23         err := ioutil.WriteFile(tmpdir+"/chr1-12-100.bed", []byte("chr1\t12\t100\ttest.1\n"), 0644)
24         c.Check(err, check.IsNil)
25
26         c.Log("=== import testdata/ref ===")
27         exited := (&importer{}).RunCommand("import", []string{
28                 "-local=true",
29                 "-tag-library", "testdata/tags",
30                 "-output-tiles",
31                 "-save-incomplete-tiles",
32                 "-o", tmpdir + "/library1.gob",
33                 "testdata/ref.fasta",
34         }, nil, os.Stderr, os.Stderr)
35         c.Assert(exited, check.Equals, 0)
36
37         c.Log("=== import testdata/pipeline1 ===")
38         exited = (&importer{}).RunCommand("import", []string{
39                 "-local=true",
40                 "-tag-library", "testdata/tags",
41                 "-output-tiles",
42                 "-o", tmpdir + "/library2.gob",
43                 "testdata/pipeline1",
44         }, nil, os.Stderr, os.Stderr)
45         c.Assert(exited, check.Equals, 0)
46
47         c.Log("=== merge ===")
48         exited = (&merger{}).RunCommand("merge", []string{
49                 "-local=true",
50                 "-o", tmpdir + "/library.gob",
51                 tmpdir + "/library1.gob",
52                 tmpdir + "/library2.gob",
53         }, nil, os.Stderr, os.Stderr)
54         c.Assert(exited, check.Equals, 0)
55
56         input := tmpdir + "/library.gob"
57         slicedir := c.MkDir()
58
59         c.Log("=== slice ===")
60         exited = (&slicecmd{}).RunCommand("slice", []string{
61                 "-local=true",
62                 "-input-dir=" + input,
63                 "-output-dir=" + slicedir,
64                 "-tags-per-file=2",
65         }, nil, os.Stderr, os.Stderr)
66         c.Check(exited, check.Equals, 0)
67         out, _ := exec.Command("find", slicedir, "-ls").CombinedOutput()
68         c.Logf("%s", out)
69
70         c.Log("=== slice-numpy ===")
71         npydir := c.MkDir()
72         exited = (&sliceNumpy{}).RunCommand("slice-numpy", []string{
73                 "-local=true",
74                 "-input-dir=" + slicedir,
75                 "-output-dir=" + npydir,
76         }, nil, os.Stderr, os.Stderr)
77         c.Check(exited, check.Equals, 0)
78         out, _ = exec.Command("find", npydir, "-ls").CombinedOutput()
79         c.Logf("%s", out)
80
81         f, err := os.Open(npydir + "/matrix.0000.npy")
82         c.Assert(err, check.IsNil)
83         defer f.Close()
84         npy, err := gonpy.NewReader(f)
85         c.Assert(err, check.IsNil)
86         c.Check(npy.Shape, check.DeepEquals, []int{2, 4})
87         variants, err := npy.GetInt16()
88         if c.Check(variants, check.HasLen, 8) {
89                 c.Check(variants[4:], check.DeepEquals, []int16{-1, -1, 1, 1}) // TODO: check first row too, when stable
90         }
91
92         annotations, err := ioutil.ReadFile(npydir + "/matrix.0000.annotations.csv")
93         c.Assert(err, check.IsNil)
94         c.Logf("%s", annotations)
95         for _, s := range []string{
96                 "chr1:g.161A>T",
97                 "chr1:g.178A>T",
98                 "chr1:g.1_3delinsGGC",
99                 "chr1:g.222_224del",
100         } {
101                 c.Check(string(annotations), check.Matches, "(?ms).*"+s+".*")
102         }
103 }