github.com/vertgenlab/gonomics@v1.0.0/genomeGraph/compare.go (about) 1 package genomeGraph 2 3 import ( 4 "sort" 5 6 "github.com/vertgenlab/gonomics/dna" 7 ) 8 9 func compareId(alpha *Node, beta *Node) int { 10 if alpha.Id < beta.Id { 11 return 1 12 } else if beta.Id < alpha.Id { 13 return -1 14 } else { 15 return 0 16 } 17 } 18 19 func compareSeq(alpha *Node, beta *Node) int { 20 return dna.CompareSeqsCaseSensitive(alpha.Seq, beta.Seq) 21 } 22 23 func compareSeqIgnoreCase(alpha *Node, beta *Node) int { 24 return dna.CompareSeqsIgnoreCase(alpha.Seq, beta.Seq) 25 } 26 27 func isEqual(alpha *Node, beta *Node) bool { 28 if compareId(alpha, beta) == 0 && compareSeq(alpha, beta) == 0 { 29 return true 30 } else { 31 return false 32 } 33 } 34 35 func allEqual(alpha []*Node, beta []*Node, ignoreOrder bool) bool { 36 if len(alpha) != len(beta) { 37 return false 38 } 39 if ignoreOrder { 40 SortById(alpha) 41 SortById(beta) 42 } 43 for idx := range alpha { 44 if !isEqual(alpha[idx], beta[idx]) { 45 return false 46 } 47 } 48 return true 49 } 50 51 func AllAreEqual(alpha []*Node, beta []*Node) bool { 52 return allEqual(alpha, beta, false) 53 } 54 55 func AllAreEqualIgnoreOrder(alpha []*Node, beta []*Node) bool { 56 return allEqual(alpha, beta, true) 57 } 58 59 func SortById(seqs []*Node) { 60 sort.Slice(seqs, func(i, j int) bool { return compareId(seqs[i], seqs[j]) == -1 }) 61 } 62 63 func SortBySeq(seqs []*Node) { 64 sort.Slice(seqs, func(i, j int) bool { return compareSeqIgnoreCase(seqs[i], seqs[j]) == -1 }) 65 }