@@ -359,5 +359,141 @@ def test_methods(self) -> None:
359359 assert result_peel is not None
360360
361361
362+ class TestMinSumBpDecoder :
363+ """Tests for MinSumBpDecoder via MinSumBpBuilder."""
364+
365+ def test_create_decoder (self ) -> None :
366+ """Test construction via builder."""
367+ from pecos_rslib .decoders import MinSumBpBuilder
368+
369+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
370+ decoder = MinSumBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).build ()
371+
372+ assert decoder is not None
373+
374+ def test_decode_trivial (self ) -> None :
375+ """Test decoding zero syndrome."""
376+ from pecos_rslib .decoders import MinSumBpBuilder
377+
378+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
379+ decoder = MinSumBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).build ()
380+
381+ result = decoder .decode ([0 , 0 ])
382+ assert result .converged
383+ assert result .decoding == [0 , 0 , 0 ]
384+
385+ def test_decode_single_error (self ) -> None :
386+ """Test decoding a single-error syndrome."""
387+ from pecos_rslib .decoders import MinSumBpBuilder
388+
389+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
390+ decoder = MinSumBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).build ()
391+
392+ result = decoder .decode ([1 , 0 ])
393+ assert result .converged
394+ assert result .decoding == [1 , 0 , 0 ]
395+
396+ def test_builder_chaining (self ) -> None :
397+ """Test builder method chaining."""
398+ from pecos_rslib .decoders import MinSumBpBuilder
399+
400+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
401+ decoder = MinSumBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).max_iter (100 ).alpha (0.8 ).gamma0 (0.5 ).build ()
402+
403+ result = decoder .decode ([0 , 0 ])
404+ assert result .converged
405+
406+ def test_properties (self ) -> None :
407+ """Test check_count and bit_count properties."""
408+ from pecos_rslib .decoders import MinSumBpBuilder
409+
410+ H = [[1 , 1 , 0 , 0 ], [0 , 1 , 1 , 0 ], [0 , 0 , 1 , 1 ]]
411+ decoder = MinSumBpBuilder (H , error_priors = [0.01 , 0.01 , 0.01 , 0.01 ]).build ()
412+
413+ assert decoder .check_count == 3
414+ assert decoder .bit_count == 4
415+
416+
417+ class TestRelayBpDecoder :
418+ """Tests for RelayBpDecoder via RelayBpBuilder."""
419+
420+ def test_create_decoder (self ) -> None :
421+ """Test construction via builder."""
422+ from pecos_rslib .decoders import RelayBpBuilder
423+
424+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
425+ decoder = RelayBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).build ()
426+
427+ assert decoder is not None
428+
429+ def test_decode_trivial (self ) -> None :
430+ """Test decoding zero syndrome."""
431+ from pecos_rslib .decoders import RelayBpBuilder
432+
433+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
434+ decoder = RelayBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).seed (42 ).build ()
435+
436+ result = decoder .decode ([0 , 0 ])
437+ assert result .converged
438+ assert result .decoding == [0 , 0 , 0 ]
439+
440+ def test_decode_single_error (self ) -> None :
441+ """Test decoding a single-error syndrome."""
442+ from pecos_rslib .decoders import RelayBpBuilder
443+
444+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
445+ decoder = RelayBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ]).seed (42 ).build ()
446+
447+ result = decoder .decode ([1 , 0 ])
448+ assert result .converged
449+ assert result .decoding == [1 , 0 , 0 ]
450+
451+ def test_builder_chaining (self ) -> None :
452+ """Test builder method chaining with relay-specific options."""
453+ from pecos_rslib .decoders import RelayBpBuilder
454+
455+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
456+ decoder = (
457+ RelayBpBuilder (H , error_priors = [0.003 , 0.003 , 0.003 ])
458+ .max_iter (100 )
459+ .gamma0 (0.9 )
460+ .pre_iter (40 )
461+ .num_sets (20 )
462+ .set_max_iter (30 )
463+ .seed (42 )
464+ .stopping ("n_conv_1" )
465+ .build ()
466+ )
467+
468+ result = decoder .decode ([0 , 0 ])
469+ assert result .converged
470+
471+ def test_properties (self ) -> None :
472+ """Test check_count and bit_count properties."""
473+ from pecos_rslib .decoders import RelayBpBuilder
474+
475+ H = [[1 , 1 , 0 , 0 ], [0 , 1 , 1 , 0 ], [0 , 0 , 1 , 1 ]]
476+ decoder = RelayBpBuilder (H , error_priors = [0.01 , 0.01 , 0.01 , 0.01 ]).build ()
477+
478+ assert decoder .check_count == 3
479+ assert decoder .bit_count == 4
480+
481+ def test_seed_reproducibility (self ) -> None :
482+ """Test that same seed gives same results."""
483+ from pecos_rslib .decoders import RelayBpBuilder
484+
485+ H = [[1 , 1 , 0 ], [0 , 1 , 1 ]]
486+ priors = [0.003 , 0.003 , 0.003 ]
487+
488+ d1 = RelayBpBuilder (H , error_priors = priors ).seed (123 ).build ()
489+ d2 = RelayBpBuilder (H , error_priors = priors ).seed (123 ).build ()
490+
491+ r1 = d1 .decode ([1 , 0 ])
492+ r2 = d2 .decode ([1 , 0 ])
493+
494+ assert r1 .decoding == r2 .decoding
495+ assert r1 .converged == r2 .converged
496+
497+
362498if __name__ == "__main__" :
363499 pytest .main ([__file__ , "-v" ])
0 commit comments