1- use crate :: { GF2Matrix , matrix:: Number } ;
1+ use crate :: { matrix:: Number , GF2Matrix } ;
22
33#[ derive( Clone , Copy , Debug ) ]
44pub enum BitOrder {
@@ -16,11 +16,10 @@ pub enum BitOrder {
1616/// representation before expanding into an explicit GF(2) matrix.
1717pub struct InterGF2Matrix < T : Number > {
1818 elements : Vec < T > ,
19- n : usize
19+ n : usize ,
2020}
2121
22- impl < T : Number > InterGF2Matrix < T > {
23-
22+ impl < T : Number > InterGF2Matrix < T > {
2423 /// Creates a new integer-encoded matrix.
2524 ///
2625 /// # Arguments
@@ -32,49 +31,51 @@ impl<T: Number> InterGF2Matrix<T>{
3231 ///
3332 /// ```rust
3433 /// # use lin_algebra::int_gf2_matrix::InterGF2Matrix;
35- ///
34+ ///
3635 /// let m = InterGF2Matrix::new(vec![0b1011u8, 0b0101u8], 4);
3736 /// ```
38- pub fn new ( elements : Vec < T > , n : usize ) -> Self {
39- Self { elements : elements, n : n}
37+ pub fn new ( elements : Vec < T > , n : usize ) -> Self {
38+ Self {
39+ elements : elements,
40+ n : n,
41+ }
4042 }
4143
4244 /// Returns the number of rows in the matrix.
4345 ///
4446 /// # Returns
45- ///
47+ ///
4648 /// number of rows: this is equal to the number of elements stored internally.
47- pub fn nrows ( & self ) -> usize {
49+ pub fn nrows ( & self ) -> usize {
4850 self . elements . len ( )
4951 }
5052
5153 /// Returns the number of columns in the matrix.
5254 ///
5355 /// # Returns
54- ///
56+ ///
5557 /// Number of columns: this corresponds to the number of bits extracted from each row.
56- pub fn ncols ( & self ) -> usize {
58+ pub fn ncols ( & self ) -> usize {
5759 self . n
5860 }
5961
6062 /// Returns the integer-encoded value of a specific row.
6163 ///
6264 /// # Arguments
63- ///
65+ ///
6466 /// * `row_index`- usize, index of the row.
65- ///
67+ ///
6668 /// # Returns
67- ///
69+ ///
6870 /// Row corresponding to index `row_index`
69- ///
71+ ///
7072 /// # Panics
7173 ///
7274 /// Panics if `row_index` is out of bounds.
7375 pub fn row ( & self , row_index : usize ) -> T {
7476 self . elements [ row_index]
7577 }
7678
77-
7879 /// Converts the integer-encoded matrix into an explicit GF(2) matrix.
7980 ///
8081 /// Each row is expanded into a vector of bits (`0` or `1`),
@@ -96,27 +97,26 @@ impl<T: Number> InterGF2Matrix<T>{
9697 ///
9798 /// ```rust
9899 /// # use lin_algebra::int_gf2_matrix::{InterGF2Matrix, BitOrder};
99- ///
100+ ///
100101 /// let m = InterGF2Matrix::new(vec![0b0010u8], 4);
101102 /// let gf2 = m.from_int_matrix_to_gf2_matrix(BitOrder::LSB);
102103 ///
103104 /// // Result: [[0, 1, 0, 0]]
104105 /// ```
105106 pub fn from_int_matrix_to_gf2_matrix ( & self , bit_order : BitOrder ) -> GF2Matrix {
106-
107107 let mut matrix_elements = Vec :: with_capacity ( self . nrows ( ) ) ;
108108 match bit_order {
109109 BitOrder :: LSB => {
110- for & row in & self . elements {
110+ for & row in & self . elements {
111111 let mut r = Vec :: with_capacity ( self . n ) ;
112112 for i in 0 ..self . n {
113113 r. push ( ( ( ( row >> i) & T :: one ( ) ) != T :: zero ( ) ) as u8 ) ;
114114 }
115115 matrix_elements. push ( r) ;
116- }
117- } ,
116+ }
117+ }
118118 BitOrder :: MSB => {
119- for & row in & self . elements {
119+ for & row in & self . elements {
120120 let mut r = Vec :: with_capacity ( self . n ) ;
121121 for i in ( 0 ..self . n ) . rev ( ) {
122122 r. push ( ( ( ( row >> i) & T :: one ( ) ) != T :: zero ( ) ) as u8 ) ;
@@ -126,67 +126,65 @@ impl<T: Number> InterGF2Matrix<T>{
126126 }
127127 } ;
128128 GF2Matrix :: new ( matrix_elements)
129-
130129 }
131130}
132131
133-
134132#[ cfg( test) ]
135133mod tests {
136134
137135 use super :: * ;
138136
139137 #[ test]
140- fn test_from_int_matrix_to_gf2_matrix_u8_lsb ( ) {
141- let elements = vec ! [ 0 , 1 , 2 , 4 , 8 ] ;
138+ fn test_from_int_matrix_to_gf2_matrix_u8_lsb ( ) {
139+ let elements = vec ! [ 0 , 1 , 2 , 4 , 8 ] ;
142140 let int_matrix = InterGF2Matrix :: < u8 > :: new ( elements. clone ( ) , 4 ) ;
143141 let gf2_matrix = int_matrix. from_int_matrix_to_gf2_matrix ( BitOrder :: LSB ) ;
144142 let expected = vec ! [
145- vec![ 0 , 0 , 0 , 0 ] ,
146- vec![ 1 , 0 , 0 , 0 ] ,
147- vec![ 0 , 1 , 0 , 0 ] ,
148- vec![ 0 , 0 , 1 , 0 ] ,
149- vec![ 0 , 0 , 0 , 1 ] ,
143+ vec![ 0 , 0 , 0 , 0 ] ,
144+ vec![ 1 , 0 , 0 , 0 ] ,
145+ vec![ 0 , 1 , 0 , 0 ] ,
146+ vec![ 0 , 0 , 1 , 0 ] ,
147+ vec![ 0 , 0 , 0 , 1 ] ,
150148 ] ;
151149 assert_eq ! ( gf2_matrix. elements, expected) ;
152150
153- let elements = vec ! [ 0 , 1 , 2 , 3 , 5 ] ;
151+ let elements = vec ! [ 0 , 1 , 2 , 3 , 5 ] ;
154152 let int_matrix = InterGF2Matrix :: < u8 > :: new ( elements. clone ( ) , 4 ) ;
155153 let gf2_matrix = int_matrix. from_int_matrix_to_gf2_matrix ( BitOrder :: LSB ) ;
156154 let expected = vec ! [
157- vec![ 0 , 0 , 0 , 0 ] ,
158- vec![ 1 , 0 , 0 , 0 ] ,
159- vec![ 0 , 1 , 0 , 0 ] ,
160- vec![ 1 , 1 , 0 , 0 ] ,
161- vec![ 1 , 0 , 1 , 0 ] ,
155+ vec![ 0 , 0 , 0 , 0 ] ,
156+ vec![ 1 , 0 , 0 , 0 ] ,
157+ vec![ 0 , 1 , 0 , 0 ] ,
158+ vec![ 1 , 1 , 0 , 0 ] ,
159+ vec![ 1 , 0 , 1 , 0 ] ,
162160 ] ;
163161 assert_eq ! ( gf2_matrix. elements, expected) ;
164162 }
165163
166164 #[ test]
167- fn test_from_int_matrix_to_gf2_matrix_u8_msb ( ) {
168- let elements = vec ! [ 0 , 1 , 2 , 4 , 8 ] ;
165+ fn test_from_int_matrix_to_gf2_matrix_u8_msb ( ) {
166+ let elements = vec ! [ 0 , 1 , 2 , 4 , 8 ] ;
169167 let int_matrix = InterGF2Matrix :: < u8 > :: new ( elements. clone ( ) , 4 ) ;
170168 let gf2_matrix = int_matrix. from_int_matrix_to_gf2_matrix ( BitOrder :: MSB ) ;
171169 let expected = vec ! [
172- vec![ 0 , 0 , 0 , 0 ] ,
173- vec![ 0 , 0 , 0 , 1 ] ,
174- vec![ 0 , 0 , 1 , 0 ] ,
175- vec![ 0 , 1 , 0 , 0 ] ,
176- vec![ 1 , 0 , 0 , 0 ] ,
170+ vec![ 0 , 0 , 0 , 0 ] ,
171+ vec![ 0 , 0 , 0 , 1 ] ,
172+ vec![ 0 , 0 , 1 , 0 ] ,
173+ vec![ 0 , 1 , 0 , 0 ] ,
174+ vec![ 1 , 0 , 0 , 0 ] ,
177175 ] ;
178176 assert_eq ! ( gf2_matrix. elements, expected) ;
179177
180- let elements = vec ! [ 0 , 1 , 2 , 3 , 5 ] ;
178+ let elements = vec ! [ 0 , 1 , 2 , 3 , 5 ] ;
181179 let int_matrix = InterGF2Matrix :: < u8 > :: new ( elements. clone ( ) , 4 ) ;
182180 let gf2_matrix = int_matrix. from_int_matrix_to_gf2_matrix ( BitOrder :: MSB ) ;
183181 let expected = vec ! [
184- vec![ 0 , 0 , 0 , 0 ] ,
185- vec![ 0 , 0 , 0 , 1 ] ,
186- vec![ 0 , 0 , 1 , 0 ] ,
187- vec![ 0 , 0 , 1 , 1 ] ,
188- vec![ 0 , 1 , 0 , 1 ] ,
182+ vec![ 0 , 0 , 0 , 0 ] ,
183+ vec![ 0 , 0 , 0 , 1 ] ,
184+ vec![ 0 , 0 , 1 , 0 ] ,
185+ vec![ 0 , 0 , 1 , 1 ] ,
186+ vec![ 0 , 1 , 0 , 1 ] ,
189187 ] ;
190188 assert_eq ! ( gf2_matrix. elements, expected) ;
191189 }
192- }
190+ }
0 commit comments