@@ -1933,6 +1933,67 @@ CCCCCCCCCCCCCCCCCCC"[..],
1933
1933
assert_eq ! ( rec. qname( ) , b"r0" ) ;
1934
1934
}
1935
1935
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
+
1936
1997
#[ test]
1937
1998
fn test_remove_aux ( ) {
1938
1999
let mut bam = Reader :: from_path ( Path :: new ( "test/test.bam" ) ) . expect ( "Error opening file." ) ;
0 commit comments