@@ -1933,6 +1933,67 @@ CCCCCCCCCCCCCCCCCCC"[..],
19331933 assert_eq ! ( rec. qname( ) , b"r0" ) ;
19341934 }
19351935
1936+ #[ test]
1937+ fn test_set_cigar ( ) {
1938+ let ( names, _, seqs, quals, cigars) = gold ( ) ;
1939+
1940+ assert ! ( names[ 0 ] != names[ 1 ] ) ;
1941+
1942+ for i in 0 ..names. len ( ) {
1943+ let mut rec = record:: Record :: new ( ) ;
1944+ rec. set ( names[ i] , Some ( & cigars[ i] ) , seqs[ i] , quals[ i] ) ;
1945+ rec. push_aux ( b"NM" , Aux :: I32 ( 15 ) ) . unwrap ( ) ;
1946+
1947+ assert_eq ! ( rec. qname( ) , names[ i] ) ;
1948+ assert_eq ! ( * rec. cigar( ) , cigars[ i] ) ;
1949+ assert_eq ! ( rec. seq( ) . as_bytes( ) , seqs[ i] ) ;
1950+ assert_eq ! ( rec. qual( ) , quals[ i] ) ;
1951+ assert_eq ! ( rec. aux( b"NM" ) . unwrap( ) , Aux :: I32 ( 15 ) ) ;
1952+
1953+ // boring cigar
1954+ let new_cigar = CigarString ( vec ! [ Cigar :: Match ( rec. seq_len( ) as u32 ) ] ) ;
1955+ assert_ne ! ( * rec. cigar( ) , new_cigar) ;
1956+ rec. set_cigar ( Some ( & new_cigar) ) ;
1957+ assert_eq ! ( * rec. cigar( ) , new_cigar) ;
1958+
1959+ assert_eq ! ( rec. qname( ) , names[ i] ) ;
1960+ assert_eq ! ( rec. seq( ) . as_bytes( ) , seqs[ i] ) ;
1961+ assert_eq ! ( rec. qual( ) , quals[ i] ) ;
1962+ assert_eq ! ( rec. aux( b"NM" ) . unwrap( ) , Aux :: I32 ( 15 ) ) ;
1963+
1964+ // bizarre cigar
1965+ let new_cigar = ( 0 ..rec. seq_len ( ) )
1966+ . map ( |i| {
1967+ if i % 2 == 0 {
1968+ Cigar :: Match ( 1 )
1969+ } else {
1970+ Cigar :: Ins ( 1 )
1971+ }
1972+ } )
1973+ . collect :: < Vec < _ > > ( ) ;
1974+ let new_cigar = CigarString ( new_cigar) ;
1975+ assert_ne ! ( * rec. cigar( ) , new_cigar) ;
1976+ rec. set_cigar ( Some ( & new_cigar) ) ;
1977+ assert_eq ! ( * rec. cigar( ) , new_cigar) ;
1978+
1979+ assert_eq ! ( rec. qname( ) , names[ i] ) ;
1980+ assert_eq ! ( rec. seq( ) . as_bytes( ) , seqs[ i] ) ;
1981+ assert_eq ! ( rec. qual( ) , quals[ i] ) ;
1982+ assert_eq ! ( rec. aux( b"NM" ) . unwrap( ) , Aux :: I32 ( 15 ) ) ;
1983+
1984+ // empty cigar
1985+ let new_cigar = CigarString ( Vec :: new ( ) ) ;
1986+ assert_ne ! ( * rec. cigar( ) , new_cigar) ;
1987+ rec. set_cigar ( None ) ;
1988+ assert_eq ! ( * rec. cigar( ) , new_cigar) ;
1989+
1990+ assert_eq ! ( rec. qname( ) , names[ i] ) ;
1991+ assert_eq ! ( rec. seq( ) . as_bytes( ) , seqs[ i] ) ;
1992+ assert_eq ! ( rec. qual( ) , quals[ i] ) ;
1993+ assert_eq ! ( rec. aux( b"NM" ) . unwrap( ) , Aux :: I32 ( 15 ) ) ;
1994+ }
1995+ }
1996+
19361997 #[ test]
19371998 fn test_remove_aux ( ) {
19381999 let mut bam = Reader :: from_path ( Path :: new ( "test/test.bam" ) ) . expect ( "Error opening file." ) ;
0 commit comments