open-standards/wai/http-conformance/falsify/ilog2-no-interp.patch
Transaction Science 18da795017 wai: falsification of the playlist side (W3-4, W3-5)
Eighteen patches, each breaking one function of the playlist side and naming the
cases that must fail: adjacency (another program date-time, a larger discontinuity
sequence), rendering (parts after EXTINF, layer lines after the URI), bandwidth
rounding, duration rounding, a delta update read, the session-data line before
#EXTM3U, the render digest left out of the signed payload, a receipt under another
name, an unchecked parent, the open segment's parts not read for cids, the integer
log without interpolation, a waiting utility rule, a look-ahead blind to stalls, an
unlabelled figure taken as zero, per-layer bytes as a depth's, and size-blind entry
order. falsify/run.sh builds with http and video_manifest and runs the eleven new
Python mutations. A depth case at 150 kb/s sits between layer boundaries.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 06:31:05 -04:00

15 lines
729 B
Diff

# must fail: ilog2_1001_1000 ilog2_7_3
# the integer log without its interpolation (abr::ilog2_q16)
diff --git a/wai/wai-rs/src/http_binding/abr.rs b/wai/wai-rs/src/http_binding/abr.rs
index a8046b34..7fb9c495 100644
--- a/wai/wai-rs/src/http_binding/abr.rs
+++ b/wai/wai-rs/src/http_binding/abr.rs
@@ -145,7 +145,7 @@ pub fn ilog2_q16(a: u64, b: u64) -> u64 {
let e = (127 - x.leading_zeros()) as u64 - 16;
let f = ((x >> e) - 65536) as u64;
let (i, r) = ((f >> 12) as usize, f & 4095);
- e * 65536 + LOG2_TABLE[i] + (((LOG2_TABLE[i + 1] - LOG2_TABLE[i]) * r) >> 12)
+ e * 65536 + LOG2_TABLE[i] + (r & 0)
}
/// The throughput the last `n` samples give, in bits per second: `⌊8000·Σbytes / Σms⌋`,