open-standards/wai/wai-vector/src/bounds.rs
Transaction Science 5b0f2abde0
All checks were successful
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 2m16s
standards workspaces build + test / aac-rs (pull_request) Successful in 1m35s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 51s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 34s
standards workspaces build + test / map-rs (pull_request) Successful in 31s
standards workspaces build + test / mesh-rs (pull_request) Successful in 30s
standards workspaces build + test / openpay (pull_request) Successful in 1m40s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 7m35s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 27s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 2m6s
wai-vector vector graphics / linux-aarch64 (pull_request) Successful in 25s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 3m28s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 8m4s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 12m12s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 34s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 4m9s
wai-vector vector graphics / macos-arm64 (pull_request) Successful in 31s
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 6s
no-vanity-metrics / WAI public text names no comparison (pull_request) Successful in 5s
no-vanity-metrics / WAI public text names no company or product (pull_request) Successful in 5s
standards workspaces build + test / arl-rs (pull_request) Successful in 1m15s
standards workspaces build + test / eoc-rs (pull_request) Successful in 2m6s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m35s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 1m15s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m16s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m22s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m19s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m26s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 4m14s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m24s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 8m43s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 10s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 31s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 54s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 2m3s
WAI section references / cited sections exist (pull_request) Successful in 10s
wai-vector vector graphics / linux-x86_64 (pull_request) Successful in 24s
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (pull_request) Successful in 21s
wai-vector vector graphics / wasm32 under Node (pull_request) Successful in 19s
wai-vector vector graphics / fuzz, peak allocation, comparison count (pull_request) Successful in 14s
workflow hygiene / every workflow supersedes its own queue (pull_request) Successful in 4s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 16m51s
wai-vector: clippy-clean, the empty frame range built without a reversed literal; no generated byte changes
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 04:29:28 -04:00

