| 407 | |
| 408 | #[test] |
| 409 | fn test_packed_decoder() { |
| 410 | let mut rng = rng(); |
| 411 | let len: usize = rng.random_range(512..1024); |
| 412 | |
| 413 | let mut expected = BooleanBufferBuilder::new(len); |
| 414 | let mut encoder = RleEncoder::new(1, 1024); |
| 415 | for _ in 0..len { |
| 416 | let bool = rng.random_bool(0.8); |
| 417 | encoder.put(bool as u64); |
| 418 | expected.append(bool); |
| 419 | } |
| 420 | assert_eq!(expected.len(), len); |
| 421 | |
| 422 | let encoded = encoder.consume(); |
| 423 | let mut decoder = PackedDecoder::new(); |
| 424 | decoder.set_data(Encoding::RLE, encoded.into()); |
| 425 | |
| 426 | // Decode data in random length intervals |
| 427 | let mut decoded = BooleanBufferBuilder::new(len); |
| 428 | loop { |
| 429 | let remaining = len - decoded.len(); |
| 430 | if remaining == 0 { |
| 431 | break; |
| 432 | } |
| 433 | |
| 434 | let to_read = rng.random_range(1..=remaining); |
| 435 | decoder.read(&mut decoded, to_read).unwrap(); |
| 436 | } |
| 437 | |
| 438 | assert_eq!(decoded.len(), len); |
| 439 | assert_eq!(decoded.as_slice(), expected.as_slice()); |
| 440 | } |
| 441 | |
| 442 | #[test] |
| 443 | fn test_packed_decoder_skip() { |