flags.SetOutput(stderr)
offset := flags.Int("offset", 0, "coordinate offset")
sequence := flags.String("sequence", "chr1", "sequence label")
+ timeout := flags.Duration("timeout", 0, "timeout (examples: \"1s\", \"1ms\")")
err = flags.Parse(args)
if err == flag.ErrHelp {
err = nil
}
}
- variants := hgvs.Diff(string(fasta[0]), string(fasta[1]))
+ variants := hgvs.Diff(string(fasta[0]), string(fasta[1]), *timeout)
if *offset != 0 {
for i := range variants {
variants[i].Position += *offset
}
}
-func Diff(a, b string) []Variant {
+func Diff(a, b string, timeout time.Duration) []Variant {
dmp := diffmatchpatch.New()
- diffs := cleanup(dmp.DiffCleanupEfficiency(dmp.DiffBisect(a, b, time.Time{})))
+ var deadline time.Time
+ if timeout > 0 {
+ deadline = time.Now().Add(timeout)
+ }
+ diffs := cleanup(dmp.DiffCleanupEfficiency(dmp.DiffBisect(a, b, deadline)))
pos := 1
var variants []Variant
for i := 0; i < len(diffs); i++ {
} {
c.Log(trial)
var vars []string
- for _, v := range Diff(trial.a, trial.b) {
+ for _, v := range Diff(trial.a, trial.b, 0) {
vars = append(vars, v.String())
}
c.Check(vars, check.DeepEquals, trial.expect)