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
Co-Authored-By: Claude Opus 5.5 <[email protected]>
106 lines
4.2 KiB
Rust
106 lines
4.2 KiB
Rust
//! 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);
|