1
1
import random
2
2
import unittest
3
+ from itertools import combinations
3
4
4
5
import yaml
5
- from itertools import combinations
6
6
7
7
import linearcode
8
+ from fileutils import remove_files
8
9
from linearcode import LinearCode , \
9
10
ErrorCorrectingCode , \
10
11
add_matrix_in_front , \
29
30
sum_modulo_2 , \
30
31
transpose_matrix , \
31
32
get_random_number_of_hamming_weight
32
- from test .testutils import remove_files
33
33
34
34
35
35
class LinearCodeTest (unittest .TestCase ):
@@ -89,10 +89,8 @@ def test_f_l_i_v_inner_loop(self):
89
89
def test_sum_modulo_2 (self ):
90
90
test_list = []
91
91
n = 10
92
- print ()
93
92
for i in range (n ):
94
93
test_list .append (i + 1 )
95
- print ('{0:0>{width}b}' .format (i + 1 , width = n ))
96
94
assert sum_modulo_2 (iterable = test_list ) == 11
97
95
98
96
def test_allocate_bits_in_column (self ):
@@ -107,10 +105,8 @@ def test_fill_parity_check_matrix_and_a_matrix_transposed(self):
107
105
n = self .n ,
108
106
r = self .r ,
109
107
d = self .d )
110
- print ()
111
108
for line in parity_check_matrix :
112
109
assert line != 0
113
- print (format (line , '#0{0}b' .format (self .n + 2 )))
114
110
for line in a_matrix_transposed :
115
111
assert get_hamming_weight (line ) >= self .d - 1
116
112
@@ -133,7 +129,6 @@ def test_add_matrix_to_front(self):
133
129
k = 7
134
130
r = n - k
135
131
matrix1 = []
136
- print ()
137
132
for i in range (k ):
138
133
matrix1 .append (i + 1 )
139
134
matrix2 = fill_i_matrix (size = k )
@@ -153,34 +148,21 @@ def test_generator_matrix_from_a_matrix_transposed(self):
153
148
r = n - k
154
149
d = 1
155
150
parity_check_matrix , a_matrix_transposed = fill_parity_check_matrix_and_a_matrix_transposed (n = n , r = r , d = d )
156
- print ()
157
- for i in parity_check_matrix :
158
- print (format (i , '#0{0}b' .format (n + 2 )))
159
- print ()
160
151
for i in fill_generator_matrix_from_a_matrix_transposed (
161
152
a_matrix_transposed = a_matrix_transposed ,
162
153
k = k ,
163
154
r = r ):
164
155
assert get_hamming_weight (i ) >= d
165
- print (format (i , '#0{0}b' .format (n + 2 )))
166
156
167
157
def test_transpose_matrix (self ):
168
158
n = 10
169
159
r = 7
170
160
d = 1
171
161
matrix , a_matrix_transposed = fill_parity_check_matrix_and_a_matrix_transposed (n = n , r = r , d = d )
172
- print ()
173
- for i in matrix :
174
- print (format (i , '#0{0}b' .format (n + 2 )))
175
- print ()
176
162
transposed_matrix = transpose_matrix (matrix = matrix , number_of_columns = n )
177
- for i in transposed_matrix :
178
- print (format (i , '#0{0}b' .format (r + 2 )))
179
- print ()
180
163
doubly_transposed_matrix = transpose_matrix (matrix = transposed_matrix , number_of_columns = r )
181
164
for i in range (len (doubly_transposed_matrix )):
182
165
assert doubly_transposed_matrix [i ] == matrix [i ]
183
- print (format (doubly_transposed_matrix [i ], '#0{0}b' .format (n + 2 )))
184
166
185
167
def test_compute_parity (self ):
186
168
number_parity_0 = 0b101
@@ -259,28 +241,12 @@ def test_generate_syndrome_decoding_table(self):
259
241
a_matrix_transposed = a_matrix_transposed ,
260
242
k = k ,
261
243
r = r )
262
- print ()
263
- print ('A parity check matrix:' )
264
- print ()
265
- for num in parity_check_matrix :
266
- print (format (num , '#0{0}b' .format (n + 2 )))
267
- print ()
268
- print ('A generator matrix:' )
269
- print ()
270
- for num in generator_matrix :
271
- print (format (num , '#0{0}b' .format (n + 2 )))
272
244
syndrome_decoding_table = generate_syndrome_decoding_table (
273
245
generator_matrix = generator_matrix ,
274
246
parity_check_matrix = parity_check_matrix ,
275
247
n = n ,
276
248
k = k ,
277
249
d = d )
278
- for key in syndrome_decoding_table .keys ():
279
- print ()
280
- print (format (key , '#0{0}b' .format (k + 2 )))
281
- print ('---------' )
282
- for word in syndrome_decoding_table [key ]:
283
- print (format (word , '#0{0}b' .format (n + 2 )))
284
250
for key in syndrome_decoding_table .keys ():
285
251
if key == 0 :
286
252
continue
@@ -309,21 +275,17 @@ def test_read_file_to_dict(self):
309
275
zero_word_counter = 0
310
276
word_counter = 0
311
277
for key in dictionary .keys ():
312
- print ()
313
- print ('{0:0>{width}b}' .format (key , width = r ))
314
- print ('---------' )
315
278
for word in dictionary [key ]:
316
279
if word == 0 :
317
280
zero_word_counter += 1
318
- print ('{0:0>{width}b}' .format (word , width = n ))
319
281
word_counter += 1
320
282
assert zero_word_counter <= 1
321
283
assert word_counter > 2 ** r
322
284
323
285
def test_code (self ):
324
286
config = yaml .safe_load (open ('config-test.yml' ))
325
287
for i in range (2 ** self .k ):
326
- code , distorted_code , error = linearcode .code (
288
+ code , distorted_code , error = linearcode .encode (
327
289
coder_file = config ['coder-generator-test' ],
328
290
message = i ,
329
291
m_length = self .k ,
@@ -336,13 +298,8 @@ def test_code(self):
336
298
num_col_m2 = 1
337
299
),
338
300
number_of_columns = 1 )[0 ] == 0
339
- print ()
340
- print ('Message: {0}\n ' .format (i ))
341
- print ('Code: {0:0>{width}b}\n ' .format (code , width = self .n ))
342
- print ('Distorted code: {0:0>{width}b}\n ' .format (distorted_code , width = self .n ))
343
- print ('Error: {0:0>{width}b}\n ' .format (error , width = self .n ))
344
301
for i in range (2 ** self .k ):
345
- code , distorted_code , error = linearcode .code (
302
+ code , distorted_code , error = linearcode .encode (
346
303
coder_file = config ['coder-generator-test' ],
347
304
message = i ,
348
305
m_length = self .k )
@@ -359,7 +316,7 @@ def test_code(self):
359
316
def test_code_exception (self ):
360
317
config = yaml .safe_load (open ('config-test.yml' ))
361
318
with self .assertRaises (ValueError ):
362
- linearcode .code (
319
+ linearcode .encode (
363
320
coder_file = config ['coder-generator-test' ],
364
321
message = 1 ,
365
322
m_length = 2 ,
@@ -375,18 +332,15 @@ def test_decode(self):
375
332
distorted_code = int ('110010000110111000100' , 2 )
376
333
)
377
334
assert decoded_message == message
378
- print ()
379
- print (decoded_message )
380
335
381
336
def test_code_decode (self ):
382
337
config = yaml .safe_load (open ('config-test.yml' ))
383
338
number_of_unfixed_errors = 0
384
- print ()
385
339
number_of_repetitions = 100
386
340
for i in range (number_of_repetitions ):
387
341
message = random .randrange (2 ** self .k )
388
342
rand_error = get_random_number_of_hamming_weight (self .n , int ((self .d - 1 ) / 2 ))
389
- code , distorted_code , error = linearcode .code (
343
+ code , distorted_code , error = linearcode .encode (
390
344
coder_file = config ['coder-generator-test' ],
391
345
message = message ,
392
346
m_length = self .k ,
@@ -400,12 +354,7 @@ def test_code_decode(self):
400
354
)
401
355
if decoded != message :
402
356
number_of_unfixed_errors += 1
403
- print ('Message is {0}, distorted code is {1:0>{width}b}, error is {2:0>{width}b}, deciphered is {3}'
404
- .format (message , distorted_code , rand_error , decoded , width = self .n ))
405
- print ()
406
357
assert number_of_unfixed_errors == 0
407
- print ('Number of errors which weren\' t fixed is {0}, the rate is {1}'
408
- .format (number_of_unfixed_errors , number_of_unfixed_errors / number_of_repetitions ))
409
358
410
359
def test_get_random_number_of_hamming_weight (self ):
411
360
for i in range (100 ):
@@ -424,5 +373,6 @@ def test_get_random_number_of_hamming_weight_exception(self):
424
373
def tearDownClass (cls ) -> None :
425
374
remove_files ()
426
375
376
+
427
377
if __name__ == '__main__' :
428
378
unittest .main ()
0 commit comments