Skip to content

Commit

Permalink
Move compute_l() from test to stern module and use stern algorithm in…
Browse files Browse the repository at this point in the history
…stead of prange in main
  • Loading branch information
gwafotapa committed Aug 16, 2020
1 parent 259ab57 commit a0c9fdb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 20 deletions.
7 changes: 5 additions & 2 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use log::debug;
use main_error::MainError;
use std::env;

use information_set_decoding::{instance::Instance, prange};
use information_set_decoding::{instance::Instance, stern};

// type Result<T> = std::result::Result<T, Box<dyn Error>>;

Expand All @@ -22,7 +22,10 @@ fn main() -> std::result::Result<(), MainError> {
inst.h(),
inst.s()
);
let e = prange::prange(&inst, None).unwrap();
let k = inst.n() - inst.h().rows();
let p = 2;
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
for i in 0..e.rows() {
print!("{}", e[i]);
}
Expand Down
11 changes: 11 additions & 0 deletions src/stern/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,3 +120,14 @@ pub fn stern_list_weighted_vectors(n: usize, w: usize) -> Vec<WeightedVector> {
}
list
}

pub fn compute_l(k: usize, p: usize) -> usize {
let mut l = 0;
let mut tmp = num_integer::binomial(k - k / 2, p);
tmp >>= 1;
while tmp != 0 {
l += 1;
tmp >>= 1;
}
l
}
25 changes: 7 additions & 18 deletions tests/stern.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,12 @@ fn list_weighted_vectors() {
println!("{:?}", l);
}

fn compute_l(k: usize, p: usize) -> usize {
let mut l = 0;
let mut tmp = num_integer::binomial(k - k / 2, p);
tmp >>= 1;
while tmp != 0 {
l += 1;
tmp >>= 1;
}
l
}

#[test]
fn stern_10_0() {
let inst = Instance::read_instance("instances/SD_10_0").unwrap();
let k = inst.h().cols() - inst.h().rows();
let p = 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
assert_eq!(inst.h() * e, *inst.s());
}
Expand All @@ -40,7 +29,7 @@ fn stern_20_0() {
let inst = Instance::read_instance("instances/SD_20_0").unwrap();
let k = inst.h().cols() - inst.h().rows();
let p = 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
assert_eq!(inst.h() * e, *inst.s());
}
Expand All @@ -50,7 +39,7 @@ fn stern_100_0() {
let inst = Instance::read_instance("instances/SD_100_0").unwrap();
let k = inst.h().cols() - inst.h().rows();
let p = 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
assert_eq!(inst.h() * e, *inst.s());
}
Expand All @@ -61,7 +50,7 @@ fn stern_200_0() {
let inst = Instance::read_instance("instances/SD_200_0").unwrap();
let k = inst.h().cols() - inst.h().rows();
let p = 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
assert_eq!(inst.h() * e, *inst.s());
}
Expand All @@ -72,7 +61,7 @@ fn stern_300_0() {
let inst = Instance::read_instance("instances/SD_300_0").unwrap();
let k = inst.h().cols() - inst.h().rows();
let p = 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let e = stern::stern(&inst, p, l, None).unwrap();
assert_eq!(inst.h() * e, *inst.s());
}
Expand All @@ -83,7 +72,7 @@ fn stern_300_0() {
// let inst = Instance::read_instance("instances/stern_10").unwrap();
// let k = inst.h().cols() - inst.h().rows();
// let p = 2;
// let l = compute_l(k, p);
// let l = stern::compute_l(k, p);
// debug!(
// "n={} k={} w={} p={} l={}\n",
// inst.n(),
Expand All @@ -101,7 +90,7 @@ fn stern_with_solution_10() {
common::log_setup();
let (n, w, p) = (10, 4, 2);
let k = n / 2;
let l = compute_l(k, p);
let l = stern::compute_l(k, p);
let (inst, x) = generate_instance_with_solution(n, w, p, l);
assert!(x.weight() == w);
assert_eq!(inst.h() * &x, *inst.s());
Expand Down

0 comments on commit a0c9fdb

Please sign in to comment.