}
}
- 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
}
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
`)
}
}
}
-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++ {
}
}
}
- return variants
+ return variants, timedOut
}
func cleanup(in []diffmatchpatch.Diff) (out []diffmatchpatch.Diff) {
} {
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)