-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Here is an example of a program that panics:
use std::time::Instant;
use raptor_code::{decode_source_block, encode_source_block};
fn main() {
let source_block_size = 100 * 4;
// Following works fine
// let source_block_size = 100 * 5;
let packet_size = 140;
let mut source_block = Vec::with_capacity(source_block_size);
let mut c = 0u8;
for _ in 0..source_block_size {
source_block.push(c);
c = c.wrapping_add(1);
}
dbg!(source_block.len());
let start_encode_at = Instant::now();
let max_source_symbols = (source_block_size as f64 / packet_size as f64).ceil() as usize;
dbg!(max_source_symbols);
let (encoded_blocks, k) = encode_source_block(&source_block, max_source_symbols, 2);
println!("Data encoded for {:?}", start_encode_at.elapsed());
println!("Encoded blocks: {}, {k}", encoded_blocks.len());
println!("Block 0 size: {}", encoded_blocks[0].len());
println!("Total encoded data size: {}", encoded_blocks.iter().map(|b| b.len()).sum::<usize>());
let mut received_blocks = Vec::with_capacity(encoded_blocks.len());
for (i, encoded_block) in encoded_blocks.into_iter().enumerate() {
if i < 1 {
received_blocks.push(None);
} else {
received_blocks.push(Some(encoded_block));
}
}
let start_decode_at = Instant::now();
let Some(decoded_data) = decode_source_block(&received_blocks, k as usize, source_block_size) else {
println!("!!! Unable to decode data !!!");
return;
};
println!("Data decoded for {:?}", start_decode_at.elapsed());
println!("Decoded data size: {}", &decoded_data.len());
println!("Decoded data: {:?}", &decoded_data[..100]);
}When run it got a panic error:
$ cargo run --release
Compiling fec-test v0.1.0 (/home/user/projects/fec-test)
Finished `release` profile [optimized] target(s) in 0.14s
Running `target/release/fec-test`
[src/main.rs:14:5] source_block.len() = 400
[src/main.rs:18:5] max_source_symbols = 3
thread 'main' panicked at /home/user/projects/raptor/src/sparse_matrix.rs:90:46:
index out of bounds: the len is 0 but the index is 0
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels