• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

vigna / dsi-bitstream-rs / 13900776091

17 Mar 2025 01:33PM UTC coverage: 51.712% (-5.4%) from 57.076%
13900776091

push

github

zommiommy
fixed fuzz

55 of 63 new or added lines in 1 file covered. (87.3%)

352 existing lines in 17 files now uncovered.

1843 of 3564 relevant lines covered (51.71%)

1876724.76 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.61
/src/fuzz/codes.rs
1
/*
2
 * SPDX-FileCopyrightText: 2023 Inria
3
 *
4
 * SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
5
 */
6

7
use crate::prelude::*;
8
use arbitrary::Arbitrary;
9
use std::io::{Read, Write};
10

11
type ReadWord = u32;
12

13
const DEBUG: bool = false;
14

15
macro_rules! debug {
16
    ($($arg:tt)*) => {
17
        if DEBUG {
18
            print!($($arg)*);
19
        }
20
    };
21
}
22

23
macro_rules! debugln {
24
    ($($arg:tt)*) => {
25
        if DEBUG {
26
            println!($($arg)*);
27
        }
28
    };
29
}
30

31
#[derive(Arbitrary, Debug, Clone)]
32
pub struct FuzzCase {
33
    commands: Vec<RandomCommand>,
34
}
35

36
#[derive(Arbitrary, Debug, Clone)]
37
enum RandomCommand {
38
    Bits(u64, usize),
39
    MinimalBinary(u64, u64),
40
    Unary(u64),
41
    Gamma(u64, bool, bool),
42
    Delta(u64, bool, bool),
43
    Zeta(u64, usize, bool, bool),
44
    Golomb(u64, u64),
45
    Rice(u64, usize),
46
    ExpGolomb(u64, usize),
47
    Bytes(Vec<u8>),
48
    VByteBe(u64),
49
    VByteLe(u64),
50
    Omega(u64),
51
    Pi(u64, usize),
52
}
53

