@@ -194,10 +194,8 @@ impl Assembler {
194194
195195 /// Add a new contiguous range to the assembler, and return `Ok(bool)`,
196196 /// or return `Err(TooManyHolesError)` if too many discontiguities are already recorded.
197- /// Returns `Ok(true)` when there was an overlap.
198- pub fn add ( & mut self , mut offset : usize , mut size : usize ) -> Result < bool , TooManyHolesError > {
197+ pub fn add ( & mut self , mut offset : usize , mut size : usize ) -> Result < ( ) , TooManyHolesError > {
199198 let mut index = 0 ;
200- let mut overlap = size;
201199 while index != self . contigs . len ( ) && size != 0 {
202200 let contig = self . contigs [ index] ;
203201
@@ -208,7 +206,6 @@ impl Assembler {
208206 // The range being added covers the entire hole in this contig, merge it
209207 // into the previous config.
210208 self . contigs [ index - 1 ] . expand_data_by ( contig. total_size ( ) ) ;
211- overlap -= contig. total_size ( ) ;
212209 self . remove_contig_at ( index) ;
213210 index += 0 ;
214211 } else if offset == 0 && size < contig. hole_size && index > 0 {
@@ -217,12 +214,10 @@ impl Assembler {
217214 // the previous contig.
218215 self . contigs [ index - 1 ] . expand_data_by ( size) ;
219216 self . contigs [ index] . shrink_hole_by ( size) ;
220- overlap -= size;
221217 index += 1 ;
222218 } else if offset <= contig. hole_size && offset + size >= contig. hole_size {
223219 // The range being added covers both a part of the hole and a part of the data
224220 // in this contig, shrink the hole in this contig.
225- overlap -= contig. hole_size - offset;
226221 self . contigs [ index] . shrink_hole_to ( offset) ;
227222 index += 1 ;
228223 } else if offset + size >= contig. hole_size {
@@ -234,7 +229,6 @@ impl Assembler {
234229 {
235230 let inserted = self . add_contig_at ( index) ?;
236231 * inserted = Contig :: hole_and_data ( offset, size) ;
237- overlap -= size;
238232 }
239233 // Previous contigs[index] got moved to contigs[index+1]
240234 self . contigs [ index + 1 ] . shrink_hole_by ( offset + size) ;
@@ -253,7 +247,7 @@ impl Assembler {
253247 }
254248
255249 debug_assert ! ( size == 0 ) ;
256- Ok ( overlap != 0 )
250+ Ok ( ( ) )
257251 }
258252
259253 /// Remove a contiguous range from the front of the assembler and `Some(data_size)`,
@@ -364,92 +358,92 @@ mod test {
364358 #[ test]
365359 fn test_empty_add_full ( ) {
366360 let mut assr = Assembler :: new ( 16 ) ;
367- assert_eq ! ( assr. add( 0 , 16 ) , Ok ( false ) ) ;
361+ assert_eq ! ( assr. add( 0 , 16 ) , Ok ( ( ) ) ) ;
368362 assert_eq ! ( assr, contigs![ ( 0 , 16 ) ] ) ;
369363 }
370364
371365 #[ test]
372366 fn test_empty_add_front ( ) {
373367 let mut assr = Assembler :: new ( 16 ) ;
374- assert_eq ! ( assr. add( 0 , 4 ) , Ok ( false ) ) ;
368+ assert_eq ! ( assr. add( 0 , 4 ) , Ok ( ( ) ) ) ;
375369 assert_eq ! ( assr, contigs![ ( 0 , 4 ) , ( 12 , 0 ) ] ) ;
376370 }
377371
378372 #[ test]
379373 fn test_empty_add_back ( ) {
380374 let mut assr = Assembler :: new ( 16 ) ;
381- assert_eq ! ( assr. add( 12 , 4 ) , Ok ( false ) ) ;
375+ assert_eq ! ( assr. add( 12 , 4 ) , Ok ( ( ) ) ) ;
382376 assert_eq ! ( assr, contigs![ ( 12 , 4 ) ] ) ;
383377 }
384378
385379 #[ test]
386380 fn test_empty_add_mid ( ) {
387381 let mut assr = Assembler :: new ( 16 ) ;
388- assert_eq ! ( assr. add( 4 , 8 ) , Ok ( false ) ) ;
382+ assert_eq ! ( assr. add( 4 , 8 ) , Ok ( ( ) ) ) ;
389383 assert_eq ! ( assr, contigs![ ( 4 , 8 ) , ( 4 , 0 ) ] ) ;
390384 }
391385
392386 #[ test]
393387 fn test_partial_add_front ( ) {
394388 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
395- assert_eq ! ( assr. add( 0 , 4 ) , Ok ( false ) ) ;
389+ assert_eq ! ( assr. add( 0 , 4 ) , Ok ( ( ) ) ) ;
396390 assert_eq ! ( assr, contigs![ ( 0 , 12 ) , ( 4 , 0 ) ] ) ;
397391 }
398392
399393 #[ test]
400394 fn test_partial_add_back ( ) {
401395 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
402- assert_eq ! ( assr. add( 12 , 4 ) , Ok ( false ) ) ;
396+ assert_eq ! ( assr. add( 12 , 4 ) , Ok ( ( ) ) ) ;
403397 assert_eq ! ( assr, contigs![ ( 4 , 12 ) ] ) ;
404398 }
405399
406400 #[ test]
407401 fn test_partial_add_front_overlap ( ) {
408402 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
409- assert_eq ! ( assr. add( 0 , 8 ) , Ok ( true ) ) ;
403+ assert_eq ! ( assr. add( 0 , 8 ) , Ok ( ( ) ) ) ;
410404 assert_eq ! ( assr, contigs![ ( 0 , 12 ) , ( 4 , 0 ) ] ) ;
411405 }
412406
413407 #[ test]
414408 fn test_partial_add_front_overlap_split ( ) {
415409 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
416- assert_eq ! ( assr. add( 2 , 6 ) , Ok ( true ) ) ;
410+ assert_eq ! ( assr. add( 2 , 6 ) , Ok ( ( ) ) ) ;
417411 assert_eq ! ( assr, contigs![ ( 2 , 10 ) , ( 4 , 0 ) ] ) ;
418412 }
419413
420414 #[ test]
421415 fn test_partial_add_back_overlap ( ) {
422416 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
423- assert_eq ! ( assr. add( 8 , 8 ) , Ok ( true ) ) ;
417+ assert_eq ! ( assr. add( 8 , 8 ) , Ok ( ( ) ) ) ;
424418 assert_eq ! ( assr, contigs![ ( 4 , 12 ) ] ) ;
425419 }
426420
427421 #[ test]
428422 fn test_partial_add_back_overlap_split ( ) {
429423 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
430- assert_eq ! ( assr. add( 10 , 4 ) , Ok ( true ) ) ;
424+ assert_eq ! ( assr. add( 10 , 4 ) , Ok ( ( ) ) ) ;
431425 assert_eq ! ( assr, contigs![ ( 4 , 10 ) , ( 2 , 0 ) ] ) ;
432426 }
433427
434428 #[ test]
435429 fn test_partial_add_both_overlap ( ) {
436430 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
437- assert_eq ! ( assr. add( 0 , 16 ) , Ok ( true ) ) ;
431+ assert_eq ! ( assr. add( 0 , 16 ) , Ok ( ( ) ) ) ;
438432 assert_eq ! ( assr, contigs![ ( 0 , 16 ) ] ) ;
439433 }
440434
441435 #[ test]
442436 fn test_partial_add_both_overlap_split ( ) {
443437 let mut assr = contigs ! [ ( 4 , 8 ) , ( 4 , 0 ) ] ;
444- assert_eq ! ( assr. add( 2 , 12 ) , Ok ( true ) ) ;
438+ assert_eq ! ( assr. add( 2 , 12 ) , Ok ( ( ) ) ) ;
445439 assert_eq ! ( assr, contigs![ ( 2 , 12 ) , ( 2 , 0 ) ] ) ;
446440 }
447441
448442 #[ test]
449443 fn test_rejected_add_keeps_state ( ) {
450444 let mut assr = Assembler :: new ( CONTIG_COUNT * 20 ) ;
451445 for c in 1 ..=CONTIG_COUNT - 1 {
452- assert_eq ! ( assr. add( c * 10 , 3 ) , Ok ( false ) ) ;
446+ assert_eq ! ( assr. add( c * 10 , 3 ) , Ok ( ( ) ) ) ;
453447 }
454448 // Maximum of allowed holes is reached
455449 let assr_before = assr. clone ( ) ;
@@ -499,39 +493,39 @@ mod test {
499493 #[ test]
500494 fn test_iter_full ( ) {
501495 let mut assr = Assembler :: new ( 16 ) ;
502- assert_eq ! ( assr. add( 0 , 16 ) , Ok ( false ) ) ;
496+ assert_eq ! ( assr. add( 0 , 16 ) , Ok ( ( ) ) ) ;
503497 let segments: Vec < _ > = assr. iter_data ( 10 ) . collect ( ) ;
504498 assert_eq ! ( segments, vec![ ( 10 , 26 ) ] ) ;
505499 }
506500
507501 #[ test]
508502 fn test_iter_offset ( ) {
509503 let mut assr = Assembler :: new ( 16 ) ;
510- assert_eq ! ( assr. add( 0 , 16 ) , Ok ( false ) ) ;
504+ assert_eq ! ( assr. add( 0 , 16 ) , Ok ( ( ) ) ) ;
511505 let segments: Vec < _ > = assr. iter_data ( 100 ) . collect ( ) ;
512506 assert_eq ! ( segments, vec![ ( 100 , 116 ) ] ) ;
513507 }
514508
515509 #[ test]
516510 fn test_iter_one_front ( ) {
517511 let mut assr = Assembler :: new ( 16 ) ;
518- assert_eq ! ( assr. add( 0 , 4 ) , Ok ( false ) ) ;
512+ assert_eq ! ( assr. add( 0 , 4 ) , Ok ( ( ) ) ) ;
519513 let segments: Vec < _ > = assr. iter_data ( 10 ) . collect ( ) ;
520514 assert_eq ! ( segments, vec![ ( 10 , 14 ) ] ) ;
521515 }
522516
523517 #[ test]
524518 fn test_iter_one_back ( ) {
525519 let mut assr = Assembler :: new ( 16 ) ;
526- assert_eq ! ( assr. add( 12 , 4 ) , Ok ( false ) ) ;
520+ assert_eq ! ( assr. add( 12 , 4 ) , Ok ( ( ) ) ) ;
527521 let segments: Vec < _ > = assr. iter_data ( 10 ) . collect ( ) ;
528522 assert_eq ! ( segments, vec![ ( 22 , 26 ) ] ) ;
529523 }
530524
531525 #[ test]
532526 fn test_iter_one_mid ( ) {
533527 let mut assr = Assembler :: new ( 16 ) ;
534- assert_eq ! ( assr. add( 4 , 8 ) , Ok ( false ) ) ;
528+ assert_eq ! ( assr. add( 4 , 8 ) , Ok ( ( ) ) ) ;
535529 let segments: Vec < _ > = assr. iter_data ( 10 ) . collect ( ) ;
536530 assert_eq ! ( segments, vec![ ( 14 , 22 ) ] ) ;
537531 }
@@ -556,4 +550,12 @@ mod test {
556550 let segments: Vec < _ > = assr. iter_data ( 100 ) . collect ( ) ;
557551 assert_eq ! ( segments, vec![ ( 102 , 108 ) , ( 110 , 111 ) , ( 113 , 115 ) ] ) ;
558552 }
553+
554+ #[ test]
555+ fn test_issue_694 ( ) {
556+ let mut assr = Assembler :: new ( 16 ) ;
557+ assert_eq ! ( assr. add( 0 , 1 ) , Ok ( ( ) ) ) ;
558+ assert_eq ! ( assr. add( 2 , 1 ) , Ok ( ( ) ) ) ;
559+ assert_eq ! ( assr. add( 1 , 1 ) , Ok ( ( ) ) ) ;
560+ }
559561}
0 commit comments