lpn 0.2.0

Software to study attacks on the Learning Parity with Noise problem
Documentation
#![feature(test)]
extern crate lpn;
extern crate m4ri_rust;
extern crate test;

#[cfg(any(feature = "hamming", feature = "golay", feature = "bogosrnd"))]
macro_rules! bench_code {
    ($name:ident, $code:expr) => {
        #[cfg(feature = "codes")]
        mod $name {
            use crate::test::Bencher;
            use lpn::codes::*;
            use m4ri_rust::friendly::*;

            #[bench]
            fn random_vector_dimension(b: &mut Bencher) {
                let code = $code;

                b.iter(|| BinVector::random(code.dimension()));
            }

            #[bench]
            fn random_vector_length(b: &mut Bencher) {
                let code = $code;

                b.iter(|| BinVector::random(code.length()));
            }

            #[bench]
            fn encode(b: &mut Bencher) {
                let code = $code;

                b.iter(|| {
                    let i = BinVector::random(code.dimension());
                    code.encode(&i)
                });
            }

            #[bench]
            fn decode_to_code(b: &mut Bencher) {
                let code = $code;

                b.iter(|| {
                    let i = BinVector::random(code.length());
                    code.decode_to_code(&i)
                });
            }

            #[bench]
            fn decode_to_message(b: &mut Bencher) {
                let code = $code;

                b.iter(|| {
                    let i = BinVector::random(code.length());
                    code.decode_to_message(&i)
                });
            }
        }
    };
}

#[cfg(feature = "hamming")]
bench_code!(hamming_3_1, HammingCode3_1);
#[cfg(feature = "hamming")]
bench_code!(hamming_7_4, HammingCode7_4);
#[cfg(feature = "hamming")]
bench_code!(hamming_15_11, HammingCode15_11);
#[cfg(feature = "hamming")]
bench_code!(hamming_31_26, HammingCode31_26);
#[cfg(feature = "hamming")]
bench_code!(hamming_63_57, HammingCode63_57);
#[cfg(feature = "hamming")]
bench_code!(hamming_127_120, HammingCode127_120);
#[cfg(feature = "golay")]
bench_code!(golay_23_12, GolayCode23_12);
#[cfg(feature = "golay")]
bench_code!(golay_24_12, GolayCode24_12);
#[cfg(feature = "bogosrnd")]
bench_code!(bogosrnd_18_6, BogosrndCode18_6);