1 alias J = Join!int; 2 alias S = Scaffold!int; 3 alias CN = ContigNode; 4 alias CP = ContigPart; 5 6 // Case 1: 7 // 8 // o oxxxxo o => o o o o 9 // => 10 // o -- o o -- o => o -- oxxxxxxxxo -- o 11 auto scaffold1 = buildScaffold!(sumPayloads!int, int)(2, [ 12 getUnkownJoin!int(1, 2, 1), 13 ]).normalizeUnkownJoins!int; 14 assert(getDefaultJoin!int(1) in scaffold1); 15 assert(getDefaultJoin!int(2) in scaffold1); 16 assert(J(CN(1, CP.end), CN(2, CP.begin)) in scaffold1); 17 assert(scaffold1.edges.walkLength == 3); 18 19 // Case 2: 20 // 21 // o oxxxxo o => o o xxxo o 22 // \ => / \ 23 // o -- o o -- o => o -- oxxxx o -- o 24 auto scaffold2 = buildScaffold!(sumPayloads!int, int)(2, [ 25 getUnkownJoin!int(1, 2, 1), 26 J(CN(2, CP.pre), CN(2, CP.begin), 1), 27 ]).normalizeUnkownJoins!int; 28 assert(getDefaultJoin!int(1) in scaffold2); 29 assert(getDefaultJoin!int(2) in scaffold2); 30 assert(J(CN(1, CP.end), CN(2, CP.pre)) in scaffold2); 31 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold2); 32 assert(scaffold2.edges.walkLength == 4); 33 34 // Case 3: 35 // 36 // o oxxxxo o => o o o o 37 // => 38 // o -- o o -- o => o -- o o -- o 39 // | => | 40 // o -- o => o -- o 41 // => 42 // o o => o o 43 auto scaffold3 = buildScaffold!(sumPayloads!int, int)(3, [ 44 getUnkownJoin!int(1, 2, 1), 45 J(CN(2, CP.begin), CN(3, CP.begin), 1), 46 ]).normalizeUnkownJoins!int; 47 assert(getDefaultJoin!int(1) in scaffold3); 48 assert(getDefaultJoin!int(2) in scaffold3); 49 assert(getDefaultJoin!int(3) in scaffold3); 50 assert(J(CN(2, CP.begin), CN(3, CP.begin)) in scaffold3); 51 assert(scaffold3.edges.walkLength == 4); 52 53 // Case 4: 54 // 55 // o oxxxxo o => o oxxx o o 56 // / => / \ 57 // o -- o o -- o => o -- o xxxxo -- o 58 auto scaffold4 = buildScaffold!(sumPayloads!int, int)(2, [ 59 getUnkownJoin!int(1, 2, 1), 60 J(CN(1, CP.end), CN(1, CP.post), 1), 61 ]).normalizeUnkownJoins!int; 62 assert(getDefaultJoin!int(1) in scaffold4); 63 assert(getDefaultJoin!int(2) in scaffold4); 64 assert(J(CN(1, CP.post), CN(2, CP.begin)) in scaffold4); 65 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold4); 66 assert(scaffold4.edges.walkLength == 4); 67 68 // Case 5: 69 // 70 // o oxxxxo o 71 // / \ 72 // o -- o o -- o 73 auto scaffold5 = buildScaffold!(sumPayloads!int, int)(2, [ 74 getUnkownJoin!int(1, 2, 1), 75 J(CN(1, CP.end), CN(1, CP.post), 1), 76 J(CN(2, CP.pre), CN(2, CP.begin), 1), 77 ]).normalizeUnkownJoins!int; 78 assert(getDefaultJoin!int(1) in scaffold5); 79 assert(getDefaultJoin!int(2) in scaffold5); 80 assert(getUnkownJoin!int(1, 2, 1) in scaffold5); 81 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold5); 82 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold5); 83 assert(scaffold5.edges.walkLength == 5); 84 85 // Case 6: 86 // 87 // o oxxxxo o => o o o o 88 // / => / 89 // o -- o o -- o => o -- o o -- o 90 // | => | 91 // o -- o => o -- o 92 // => 93 // o o => o o 94 auto scaffold6 = buildScaffold!(sumPayloads!int, int)(3, [ 95 getUnkownJoin!int(1, 2, 1), 96 J(CN(1, CP.end), CN(1, CP.post), 1), 97 J(CN(2, CP.begin), CN(3, CP.begin), 1), 98 ]).normalizeUnkownJoins!int; 99 assert(getDefaultJoin!int(1) in scaffold6); 100 assert(getDefaultJoin!int(2) in scaffold6); 101 assert(getDefaultJoin!int(3) in scaffold6); 102 assert(J(CN(1, CP.end), CN(1, CP.post)) in scaffold6); 103 assert(J(CN(2, CP.begin), CN(3, CP.begin)) in scaffold6); 104 assert(scaffold6.edges.walkLength == 5); 105 106 // Case 7: 107 // 108 // o oxxxxo o => o o o o 109 // => 110 // o -- o o -- o => o -- o o -- o 111 // | => | 112 // o -- o => o -- o 113 // => 114 // o o => o o 115 auto scaffold7 = buildScaffold!(sumPayloads!int, int)(3, [ 116 getUnkownJoin!int(1, 2, 1), 117 J(CN(1, CP.end), CN(3, CP.end), 1), 118 ]).normalizeUnkownJoins!int; 119 assert(getDefaultJoin!int(1) in scaffold7); 120 assert(getDefaultJoin!int(2) in scaffold7); 121 assert(getDefaultJoin!int(3) in scaffold7); 122 assert(J(CN(1, CP.end), CN(3, CP.end)) in scaffold7); 123 assert(scaffold7.edges.walkLength == 4); 124 125 // Case 8: 126 // 127 // o oxxxxo o => o o o o 128 // \ => \ 129 // o -- o o -- o => o -- o o -- o 130 // | => | 131 // o -- o => o -- o 132 // => 133 // o o => o o 134 auto scaffold8 = buildScaffold!(sumPayloads!int, int)(3, [ 135 getUnkownJoin!int(1, 2, 1), 136 J(CN(1, CP.end), CN(3, CP.end), 1), 137 J(CN(2, CP.pre), CN(2, CP.begin), 1), 138 ]).normalizeUnkownJoins!int; 139 assert(getDefaultJoin!int(1) in scaffold8); 140 assert(getDefaultJoin!int(2) in scaffold8); 141 assert(getDefaultJoin!int(3) in scaffold8); 142 assert(J(CN(1, CP.end), CN(3, CP.end)) in scaffold8); 143 assert(J(CN(2, CP.pre), CN(2, CP.begin)) in scaffold8); 144 assert(scaffold8.edges.walkLength == 5); 145 146 // Case 9: 147 // 148 // o oxxxxo o => o o o o 149 // => 150 // o -- o o -- o => o -- o o -- o 151 // | | => | | 152 // o ------ o => o ------ o 153 // => 154 // o o => o o 155 auto scaffold9 = buildScaffold!(sumPayloads!int, int)(3, [ 156 getUnkownJoin!int(1, 2, 1), 157 J(CN(1, CP.end), CN(3, CP.begin), 1), 158 J(CN(2, CP.begin), CN(3, CP.end), 1), 159 ]).normalizeUnkownJoins!int; 160 assert(getDefaultJoin!int(1) in scaffold9); 161 assert(getDefaultJoin!int(2) in scaffold9); 162 assert(getDefaultJoin!int(3) in scaffold9); 163 assert(J(CN(1, CP.end), CN(3, CP.begin)) in scaffold9); 164 assert(J(CN(2, CP.begin), CN(3, CP.end)) in scaffold9); 165 assert(scaffold9.edges.walkLength == 5);
Normalizes unknown joins such that they join contigs or are removed as applicable.