Refactor main function to implement encoding and decoding logic with detailed verification
This commit is contained in:
64
src/main.rs
64
src/main.rs
@ -1,8 +1,66 @@
|
||||
use fountain_engine::Encoder;
|
||||
use fountain_engine::{DataOperator, DecodeStatus, Decoder, Encoder};
|
||||
use fountain_scheme::RandomLTCode;
|
||||
use fountain_scheme::validation::pseudo_rand::XorShift64;
|
||||
use fountain_utility::VecDataOperater;
|
||||
|
||||
fn main() {
|
||||
let code_scheme = RandomLTCode::new_from_ideal_solsuiton(k, XorShift64::new(0xFEED));
|
||||
let encoder = Encoder::new(code_scheme);
|
||||
let k = 25;
|
||||
let symbol_size = 8;
|
||||
|
||||
let mut message_vectors = vec![vec![0u8; symbol_size]; k];
|
||||
for i in 0..k {
|
||||
for j in 0..symbol_size {
|
||||
message_vectors[i][j] = ((i * 31 + j * 17) % 256) as u8;
|
||||
}
|
||||
}
|
||||
|
||||
let mut encoder_store = VecDataOperater::new(symbol_size);
|
||||
for (i, vector) in message_vectors.iter().enumerate() {
|
||||
encoder_store.insert_vector(vector, i);
|
||||
}
|
||||
|
||||
let code_scheme = RandomLTCode::new_from_ideal_soliton(k, XorShift64::new(0xFEED));
|
||||
let mut encoder = Encoder::new_with_operator(code_scheme.clone(), Box::new(encoder_store));
|
||||
|
||||
let mut decoder =
|
||||
Decoder::new_with_operator(code_scheme, Box::new(VecDataOperater::new(symbol_size)));
|
||||
|
||||
let coded_start = k;
|
||||
let max_coded_symbols = k * 20;
|
||||
let mut symbols_used = 0;
|
||||
for offset in 0..max_coded_symbols {
|
||||
let coded_id = coded_start + offset;
|
||||
let _ = encoder.encode_coded_vector(coded_id);
|
||||
let coded_vector = encoder.manager.get_coded_vector(coded_id);
|
||||
symbols_used += 1;
|
||||
let status = decoder.add_coded_vector(coded_id, &coded_vector);
|
||||
if status == DecodeStatus::Decoded {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if decoder.decode_status() != DecodeStatus::Decoded {
|
||||
println!("Decoding failed after {} coded symbols", symbols_used);
|
||||
return;
|
||||
}
|
||||
|
||||
let mut all_correct = true;
|
||||
for i in 0..k {
|
||||
let original = &message_vectors[i];
|
||||
let decoded = decoder.manager.get_data_vector(i);
|
||||
if original.as_slice() != decoded {
|
||||
all_correct = false;
|
||||
println!("Mismatch at source symbol {}", i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if all_correct {
|
||||
println!(
|
||||
"Decode successful: recovered {} source symbols using {} coded symbols",
|
||||
k, symbols_used
|
||||
);
|
||||
} else {
|
||||
println!("Decoding completed but verification failed");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user