github.com/vertgenlab/gonomics@v1.0.0/genomeGraph/sort_test.go (about)

     1  package genomeGraph
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/vertgenlab/gonomics/dna"
     7  	"github.com/vertgenlab/gonomics/dna/dnaTwoBit"
     8  )
     9  
    10  func TestGetSortOrder(t *testing.T) {
    11  	graph := MakeTestGraph()
    12  
    13  	// Just getting two sets of the same nodes to make sure they will separate
    14  	nodesToSort := append(graph.Nodes)
    15  	order := breadthFirstSearch(nodesToSort)
    16  
    17  	correctOrder := []uint32{0, 1, 2, 3, 4}
    18  
    19  	for i := 0; i < len(order); i++ {
    20  		if order[i] == correctOrder[i] {
    21  			continue
    22  		}
    23  		t.Errorf("Error: Problem with graph sort \n Expected Order : %v \n Received Order : %v", correctOrder, order)
    24  	}
    25  
    26  	var discontiguousGraph *GenomeGraph = MakeDisContigTestGraph()
    27  	brokenGraph := BreakNonContiguousGraph(discontiguousGraph.Nodes)
    28  	if len(brokenGraph) != 2 {
    29  		t.Errorf("ERROR: Problem with breaking up discontigous graph into subgraphs")
    30  	}
    31  }
    32  
    33  // TestGraph Structure
    34  //
    35  //	           n2          e0 = 1
    36  //	       e1     \e2
    37  //	    e0     e3  \       e2 = 1
    38  //	n0 --- n1       n4
    39  //	               /
    40  //	       e4     /e5      e5 = 1
    41  //	           n3
    42  //
    43  //	             A
    44  //	                \
    45  //	                 \
    46  //	ATG --- CG 		 TAA
    47  //	                 /
    48  //	                /
    49  //	             T
    50  func MakeDisContigTestGraph() *GenomeGraph {
    51  	graph := EmptyGraph()
    52  
    53  	var n0, n1, n2, n3, n4 Node
    54  	var f0, f2, f5, r0, r2, r5 Edge
    55  
    56  	// Make Nodes
    57  	n0 = Node{
    58  		Id:  0,
    59  		Seq: dna.StringToBases("ATG")}
    60  
    61  	n1 = Node{
    62  		Id:  1,
    63  		Seq: dna.StringToBases("CG")}
    64  
    65  	n2 = Node{
    66  		Id:  2,
    67  		Seq: dna.StringToBases("A")}
    68  
    69  	n3 = Node{
    70  		Id:  3,
    71  		Seq: dna.StringToBases("T")}
    72  
    73  	n4 = Node{
    74  		Id:  4,
    75  		Seq: dna.StringToBases("TAA")}
    76  
    77  	// Make Edges
    78  	f0 = Edge{
    79  		Dest: &n1,
    80  		Prob: 1}
    81  
    82  	f2 = Edge{
    83  		Dest: &n4,
    84  		Prob: 1}
    85  
    86  	f5 = Edge{
    87  		Dest: &n4,
    88  		Prob: 1}
    89  
    90  	r0 = Edge{
    91  		Dest: &n0,
    92  		Prob: 1}
    93  
    94  	r2 = Edge{
    95  		Dest: &n2,
    96  		Prob: 1}
    97  
    98  	r5 = Edge{
    99  		Dest: &n3,
   100  		Prob: 1}
   101  
   102  	// Define Paths
   103  	n0.Next = append(n0.Next, f0)
   104  	n1.Prev = append(n1.Prev, r0)
   105  	n2.Next = append(n2.Next, f2)
   106  	n3.Next = append(n3.Next, f5)
   107  	n4.Prev = append(n4.Prev, r2, r5)
   108  
   109  	graph.Nodes = append(graph.Nodes, n0, n1, n2, n3, n4)
   110  
   111  	for i := 0; i < len(graph.Nodes); i++ {
   112  		graph.Nodes[i].SeqTwoBit = dnaTwoBit.NewTwoBit(graph.Nodes[i].Seq)
   113  	}
   114  
   115  	return graph
   116  }