Add "timed out?" column to diff output.
authorTom Clegg <tom@tomclegg.ca>
Thu, 16 Jul 2020 17:47:42 +0000 (13:47 -0400)
committerTom Clegg <tom@tomclegg.ca>
Thu, 16 Jul 2020 17:47:42 +0000 (13:47 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

diff.go
diff_test.go
hgvs/diff.go
hgvs/diff_test.go

diff --git a/diff.go b/diff.go
index 2740104cf8b0a500248608a9ea1d00da2dee4200..f1440cef194c7dc7d086290d141fa258b3aca6be 100644 (file)
--- a/diff.go
+++ b/diff.go
@@ -64,14 +64,14 @@ func (cmd *diffFasta) RunCommand(prog string, args []string, stdin io.Reader, st
                }
        }
 
-       variants := hgvs.Diff(string(fasta[0]), string(fasta[1]), *timeout)
+       variants, timedOut := hgvs.Diff(string(fasta[0]), string(fasta[1]), *timeout)
        if *offset != 0 {
                for i := range variants {
                        variants[i].Position += *offset
                }
        }
        for _, v := range variants {
-               fmt.Fprintf(stdout, "%s:g.%s\t%s\t%d\t%s\t%s\n", *sequence, v.String(), *sequence, v.Position, v.Ref, v.New)
+               fmt.Fprintf(stdout, "%s:g.%s\t%s\t%d\t%s\t%s\t%v\n", *sequence, v.String(), *sequence, v.Position, v.Ref, v.New, timedOut)
        }
        return 0
 }
index 622d6c47ec6a911906e39cea387bd29d8dcb8a59..00c5f0c5987a3769ab16d6287bd6a11b3dce562b 100644 (file)
@@ -26,8 +26,8 @@ func (s *diffSuite) TestDiff(c *check.C) {
        exited := (&diffFasta{}).RunCommand("diff-fasta", []string{"-sequence", "chr2", "-offset", "1000", tempdir + "/f1.fa", tempdir + "/f2.fa"}, nil, &output, os.Stderr)
        c.Check(exited, check.Equals, 0)
        c.Check("\n"+output.String(), check.Equals, `
-chr2:g.1008C>G chr2    1008    C       G
-chr2:g.1028_1029delinsTT       chr2    1028    AA      TT
-chr2:g.1032_1033insA   chr2    1033            A
+chr2:g.1008C>G chr2    1008    C       G       false
+chr2:g.1028_1029delinsTT       chr2    1028    AA      TT      false
+chr2:g.1032_1033insA   chr2    1033            A       false
 `)
 }
index 78082598690324a1c5badf1491d6c274afc0fc30..a6366eb36f69c2b7d22b69dc854dee16e116ea18 100644 (file)
@@ -30,13 +30,18 @@ func (v *Variant) String() string {
        }
 }
 
-func Diff(a, b string, timeout time.Duration) []Variant {
+func Diff(a, b string, timeout time.Duration) ([]Variant, bool) {
        dmp := diffmatchpatch.New()
        var deadline time.Time
        if timeout > 0 {
                deadline = time.Now().Add(timeout)
        }
-       diffs := cleanup(dmp.DiffCleanupEfficiency(dmp.DiffBisect(a, b, deadline)))
+       diffs := dmp.DiffBisect(a, b, deadline)
+       timedOut := false
+       if timeout > 0 && time.Now().After(deadline) {
+               timedOut = true
+       }
+       diffs = cleanup(dmp.DiffCleanupEfficiency(diffs))
        pos := 1
        var variants []Variant
        for i := 0; i < len(diffs); i++ {
@@ -64,7 +69,7 @@ func Diff(a, b string, timeout time.Duration) []Variant {
                        }
                }
        }
-       return variants
+       return variants, timedOut
 }
 
 func cleanup(in []diffmatchpatch.Diff) (out []diffmatchpatch.Diff) {
index 9c04ea75b657c4c21f70a90fcc3e3ea07d6f43ca..48360efd54ec5ddb28155400b0722c9689ab36b6 100644 (file)
@@ -61,7 +61,8 @@ func (s *diffSuite) TestDiff(c *check.C) {
        } {
                c.Log(trial)
                var vars []string
-               for _, v := range Diff(trial.a, trial.b, 0) {
+               diffs, _ := Diff(trial.a, trial.b, 0)
+               for _, v := range diffs {
                        vars = append(vars, v.String())
                }
                c.Check(vars, check.DeepEquals, trial.expect)