106 lines
4.2 KiB
Rust
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//! Every cap of §2.6 and every bound of §3.12 that this crate relies on, as constants,
//! with the arithmetic that makes them consistent checked at compile time.
// ---------------------------------------------------------------- WOS1 (§2.1)
pub const WOS1_HEADER: usize = 32;
pub const WOS1_GLYPH: usize = 16;
pub const WOS1_GLYPHS_MAX: u64 = 65_536;
pub const WOS1_POINTS_TOTAL_MAX: u64 = 1 << 22;
pub const WOS1_CONTOURS_TOTAL_MAX: u64 = 1 << 22;
pub const WOS1_NOTES_MAX: u64 = 1 << 20;
/// Points per glyph and per path: the no-wrap cap (§3.7).
pub const POINTS_MAX: u64 = 16_383;
/// The largest `WOS1` the header caps allow: 31,457,312 bytes, below 2^25.
pub const WOS1_LARGEST: u64 = WOS1_HEADER as u64
+ WOS1_GLYPH as u64 * WOS1_GLYPHS_MAX
+ 2 * WOS1_CONTOURS_TOTAL_MAX
+ 5 * WOS1_POINTS_TOTAL_MAX
+ WOS1_NOTES_MAX;
const _: () = assert!(WOS1_LARGEST == 31_457_312 && WOS1_LARGEST < (1 << 25));
// ---------------------------------------------------------------- WVG1 (§2.2, §2.3)
pub const WVG1_HEADER: usize = 80;
pub const PAYLOAD_MAX: u64 = 1 << 26;
pub const SIZES_MAX: u64 = 8;
pub const RATES_MAX: u64 = 4;
pub const SETS_MAX: u64 = 64;
pub const TABLES_MAX: u64 = 32;
pub const PAINTS_MAX: u64 = 4096;
pub const PATHS_MAX: u64 = 4096;
pub const ITEMS_MAX: u64 = 65_536;
pub const KEYS_MAX: u64 = 1 << 22;
pub const GLYPHS_MAX: u64 = 1 << 20;
pub const CLUSTERS_MAX: u64 = 1 << 20;
pub const PATH_CONTOURS_MAX: u64 = 1 << 20;
pub const PATH_POINTS_MAX: u64 = 1 << 22;
pub const STRINGS_MAX: u64 = 1 << 22;
pub const INLINE_MAX: u64 = 1 << 25;
pub const HELD_MAX: u64 = 1 << 26;
/// `inline_len + held_len`.
pub const SETS_BYTES_MAX: u64 = 1 << 26;
/// Record sizes, in the order of the exact-length formula.
pub const REC_SIZE: u64 = 8;
pub const REC_RATE: u64 = 8;
pub const REC_SET: u64 = 40;
pub const REC_TABLE: u64 = 68;
pub const REC_PAINT: u64 = 4;
pub const REC_TRACK: u64 = 8;
pub const REC_KEY: u64 = 12;
pub const REC_PATH: u64 = 16;
pub const REC_PATH_END: u64 = 2;
pub const REC_PATH_POINT: u64 = 5;
pub const REC_TEXT: u64 = 20;
pub const REC_ITEM: u64 = 48;
pub const REC_GLYPH: u64 = 12;
pub const REC_CLUSTER: u64 = 12;
pub const TB_MAX: u32 = 1 << 20;
pub const TICK_LIMIT: u64 = 1 << 31;
pub const SIDE_MIN: u32 = 16;
pub const SIDE_MAX: u32 = 4096;
pub const RATE_TERM_MAX: u32 = 1 << 20;
pub const RATE_MAX_FPS: u64 = 240;
pub const SET_LEN_MIN: u32 = 32;
pub const SET_LEN_MAX: u32 = 1 << 25;
pub const Q16_ONE: u32 = 65_536;
pub const TRACK_KEYS_MAX: u32 = 4096;
pub const RUN_GLYPHS_MAX: u16 = 4096;
pub const RUN_CLUSTERS_MAX: u16 = 8192;
pub const UNIT_SCALE_MAX: u32 = 1 << 24;
pub const GLYPH_POS_LIMIT: i32 = 1 << 23;
pub const TRANSLATION_MAX: i32 = 1 << 22;
pub const MATRIX_MAX: i32 = 1 << 20;
pub const OPACITY_MAX: i32 = 255;
pub const LANG_MAX: u8 = 63;
pub const STR_MAX: u32 = 4096;
pub const GROUP_DEPTH_MAX: u32 = 4;
pub const NONE: u16 = 0xFFFF;
pub const DECORATIVE: u8 = 13;
// ---------------------------------------------------------------- arithmetic (§3)
/// Every device coordinate after the interval check (§3.4(a)).
pub const DEVICE_MIN: i64 = -(1 << 22);
pub const DEVICE_MAX: i64 = (1 << 22) - 1;
/// The per-frame cost ceiling (§3.4(b)).
pub const COST_CEILING: u64 = (1 << 32) - 1;
/// A full pixel's value `v`: 512 · 256.
pub const FULL: i32 = 1 << 17;
/// The row density bound `D_r ≤ 256·p ≤ 2^22 − 256` (§3.7).
pub const DENSITY_MAX: i64 = 256 * POINTS_MAX as i64;
const _: () = assert!(DENSITY_MAX == (1 << 22) - 256);
const _: () = assert!(512 * DENSITY_MAX == (1 << 31) - (1 << 17));
// The run sum S of 4,096 terms each at most 2^17 fits u32 and i32.
const _: () = assert!((RUN_GLYPHS_MAX as u64) << 17 <= 1 << 29);
// div255's largest intermediate 257·(65025 + 128) is below 2^24.
pub const DIV255_DOMAIN_MAX: u32 = 65_025;
const _: () = assert!(257 * (DIV255_DOMAIN_MAX + 128) < 1 << 24);
// The exact length at the caps, the inline and held bytes aside, fits u64 trivially;
// the cap on it is PAYLOAD_MAX.
const _: () = assert!(REC_ITEM * ITEMS_MAX + REC_KEY * KEYS_MAX < 1 << 40);
// A fill's cost p·(2^10 + bw + bh) + bw·bh is below 2^28 (§3.4(b)).
const _: () = assert!(POINTS_MAX * (1024 + 2 * SIDE_MAX as u64) + (SIDE_MAX as u64) * (SIDE_MAX as u64) < 1 << 28);