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  }