54
pub fn harness(data: FuzzCase) {
469✔
55
    let mut data = data;
469✔
56
    for command in &mut data.commands {
2,699✔
UNCOV
57
        match command {
×
58
            RandomCommand::Bits(value, n_bits) => {
161✔
59
                *n_bits = 1 + (*n_bits % 63);
161✔
60
                *value &= (1 << *n_bits) - 1;
161✔
61
            }
62
            RandomCommand::MinimalBinary(value, max) => {
9✔
63
                *max = (*max).max(1).min(u32::MAX as _);
9✔
64
                *value = (*value) % *max;
9✔
65
            }
66
            RandomCommand::Unary(value) => {
55✔
67
                *value = (*value).min(300);
55✔
68
            }
69
            RandomCommand::Gamma(value, _, _) => {
3✔
70
                *value = (*value).min(u64::MAX - 1);
3✔
71
            }
72
            RandomCommand::Delta(value, _, _) => {
25✔
73
                *value = (*value).min(u64::MAX - 1);
25✔
74
            }
75
            RandomCommand::Zeta(value, k, _, _) => {
435✔
76
                *value = (*value).min(u32::MAX as u64 - 1);
435✔
77
                *k = (*k).max(1).min(7);
435✔
78
            }
79
            RandomCommand::Golomb(value, b) => {
58✔
80
                *value = (*value).min(u16::MAX as u64 - 1);
58✔
81
                *b = (*b).max(1).min(20);
58✔
82
            }
83
            RandomCommand::Rice(value, k) => {
21✔
84
                *value = (*value).min(u16::MAX as u64 - 1);
21✔
85
                *k = (*k).max(0).min(8);
21✔
86
            }
87
            RandomCommand::ExpGolomb(value, k) => {
69✔
88
                *value = (*value).min(u16::MAX as u64 - 1);
69✔
89
                *k = (*k).max(0).min(8);
69✔
90
            }
91
            RandomCommand::Bytes(_) => {}
30✔
92
            RandomCommand::VByteLe(_) => {}
75✔
93
            RandomCommand::VByteBe(_) => {}
16✔
94
            RandomCommand::Omega(value) => {
10✔
95
                *value = (*value).min(u64::MAX - 1);
10✔
96
            }
97
            RandomCommand::Pi(value, k) => {
148✔
98
                *value = (*value).min(u32::MAX as u64 - 1);
148✔
99
                *k = (*k).max(1).min(7);
148✔
100
            }
101
        };
102
    }
103

104
    debugln!("{:#4?}", data);
469✔
105

106
    let mut buffer_be: Vec<u64> = vec![];
469✔
107
    let mut buffer_le: Vec<u64> = vec![];
469✔
108
    let mut writes = vec![];
469✔
109
    // write
110
    {
111
        let mut big = BufBitWriter::<BE, _>::new(MemWordWriterVec::new(&mut buffer_be));
469✔
112
        let mut little = BufBitWriter::<LE, _>::new(MemWordWriterVec::new(&mut buffer_le));
469✔
113

114
        for command in data.commands.iter() {
1,584✔
115
            match command {
1,115✔
116
                RandomCommand::Bits(value, n_bits) => {
161✔
117
                    let big_success = big.write_bits(*value, *n_bits).is_ok();
161✔
118
                    let little_success = little.write_bits(*value, *n_bits).is_ok();
161✔
119
                    assert_eq!(big_success, little_success);
161✔
120
                    writes.push(big_success);
161✔
121
                }
122
                RandomCommand::MinimalBinary(value, max) => {
9✔
123
                    let big_success = big.write_minimal_binary(*value, *max).is_ok();
9✔
124
                    let little_success = little.write_minimal_binary(*value, *max).is_ok();
9✔
125
                    assert_eq!(big_success, little_success);
9✔
126
                    writes.push(big_success);
9✔
127
                }
128
                RandomCommand::Unary(value) => {
55✔
129
                    let (big_success, little_success) = (
55✔
130
                        big.write_unary(*value as u64).is_ok(),
55✔
131
                        little.write_unary(*value as u64).is_ok(),
55✔
132
                    );
133
                    assert_eq!(big_success, little_success);
55✔
134
                    writes.push(big_success);
55✔
135
                }
136
                RandomCommand::Gamma(value, _, write_tab) => {
3✔
137
                    let (big_success, little_success) = if *write_tab {
6✔
138
                        (
139
                            big.write_gamma_param::<true>(*value).is_ok(),
1✔
140
                            little.write_gamma_param::<true>(*value).is_ok(),
1✔
141
                        )
142
                    } else {
143
                        (
144
                            big.write_gamma_param::<false>(*value).is_ok(),
2✔
145
                            little.write_gamma_param::<false>(*value).is_ok(),
2✔
146
                        )
147
                    };
148
                    assert_eq!(big_success, little_success);
3✔
149
                    writes.push(big_success);
3✔
150
                }
151
                RandomCommand::Delta(value, _, write_tab) => {
25✔
152
                    let (big_success, little_success) = if *write_tab {
50✔
153
                        (
154
                            big.write_delta_param::<true, false>(*value).is_ok(),
15✔
155
                            little.write_delta_param::<true, false>(*value).is_ok(),
15✔
156
                        )
157
                    } else {
158
                        (
159
                            big.write_delta_param::<false, false>(*value).is_ok(),
10✔
160
                            little.write_delta_param::<false, false>(*value).is_ok(),
10✔
161
                        )
162
                    };
163
                    assert_eq!(big_success, little_success);
25✔
164
                    writes.push(big_success);
25✔
165
                }
166
                RandomCommand::Zeta(value, k, _, write_tab) => {
435✔
167
                    let (big_success, little_success) = if *write_tab {
870✔
168
                        (
169
                            big.write_zeta_param::<true>(*value, *k).is_ok(),
381✔
170
                            little.write_zeta_param::<true>(*value, *k).is_ok(),
381✔
171
                        )
172
                    } else {
173
                        (
174
                            big.write_zeta_param::<false>(*value, *k).is_ok(),
54✔
175
                            little.write_zeta_param::<false>(*value, *k).is_ok(),
54✔
176
                        )
177
                    };
178
                    assert_eq!(big_success, little_success);
435✔
179
                    writes.push(big_success);
435✔
180
                }
181
                RandomCommand::Golomb(value, b) => {
58✔
182
                    let (big_success, little_success) = (
58✔
183
                        big.write_golomb(*value, *b).is_ok(),
58✔
184
                        little.write_golomb(*value, *b).is_ok(),
58✔
185
                    );
186
                    assert_eq!(big_success, little_success);
58✔
187
                    writes.push(big_success);
58✔
188
                }
189
                RandomCommand::Rice(value, k) => {
21✔
190
                    let (big_success, little_success) = (
21✔
191
                        big.write_rice(*value, *k).is_ok(),
21✔
192
                        little.write_rice(*value, *k).is_ok(),
21✔
193
                    );
194
                    assert_eq!(big_success, little_success);
21✔
195
                    writes.push(big_success);
21✔
196
                }
197
                RandomCommand::ExpGolomb(value, k) => {
69✔
198
                    let (big_success, little_success) = (
69✔
199
                        big.write_exp_golomb(*value, *k).is_ok(),
69✔
200
                        little.write_exp_golomb(*value, *k).is_ok(),
69✔
201
                    );
202
                    assert_eq!(big_success, little_success);
69✔
203
                    writes.push(big_success);
69✔
204
                }
205
                RandomCommand::Bytes(bytes) => {
30✔
206
                    let (big_success, little_success) =
30✔
207
                        (big.write(bytes).is_ok(), little.write(bytes).is_ok());
30✔
208
                    assert_eq!(big_success, little_success);
30✔
209
                    writes.push(big_success);
30✔
210
                }
211
                RandomCommand::VByteLe(value) => {
75✔
212
                    let (big_success, little_success) = (
75✔
213
                        big.write_vbyte_le(*value).is_ok(),
75✔
214
                        little.write_vbyte_le(*value).is_ok(),
75✔
215
                    );
216
                    assert_eq!(big_success, little_success);
75✔
217
                    writes.push(big_success);
75✔
218
                }
219
                RandomCommand::VByteBe(value) => {
16✔
220
                    let (big_success, little_success) = (
16✔
221
                        big.write_vbyte_be(*value).is_ok(),
16✔
222
                        little.write_vbyte_be(*value).is_ok(),
16✔
223
                    );
224
                    assert_eq!(big_success, little_success);
16✔
225
                    writes.push(big_success);
16✔
226
                }
227
                RandomCommand::Omega(value) => {
10✔
228
                    let (big_success, little_success) = (
10✔
229
                        big.write_omega(*value).is_ok(),
10✔
230
                        little.write_omega(*value).is_ok(),
10✔
231
                    );
232
                    assert_eq!(big_success, little_success);
10✔
233
                    writes.push(big_success);
10✔
234
                }
235
                RandomCommand::Pi(value, k) => {
148✔
236
                    let (big_success, little_success) = (
148✔
237
                        big.write_pi(*value, *k).is_ok(),
148✔
238
                        little.write_pi(*value, *k).is_ok(),
148✔
239
                    );
240
                    assert_eq!(big_success, little_success);
148✔
241
                    writes.push(big_success);
148✔
242
                }
243
            };
244
        }
245
    }
246
    // read back
247
    debug!("BE: ");
469✔
248
    for word in &buffer_be {
14,717✔
UNCOV
249
        debug!("{:064b} ", *word);
×
250
    }
UNCOV
251
    debug!("\n");
×
UNCOV
252
    debug!("LE: ");
×
253
    for word in &buffer_le {
14,717✔
UNCOV
254
        debug!("{:064b} ", *word);
×
255
    }
UNCOV
256
    debug!("\n");
×
257
    let be_trans: &[ReadWord] = unsafe {
258
        core::slice::from_raw_parts(
UNCOV
259
            buffer_be.as_ptr() as *const ReadWord,
×
UNCOV
260
            buffer_be.len() * (core::mem::size_of::<u64>() / core::mem::size_of::<ReadWord>()),
×
261
        )
262
    };
263
    let le_trans: &[ReadWord] = unsafe {
264
        core::slice::from_raw_parts(
UNCOV
265
            buffer_le.as_ptr() as *const ReadWord,
×
UNCOV
266
            buffer_le.len() * (core::mem::size_of::<u64>() / core::mem::size_of::<ReadWord>()),
×
267
        )
268
    };
269
    {
UNCOV
270
        let mut big = BitReader::<BE, _>::new(MemWordReader::new(&buffer_be));
×
UNCOV
271
        let mut big_buff = BufBitReader::<BE, _>::new(MemWordReader::new(be_trans));
×
272

UNCOV
273
        let mut little = BitReader::<LE, _>::new(MemWordReader::new(&buffer_le));
×
UNCOV
274
        let mut little_buff = BufBitReader::<LE, _>::new(MemWordReader::new(le_trans));
×
275

276
        for (succ, command) in writes.into_iter().zip(data.commands.into_iter()) {
1,115✔
277
            let pos = big.bit_pos().unwrap();
1,115✔
278
            assert_eq!(pos, little.bit_pos().unwrap());
1,115✔
279
            assert_eq!(pos, big_buff.bit_pos().unwrap());
1,115✔
280
            assert_eq!(pos, little_buff.bit_pos().unwrap());
1,115✔
281

282
            match command {
1,115✔
283
                RandomCommand::Bits(value, n_bits) => {
161✔
284
                    let b = big.read_bits(n_bits);
161✔
285
                    let l = little.read_bits(n_bits);
161✔
286
                    let bb = big_buff.read_bits(n_bits);
161✔
287
                    let lb = little_buff.read_bits(n_bits);
161✔
288
                    if succ {
161✔
289
                        let b = b.unwrap();
161✔
290
                        let l = l.unwrap();
161✔
291
                        let bb = bb.unwrap();
161✔
292
                        let lb = lb.unwrap();
161✔
293
                        assert_eq!(
161✔
294
                            b,
295
                            value,
UNCOV
296
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
297
                            b,
×
UNCOV
298
                            value,
×
UNCOV
299
                            n = n_bits as _
×
300
                        );
301
                        assert_eq!(
161✔
302
                            l,
303
                            value,
UNCOV
304
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
305
                            l,
×
UNCOV
306
                            value,
×
UNCOV
307
                            n = n_bits as _
×
308
                        );
309
                        assert_eq!(
161✔
310
                            bb,
311
                            value,
312
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
313
                            bb,
×
UNCOV
314
                            value,
×
UNCOV
315
                            n = n_bits as _
×
316
                        );
317
                        assert_eq!(
161✔
318
                            lb,
319
                            value,
320
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
321
                            lb,
×
UNCOV
322
                            value,
×
UNCOV
323
                            n = n_bits as _
×
324
                        );
325
                        assert_eq!(pos + n_bits as u64, big.bit_pos().unwrap());
161✔
326
                        assert_eq!(pos + n_bits as u64, little.bit_pos().unwrap());
161✔
327
                        assert_eq!(pos + n_bits as u64, big_buff.bit_pos().unwrap());
161✔
328
                        assert_eq!(pos + n_bits as u64, little_buff.bit_pos().unwrap());
161✔
329
                    } else {
UNCOV
330
                        assert!(b.is_err());
×
UNCOV
331
                        assert!(l.is_err());
×
UNCOV
332
                        assert!(bb.is_err());
×
333
                        assert!(lb.is_err());
×
334
                        assert_eq!(pos, big.bit_pos().unwrap());
×
335
                        assert_eq!(pos, little.bit_pos().unwrap());
×
336
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
337
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
338
                    }
339
                }
340

341
                RandomCommand::MinimalBinary(value, max) => {
9✔
342
                    let n_bits = len_minimal_binary(value, max) as u8;
9✔
343
                    let b = big.read_minimal_binary(max);
9✔
344
                    let l = little.read_minimal_binary(max);
9✔
345
                    let bb = big_buff.read_minimal_binary(max);
9✔
346
                    let lb = little_buff.read_minimal_binary(max);
9✔
347
                    if succ {
9✔
348
                        let b = b.unwrap();
9✔
349
                        let l = l.unwrap();
9✔
350
                        let bb = bb.unwrap();
9✔
351
                        let lb = lb.unwrap();
9✔
352
                        assert_eq!(
9✔
353
                            b,
354
                            value,
UNCOV
355
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
356
                            b,
×
UNCOV
357
                            value,
×
UNCOV
358
                            n = n_bits as _
×
359
                        );
360
                        assert_eq!(
9✔
361
                            l,
362
                            value,
UNCOV
363
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
364
                            l,
×
UNCOV
365
                            value,
×
UNCOV
366
                            n = n_bits as _
×
367
                        );
368
                        assert_eq!(
9✔
369
                            bb,
370
                            value,
371
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
372
                            bb,
×
UNCOV
373
                            value,
×
UNCOV
374
                            n = n_bits as _
×
375
                        );
376
                        assert_eq!(
9✔
377
                            lb,
378
                            value,
379
                            "\nread : {:0n$b}\ntruth: {:0n$b}",
×
UNCOV
380
                            lb,
×
UNCOV
381
                            value,
×
UNCOV
382
                            n = n_bits as _
×
383
                        );
384
                        assert_eq!(pos + n_bits as u64, big.bit_pos().unwrap());
9✔
385
                        assert_eq!(pos + n_bits as u64, little.bit_pos().unwrap());
9✔
386
                        assert_eq!(pos + n_bits as u64, big_buff.bit_pos().unwrap());
9✔
387
                        assert_eq!(pos + n_bits as u64, little_buff.bit_pos().unwrap());
9✔
388
                    } else {
UNCOV
389
                        assert!(b.is_err());
×
UNCOV
390
                        assert!(l.is_err());
×
UNCOV
391
                        assert!(bb.is_err());
×
392
                        assert!(lb.is_err());
×
393
                        assert_eq!(pos, big.bit_pos().unwrap());
×
394
                        assert_eq!(pos, little.bit_pos().unwrap());
×
395
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
396
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
397
                    }
398
                }
399

400
                RandomCommand::Unary(value) => {
55✔
401
                    let (b, l, bb, lb) = (
55✔
402
                        big.read_unary(),
55✔
403
                        little.read_unary(),
55✔
404
                        big_buff.read_unary(),
55✔
405
                        little_buff.read_unary(),
55✔
406
                    );
407
                    if succ {
55✔
408
                        assert_eq!(b.unwrap(), value as u64);
55✔
409
                        assert_eq!(l.unwrap(), value as u64);
55✔
410
                        assert_eq!(bb.unwrap(), value as u64);
55✔
411
                        assert_eq!(lb.unwrap(), value as u64);
55✔
412
                        assert_eq!(pos + value as u64 + 1, big.bit_pos().unwrap());
55✔
413
                        assert_eq!(pos + value as u64 + 1, little.bit_pos().unwrap());
55✔
414
                        assert_eq!(pos + value as u64 + 1, big_buff.bit_pos().unwrap());
55✔
415
                        assert_eq!(pos + value as u64 + 1, little_buff.bit_pos().unwrap());
55✔
416

417
                        assert_eq!(pos + value as u64 + 1, big.bit_pos().unwrap());
55✔
418
                        assert_eq!(pos + value as u64 + 1, little.bit_pos().unwrap());
55✔
419
                        assert_eq!(pos + value as u64 + 1, big_buff.bit_pos().unwrap());
55✔
420
                        assert_eq!(pos + value as u64 + 1, little_buff.bit_pos().unwrap());
55✔
421
                    } else {
UNCOV
422
                        assert!(b.is_err());
×
UNCOV
423
                        assert!(l.is_err());
×
UNCOV
424
                        assert!(bb.is_err());
×
UNCOV
425
                        assert!(lb.is_err());
×
UNCOV
426
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
427
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
428
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
429
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
430
                    }
431
                }
432

433
                RandomCommand::Gamma(value, read_tab, _) => {
3✔
434
                    let (b, l, bb, lb) = if read_tab {
6✔
435
                        (
436
                            big.read_gamma_param::<true>(),
1✔
437
                            little.read_gamma_param::<true>(),
1✔
438
                            big_buff.read_gamma_param::<true>(),
1✔
439
                            little_buff.read_gamma_param::<true>(),
1✔
440
                        )
441
                    } else {
442
                        (
443
                            big.read_gamma_param::<false>(),
2✔
444
                            little.read_gamma_param::<false>(),
2✔
445
                            big_buff.read_gamma_param::<false>(),
2✔
446
                            little_buff.read_gamma_param::<false>(),
2✔
447
                        )
448
                    };
449
                    if succ {
3✔
450
                        assert_eq!(b.unwrap(), value);
3✔
451
                        assert_eq!(l.unwrap(), value);
3✔
452
                        assert_eq!(bb.unwrap(), value);
3✔
453
                        assert_eq!(lb.unwrap(), value);
3✔
454
                        assert_eq!(
3✔
455
                            pos + len_gamma_param::<false>(value) as u64,
3✔
456
                            big.bit_pos().unwrap()
3✔
457
                        );
458
                        assert_eq!(
3✔
459
                            pos + len_gamma_param::<false>(value) as u64,
3✔
460
                            little.bit_pos().unwrap()
3✔
461
                        );
462
                        assert_eq!(
3✔
463
                            pos + len_gamma_param::<false>(value) as u64,
3✔
464
                            big_buff.bit_pos().unwrap()
3✔
465
                        );
466
                        assert_eq!(
3✔
467
                            pos + len_gamma_param::<false>(value) as u64,
3✔
468
                            little_buff.bit_pos().unwrap()
3✔
469
                        );
470
                        assert_eq!(
3✔
471
                            pos + len_gamma_param::<true>(value) as u64,
3✔
472
                            big.bit_pos().unwrap()
3✔
473
                        );
474
                        assert_eq!(
3✔
475
                            pos + len_gamma_param::<true>(value) as u64,
3✔
476
                            little.bit_pos().unwrap()
3✔
477
                        );
478
                        assert_eq!(
3✔
479
                            pos + len_gamma_param::<true>(value) as u64,
3✔
480
                            big_buff.bit_pos().unwrap()
3✔
481
                        );
482
                        assert_eq!(
3✔
483
                            pos + len_gamma_param::<true>(value) as u64,
3✔
484
                            little_buff.bit_pos().unwrap()
3✔
485
                        );
486
                    } else {
UNCOV
487
                        assert!(b.is_err());
×
UNCOV
488
                        assert!(l.is_err());
×
UNCOV
489
                        assert!(bb.is_err());
×
UNCOV
490
                        assert!(lb.is_err());
×
UNCOV
491
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
492
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
493
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
494
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
495
                    }
496
                }
497

498
                RandomCommand::Delta(value, read_tab, _) => {
25✔
499
                    let (b, l, bb, lb) = if read_tab {
50✔
500
                        (
501
                            big.read_delta_param::<true, false>(),
15✔
502
                            little.read_delta_param::<true, false>(),
15✔
503
                            big_buff.read_delta_param::<true, false>(),
15✔
504
                            little_buff.read_delta_param::<true, false>(),
15✔
505
                        )
506
                    } else {
507
                        (
508
                            big.read_delta_param::<false, false>(),
10✔
509
                            little.read_delta_param::<false, false>(),
10✔
510
                            big_buff.read_delta_param::<false, false>(),
10✔
511
                            little_buff.read_delta_param::<false, false>(),
10✔
512
                        )
513
                    };
514
                    if succ {
25✔
515
                        assert_eq!(b.unwrap(), value);
25✔
516
                        assert_eq!(l.unwrap(), value);
25✔
517
                        assert_eq!(bb.unwrap(), value);
25✔
518
                        assert_eq!(lb.unwrap(), value);
25✔
519
                        assert_eq!(
25✔
520
                            pos + len_delta_param::<true, true>(value) as u64,
25✔
521
                            big.bit_pos().unwrap()
25✔
522
                        );
523
                        assert_eq!(
25✔
524
                            pos + len_delta_param::<true, true>(value) as u64,
25✔
525
                            little.bit_pos().unwrap()
25✔
526
                        );
527
                        assert_eq!(
25✔
528
                            pos + len_delta_param::<true, true>(value) as u64,
25✔
529
                            big_buff.bit_pos().unwrap()
25✔
530
                        );
531
                        assert_eq!(
25✔
532
                            pos + len_delta_param::<true, true>(value) as u64,
25✔
533
                            little_buff.bit_pos().unwrap()
25✔
534
                        );
535
                        assert_eq!(
25✔
536
                            pos + len_delta_param::<false, true>(value) as u64,
25✔
537
                            big.bit_pos().unwrap()
25✔
538
                        );
539
                        assert_eq!(
25✔
540
                            pos + len_delta_param::<false, true>(value) as u64,
25✔
541
                            little.bit_pos().unwrap()
25✔
542
                        );
543
                        assert_eq!(
25✔
544
                            pos + len_delta_param::<false, true>(value) as u64,
25✔
545
                            big_buff.bit_pos().unwrap()
25✔
546
                        );
547
                        assert_eq!(
25✔
548
                            pos + len_delta_param::<false, true>(value) as u64,
25✔
549
                            little_buff.bit_pos().unwrap()
25✔
550
                        );
551
                        assert_eq!(
25✔
552
                            pos + len_delta_param::<true, false>(value) as u64,
25✔
553
                            big.bit_pos().unwrap()
25✔
554
                        );
555
                        assert_eq!(
25✔
556
                            pos + len_delta_param::<true, false>(value) as u64,
25✔
557
                            little.bit_pos().unwrap()
25✔
558
                        );
559
                        assert_eq!(
25✔
560
                            pos + len_delta_param::<true, false>(value) as u64,
25✔
561
                            big_buff.bit_pos().unwrap()
25✔
562
                        );
563
                        assert_eq!(
25✔
564
                            pos + len_delta_param::<true, false>(value) as u64,
25✔
565
                            little_buff.bit_pos().unwrap()
25✔
566
                        );
567
                        assert_eq!(
25✔
568
                            pos + len_delta_param::<false, false>(value) as u64,
25✔
569
                            big.bit_pos().unwrap()
25✔
570
                        );
571
                        assert_eq!(
25✔
572
                            pos + len_delta_param::<false, false>(value) as u64,
25✔
573
                            little.bit_pos().unwrap()
25✔
574
                        );
575
                        assert_eq!(
25✔
576
                            pos + len_delta_param::<false, false>(value) as u64,
25✔
577
                            big_buff.bit_pos().unwrap()
25✔
578
                        );
579
                        assert_eq!(
25✔
580
                            pos + len_delta_param::<false, false>(value) as u64,
25✔
581
                            little_buff.bit_pos().unwrap()
25✔
582
                        );
583
                    } else {
UNCOV
584
                        assert!(b.is_err());
×
UNCOV
585
                        assert!(l.is_err());
×
UNCOV
586
                        assert!(bb.is_err());
×
UNCOV
587
                        assert!(lb.is_err());
×
UNCOV
588
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
589
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
590
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
591
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
592
                    }
593
                }
594

595
                RandomCommand::Zeta(value, k, read_tab, _) => {
435✔
596
                    let (b, l, bb, lb) = if k == 3 {
870✔
597
                        if read_tab {
×
598
                            (
599
                                big.read_zeta3_param::<true>(),
×
600
                                little.read_zeta3_param::<true>(),
×
601
                                big_buff.read_zeta3_param::<true>(),
×
602
                                little_buff.read_zeta3_param::<true>(),
×
603
                            )
604
                        } else {
605
                            (
UNCOV
606
                                big.read_zeta3_param::<false>(),
×
UNCOV
607
                                little.read_zeta3_param::<false>(),
×
UNCOV
608
                                big_buff.read_zeta3_param::<false>(),
×
UNCOV
609
                                little_buff.read_zeta3_param::<false>(),
×
610
                            )
611
                        }
612
                    } else {
613
                        (
614
                            big.read_zeta_param(k),
435✔
615
                            little.read_zeta_param(k),
435✔
616
                            big_buff.read_zeta_param(k),
435✔
617
                            little_buff.read_zeta_param(k),
435✔
618
                        )
619
                    };
620
                    if succ {
435✔
621
                        assert_eq!(bb.unwrap(), value);
435✔
622
                        assert_eq!(lb.unwrap(), value);
435✔
623
                        assert_eq!(b.unwrap(), value);
435✔
624
                        assert_eq!(l.unwrap(), value);
435✔
625
                        assert_eq!(
435✔
626
                            pos + len_zeta_param::<false>(value, k) as u64,
435✔
627
                            big.bit_pos().unwrap()
435✔
628
                        );
629
                        assert_eq!(
435✔
630
                            pos + len_zeta_param::<false>(value, k) as u64,
435✔
631
                            little.bit_pos().unwrap()
435✔
632
                        );
633
                        assert_eq!(
435✔
634
                            pos + len_zeta_param::<false>(value, k) as u64,
435✔
635
                            big_buff.bit_pos().unwrap()
435✔
636
                        );
637
                        assert_eq!(
435✔
638
                            pos + len_zeta_param::<false>(value, k) as u64,
435✔
639
                            little_buff.bit_pos().unwrap()
435✔
640
                        );
641
                        assert_eq!(
435✔
642
                            pos + len_zeta_param::<true>(value, k) as u64,
435✔
643
                            big.bit_pos().unwrap()
435✔
644
                        );
645
                        assert_eq!(
435✔
646
                            pos + len_zeta_param::<true>(value, k) as u64,
435✔
647
                            little.bit_pos().unwrap()
435✔
648
                        );
649
                        assert_eq!(
435✔
650
                            pos + len_zeta_param::<true>(value, k) as u64,
435✔
651
                            big_buff.bit_pos().unwrap()
435✔
652
                        );
653
                        assert_eq!(
435✔
654
                            pos + len_zeta_param::<true>(value, k) as u64,
435✔
655
                            little_buff.bit_pos().unwrap()
435✔
656
                        );
657
                    } else {
UNCOV
658
                        assert!(b.is_err());
×
UNCOV
659
                        assert!(l.is_err());
×
UNCOV
660
                        assert!(bb.is_err());
×
UNCOV
661
                        assert!(lb.is_err());
×
UNCOV
662
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
663
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
664
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
665
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
666
                    }
667
                }
668
                RandomCommand::Golomb(value, b_par) => {
58✔
669
                    let (b, l, bb, lb) = (
58✔
670
                        big.read_golomb(b_par),
58✔
671
                        little.read_golomb(b_par),
58✔
672
                        big_buff.read_golomb(b_par),
58✔
673
                        little_buff.read_golomb(b_par),
58✔
674
                    );
675
                    if succ {
58✔
676
                        assert_eq!(b.unwrap(), value as u64);
58✔
677
                        assert_eq!(l.unwrap(), value as u64);
58✔
678
                        assert_eq!(bb.unwrap(), value as u64);
58✔
679
                        assert_eq!(lb.unwrap(), value as u64);
58✔
680
                        assert_eq!(
58✔
681
                            pos + len_golomb(value, b_par) as u64,
58✔
682
                            big.bit_pos().unwrap()
58✔
683
                        );
684
                        assert_eq!(
58✔
685
                            pos + len_golomb(value, b_par) as u64,
58✔
686
                            little.bit_pos().unwrap()
58✔
687
                        );
688
                        assert_eq!(
58✔
689
                            pos + len_golomb(value, b_par) as u64,
58✔
690
                            big_buff.bit_pos().unwrap()
58✔
691
                        );
692
                        assert_eq!(
58✔
693
                            pos + len_golomb(value, b_par) as u64,
58✔
694
                            little_buff.bit_pos().unwrap()
58✔
695
                        );
696

697
                        assert_eq!(
58✔
698
                            pos + len_golomb(value, b_par) as u64,
58✔
699
                            big.bit_pos().unwrap()
58✔
700
                        );
701
                        assert_eq!(
58✔
702
                            pos + len_golomb(value, b_par) as u64,
58✔
703
                            little.bit_pos().unwrap()
58✔
704
                        );
705
                        assert_eq!(
58✔
706
                            pos + len_golomb(value, b_par) as u64,
58✔
707
                            big_buff.bit_pos().unwrap()
58✔
708
                        );
709
                        assert_eq!(
58✔
710
                            pos + len_golomb(value, b_par) as u64,
58✔
711
                            little_buff.bit_pos().unwrap()
58✔
712
                        );
713
                    } else {
UNCOV
714
                        assert!(b.is_err());
×
UNCOV
715
                        assert!(l.is_err());
×
UNCOV
716
                        assert!(bb.is_err());
×
UNCOV
717
                        assert!(lb.is_err());
×
UNCOV
718
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
719
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
720
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
721
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
722
                    }
723
                }
724
                RandomCommand::Rice(value, k) => {
21✔
725
                    let (b, l, bb, lb) = (
21✔
726
                        big.read_rice(k),
21✔
727
                        little.read_rice(k),
21✔
728
                        big_buff.read_rice(k),
21✔
729
                        little_buff.read_rice(k),
21✔
730
                    );
731
                    if succ {
21✔
732
                        assert_eq!(b.unwrap(), value as u64);
21✔
733
                        assert_eq!(l.unwrap(), value as u64);
21✔
734
                        assert_eq!(bb.unwrap(), value as u64);
21✔
735
                        assert_eq!(lb.unwrap(), value as u64);
21✔
736
                        assert_eq!(pos + len_rice(value, k) as u64, big.bit_pos().unwrap());
21✔
737
                        assert_eq!(pos + len_rice(value, k) as u64, little.bit_pos().unwrap());
21✔
738
                        assert_eq!(pos + len_rice(value, k) as u64, big_buff.bit_pos().unwrap());
21✔
739
                        assert_eq!(
21✔
740
                            pos + len_rice(value, k) as u64,
21✔
741
                            little_buff.bit_pos().unwrap()
21✔
742
                        );
743

744
                        assert_eq!(pos + len_rice(value, k) as u64, big.bit_pos().unwrap());
21✔
745
                        assert_eq!(pos + len_rice(value, k) as u64, little.bit_pos().unwrap());
21✔
746
                        assert_eq!(pos + len_rice(value, k) as u64, big_buff.bit_pos().unwrap());
21✔
747
                        assert_eq!(
21✔
748
                            pos + len_rice(value, k) as u64,
21✔
749
                            little_buff.bit_pos().unwrap()
21✔
750
                        );
751
                    } else {
UNCOV
752
                        assert!(b.is_err());
×
UNCOV
753
                        assert!(l.is_err());
×
UNCOV
754
                        assert!(bb.is_err());
×
UNCOV
755
                        assert!(lb.is_err());
×
UNCOV
756
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
757
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
758
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
759
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
760
                    }
761
                }
762
                RandomCommand::ExpGolomb(value, k) => {
69✔
763
                    let (b, l, bb, lb) = (
69✔
764
                        big.read_exp_golomb(k),
69✔
765
                        little.read_exp_golomb(k),
69✔
766
                        big_buff.read_exp_golomb(k),
69✔
767
                        little_buff.read_exp_golomb(k),
69✔
768
                    );
769
                    if succ {
69✔
770
                        assert_eq!(b.unwrap(), value as u64);
69✔
771
                        assert_eq!(l.unwrap(), value as u64);
69✔
772
                        assert_eq!(bb.unwrap(), value as u64);
69✔
773
                        assert_eq!(lb.unwrap(), value as u64);
69✔
774
                        assert_eq!(
69✔
775
                            pos + len_exp_golomb(value, k) as u64,
69✔
776
                            big.bit_pos().unwrap()
69✔
777
                        );
778
                        assert_eq!(
69✔
779
                            pos + len_exp_golomb(value, k) as u64,
69✔
780
                            little.bit_pos().unwrap()
69✔
781
                        );
782
                        assert_eq!(
69✔
783
                            pos + len_exp_golomb(value, k) as u64,
69✔
784
                            big_buff.bit_pos().unwrap()
69✔
785
                        );
786
                        assert_eq!(
69✔
787
                            pos + len_exp_golomb(value, k) as u64,
69✔
788
                            little_buff.bit_pos().unwrap()
69✔
789
                        );
790

791
                        assert_eq!(
69✔
792
                            pos + len_exp_golomb(value, k) as u64,
69✔
793
                            big.bit_pos().unwrap()
69✔
794
                        );
795
                        assert_eq!(
69✔
796
                            pos + len_exp_golomb(value, k) as u64,
69✔
797
                            little.bit_pos().unwrap()
69✔
798
                        );
799
                        assert_eq!(
69✔
800
                            pos + len_exp_golomb(value, k) as u64,
69✔
801
                            big_buff.bit_pos().unwrap()
69✔
802
                        );
803
                        assert_eq!(
69✔
804
                            pos + len_exp_golomb(value, k) as u64,
69✔
805
                            little_buff.bit_pos().unwrap()
69✔
806
                        );
807
                    } else {
UNCOV
808
                        assert!(b.is_err());
×
UNCOV
809
                        assert!(l.is_err());
×
UNCOV
810
                        assert!(bb.is_err());
×
UNCOV
811
                        assert!(lb.is_err());
×
UNCOV
812
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
813
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
814
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
815
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
816
                    }
817
                }
818
                RandomCommand::VByteLe(value) => {
75✔
819
                    let (b, l, bb, lb) = (
75✔
820
                        big.read_vbyte_le(),
75✔
821
                        little.read_vbyte_le(),
75✔
822
                        big_buff.read_vbyte_le(),
75✔
823
                        little_buff.read_vbyte_le(),
75✔
824
                    );
825
                    if succ {
75✔
826
                        assert_eq!(b.unwrap(), value as u64, "b");
75✔
827
                        assert_eq!(l.unwrap(), value as u64, "l");
75✔
828
                        assert_eq!(bb.unwrap(), value as u64, "bb");
75✔
829
                        assert_eq!(lb.unwrap(), value as u64, "lb");
75✔
830
                        assert_eq!(pos + bit_len_vbyte(value) as u64, big.bit_pos().unwrap());
75✔
831
                        assert_eq!(pos + bit_len_vbyte(value) as u64, little.bit_pos().unwrap());
75✔
832
                        assert_eq!(
75✔
833
                            pos + bit_len_vbyte(value) as u64,
75✔
834
                            big_buff.bit_pos().unwrap()
75✔
835
                        );
836
                        assert_eq!(
75✔
837
                            pos + bit_len_vbyte(value) as u64,
75✔
838
                            little_buff.bit_pos().unwrap()
75✔
839
                        );
840

841
                        assert_eq!(pos + bit_len_vbyte(value) as u64, big.bit_pos().unwrap());
75✔
842
                        assert_eq!(pos + bit_len_vbyte(value) as u64, little.bit_pos().unwrap());
75✔
843
                        assert_eq!(
75✔
844
                            pos + bit_len_vbyte(value) as u64,
75✔
845
                            big_buff.bit_pos().unwrap()
75✔
846
                        );
847
                        assert_eq!(
75✔
848
                            pos + bit_len_vbyte(value) as u64,
75✔
849
                            little_buff.bit_pos().unwrap()
75✔
850
                        );
851
                    } else {
NEW
852
                        assert!(b.is_err());
×
NEW
853
                        assert!(l.is_err());
×
NEW
854
                        assert!(bb.is_err());
×
NEW
855
                        assert!(lb.is_err());
×
NEW
856
                        assert_eq!(pos, big.bit_pos().unwrap());
×
NEW
857
                        assert_eq!(pos, little.bit_pos().unwrap());
×
NEW
858
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
NEW
859
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
860
                    }
861
                }
862
                RandomCommand::VByteBe(value) => {
16✔
863
                    let (b, l, bb, lb) = (
16✔
864
                        big.read_vbyte_be(),
16✔
865
                        little.read_vbyte_be(),
16✔
866
                        big_buff.read_vbyte_be(),
16✔
867
                        little_buff.read_vbyte_be(),
16✔
868
                    );
869
                    if succ {
16✔
870
                        assert_eq!(b.unwrap(), value as u64, "b");
16✔
871
                        assert_eq!(l.unwrap(), value as u64, "l");
16✔
872
                        assert_eq!(bb.unwrap(), value as u64, "bb");
16✔
873
                        assert_eq!(lb.unwrap(), value as u64, "lb");
16✔
874
                        assert_eq!(pos + bit_len_vbyte(value) as u64, big.bit_pos().unwrap());
16✔
875
                        assert_eq!(pos + bit_len_vbyte(value) as u64, little.bit_pos().unwrap());
16✔
876
                        assert_eq!(
16✔
877
                            pos + bit_len_vbyte(value) as u64,
16✔
878
                            big_buff.bit_pos().unwrap()
16✔
879
                        );
880
                        assert_eq!(
16✔
881
                            pos + bit_len_vbyte(value) as u64,
16✔
882
                            little_buff.bit_pos().unwrap()
16✔
883
                        );
884

885
                        assert_eq!(pos + bit_len_vbyte(value) as u64, big.bit_pos().unwrap());
16✔
886
                        assert_eq!(pos + bit_len_vbyte(value) as u64, little.bit_pos().unwrap());
16✔
887
                        assert_eq!(
16✔
888
                            pos + bit_len_vbyte(value) as u64,
16✔
889
                            big_buff.bit_pos().unwrap()
16✔
890
                        );
891
                        assert_eq!(
16✔
892
                            pos + bit_len_vbyte(value) as u64,
16✔
893
                            little_buff.bit_pos().unwrap()
16✔
894
                        );
895
                    } else {
UNCOV
896
                        assert!(b.is_err());
×
UNCOV
897
                        assert!(l.is_err());
×
UNCOV
898
                        assert!(bb.is_err());
×
UNCOV
899
                        assert!(lb.is_err());
×
UNCOV
900
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
901
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
902
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
903
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
904
                    }
905
                }
906
                RandomCommand::Bytes(bytes) => {
30✔
907
                    let mut b_buffer = vec![0; bytes.len()];
30✔
908
                    let b = big.read_exact(&mut b_buffer);
30✔
909
                    let mut l_buffer = vec![0; bytes.len()];
30✔
910
                    let l = little.read_exact(&mut l_buffer);
30✔
911
                    let mut bb_buffer = vec![0; bytes.len()];
30✔
912
                    let bb = big_buff.read_exact(&mut bb_buffer);
30✔
913
                    let mut lb_buffer = vec![0; bytes.len()];
30✔
914
                    let lb = little_buff.read_exact(&mut lb_buffer);
30✔
915

916
                    if succ {
30✔
917
                        assert_eq!(&b_buffer, &bytes);
30✔
918
                        assert_eq!(&l_buffer, &bytes);
30✔
919
                        assert_eq!(&bb_buffer, &bytes);
30✔
920
                        assert_eq!(&lb_buffer, &bytes);
30✔
921
                        assert_eq!(pos + bytes.len() as u64 * 8, big.bit_pos().unwrap());
30✔
922
                        assert_eq!(pos + bytes.len() as u64 * 8, little.bit_pos().unwrap());
30✔
923
                        assert_eq!(pos + bytes.len() as u64 * 8, big_buff.bit_pos().unwrap());
30✔
924
                        assert_eq!(pos + bytes.len() as u64 * 8, little_buff.bit_pos().unwrap());
30✔
925

926
                        assert_eq!(pos + bytes.len() as u64 * 8, big.bit_pos().unwrap());
30✔
927
                        assert_eq!(pos + bytes.len() as u64 * 8, little.bit_pos().unwrap());
30✔
928
                        assert_eq!(pos + bytes.len() as u64 * 8, big_buff.bit_pos().unwrap());
30✔
929
                        assert_eq!(pos + bytes.len() as u64 * 8, little_buff.bit_pos().unwrap());
30✔
930
                    } else {
UNCOV
931
                        assert!(b.is_err());
×
UNCOV
932
                        assert!(l.is_err());
×
UNCOV
933
                        assert!(bb.is_err());
×
UNCOV
934
                        assert!(lb.is_err());
×
UNCOV
935
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
936
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
937
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
938
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
939
                    }
940
                }
941
                RandomCommand::Omega(value) => {
10✔
942
                    let (b, l, bb, lb) = (
10✔
943
                        big.read_omega(),
10✔
944
                        little.read_omega(),
10✔
945
                        big_buff.read_omega(),
10✔
946
                        little_buff.read_omega(),
10✔
947
                    );
948
                    if succ {
10✔
949
                        assert_eq!(b.unwrap(), value as u64, "b");
10✔
950
                        assert_eq!(l.unwrap(), value as u64, "l");
10✔
951
                        assert_eq!(bb.unwrap(), value as u64, "bb");
10✔
952
                        assert_eq!(lb.unwrap(), value as u64, "lb");
10✔
953
                        assert_eq!(pos + len_omega(value) as u64, big.bit_pos().unwrap());
10✔
954
                        assert_eq!(pos + len_omega(value) as u64, little.bit_pos().unwrap());
10✔
955
                        assert_eq!(pos + len_omega(value) as u64, big_buff.bit_pos().unwrap());
10✔
956
                        assert_eq!(
10✔
957
                            pos + len_omega(value) as u64,
10✔
958
                            little_buff.bit_pos().unwrap()
10✔
959
                        );
960

961
                        assert_eq!(pos + len_omega(value) as u64, big.bit_pos().unwrap());
10✔
962
                        assert_eq!(pos + len_omega(value) as u64, little.bit_pos().unwrap());
10✔
963
                        assert_eq!(pos + len_omega(value) as u64, big_buff.bit_pos().unwrap());
10✔
964
                        assert_eq!(
10✔
965
                            pos + len_omega(value) as u64,
10✔
966
                            little_buff.bit_pos().unwrap()
10✔
967
                        );
968
                    } else {
UNCOV
969
                        assert!(b.is_err());
×
UNCOV
970
                        assert!(l.is_err());
×
UNCOV
971
                        assert!(bb.is_err());
×
UNCOV
972
                        assert!(lb.is_err());
×
UNCOV
973
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
974
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
975
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
976
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
977
                    }
978
                }
979
                RandomCommand::Pi(value, k) => {
148✔
980
                    let (b, l, bb, lb) = (
148✔
981
                        big.read_pi(k),
148✔
982
                        little.read_pi(k),
148✔
983
                        big_buff.read_pi(k),
148✔
984
                        little_buff.read_pi(k),
148✔
985
                    );
986
                    if succ {
148✔
987
                        assert_eq!(b.unwrap(), value as u64);
148✔
988
                        assert_eq!(l.unwrap(), value as u64);
148✔
989
                        assert_eq!(bb.unwrap(), value as u64);
148✔
990
                        assert_eq!(lb.unwrap(), value as u64);
148✔
991
                        assert_eq!(pos + len_pi(value, k) as u64, big.bit_pos().unwrap());
148✔
992
                        assert_eq!(pos + len_pi(value, k) as u64, little.bit_pos().unwrap());
148✔
993
                        assert_eq!(pos + len_pi(value, k) as u64, big_buff.bit_pos().unwrap());
148✔
994
                        assert_eq!(
148✔
995
                            pos + len_pi(value, k) as u64,
148✔
996
                            little_buff.bit_pos().unwrap()
148✔
997
                        );
998

999
                        assert_eq!(pos + len_pi(value, k) as u64, big.bit_pos().unwrap());
148✔
1000
                        assert_eq!(pos + len_pi(value, k) as u64, little.bit_pos().unwrap());
148✔
1001
                        assert_eq!(pos + len_pi(value, k) as u64, big_buff.bit_pos().unwrap());
148✔
1002
                        assert_eq!(
148✔
1003
                            pos + len_pi(value, k) as u64,
148✔
1004
                            little_buff.bit_pos().unwrap()
148✔
1005
                        );
1006
                    } else {
UNCOV
1007
                        assert!(b.is_err());
×
UNCOV
1008
                        assert!(l.is_err());
×
UNCOV
1009
                        assert!(bb.is_err());
×
UNCOV
1010
                        assert!(lb.is_err());
×
UNCOV
1011
                        assert_eq!(pos, big.bit_pos().unwrap());
×
UNCOV
1012
                        assert_eq!(pos, little.bit_pos().unwrap());
×
UNCOV
1013
                        assert_eq!(pos, big_buff.bit_pos().unwrap());
×
UNCOV
1014
                        assert_eq!(pos, little_buff.bit_pos().unwrap());
×
1015
                    }
1016
                }
1017
            };
1018
        }
1019
    }
1020
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc