9a4e35531c64ab654ee2e1c8bb2993e924c39a2e
[lightning.git] / hgvs / diff_test.go
1 package hgvs
2
3 import (
4         "strings"
5         "testing"
6
7         "gopkg.in/check.v1"
8 )
9
10 func Test(t *testing.T) { check.TestingT(t) }
11
12 type diffSuite struct{}
13
14 var _ = check.Suite(&diffSuite{})
15
16 func (s *diffSuite) TestDiff(c *check.C) {
17         for _, trial := range []struct {
18                 a      string
19                 b      string
20                 expect []string
21         }{
22                 {
23                         a:      "aaaaaaaaaa",
24                         b:      "aaaaCaaaaa",
25                         expect: []string{"5A>C"},
26                 },
27                 {
28                         a:      "aaaacGcaaa",
29                         b:      "aaaaccaaa",
30                         expect: []string{"6del"},
31                 },
32                 {
33                         a:      "aaaacGGcaaa",
34                         b:      "aaaaccaaa",
35                         expect: []string{"6_7del"},
36                 },
37                 {
38                         a:      "aaaac",
39                         b:      "aaaa",
40                         expect: []string{"5del"},
41                 },
42                 {
43                         a:      "aaaa",
44                         b:      "aaCaa",
45                         expect: []string{"2_3insC"},
46                 },
47                 {
48                         a:      "aaGGGtt",
49                         b:      "aaCCCtt",
50                         expect: []string{"3_5delinsCCC"},
51                 },
52                 {
53                         a:      "aa",
54                         b:      "aaCCC",
55                         expect: []string{"2_3insCCC"},
56                 },
57                 {
58                         a:      "aaGGttAAtttt",
59                         b:      "aaCCttttttC",
60                         expect: []string{"3_4delinsCC", "7_8del", "12_13insC"},
61                 },
62                 {
63                         // without cleanup, diffmatchpatch solves this as {"3del", "=A", "4_5insA"}
64                         a:      "aggaggggg",
65                         b:      "agAaggggg",
66                         expect: []string{"3G>A"},
67                 },
68                 {
69                         // without cleanup, diffmatchpatch solves this as {"3_4del", "=A", "5_6insAA"}
70                         a:      "agggaggggg",
71                         b:      "agAAaggggg",
72                         expect: []string{"3_4delinsAA"},
73                 },
74                 {
75                         // without cleanup, diffmatchpatch solves this as {"3_4del", "=A", "5_6insCA"}
76                         a:      "agggaggggg",
77                         b:      "agACaggggg",
78                         expect: []string{"3_4delinsAC"},
79                 },
80                 {
81                         // without cleanup, diffmatchpatch solves this as {"3_7del", "=A", "8_9insAAACA"}
82                         a:      "aggggggaggggg",
83                         b:      "agAAAACaggggg",
84                         expect: []string{"3_7delinsAAAAC"},
85                 },
86                 {
87                         // without cleanup, diffmatchpatch solves this as {"3_7del", "=AAAA", "11_12insCAAAA"}
88                         a:      "aggggggaaaaggggg",
89                         b:      "agAAAACaaaaggggg",
90                         expect: []string{"3_7delinsAAAAC"},
91                 },
92                 {
93                         a:      "agggaggggg",
94                         b:      "agCAaggggg",
95                         expect: []string{"3_4delinsCA"},
96                 },
97                 {
98                         a:      "agggg",
99                         b:      "agAAg",
100                         expect: []string{"3_4delinsAA"},
101                 },
102                 {
103                         a:      "acgtgaa",
104                         b:      "acTtgaa",
105                         expect: []string{"3G>T"},
106                 },
107                 {
108                         a:      "tcagaagac",
109                         b:      "tcaAaagac",
110                         expect: []string{"4G>A"},
111                 },
112         } {
113                 c.Log(trial)
114                 var vars []string
115                 diffs, _ := Diff(strings.ToUpper(trial.a), strings.ToUpper(trial.b), 0)
116                 for _, v := range diffs {
117                         vars = append(vars, v.String())
118                 }
119                 c.Check(vars, check.DeepEquals, trial.expect)
120         }
121 }